]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Correct description of extracting Kf and Kb from g^xy.
authorNick Mathewson <nickm@torproject.org>
Mon, 25 Aug 2003 18:50:29 +0000 (18:50 +0000)
committerNick Mathewson <nickm@torproject.org>
Mon, 25 Aug 2003 18:50:29 +0000 (18:50 +0000)
svn:r414

doc/tor-spec.txt

index eeec99d8b6b10f90a76a94e637f489fb1794b610..0e6d3ec8d59b630573678d04c9ac9798774fa62b 100644 (file)
@@ -278,11 +278,18 @@ which reveals the downstream node.
 4.2. Setting circuit keys
 
    Once the handshake between the OP and an OR is completed, both
-   servers can now calculate g^xy with ordinary DH.  They divide the
-   last 32 bytes of this shared secret into two 16-byte keys, the
-   first of which (called Kf) is used to encrypt the stream of data
-   going from the OP to the OR, and second of which (called Kb) is
-   used to encrypt the stream of data going from the OR to the OP.
+   servers can now calculate g^xy with ordinary DH.  From the base key
+   material g^xy, they compute two 16 byte keys, called Kf and Kb as
+   follows.  First, the server represents g^xy as a big-endian
+   unsigned integer.  Next, the server computes 40 bytes of key data
+   as K = SHA1(g^xy | [00]) | SHA1(g^xy | [01]) where "00" is a single
+   octet whose value is zero, and "01" is a single octet whose value
+   is one.  The first 16 bytes of K form Kf, and the next 16 bytes of
+   K form Kb.  
+
+   Kf is used to encrypt the stream of data going from the OP to the
+   OR, whereas Kb is used to encrypt the stream of data going from the
+   OR to the OP.
 
 4.3. Creating circuits