Hi Laszlo,
a few comments inline:
On Dec 20, 2005, at 3:26 PM, [EMAIL PROTECTED] wrote:
Didn't we mandate 256-bit AES?
We should not. The most important application (in hundreds of million
disk drives a year, a $10 billion business) is protection of data on
laptop drives. These drives must consume little power, must be cheap,
so the difference in HW complexity precludes anything but AES-128.
that's an interesting point: protecting data on stolen laptops is a
short term problem (and is probably a good business motivation).
This is in contrast to the "protect it for 50 years" requirement that
one usually has in data storage encryption.
if you need several keys, make them all independent (or derive
them using a strong pseudo-random generator).
You did not comment on my real proposal of using AES keys K1, K1+K2,
K1+K2^2,..., if you want to differentiate between disk drives. K2^k
looks strong enough pseudorandom. For each drive, we need to compute
this key only at boot-up, so any iterated hash function looks OK, does
not it (also Hask(k))? In any case, a unique drive ID as part of I
would be preferable.
When deriving one key from another, we need to use a pseudorandom
function (either AES or HMAC, basically). This is the only accepted
crypto practice.
Other proposals that don't use pseudorandom key derivation, like
using K, K+1, K+2, ... or K, K^2, ... all have potential
vulnerabilities:
1. AES may not resist related key attacks. This is not just a
theoretical point. The AES key schedule itself is not strongly
pseudorandom, that is, the round keys are derived from the block
cipher key using a method that is not really pseudorandom.
2. An adversary who somehow managed to get ahold of one of the
derived keys should not be able to compute any other of the keys in
the system. With a weak key derivation function, an adversary could
compute all of those keys.
an extension to EME that works on arbitrary-size strings. I
called it EME*.
Could you compare it to XCB or ABL? It looks like a parallel
implementation of EME* has 4 cipher operations in the critical path
(plus two XORs), a serial implementation takes 4(n/128)+3 AES
operations.
IIRC, EME* essentially does two passes of ECB mode AES, plus three
extra AES calls, and a bunch of cheaper operations. About half of
those operations are on the critical path, since all of the data has
to be processed before any of the output can be computed. XCB
essentially does a pass of AES counter mode and two passes of GHASH
(the GCM hash function), plus two extra block cipher calls. One pass
of CTR and one of GHASH are on the critical path. ABL does two
passes of AES CTR and two of GHASH.
Shai, please correct me if need be.
David
Also, I might have missed the licensing status. Could you
update us?
more or less random access to compartments, but sequential access
to blocks within a compartment
The drive index is a constant ID, handling it separately would allow
optimizations. LBA is random access, the cipher block index is
sequential, which again allows optimizations. These are three
different
types of data, so making three compartments makes sense. The standard
does not have to specify how the 64-bit unique drive index is created:
it can be the disk ID; assigned by the controller; the SCSI ID; a
random number; or a sequential number. Even uniqueness is not an
absolute requirement. Hard decisions are only needed about where to
partition the I bits.
if you have two of them, you can do different processing to the
sequential index and the random-access index
You can do different processing for each part of the I field, as well.
For notebook drives, an extra 128-bit key and an extra Galois
multiplication for each LBA access could be prohibitive.
Laszlo
-------- Original Message --------
Subject: Re: p1619 (disk): ciphertext-stealing, tweak-mapping, other
From: Shai Halevi <[EMAIL PROTECTED]>
Date: Tue, December 20, 2005 2:48 pm
To: SISWG <[EMAIL PROTECTED]>
You should not be using K+1, K+2, etc, lest you run into
related-key attacks.
I am not aware of any weakness of LRW in this regard. I was
proposing to
use related K1 (AES) keys. [...]
Using the keys in this manner "voids the warranty" of AES. No
attacks on
the full AES that use this particular form are known to date, but
modifying
the keys in this fashion opens very powerful new avenues for
cryptanalysts.
We don't want to do this.
The general rule-of-thumb for crypto thingies: if you need several
keys,
make them all independent (or derive them using a strong pseudo-
random
generator).
[...] I have not seen a
modification of EME, which supports 520-bit LBA's.
I have a paper from about a year ago that describes an extension to
EME that works on arbitrary-size strings. I called it EME*. See
http://eprint.iacr.org/2004/125/
Is not it {K1,K2} = 32-byte? Only with AES-256 it would go up to
48-byte.
Didn't we mandate 256-bit AES? I forget..
If they use several different keys, then all the 48 bytes have
to be
chosen "at random and independently" for each of these different
keys.
Do you know a specific threat, or does only the security proof
require
this?
The proof requires it, as does "general cryto hygiene"
introduce the notion of "compartments" within the key-scope,
and use
exactly two indexes, namely the compartment index and the index
of the
block within the compartment
Why not use three compartments: Drive_Index, LBA,
Cipherblock_within_LBA?
The reason for two (rather than one) is that they are used
differently:
you expect more or less random access to compartments, but sequential
access to blocks within a compartment. In this regard there is no
difference
between the drive and the LBA index: in both cases you do not expect
sequential access, so you might as well pack them both in one
"compartment
index".
Although this standard is specifically for disk, I still think
that there
is a wide variety of disks and virtualized disks out there, and I
prefer
not to tie the standard too much to one of them. So I prefer that
the part
of the standard that specifies the transform would be stated using
"technology neutral" terms (such as "compartments").
We can have a different part of the standard specifying how to map
the
information that is available to the encrypting device in various
settings
into these two indexes. (Presumably you then need to talk
separately about
SCSI, ATA, RAID-controller, and many many other different
technologies).
A different proposal is to use two 128-bit values for K2
We seem to have enough bits in I for partitioning: 64-bit drive ID,
48-bit LBA (up to 140,737 TB disks with 512-byte LBAs), 16-bit
cipher-block index, so one K2 key looks sufficient.
The point was that if you have two of them, you can do different
processing to the sequential index and the random-access index (i.e.,
use K2a*compartment-index and K2b*2^{block-index}). This makes it
easier to optimize in some environments.
-- Shai