Import release 0.1.13
[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,
3454dce4 7including key setup. This means we have to handle retries, etc.
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
3454dce4
SE
15[The original plan]
16
2fe58dfd
SE
17The network is made up from a number of 'sites'. These are collections
18of machines with private IP addresses. The new secnet code runs on
19machines which have interfaces on the private site network and some
20way of accessing the 'real' internet.
21
22Each end of a tunnel is identified by a name. Often it will be
23convenient for every gateway machine to use the same name for each
24tunnel endpoint, but this is not vital. Individual tunnels are
25identified by their two endpoint names.
26
3454dce4
SE
27[The new plan]
28
29It appears that people want to be able to use secnet on mobile
30machines like laptops as well as to interconnect sites. In particular,
31they want to be able to use their laptop in three situations:
32
331) connected to their internal LAN by a cable; no tunnel involved
342) connected via wireless, using a tunnel to protect traffic
353) connected to some other network, using a tunnel to access the
36internal LAN.
37
38They want the laptop to keep the same IP address all the time.
39
40Case (1) is simple.
41
42Case (2) requires that the laptop run a copy of secnet, and have a
43tunnel configured between it and the main internal LAN default
44gateway. secnet must support the concept of a 'soft' tunnel where it
45adds a route and causes the gateway to do proxy-ARP when the tunnel is
46up, and removes the route again when the tunnel is down.
47
48The usual prohibition of packets coming in from one tunnel and going
49out another must be relaxed in this case (in particular, the
50destination address of packets from these 'mobile station' tunnels may
51be another tunnel as well as the host).
52
53(Quick sanity check: if chiark's secnet address was in
54192.168.73.0/24, would this work properly? Yes, because there will be
55an explicit route to it, and proxy ARP will be done for it. Do we want
56packets from the chiark tunnel to be able to go out along other
57routes? No. So, spotting a 'local' address in a remote site's list of
58networks isn't sufficient to switch on routing for a site. We need an
59explicit option. NB packets may be routed if the source OR the
60destination is marked as allowing routing [otherwise packets couldn't
61get back from eg. chiark to a laptop at greenend]).
62
63** VPN-level configuration
64
65At a high level we just want to be able to indicate which groups of
66users can claim ownership of which ranges of IP addresses. Assuming
67these users (or their representatives) all have accounts on a single
68machine, we can automate the submission of keys and other information
69to make up a 'sites' file for the entire VPN.
70
71The distributed 'sites' file should be in a more restricted format
72than the secnet configuration file, to prevent attackers who manage to
73distribute bogus sites files from taking over their victim's machines.
74
75The distributed 'sites' file is read one line at a time. Each line
76consists of a keyword followed by other information. It defines a
77number of VPNs; within each VPN it defines a number of locations;
78within each location it defines a number of sites. These VPNs,
79locations and sites are turned into a secnet.conf file fragment using
80a script.
81
82Some keywords are valid at any 'level' of the distributed 'sites'
83file, indicating defaults.
84
85The keywords are:
86
87vpn n: we are now declaring information to do with VPN 'n'. Must come first.
88
89location n: we are now declaring information for location 'n'.
90
91site n: we are now declaring information for site 'n'.
92endsite: we're finished declaring information for the current site
93
94restrict-nets a b c ...: restrict the allowable 'networks' for the current
95 level to those in this list.
96end-definitions: prevent definition of further vpns and locations, and
97 modification of defaults at VPN level
98
99dh x y: the current VPN uses the specified group; x=modulus, y=generator
100
101hash x: which hash function to use. Valid options are 'md5' and 'sha1'.
102
103admin n: administrator email address for current level
104
105key-lifetime n
106setup-retries n
107setup-timeout n
108wait-time n
109renegotiate-time n
110
111address a b: a=dnsname, b=port
112networks a b c ...
113pubkey x y z: x=keylen, y=encryption key, z=modulus
114mobile: declare this to be a 'mobile' site
115
b2a56f7c
SE
116** Logging etc.
117
118There are several possible ways of running secnet:
119
120'reporting' only: --version, --help, etc. command line options and the
121--just-check-config mode.
122
123'normal' run: perform setup in the foreground, and then background.
124
125'failed' run: setup in the foreground, and terminate with an error
126before going to background.
127
128'reporting' modes should never output anything except to stdout/stderr.
129'normal' and 'failed' runs output to stdout/stderr before
130backgrounding, then thereafter output only to log destinations.
131
2fe58dfd
SE
132** Protocols
133
134*** Protocol environment:
135
136Each gateway machine serves a particular, well-known set of private IP
137addresses (i.e. the agreement over which addresses it serves is
138outside the scope of this discussion). Each gateway machine has an IP
139address on the interconnecting network (usually the Internet), which
140may be dynamically allocated and may change at any point.
141
142Each gateway knows the RSA public keys of the other gateways with
143which it wishes to communicate. The mechanism by which this happens is
144outside the scope of this discussion. There exists a means by which
145each gateway can look up the probable IP address of any other.
146
147*** Protocol goals:
148
149The ultimate goal of the protocol is for the originating gateway
150machine to be able to forward packets from its section of the private
151network to the appropriate gateway machine for the destination
152machine, in such a way that it can be sure that the packets are being
153sent to the correct destination machine, the destination machine can
154be sure that the source of the packets is the originating gateway
155machine, and the contents of the packets cannot be understood other
156than by the two communicating gateways.
157
158XXX not sure about the address-change stuff; leave it out of the first
159version of the protocol. From experience, IP addresses seem to be
160quite stable so the feature doesn't gain us much.
161
162**** Protocol sub-goal 1: establish a shared key
163
164Definitions:
165
166A is the originating gateway machine
167B is the destination gateway machine
168PK_A is the public RSA key of A
169PK_B is the public RSA key of B
170PK_A^-1 is the private RSA key of A
171PK_B^-1 is the private RSA key of B
172x is the fresh private DH key of A
173y is the fresh private DH key of B
174k is g^xy mod m
175g and m are generator and modulus for Diffie-Hellman
176nA is a nonce generated by A
177nB is a nonce generated by B
178iA is an index generated by A, to be used in packets sent from B to A
179iB is an index generated by B, to be used in packets sent from A to B
180i? is appropriate index for receiver
181
182Note that 'i' may be re-used from one session to the next, whereas 'n'
183is always fresh.
184
ff05a229
SE
185The protocol version selection stuff is not yet implemented: I'm not
186yet convinced it's a good idea. Instead, the initiator could try
187using its preferred protocol (which starts with a different magic
188number) and fall back if there's no reply.
189
2fe58dfd
SE
190Messages:
191
baa06aeb 1921) A->B: *,iA,msg1,A,B,protorange-A,nA
2fe58dfd 193
baa06aeb 1942) B->A: iA,iB,msg2,B,A,chosen-protocol,nB,nA
2fe58dfd
SE
195
196(The order of B and A reverses in alternate messages so that the same
197code can be used to construct them...)
198
baa06aeb 1993) A->B: {iB,iA,msg3,A,B,protorange-A,chosen-protocol,nA,nB,g^x mod m}_PK_A^-1
2fe58dfd
SE
200
201If message 1 was a replay then A will not generate message 3, because
202it doesn't recognise nA.
203
204If message 2 was from an attacker then B will not generate message 4,
205because it doesn't recognise nB.
206
baa06aeb
SE
207If an attacker is trying to manipulate the chosen protocol, B can spot
208this when it sees A's message 3.
209
2104) B->A: {iA,iB,msg4,B,A,protorange-B,chosen-protocol,nB,nA,g^y mod m}_PK_B^-1
2fe58dfd
SE
211
212At this point, A and B share a key, k. B must keep retransmitting
213message 4 until it receives a packet encrypted using key k.
214
baa06aeb
SE
215A can abandon the exchange if the chosen protocol is not the one that
216it would have chosen knowing the acceptable protocol ranges of A and
217B.
218
2fe58dfd
SE
2195) A: iB,iA,msg5,(ping/msg5)_k
220
2216) B: iA,iB,msg6,(pong/msg6)_k
222
223(Note that these are encrypted using the same transform that's used
224for normal traffic, so they include sequence number, MAC, etc.)
225
226The ping and pong messages can be used by either end of the tunnel at
227any time, but using msg0 as the unencrypted message type indicator.
228
229**** Protocol sub-goal 2: end the use of a shared key
230
2317) i?,i?,msg0,(end-session/msg7,A,B)_k
232
233This message can be sent by either party. Once sent, k can be
234forgotten. Once received and checked, k can be forgotten. No need to
235retransmit or confirm reception. It is suggested that this message be
236sent when a key times out, or the tunnel is forcibly terminated for
237some reason.
238
794f2398 2398) i?,i?,NAK (encoded as zero)
2fe58dfd
SE
240
241If the link-layer can't work out what to do with a packet (session has
242gone away, etc.) it can transmit a NAK back to the sender. The sender
243can then try to verify whether the session is alive by sending ping
244packets, and forget the key if it isn't. Potential denial-of-service
245if the attacker can stop the ping/pong packets getting through (the
246key will be forgotten and another key setup must take place), but if
247they can delete packets then we've lost anyway...
248
249The attacker can of course forge NAKs since they aren't protected. But
250if they can only forge packets then they won't be able to stop the
251ping/pong working. Trust in NAKs can be rate-limited...
252
974d0468
SE
253Alternative idea (which is actually implemented): if you receive a
254packet you can't decode, because there's no key established, then
255initiate key setup...
256
257Keepalives are probably a good idea.
2fe58dfd
SE
258
259**** Protocol sub-goal 3: send a packet
260
2619) i?,i?,msg0,(send-packet/msg9,packet)_k