I like Greg Rose's solution best:

> There is a fairly standard technique for handling things like this.
> 1. encode your number N into a 133-bit string S
> 2. encrypt S with your favourite 133-bit block cipher (see below)
> 3. decode S to a number N'
> 4. if N' >= 10^40, goto 2 (that is, re-encrypt until it is in range)
> 5. N' is your answer.

This is Rich Schroeppel's trick from his Hasty Pudding cipher, a somewhat
under-rated AES submission IMO. HPC originated not only this trick,
but also the idea of tweakable encryption, which has turned out to be
important for disk encryption. The Black-Rogaway paper referenced earlier
has a proof of security of this construction.

> So, you don't have a 133-bit block cipher lying around? No worries, I'll 
> sell you one ;-). Actually that is easy too. Take a trustworthy 128-bit 
> block cipher like AES. To encrypt, do:
> 1. Encrypt the first 128 bits (ECB mode)
> 2. Encrypt the last 128 bits (also ECB mode).

I didn't understand this at first, but I finally saw that the point is to
do the encryptions in-place; step 1 replaces the first 128 bits of the
data with the encryption, and similarly for step 2. This is equivalent
to doing CBC mode with a fixed IV of 0, and ciphertext stealing for the
final partial block of 5 bits.

> To decrypt, do decryptions in the reverse order, obviously. It's easy to 
> see that this is a secure permutation if AES itself is, depending on 
> your definition of secure; if you add a third step, to re-encrypt the 
> first 128 bits, it is truly secure. (Without the third step, tweaking a 
> bit in the first 5 bits will often leave the last 5 unchanged on 
> decryption, which is clearly a distinguishing attack; the third 
> encryption makes it an all-or-nothing transform.)

I am not familiar with the security proof here, do you have a reference?
Or is it an exercise for the student?

Hal Finney

The Cryptography Mailing List
Unsubscribe by sending "unsubscribe cryptography" to [EMAIL PROTECTED]

Reply via email to