|
@@ -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
|
|
|
|