Import release 0.1.2
[secnet] / NOTES
CommitLineData
974d0468 1* Design of new, multi-subnet secnet protocol
2fe58dfd 2
974d0468
SE
3Like the first (1995/6) version, we're tunnelling IP packets inside
4UDP packets. To defeat various restrictions which may be imposed on us
5by network providers (like the prohibition of incoming TCP
6connections) we're sticking with UDP for everything this time,
7including key setup.
2fe58dfd
SE
8
9Other new features include being able to deal with subnets hidden
10behind changing 'real' IP addresses, and the ability to choose
11algorithms and keys per pair of communicating sites.
12
13** Configuration and structure
14
15The network is made up from a number of 'sites'. These are collections
16of machines with private IP addresses. The new secnet code runs on
17machines which have interfaces on the private site network and some
18way of accessing the 'real' internet.
19
20Each end of a tunnel is identified by a name. Often it will be
21convenient for every gateway machine to use the same name for each
22tunnel endpoint, but this is not vital. Individual tunnels are
23identified by their two endpoint names.
24
2fe58dfd
SE
25** Protocols
26
27*** Protocol environment:
28
29Each gateway machine serves a particular, well-known set of private IP
30addresses (i.e. the agreement over which addresses it serves is
31outside the scope of this discussion). Each gateway machine has an IP
32address on the interconnecting network (usually the Internet), which
33may be dynamically allocated and may change at any point.
34
35Each gateway knows the RSA public keys of the other gateways with
36which it wishes to communicate. The mechanism by which this happens is
37outside the scope of this discussion. There exists a means by which
38each gateway can look up the probable IP address of any other.
39
40*** Protocol goals:
41
42The ultimate goal of the protocol is for the originating gateway
43machine to be able to forward packets from its section of the private
44network to the appropriate gateway machine for the destination
45machine, in such a way that it can be sure that the packets are being
46sent to the correct destination machine, the destination machine can
47be sure that the source of the packets is the originating gateway
48machine, and the contents of the packets cannot be understood other
49than by the two communicating gateways.
50
51XXX not sure about the address-change stuff; leave it out of the first
52version of the protocol. From experience, IP addresses seem to be
53quite stable so the feature doesn't gain us much.
54
55**** Protocol sub-goal 1: establish a shared key
56
57Definitions:
58
59A is the originating gateway machine
60B is the destination gateway machine
61PK_A is the public RSA key of A
62PK_B is the public RSA key of B
63PK_A^-1 is the private RSA key of A
64PK_B^-1 is the private RSA key of B
65x is the fresh private DH key of A
66y is the fresh private DH key of B
67k is g^xy mod m
68g and m are generator and modulus for Diffie-Hellman
69nA is a nonce generated by A
70nB is a nonce generated by B
71iA is an index generated by A, to be used in packets sent from B to A
72iB is an index generated by B, to be used in packets sent from A to B
73i? is appropriate index for receiver
74
75Note that 'i' may be re-used from one session to the next, whereas 'n'
76is always fresh.
77
78Messages:
79
baa06aeb 801) A->B: *,iA,msg1,A,B,protorange-A,nA
2fe58dfd 81
baa06aeb 822) B->A: iA,iB,msg2,B,A,chosen-protocol,nB,nA
2fe58dfd
SE
83
84(The order of B and A reverses in alternate messages so that the same
85code can be used to construct them...)
86
baa06aeb 873) A->B: {iB,iA,msg3,A,B,protorange-A,chosen-protocol,nA,nB,g^x mod m}_PK_A^-1
2fe58dfd
SE
88
89If message 1 was a replay then A will not generate message 3, because
90it doesn't recognise nA.
91
92If message 2 was from an attacker then B will not generate message 4,
93because it doesn't recognise nB.
94
baa06aeb
SE
95If an attacker is trying to manipulate the chosen protocol, B can spot
96this when it sees A's message 3.
97
984) B->A: {iA,iB,msg4,B,A,protorange-B,chosen-protocol,nB,nA,g^y mod m}_PK_B^-1
2fe58dfd
SE
99
100At this point, A and B share a key, k. B must keep retransmitting
101message 4 until it receives a packet encrypted using key k.
102
baa06aeb
SE
103A can abandon the exchange if the chosen protocol is not the one that
104it would have chosen knowing the acceptable protocol ranges of A and
105B.
106
2fe58dfd
SE
1075) A: iB,iA,msg5,(ping/msg5)_k
108
1096) B: iA,iB,msg6,(pong/msg6)_k
110
111(Note that these are encrypted using the same transform that's used
112for normal traffic, so they include sequence number, MAC, etc.)
113
114The ping and pong messages can be used by either end of the tunnel at
115any time, but using msg0 as the unencrypted message type indicator.
116
117**** Protocol sub-goal 2: end the use of a shared key
118
1197) i?,i?,msg0,(end-session/msg7,A,B)_k
120
121This message can be sent by either party. Once sent, k can be
122forgotten. Once received and checked, k can be forgotten. No need to
123retransmit or confirm reception. It is suggested that this message be
124sent when a key times out, or the tunnel is forcibly terminated for
125some reason.
126
974d0468
SE
127XXX not yet implemented.
128
2fe58dfd
SE
1298) i?,i?,NAK/msg8
130
131If the link-layer can't work out what to do with a packet (session has
132gone away, etc.) it can transmit a NAK back to the sender. The sender
133can then try to verify whether the session is alive by sending ping
134packets, and forget the key if it isn't. Potential denial-of-service
135if the attacker can stop the ping/pong packets getting through (the
136key will be forgotten and another key setup must take place), but if
137they can delete packets then we've lost anyway...
138
139The attacker can of course forge NAKs since they aren't protected. But
140if they can only forge packets then they won't be able to stop the
141ping/pong working. Trust in NAKs can be rate-limited...
142
974d0468
SE
143Alternative idea (which is actually implemented): if you receive a
144packet you can't decode, because there's no key established, then
145initiate key setup...
146
147Keepalives are probably a good idea.
2fe58dfd
SE
148
149**** Protocol sub-goal 3: send a packet
150
1519) i?,i?,msg0,(send-packet/msg9,packet)_k