-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On Dec 5, 2013, at 12:13 AM, Matthew Orgass <[email protected]> wrote:

> 
>  I recently looked into this and Threefish seems to be the only block cipher 
> I could find that provides major advantages over AES.  The large block sizes 
> and tweak parameter make it a good fit for disk encryption. I don't know how 
> the performace compares to hardware AES.  I haven't so far come across any 
> good reason to start using any block cipher other than AES or Threefish 
> (unless special circumstances are involved).

Thanks. Full disclosure, I'm a Threefish/Skein coauthor.

Performance-wise, software anything is not going to compare against hardware 
anything-else. If you are so desperate for performance that you consider it 
more important than security, then there are lots of good answers for you. XOR, 
for example, is about as fast as you can get, and all you need is a good key 
generation algorithm. AES in hardware (like AES-NI) runs faster than one clock 
per byte if everything's set up correctly. If things aren't set up correctly, 
it runs at about twice software speed. 

In software, Threefish runs at about twice AES speed. There are many, many 
handwaves in my previous statement. Threefish was designed for a 64-bit, 
superscalar architecture with a good handful of registers. At the time, the 
exemplar of such an architecture was an Intel Core 2 CPU. It succeeds at using 
the whole of the CPU so well that Intel uses it internally as a literal burn-in 
test of a CPU. If you have a CPU with heat flow issues, running Threefish on it 
will find them. Often destructively. Notably, it's intentionally an ARX 
construction that uses register flow as a cheap way to get inter-round 
permutations. 

The wide-block is a huge advantage. You've noted its use in disk encryption, 
but it's also a great use just about anywhere else. Block ciphers in general 
have the advantage that they, um, well, encrypt in blocks. They didn't exist at 
all until relatively recently. (If you squint at it the right way, you can 
consider ADFGX to be an early block cipher, if not the earliest, but no doubt 
we can debate it). It's relatively easy to turn a block cipher into a stream 
cipher (counter mode), but relatively hard to turn a stream cipher into a block 
cipher. The wider the block is, the more mixing you get. A one-bit change in a 
block cipher affects the whole block, and as the block's width gets larger, the 
more it approaches All-Or-Nothing Cryptography.

Tweakable ciphers in general also have huge advantages. You can think of a 
tweak as the generalization of an IV or counter. This is why a tweakable cipher 
is good for disk encryption -- because the LBN of a disk block is 
definitionally not a secret parameter. But once you have a tweakable cipher, 
there are ways that you can re-think chaining modes.

For example, you can re-think counter mode trivially by moving your counter to 
the tweak and now you don't have to worry so much about counter re-use. Yay! 
You can even throw away nonces, at the cost of having to deal with short 
trailing blocks. That's often inconvenient so you can even do something like 
take some static initial data (I am trying not to call it an IV), and encrypt 
that iteratively with an incrementing tweak, XORING the result onto your 
plaintext. Now you have all the convenience of counter mode, and can be pretty 
careless in picking your nonce and counter.

It's also pretty easy to extend this basic ida (a tweak is a generalized 
IV/nonce) and re-think any mode you care to in the tweakable world.

Now, an obvious (to me) disadvantage of Threefish per se is that it not only 
has a wide block, but a wide key. Some people might consider this an advantage, 
and really, I'm happy to lose this argument. It's my cipher, after all. But 
from an engineering standpoint, it can be inconvenient to have to transport a 
wide key around. The wider your block is, the more inconvenient that will be. 
On the other hand, there's an easy solution to this inconvenience -- a KDF. 
Heck, run your short key through Skein, and then feed that to your Threefish 
operation and poof, Alice is your auntie.

The other obvious disadvantage (to me) of Threefish is that the tweak is only 
128 bits wide. If the tweak were full-width, then it would be trivial to do 
what I handwaved above -- produce obvious tweak-based chaining modes that were 
trivially as secure as the underlying tweakable cipher. You could always hold 
your nose and just truncate to 128 bits and show 128-ish bits of security, but 
that's really unappealing at the least.

However, we could also just re-think chaining modes, as well. I am at present 
very fond of McOE mode, which is an authenticated mode. It was developed by a 
team at University of Weimar that includes my Skein/Threefish co-author, Stefan 
Lucks. The obvious search should find their paper. They designed it to work 
either with an AES-like cipher or a Threefish-like cipher, and has as a feature 
that it is itself misuse-resistant, providing security levels even in the event 
of nonce re-use etc.

I have some sample code that isn't optimized, and on my laptop (an i7 Haswell), 
here are some performance numbers in clocks per byte:

Bytes (    64):    15.58    15.91  //: 64-bit, GCC_v4.21
Bytes (   128):     8.22    10.64  //: 64-bit, GCC_v4.21
Bytes (   256):     7.06     9.66  //: 64-bit, GCC_v4.21
Bytes (   512):     4.94     5.09  //: 64-bit, GCC_v4.21
Bytes (  1024):     4.50     4.55  //: 64-bit, GCC_v4.21
Bytes (  2048):     4.27     4.96  //: 64-bit, GCC_v4.21
Bytes (  4096):     4.15     4.94  //: 64-bit, GCC_v4.21
Bytes (  8192):     4.10     4.74  //: 64-bit, GCC_v4.21
Bytes ( 16384):     4.07     4.85  //: 64-bit, GCC_v4.21
Bytes ( 32768):     4.06     4.81  //: 64-bit, GCC_v4.21

I had to give a low whistle, myself. That's pretty nice, and almost makes me 
rethink crypto hardware.

        Jon


-----BEGIN PGP SIGNATURE-----
Version: PGP Universal 3.2.0 (Build 1672)
Charset: us-ascii

wj8DBQFSoto0sTedWZOD3gYRAl2aAJ9a+iYjYZbQq5bdF5ZrHqBhW0yHPwCg5HIK
ioqxTCKN3gJ9q6Zaduvv+7U=
=i/tc
-----END PGP SIGNATURE-----
_______________________________________________
cryptography mailing list
[email protected]
http://lists.randombit.net/mailman/listinfo/cryptography

Reply via email to