I've just started studying Tor and I came across TAP and ntor protocols. Just want to clear up that are these protocols decided at the time of circuit creation or each relay can decide on its own that which protocol to use?
So I gues to start off: since 0.2.6.1-alpha - 2014-10-30 tor relays and clients are required to support ntor:
- Remove the --disable-curve25519 configure option. Relays and clients now are required to support curve25519 and the ntor handshake.
Furthermore, since 0.2.4.21 - 2014-02-28 all circuits will contain at least one node that supports ntor:
o Major features (client security): - When we choose a path for a 3-hop circuit, make sure it contains at least one relay that supports the NTor circuit extension handshake. Otherwise, there is a chance that we're building a circuit that's worth attacking by an adversary who finds breaking 1024-bit crypto doable, and that chance changes the game theory. Implements ticket 9777.
If a relay supports ntor, clients and other relays will use that to talk to it. This is decided at circuit creation (or before circuit creation?). To try and speak TAP to an ntor-supporting relay would require modifications to the source code.