next up previous
Next: How we Found the Up: Stage 9 Previous: The key tester

The client/server connection

Even with the high speeds achieved, testing all the 248 keys would require several CPU years on a typical PC or workstation. But there was no reason to test all the keys on one single computer, so we decided to parallelize the key testing task. We wrote a key server program whose job it was to keep track of what parts of the key space had been tested. Clients could connect to the server and ask for a job containing a set of keys to test. Each such job contained 230 = 1073741824 keys, and there were 218 = 262144 jobs in total. The server was run on a computer always connected to the Internet; this way we would not have to restrict ourselves to computers in a single network.

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.


next up previous
Next: How we Found the Up: Stage 9 Previous: The key tester
solvers@codebook.org