[tor-dev] Discussion Meeting for Prop#249 "Large CREATE cells"
teor2345 at gmail.com
Sun Dec 10 04:16:57 UTC 2017
> On 9 Dec 2017, at 11:29, isis agora lovecruft <isis at torproject.org> wrote:
> Hello all,
> What: A proposal discussion meeting for prop#249 "Allow CREATE cells with
>> 505 bytes of handshake data". 
> Who: This proposal is likely of interest to those hoping to integrate newer,
> non-ECC-based, circuit-layer handshakes into the Tor protocol.
> When: Next week, on Monday or Tuesday (or Wednesday, for some timezones).
> If you'd like to attend, please vote on a time here:
> Where: irc.oftc.net #tor-meeting
> : https://gitweb.torproject.org/torspec.git/tree/proposals/249-large-create-cells.txt
> Meeting Preparation Materials
> The following is meant for attendees to refresh before the meeting. Please
> feel free to respond with further summary and/or open questions/concerns.
> Proposal Summary
> The proposal outlines two new cell types, CREATE2V and CREATED2V, which are
> variable-length and (like their CREATE2/CREATED2 counterparts) are sent
> encapsulated in EXTEND2 cells. Due to their variable-length, however, if a
> CREATE(D)2V cell's HDATA is larger than the standard allotment of 505 bytes,
> these new cells are fragmented across multiple EXTEND2 cells.
> Open Questions/Concerns
> 1. Since CREATE2V cells are used for handshakes, and several newer,
> post-quantum primitives have asymmetric payloads for the client versus
> server directions, should we require that the CREATE(D)2V padding be used
> to equalise the number of bytes sent in each direction?
Should we pad to a certain multiple of cells, to hide which handshake is being
I think this matters in the onion service case, because it allows
non-rendezvous points to work out the orientation of the client to service
circuit using the handshake. But relays can already do this probabilistically,
using cell response latency.
But otherwise, I can't see how it matters unless we are trying to hide the
type of handshake: circuit orientation is known by each hop, because they
each know the direction they sent and received EXTENDs in.
> 2. Should we randomise the bytes in the padding? (Currently, as proposed,
> we require all-zero padding.)
> 3. Should we do anything more future-proofed w.r.t. the future possibility
> of using an alternate (non-stateful, e.g. not TCP) transport?
> (Currently, the proposal relies heavily upon the transport-layer to
> provide delivery guarantee and, perhaps more important, ordering.)
> 4. Shoule we, for hybrid handshakes (handshakes which use multiple separate
> primitives to derive shared secrets, e.g. ECDH+RLWE or ECDH+SIDH, by
> conducting each handshake separately and composing their respective
> resulting shared secrets), design some mechanism where, if a party only
> supports say the ECDH portion of the hybrid handshake and not the RLWE
> part, then they proceed with the portion they understand? For example, a
> client sends their portion of a ECDH+RLWE handshake to a relay which only
> understands ECDH, so the relay responds with only ECDH and they continue.
> This is mostly a difference in subprotocol versioning for handshakes,
> that is, an ECDH+RLWE handshake, rather than being "handshake type 5" or
> whatever, would be "handshake type 2 AND/OR handshake type 5".
> 5. As written, the proposal doesn't specify a maximum (or minimum) size of
> handshake data. However, the max is somewhat limited by the number of
> allowed RELAY_EARLY cells; maximum handshake data is then limited to
> 462+(7*492)=3906 bytes.
More precisely, assuming all handshakes are the same size, and counting
hops using the number of relays, maximum outbound handshake data is:
* unlimited for the first hop
* limited to 8 cells for the second hop in a two-hop circuit
(bandwidth scanners use two-hop circuits)
* limited to 8/2 = 4 cells for the second and subsequent hops in a
* limited to 8/(3,4) = 2 cells for the second and subsequent hops in a four
or five-hop circuit (4 hops can happen with circuit cannibalisation, and
4 hops is the minimum for onion service client intro or service rend, and
some vanguard circuits. 5-8 hops can happen with onion service client intro
* limited to 8/(5,6,7,8) = 1 cell for the second and subsequent hops in a six-hop
(or greater) circuit (onion service client intro extends)
There is no limit on inbound handshake client data.
Can we invert the client/server directions in any of these handshakes?
(I imagine we can't, if the server declares public key material.)
Do vanguards every require 5 hops?
Does this proposal mean that we have to limit the number of client intro
extends on the same circuit?
Should we increase the number of RELAY_EARLY cells sent on legacy circuits
to hide these larger handshake sizes?
More information about the tor-dev