With a server eager to distribute jobs, all that remained was creating client programs, and finding as many computers to run these clients on as possible. The core of the client code was the key tester described above, but on top of it we put several layers of interface code in order to make the client able to run on as many different platforms as possible. We began by implementing the client as a standalone program, running on Unix workstations. In order to explore more CPU resources, a Windows screen saver version of the program was also created. When installed on a PC, it would automatically connect to the key server, get a portion of the key space, test these keys, request the server for a new set of keys etc. In order for the screen saver to be able to connect to the key server from behind firewalls, we had to make it connect through the HTTP port.
Having created the server and client programs, all we had to do was find as much CPU power as possible, start the programs, and start waiting eagerly. To track the progress, the server automatically updated a webpage with the current status: The fraction of the key space covered, the number of clients reporting jobs as finished during the last hour etc. Last but not least, a very important task for the server was to keep track of potentially correct keys. Any key which passed the tests described above was used to decrypt the entire ciphertext, and the result was then automatically sent by email to all team members.