ec-field-test.c: Make the field-element type use internal format.
[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
4f5e39ec
SE
63[the even newer plan]
64
65secnet sites are configured to grant access to particular IP address
66ranges to the holder of a particular public key. The key can certify
67other keys, which will then be permitted to use a subrange of the IP
68address range of the certifying key.
69
70This means that secnet won't know in advance (i.e. at configuration
71time) how many tunnels it might be required to support, so we have to
72be able to create them (and routes, and so on) on the fly.
73
3454dce4
SE
74** VPN-level configuration
75
76At a high level we just want to be able to indicate which groups of
77users can claim ownership of which ranges of IP addresses. Assuming
78these users (or their representatives) all have accounts on a single
79machine, we can automate the submission of keys and other information
80to make up a 'sites' file for the entire VPN.
81
82The distributed 'sites' file should be in a more restricted format
83than the secnet configuration file, to prevent attackers who manage to
84distribute bogus sites files from taking over their victim's machines.
85
86The distributed 'sites' file is read one line at a time. Each line
87consists of a keyword followed by other information. It defines a
88number of VPNs; within each VPN it defines a number of locations;
89within each location it defines a number of sites. These VPNs,
90locations and sites are turned into a secnet.conf file fragment using
91a script.
92
93Some keywords are valid at any 'level' of the distributed 'sites'
94file, indicating defaults.
95
96The keywords are:
97
98vpn n: we are now declaring information to do with VPN 'n'. Must come first.
99
100location n: we are now declaring information for location 'n'.
101
102site n: we are now declaring information for site 'n'.
103endsite: we're finished declaring information for the current site
104
105restrict-nets a b c ...: restrict the allowable 'networks' for the current
106 level to those in this list.
107end-definitions: prevent definition of further vpns and locations, and
108 modification of defaults at VPN level
109
110dh x y: the current VPN uses the specified group; x=modulus, y=generator
111
112hash x: which hash function to use. Valid options are 'md5' and 'sha1'.
113
114admin n: administrator email address for current level
115
116key-lifetime n
117setup-retries n
118setup-timeout n
119wait-time n
120renegotiate-time n
121
122address a b: a=dnsname, b=port
123networks a b c ...
124pubkey x y z: x=keylen, y=encryption key, z=modulus
125mobile: declare this to be a 'mobile' site
126
b2a56f7c
SE
127** Logging etc.
128
129There are several possible ways of running secnet:
130
131'reporting' only: --version, --help, etc. command line options and the
132--just-check-config mode.
133
134'normal' run: perform setup in the foreground, and then background.
135
136'failed' run: setup in the foreground, and terminate with an error
137before going to background.
138
139'reporting' modes should never output anything except to stdout/stderr.
140'normal' and 'failed' runs output to stdout/stderr before
141backgrounding, then thereafter output only to log destinations.
142
2fe58dfd
SE
143** Protocols
144
145*** Protocol environment:
146
147Each gateway machine serves a particular, well-known set of private IP
148addresses (i.e. the agreement over which addresses it serves is
149outside the scope of this discussion). Each gateway machine has an IP
150address on the interconnecting network (usually the Internet), which
151may be dynamically allocated and may change at any point.
152
153Each gateway knows the RSA public keys of the other gateways with
154which it wishes to communicate. The mechanism by which this happens is
155outside the scope of this discussion. There exists a means by which
156each gateway can look up the probable IP address of any other.
157
158*** Protocol goals:
159
160The ultimate goal of the protocol is for the originating gateway
161machine to be able to forward packets from its section of the private
162network to the appropriate gateway machine for the destination
163machine, in such a way that it can be sure that the packets are being
164sent to the correct destination machine, the destination machine can
165be sure that the source of the packets is the originating gateway
166machine, and the contents of the packets cannot be understood other
167than by the two communicating gateways.
168
169XXX not sure about the address-change stuff; leave it out of the first
170version of the protocol. From experience, IP addresses seem to be
171quite stable so the feature doesn't gain us much.
172
173**** Protocol sub-goal 1: establish a shared key
174
175Definitions:
176
1737eeef
IJ
177A is the originating gateway machine name
178B is the destination gateway machine name
09a385fb 179A+ and B+ are the names with optional additional data, see below
2fe58dfd
SE
180PK_A is the public RSA key of A
181PK_B is the public RSA key of B
182PK_A^-1 is the private RSA key of A
183PK_B^-1 is the private RSA key of B
184x is the fresh private DH key of A
185y is the fresh private DH key of B
186k is g^xy mod m
187g and m are generator and modulus for Diffie-Hellman
188nA is a nonce generated by A
189nB is a nonce generated by B
190iA is an index generated by A, to be used in packets sent from B to A
191iB is an index generated by B, to be used in packets sent from A to B
192i? is appropriate index for receiver
193
194Note that 'i' may be re-used from one session to the next, whereas 'n'
195is always fresh.
196
09a385fb
IJ
197The optional additional data after the sender's name consists of some
198initial subset of the following list of items:
199 * A 32-bit integer with a set of capability flags, representing the
200 abilities of the sender.
3ed1846a
IJ
201 * In MSG3/MSG4: a 16-bit integer being the sender's MTU, or zero.
202 (In other messages: nothing.) See below.
09a385fb
IJ
203 * More data which is yet to be defined and which must be ignored
204 by receivers.
205The optional additional data after the receiver's name is not
206currently used. If any is seen, it must be ignored.
207
208Capability flag bits must be in one the following two categories:
209
2101. Early capability flags must be advertised in MSG1 or MSG2, as
211 applicable. If MSG3 or MSG4 advertise any "early" capability bits,
212 MSG1 or MSG3 (as applicable) must have advertised them too. Sadly,
213 advertising an early capability flag will produce MSG1s which are
214 not understood by versions of secnet which predate the capability
215 mechanism.
216
2172. Late capability flags are advertised in MSG2 or MSG3, as
218 applicable. They may also appear in MSG1, but this is not
219 guaranteed. MSG4 must advertise the same set as MSG2.
220
9c6af4ec
MW
221Capability bits 8 to 31 are used by Secnet as default capability numbers
222for various features: bit 8 is for the original CBCMAC-based transform,
223and bit 9 for the new EAX transform; bit 10 for traditional finite-field
224Diffie--Hellman; bits 11 to 14 and 16 to 30 are reserved for future
225expansion. The the low eight bits are reserved for local use, e.g., to
226allow migration from one set of parameters for a particular transform to
227a different, incompatible set of parameters for the same transform. Bit
22831, if advertised by both ends, indicates that a mobile end gets
229priority in case of crossed MSG1.
230
231Bit 15 is special: it signifies (a) that the sender is reporting all of
232its transforms and DH groups explicitly, and (b) that it uses all 32
233capability bits to do so. Older Secnets only checked the low 16 bits
234for known capabilities.
0b5df556 235
5d903efd
MW
236Whether a capability number is early depends on its meaning, rather than
237being a static property of its number. That said, the mobile-end-gets
238priority bit (31) is always sent as an `early' capability bit.
09a385fb 239
ff05a229 240
3ed1846a
IJ
241MTU handling
242
243In older versions of secnet, secnet was not capable of fragmentation
244or sending ICMP Frag Needed. Administrators were expected to configure
245consistent MTUs across the network.
246
247It is still the case in the current version that the MTUs need to be
248configured reasonably coherently across the network: the allocated
249buffer sizes must be sufficient to cope with packets from all other
250peers.
251
252However, provided the buffers are sufficient, all packets will be
253processed properly: a secnet receiving a packet larger than the
254applicable MTU for its delivery will either fragment it, or reject it
255with ICMP Frag Needed.
256
257The MTU additional data field allows secnet to advertise an MTU to the
258peer. This allows the sending end to handle overlarge packets, before
259they are transmitted across the underlying public network. This can
260therefore be used to work around underlying network braindamage
261affecting large packets.
262
263If the MTU additional data field is zero or not present, then the peer
264should use locally-configured MTU information (normally, its local
265netlink MTU) instead.
266
267If it is nonzero, the peer may send packets up to the advertised size
268(and if that size is bigger than the peer's administratively
269configured size, the advertiser promises that its buffers can handle
270such a large packet).
271
272A secnet instance should not assume that just because it has
273advertised an mtu which is lower than usual for the vpn, the peer will
274honour it, unless the administrator knows that the peers are
275sufficiently modern to understand the mtu advertisement option. So
276secnet will still accept packets which exceed the link MTU (whether
277negotiated or assumed).
278
279
2fe58dfd
SE
280Messages:
281
291906b8 2821) A->B: i*,iA,msg1,A+,B+,nA
7e29719e
IJ
283
284i* must be encoded as 0. (However, it is permitted for a site to use
285zero as its "index" for another site.)
2fe58dfd 286
1737eeef 2872) B->A: iA,iB,msg2,B+,A+,nB,nA
2fe58dfd
SE
288
289(The order of B and A reverses in alternate messages so that the same
290code can be used to construct them...)
291
5b5f297f 2923) A->B: {iB,iA,msg3,A+,B+,[chosen-transform],nA,nB,g^x mod m}_PK_A^-1
2fe58dfd
SE
293
294If message 1 was a replay then A will not generate message 3, because
295it doesn't recognise nA.
296
297If message 2 was from an attacker then B will not generate message 4,
298because it doesn't recognise nB.
299
1737eeef 3004) B->A: {iA,iB,msg4,B+,A+,nB,nA,g^y mod m}_PK_B^-1
2fe58dfd
SE
301
302At this point, A and B share a key, k. B must keep retransmitting
303message 4 until it receives a packet encrypted using key k.
304
3055) A: iB,iA,msg5,(ping/msg5)_k
306
3076) B: iA,iB,msg6,(pong/msg6)_k
308
309(Note that these are encrypted using the same transform that's used
310for normal traffic, so they include sequence number, MAC, etc.)
311
312The ping and pong messages can be used by either end of the tunnel at
313any time, but using msg0 as the unencrypted message type indicator.
314
315**** Protocol sub-goal 2: end the use of a shared key
316
3177) i?,i?,msg0,(end-session/msg7,A,B)_k
318
319This message can be sent by either party. Once sent, k can be
320forgotten. Once received and checked, k can be forgotten. No need to
321retransmit or confirm reception. It is suggested that this message be
322sent when a key times out, or the tunnel is forcibly terminated for
323some reason.
324
1e80c220 325**** Protocol sub-goal 3: send a packet
2fe58dfd 326
1e80c220 3278) i?,i?,msg0,(send-packet/msg9,packet)_k
2fe58dfd 328
1e80c220 329**** Other messages
974d0468 330
1e80c220 3319) i?,i?,NAK (NAK is encoded as zero)
2fe58dfd 332
1e80c220
IJ
333If the link-layer can't work out what to do with a packet (session has
334gone away, etc.) it can transmit a NAK back to the sender.
2fe58dfd 335
1e80c220
IJ
336This can alert the sender to the situation where the sender has a key
337but the receiver doesn't (eg because it has been restarted). The
338sender, on receiving the NAK, will try to initiate a key exchange.
4f5e39ec 339
1e80c220
IJ
340Forged (or overly delayed) NAKs can cause wasted resources due to
341spurious key exchange initiation, but there is a limit on this because
342of the key exchange retry timeout.
4f5e39ec
SE
343
34410) i?,i?,msg8,A,B,nA,nB,msg?
1e80c220
IJ
345
346This is an obsolete form of NAK packet which is not sent by any even
347vaguely recent version of secnet. (In fact, there is no evidence in
348the git history of it ever being sent.)
349
350This message number is reserved.
dd9209d1
IJ
351
35211) *,*,PROD,A,B
353
354Sent in response to a NAK from B to A. Requests that B initiates a
355key exchange with A, if B is willing and lacks a transport key for A.
356(If B doesn't have A's address configured, implicitly supplies A's
357public address.)
358
359This is necessary because if one end of a link (B) is restarted while
360a key exchange is in progress, the following bad state can persist:
361the non-restarted end (A) thinks that the key is still valid and keeps
362sending packets, but B either doesn't realise that a key exchange with
363A is necessary or (if A is a mobile site) doesn't know A's public IP
364address.
365
366Normally in these circumstances B would send NAKs to A, causing A to
367initiate a key exchange. However if A and B were already in the
368middle of a key exchange then A will not want to try another one until
369the first one has timed out ("setup-time" x "setup-retries") and then
370the key exchange retry timeout ("wait-time") has elapsed.
371
372However if B's setup has timed out, B would be willing to participate
373in a key exchange initiated by A, if A could be induced to do so.
374This is the purpose of the PROD packet.
375
376We send no more PRODs than we would want to send data packets, to
377avoid a traffic amplification attack. We also send them only in state
378WAIT, as in other states we wouldn't respond favourably. And we only
379honour them if we don't already have a key.
380
381With PROD, the period of broken communication due to a key exchange
382interrupted by a restart is limited to the key exchange total
383retransmission timeout, rather than also including the key exchange
384retry timeout.