Monday, September 26, 2011 At 9:15AM
I gave my first presentation at a security conference on Friday, presenting at ekoparty on some work I did at the beginning of the year on distributing complex tasks to hundreds or thousands of computers. SETI@Home was the project that pioneered the idea of distributed volunteer computing, and their command & control software evolved into a generic project called BOINC. You can run just about any application in BOINC – whether it’s open or closed source, uses GPUs, the network, or even if it’s not CPU intensive (like nmapping the internet).
Setting up a server isn’t the most exciting topic to talk about, so I used two examples to illustrate BOINC in my presentation: factoring RSA512 to recover the private key to SSL certificates or PGP keys and cracking passwords. Factoring was a huge success, but cracking didn’t work out that well. BOINC was able to distribute the work and crack things really quickly – by splitting up wordlists automatically based on hash functions I was able to scale out to more machines than I think most people are able to… but the problem came from never actually looking at the output. The best crackers, especially in cracking contests, find patterns in the cracked passwords to make mangling rules and masks and crack more passwords. You could still use BOINC as a work distributor to scale out, but you need to be behind the wheel making work units – not use it as a fire-and-forget system.
Getting applications running in BOINC is a bit of trial and error. If it’s an open source application, you have to patch it a little bit and if it’s closed source you have to write a job.xml file defining how to run the application. In either case you have to define input and output templates that let BOINC know what files to send with the workunit and to expect the program to produce. And when I was sending a couple hundred MB wordlists and resource files, I wanted to compress them and decompress them on the client, so that added a little bit of work too. To try and make it easier on you, I’ve released all the scripts, templates, config files, and patches I created while working with BOINC. I’ve also not just released my slides, but annotated them with links to the reference material for everything mentioned. Everything is up on github.
I’ve wanted to factor large numbers for a while, and this was actually what got me into this whole mess. I have some (simple) observations about factoring using the General Number Field Sieve, as well as instructions for how to do it yourself (with or without BOINC).
I have to thank Leonardo and all the ekoparty organizers for putting on a great conference. They went out of the way to make the international arrivees as comfortable as possible, and even had simultaneous translation from english to spanish and from spanish to english. Buenos Aires is a wonderful city, and I really recommend you visit!
Author: Adam Bixby
©Aon plc 2023