[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Cryptography Question (I hope it's not off-topic on this list)




In article <[email protected]>,
Paul Bradley  <[email protected]> wrote:
>
>
>>   e.g. - If only 56-bit encryption becomes legal, is there a method
>> of *chaining* several passes of 48-bit encryption which would make it
>> just as hard to break as 96/192/384-bit (etc.) encryption?
>
>This is a similar idea to implementing, say DES, with independent 
>subkeys. Layering encryption in this manner makes the plaintext more 
>difficult to determine providing that:
>
>a. The involved cryptosystem is not a group, or does not posess strong 
>group like properties (eg. There are no large subgroups).
>
>b. Independent keys are used for each encryption
>
>For a good example of a particular case of your idea see 3DES

Careful, here.  3DES gives us a benefit because we can chain crypto at
the algorithm level.  Chaining several passes of DES may not give this
benefit if all we have is an opaque program that block-pads the input
and does raw DES on that.  For example (the values are imaginary),

DES("foo") = DES_raw("foo\x05\x05\x05\x05\x05") = "f983hgls"
DES(DES("foo")) = DES("f983hgls") =
   DES_raw("f983hgls\x08\x08\x08\x08\x08\x08\x08\x08") = "d84koqw78452398f"
DES(DES(DES("foo"))) = DES("d84koqw78452398f") =
   DES_raw("d84koqw78452398f\x08\x08\x08\x08\x08\x08\x08\x08") =
   "ecy34895y34057834985634y";

whereas 3DES("foo") = 3DES_raw("foo\x05\x05\x05\x05\x05") = "ecy34895"

To break DES(DES(DES("foo"))), break the outer DES until you find
"\x08\x08\x08\x08\x08\x08\x08\x08" at the end of the "plaintext" (actually,
the padded value of DES(DES("foo"))).  Repeat until you get "foo".

[It is left as an exercise to the reader to determine why you might not
be able to merely chop the last 8 bytes off the output of the second and
third DES iterations to get around this problem.]

   - Ian