[tor-commits] [torspec/master] prop224: Add missing key expansion section for rendezvous crypto.
asn at torproject.org
asn at torproject.org
Sat Apr 9 11:15:20 UTC 2016
commit 65f186e80c6ee425c2e9cf479cdf6ca66c51a337
Author: George Kadianakis <desnacked at riseup.net>
Date: Fri Mar 18 12:10:35 2016 +0200
prop224: Add missing key expansion section for rendezvous crypto.
---
proposals/224-rend-spec-ng.txt | 37 +++++++++++++++++++++++++++++++++----
1 file changed, 33 insertions(+), 4 deletions(-)
diff --git a/proposals/224-rend-spec-ng.txt b/proposals/224-rend-spec-ng.txt
index aee91bf..51d6ea4 100644
--- a/proposals/224-rend-spec-ng.txt
+++ b/proposals/224-rend-spec-ng.txt
@@ -1144,7 +1144,7 @@ Status: Draft
In this older protocol, an ESTABLISH_INTRO cell contains:
- KEY_LEN [2 bytes]
+ KEY_LEN [2 bytes]
KEY [KEY_LEN bytes]
HANDSHAKE_AUTH [20 bytes]
SIG [variable, up to end of relay payload]
@@ -1649,10 +1649,39 @@ Status: Draft
client containing the contents of the RENDEZVOUS1 cell.
Upon receiving the RENDEZVOUS2 cell, the client verifies that the
- HANDSHAKE_INFO correctly completes a handshake, and uses the
- handshake output to derive shared keys for use on the circuit.
+ HANDSHAKE_INFO correctly completes a handshake. Now both parties use the
+ handshake output to derive shared keys for use on the circuit as specified
+ in the section below:
- [TODO: How do we derive shared keys exactly? How do we use NTOR_KEY_SEED?]
+4.2.1. Key expansion
+
+ The hidden service and its client need to derive crypto keys from the
+ NTOR_KEY_SEED part of the handshake output. To do so, they use the key
+ expansion construction specified in prop216:
+
+ K = K_1 | K_2 | K_3 | ...
+
+ Where K_1 = MAC(NTOR_KEY_SEED, m_hsexpand | INT8(1))
+ and K_(i+1) = MAC(NTOR_KEY_SEED, K_i | m_hsexpand | INT8(i))
+ and INT8(i) is a octet with the value "i".
+
+
+ The key material is then used to generate KH, Df, Db, Kf, and Kb as in the
+ KDF-TOR key derivation approach documented in tor-spec.txt:
+
+ The first HASH_LEN bytes of K form KH; the next HASH_LEN form the forward
+ digest Df; the next HASH_LEN 41-60 form the backward digest Db; the next
+ KEY_LEN 61-76 form Kf, and the final KEY_LEN form Kb. Excess bytes from K
+ are discarded.
+
+ Subsequently, the rendezvous point passes relay cells, unchanged, from each
+ of the two circuits to the other. When Alice's OP sends RELAY cells along
+ the circuit, it authenticates with Df, and encrypts them with the Kf, then
+ with all of the keys for the ORs in Alice's side of the circuit; and when
+ Alice's OP receives RELAY cells from the circuit, it decrypts them with the
+ keys for the ORs in Alice's side of the circuit, then decrypts them with Kb,
+ and checks integrity with Db. Bob's OP does the same, with Kf and Kb
+ interchanged.
[TODO: Should we encrypt HANDSHAKE_INFO as we did INTRODUCE2
contents? It's not necessary, but it could be wise. Similarly, we
More information about the tor-commits
mailing list