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

[minion-cvs] Merged in new lioness key schedule



Update of /home/minion/cvsroot/doc
In directory moria.seul.org:/tmp/cvs-serv8286

Modified Files:
	minion-spec.tex 
Log Message:
Merged in new lioness key schedule

Index: minion-spec.tex
===================================================================
RCS file: /home/minion/cvsroot/doc/minion-spec.tex,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- minion-spec.tex	29 May 2002 16:34:40 -0000	1.9
+++ minion-spec.tex	29 May 2002 17:41:50 -0000	1.10
@@ -44,33 +44,19 @@
 
   K1 and K3 are 160 bits long; K2 and K4 are 128 bits long.
 
-  For convenience, we write SPRP_ENC(K,P,M) to denote:
-       LIONESS_ENCRYPT(HASH(K|P|" (FIRST SUBKEY)"),
-                       HASH(K|P|" (SECOND SUBKEY)")[0:16],
- 	               HASH(K|P|" (THIRD SUBKEY)"),
- 	               HASH(K|P|" (FOURTH SUBKEY)")[0:16], P)
-[ XXXX That is really overkill! The keys k1 to k4 are going to go into
-       hash functions anyway so there is no need to protect the key
-       schedule using 4 hashes. It would be eough to do the following:
-	- K_(x+1) := K << (x*32 bytes) XOR H(x) for x=0 to 3
- I do not understand why we use P in the LIONESS at all.]
-[XXXX 1) The LIONESS paper claims that the keys should be 'independent';
-         can you elaborate more on your proposal?  Specifically,  what
-         is ``x''?  What's K(0)?
-      2) P is not the same as for OAEP; it's a parameter so we use
-         different keys for the header and the payload.  We were using
-         it already. -NM ]
-[XXXX I discussed the key shedule with Markus Kuhn and we seem to agree 
-     that since the subkeys are going to be input in hash functions there 
-     is no need to hash them before hand. They just need to be different 
-     from each other. The simplest way of doing that would be:
-		K1 = K XOR 0x00..01 
-		K2 = K XOR 0x00..02
-		K3 = K XOR 0x00..03
-		K4 = K XOR 0x00..04
-     	You can also XOR P into the subkeys if you want the cipher to be 
-	different for the headers and the payload.
-     -GD]
+  For convenience, we write SPRP_ENC(MS,P,M) to denote:
+       LIONESS_ENCRYPT(K1,K2,K3,K4,M)
+       where K=HASH(MS | P)
+             K1 = K
+             K2 = K[0:16] xor 0x00...01
+             K3 = K xor 0x00...02
+             K3 = K[0:16] xor 0x00...03
+
+  [XXXX This violates the constraint in the LION/BEAR paper that
+        requires the keys to be 'independant'.  Nonetheless, George
+	and Markus Kuhn believe it's safe, since all the keys
+        will be used as inputs to hash functions before anybody
+        uses them. -NM]
 
 - SPRP_DECRYPT(K1,K2,K3,K4,M) (Len(M) bytes) Inverts SPRP_ENCRYPT.
 
@@ -333,7 +319,7 @@
                   ``Construct a message'' here and ``create a single header''
                   above. -NM]
 	// Phase 2
-	H2 = SPRP_ENC(P, ``HIDE HEADER'', H2)
+	H2 = SPRP_ENC(SHA1(P), ``HIDE HEADER'', H2)
 
 	for i = N .. 1
 		H2 = SPRP_ENC(SK1_i, "HEADER ENCRYPT",H2)
@@ -361,7 +347,7 @@
 	if routing type is is DROP:
                 End.
 	if routing type is SWAP-FWD:
-		H2 = SPRP_DEC(P, ``HIDE HEADER'', H2)
+		H2 = SPRP_DEC(SHA1(P), ``HIDE HEADER'', H2)
 		Swap H1 and H2;
         if routing type is SWAP-FWD or FWD:
 	   	Put (H1, H2, P) in queue to be sent to A.