SHA-1 Cracking On A Budget 92
cloude-pottier writes "An enterprising individual went on eBay and found boards with more than half a dozen Virtex II Pro FPGAs, nursed them back to life and build a SHA-1 cracker with two of the boards. This is an excellent example of recycling, as these were originally a part of a Thompson Grass Valley HDTV broadcast system. As a part of the project, the creator wrote tools designed to graph the relationships between components. He also used JTAG to make reverse engineering the organization of the FPGAs on the board more apparent. More details can be seen on the actual project page."
For the uninitiated... (Score:5, Informative)
This makes them fairly pointless for general computing, but when you need to crunch a bunch of numbers in the same way over and over, they can REALLY outperform a general cpu. Usually these are used to manipulate audio / video data streams in real time (the original purpose for the FPGAs used in this project) - but recently people have started using them to brute-force try to crack an encryption scheme. Where a general purpose cpu might take upwards of 40 clock cycles to check one possible answer, each of the FPGAs in this system can check at least one answer PER clock cycle.
This guy pulled a bunch of FPGA systems out of some (defective?) HDTV video processing systems - reverse engineered exactly how everything was wired together, reprogrammed the FPGAs to do SHA-1 hash cracking rather than HDTV video processing, and added some usb control circuitry so the system could take commands from / return results to a pc.
One could use this same board setup to do any sort of massively parallel data processing, but right now the system isn't wired up to really feed large amounts of data into / out of the system in real time. He can get away with that as hash cracking results are fairly small and infrequent, so the limited means he has for getting "answers" out of the system isn't too much of a problem.
Posted at 4:39AM on Sep 1st 2007 by smilr
Re: (Score:1, Interesting)
A more proper description of an FPGA would be "electronics simulator", as you can with an FPGA "program" resistors, caps, transistors, logic gates etc. with these, thus "program" an IC of your choice, or, for example, a Z80 or M68K core with accompa
Re:For the uninitiated... (Score:4, Funny)
Re: (Score:1)
It's mainly logic, not analogue parts (Score:5, Informative)
An FPGA really is conceptually very simple, and they're not hard to "program" either... Contrived example:
Verilog design to add/subtract 2 numbers (you'd never do this, but...)
Compare that to a K&R "C" routine to do the same thing...
In both cases, of course, you'd just use the 'if...else...' part, but I wanted to show more language structure...
:-), you don't get world-beating overnight, but it's relatively easy to get the 80% solution, and that might be just fine. Eking out the last 20% is where it gets hard, as you have to understand the internal structure of the LUTs, and how they interact with the carry-chain, what the LUT->LUT delay can be useful for etc. None of this is at all relevant unless you're missing your timing on a critical circuit (eg: you need 133MHz so your DDR2 SDRAM can work, but the synthesis tools (equivalent to a compiler) only deliver 125 MHz for your design).
The key thing to remember is that in C, all things happen serially, unless you arrange otherwise with threading libraries. In Verilog, any block beginning with 'always @' happens in parallel with every other 'always @' block. Once you've mentally-mapped the concept of vast numbers of threads to the way hardware works, any competent multi-threaded programmer can become a competent hardware engineer.
Of course, there's "guru stuff" in there as well (as much as you want, trust me
The 'always@' part is the hint of just where the power lies. *Everything* can happen in parallel, so you can build pipelines (like CPU's are pipelined today) into your logic, thus reducing the time taken per step (while taking multiple steps), thus increasing your clock rate. The benefit of course is that although the *first* result comes out in the same time, every clock thereafter, you'll also get a result.
I wrote a JPEG decoder a couple of years or so ago, running at ~130MHz. That doesn't sound much, but that comes to ~65 MPixels/second because of the pipelining. Looking at the SSE-optimised intel libraries, a CMYK422->CMYK baseline decode (which is what the FPGA was doing) takes 371 clocks/pixel. The intel chip I was comparing to was a 3.6GHz P4, meaning it could do ~9.7 Mpixels/second. For motion-jpeg that's the difference between decoding SD frames (for the P4) and decoding HD frames (for the FPGA)...
So, FPGAs tend to run slowly (relative to today's CPUs) but can exploit parallelism in ways CPUs just can't, but of course for serial processing, you can't beat a tradition
FPGA question... (Score:3, Interesting)
Coming from a traditional software end of things, I'm used to seeing "accelerating co-processors" available to do useful tasks much faster than the main CPU. I'm thinking not only the FPU (when it was a separate chip), but things like a modern GPU and such. Many of these have been slowly integrated back into the CPU as time has gone on, the FPU being the best example, so now it's something you can just cal
Re: (Score:3, Interesting)
Re: (Score:2)
I'm more thinking of a specific hardware piece, like an FPU co-processor. Something not re-programmable, but theoretically much faster for that specific task. It wouldn't make sense for a lot
Re: (Score:1)
Radicode
Re:FPGA question... (Score:4, Interesting)
You can buy (though I think they're very expensive) "IP cores", which are pre-packaged modules ready to plug-in-and-go. There are some free ones available as well. You may have to do more work to get the free ones to work [grin].
There are also built-in hard cores on modern FPGA's. You never used to be able to synthesize the statement "a = b * c;" in a verilog design, for example. Now that FPGA's have hardware multiplier blocks in them, it synthesises to a bunch of wires connecting up the LUTs to the built-in hardware. For the more-complex examples you suggest, it's best to implement them in logic, because an FFT (of a particular radix, input format (complex or real), and output requirements) is a very specific piece of hardware, and not generally useful to most customers.
You get multipliers, blocks of fast dual-port RAM, even entire processors (PPC) embedded into the FPGA fabric these days. Of course, you pay more for things like embedded CPUs... Funnily enough, a CPU is one of the easier things to write for an FPGA IMHO. You'll never get the speed of the FPGA fabric to match the hard-CPU core though...
To do what you're talking about though, you'd need a way to interface the FPGA to the PC - there's a freely available PCI core, so you'd then just need a card which had a PCI interface (there's one from Enterpoint [enterpoint.co.uk] for ~$150... Then you just need to link the PCI core to your own cores (FFT, whatever) and write software to offload any FFT's to your co-processor. Xilinx offer the "Embedded Development Kit" to make this easier (you have to pay for this, the other tools are free to download). I don't know if anyone has made the freely-available PCI core into an EDK module though...
Simon.
Simon
Re: (Score:2)
It sounds like my idea is happening, but at a much lower level than I was thinking (like the multiply example you gave). I guess I'm still thinking of things at the wrong level (software, high level functions), when it's much more basic things that need to be accelerated.
The dual-port RAM interface makes a lot of sense - it'd be a lot nicer than trying to do it yourself with general purpose pins, I'd think.
Re: (Score:1)
Re: (Score:2)
I'm coming from a different perspective, that's all. FPGA's are a hobby for me, nothing more. I can afford to spend a few hundred dollars on a kit board, but I'd never drop a few grand on a core... I'd either do it myself or make do without. I'll use webpack exclusively for development (since they dropped the in-between option, Foundation is far too
Re: (Score:2)
quartus 3 at least can synthisize a = b * c on a chip without a hardware multiplier, it takes a lot of logic cells though.
Re: (Score:2)
For some reason this passage comes to mind. I can now just learn to blow glass better; computers are never going to be my bag.
Re: (Score:2)
As for FPGAs being cheap, all things are relative. There are ASICs out there for nearly any common application imaginable and these are often well under $50 and are usually designed by people who have extens
Re: (Score:2)
Simon.
Re: (Score:2)
Re: (Score:1)
I saw, how one of modern Ericsson phones had some very small/cheap FPGA soldered in and it was used for overcoming a design error of some ASIC. So, yes, in fact we are usign CPLDs/FPGAs on daily basis
Re: (Score:2)
It is just that in consumer electronics, CPLDs and FPGAs are usually there to replace glue-logic and complement the microcontroller/embedded processor's capabilities... like working around bugs. One example of FPGA in consumer equipment is early Radeon SLI: the 'master' board used a Xilinx FPGA to receive pixel data from the slave board and combine it with data from the master to produce the final im
Re: (Score:1)
Re: (Score:2)
Well, I have circuit diagrams for old projects, (I think - only because I don't tend to 'trash' stuff), and I tend to comment my source-code a lot.... That's about as far as it goes... Perhaps I'll try and put some stuff on my blog in future...
Cheers,
Simon
Re: (Score:1)
-frank
Re: (Score:2)
Re:Benchmarks? (Score:5, Informative)
So it doesn't search all possible inputs to SHA-1, but maybe you could use it in this situation: Given hash and salt, you can find password by a brute force search on this hardware (assuming password is less than 9 characters in length). This could be useful for obtaining user passwords from
Re: (Score:2)
In the old days when passwords were in
Re:Benchmarks? (Score:4, Interesting)
Re: (Score:2)
Re: (Score:2)
Re: (Score:2)
Re: (Score:3, Informative)
http://www.bash.org/?701504 [bash.org]
Re: (Score:1)
Yes, I'm a student, and no, I'm not paying for access to said system. And yes, I use that password in other places.
How fast is that? (Score:3, Informative)
Anybody, have an idea how fast that is compared to modern a CPU?
IIRC, the last time I did anything like this it took my 2200+ AMD about 24 hours to do a 6-character keyspace (from 64-character set) - with MD5.
Re: (Score:2)
So your 2200+ AMD is beaten to little pieces by this monster.
Source, well, you had to click a single link to their homepage [unaligned.org]. That'll learn you to post early. Or not, since I supplied you the answer anyway.
Re: (Score:2)
I was wondering how it compared with the latest and greatest like x64 with SSE3/4 or a Cell processor...
(that'll learn you to actually read the post you are replying to. Or not)
Re: (Score:3, Informative)
I've wondered about Cell performance myself for a while, but I haven't got the time to go out of the way to do some measurements. For SSE3/4: I would call it highly unlikely that we would see anything like the performance they are posting: 2 ^ 12 performance difference for MD5 alone is quite a lot. Maybe SSE5 might speedup SHA-2 as well. Anyway, you might want to add the T2 (Rock processor) from Sun to that list, it has 8
Re: (Score:1)
At that rate, it would take 32 days and 14 hours to brute force 8 chars a-zA-Z0-9._ for a single given hash. This setup is capable of doing this 800 times concurrently in a single day, if I read correctly.
Re: (Score:1)
Re: (Score:2)
You should compare against VIA hardware. Their CPUs are crap for general usage, but the crypto acceleration is really good:
http://www.logix.cz/michal/devel/padlock/bench.xp [logix.cz]
Page doesn't seem to include MD5/SHA1 though, but you can compare that to AES on your box.
Re: (Score:2)
From one of the comments (I assume c/s is Cracks per second?):
Re: (Score:1)
SHA-cracker? (Score:5, Informative)
It seems from here [unaligned.org] that it searches a 64 ^ 8 = (2 ^ 6) ^ 8 = 2 ^ 48 keyspace in 24 hours. No small feat, it should therefore do about 3,257,812,230 hashes in a second. It does 800 concurrently, which makes for 4 million a second per SHA-1 unit. Ouch, that's really fast.
Note that this could be done with any hash or symmetric algorithm, as long as it can be implemented on FPGA. So the moral of the story: use very long password (or even better, pass phrases), or make sure that they won't be able to acquire the hash.
Re: (Score:2)
Its a bit like if you built your own cruise missile. Telling the whole world about it might not be the smartest thing to do.
Re: (Score:3, Funny)
EFF [cryptome.org] seems to think it is the smartest thing to do.
Re: (Score:1, Interesting)
Works great, and that is wh
Re: (Score:2, Informative)
Re: (Score:3, Insightful)
But it seems like MD5 and SHA are getting weaker by the day with computational power on t
Re: (Score:3, Informative)
As said, the hash algorithm itself does not matter too much. The problem with all these schemes is that the amount of entropy in the passwords i
Re: (Score:2)
Re: (Score:2)
Re: (Score:1)
Re: (Score:1)
Re: (Score:3, Interesting)
Re: (Score:2)
On a more serious level, but for the same reason, there is no reason to think that this entry in the password file corresponds to a valid Unix password, since if that system was based on his code, he login will bypass normal authenti
Re: (Score:2)
Re: (Score:2)
Re: (Score:2)
Collision resistance means it should be difficult to find two texts that have the same hash value. The upper bound for these attacks is 2^(n/2), where n is the length of the hash. For SHA-1, that upper bound it 2^80. Because of some more sophisticated attacks, 2^63 is now the current best for a collision attack.
Pre-image resistance means given a hash it should be impossible to find
Re: (Score:1)
Maybe I'm Not As Big A Nerd As I Thought... (Score:2, Interesting)
Re:Maybe I'm Not As Big A Nerd As I Thought... (Score:5, Funny)
what?
Re: (Score:1)
Re: (Score:2)
Can someone explain how this sort of machine could be used, practically speaking, to break e.g. an email encrypted with PGP, or /etc/shadow?
It probably can't, really. But it is useful for two things:
1.) It can be used to crack passwords/passkeys encrypted in this manner. It makes it possible for the owner of the device to obtain the actual password/passkey if he can get a hold of the hashed version. This may be useful in cracking networks or security barriers.
2.) It can display to the world, just how cheat it is to build a device which can reverse hashed data. If he can get his hands on this device for small money, imagine how many FPGAs t
I recognise that pattern! (Score:2)
I used to draw patterns like that while suffering through triple Maths - draw a circle, mark off every 10 degrees (or 5 if it looked like being really boring today), then join every point to every other point. Mindless, yet strangely satisfying.
And what kind of nerd site doesn't let you use a degree symbol?
Re: (Score:2)
Re: (Score:2)
Princeton Engine (Score:2, Interesting)
This is essentially a password cracker (Score:2)
Shame - what I was really hoping to read was that he'd implemented the latest collision
Re: (Score:1)
Password Cracker, not SHA-1 Cracker (Score:1)
This doesn't find hash collisions (much less pre-images), so it's not an attack on SHA-1. It's an exhaustive search over a subset of ASCII (64 characters) for the purpose of cracking short (8-character) passwords.
This is John the Ripper in hardware, just not as clever.
Re: (Score:1)
Cracking Sha.... (Score:1)
15 Virtex-II Pro FPGAs (Score:2)