|
|
Message-ID: <20110427012512.GA12668@openwall.com>
Date: Wed, 27 Apr 2011 05:25:12 +0400
From: Solar Designer <solar@...nwall.com>
To: crypt-dev@...ts.openwall.com
Subject: Re: Bcrypt functionalities implementation in hardware
On Tue, Apr 26, 2011 at 04:50:03PM -0300, Yuri Gonzaga wrote:
> Alexander talked about implementing only the inner loop of bcrypt or the
> 2^cost loop.
It should be the latter.
> (From
> http://www.usenix.org/events/usenix99/provos/provos_html/node5.html#SECTION00050000000000000000
> )
>
> bcrypt(cost, salt, key)
> > state <- EksBlowfishSetup(cost, salt, key)
> > ctext <- "OrpheanBeholderScryDoubt"
> > * repeat(64)
> > ** ctext <- EncryptECB(state, ctext)
> > * return Concatenate(cost, salt, ctext)
>
>
> Is this (in bold) the inner loop?
No. This is a cheap loop that may be implemented in software. The one
we need to implement in hardware is in EksBlowfishSetup().
> (From
> http://www.usenix.org/events/usenix99/provos/provos_html/node4.html#SECTION00040000000000000000
> )
>
> EksBlowfishSetup(cost, salt, key)
> > state <- InitState()
> > state <- ExpandKey(state, salt, key)
> > * repeat(2^cost)
> > ** state <- ExpandKey(state, 0, salt)
> > ** state <- ExpandKey(state, 0, key)
> > * return state
>
>
> Is this the other one?
Yes, this is the only one to implement in hardware.
I am sorry that I confusingly used different words in the IM
conversation we had. I only meant one loop.
> So, Should the other pieces of code implemented in software?
Yes, provided that sending a little over 4 KB of data to/from FPGA is no
problem - e.g., it might be problematic over your JTAG/USB adapter
cable, but it should be no problem over USB 2.0 or PCIe.
Since we'll need interfacing from C code, I suggest that you pick my
crypt_blowfish package:
http://www.openwall.com/crypt/
or JtR's BF_std.c (force it to the simpler BF_X2=0 and BF_mt=1 case) and
replace the loop with a call into the FPGA interface. You don't need to
implement the rest of bcrypt in C on your own - the existing code should
work.
In BF_std.c, the loop to replace is:
count = salt[4];
do {
...
} while (--count);
Thanks,
Alexander
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.