server/bulkcrypto.c: Fix printf argument-type bug (64-bit specific).
[tripe] / server / tripe.8.in
CommitLineData
74eb47db 1.\" -*-nroff-*-
2.\".
fc916a09
MW
3.\" Manual for the server
4.\"
5.\" (c) 2008 Straylight/Edgeware
6.\"
7.
8.\"----- Licensing notice ---------------------------------------------------
9.\"
10.\" This file is part of Trivial IP Encryption (TrIPE).
11.\"
11ad66c2
MW
12.\" TrIPE is free software: you can redistribute it and/or modify it under
13.\" the terms of the GNU General Public License as published by the Free
14.\" Software Foundation; either version 3 of the License, or (at your
15.\" option) any later version.
fc916a09 16.\"
11ad66c2
MW
17.\" TrIPE is distributed in the hope that it will be useful, but WITHOUT
18.\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
19.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
20.\" for more details.
fc916a09
MW
21.\"
22.\" You should have received a copy of the GNU General Public License
11ad66c2 23.\" along with TrIPE. If not, see <https://www.gnu.org/licenses/>.
fc916a09
MW
24.
25.\"--------------------------------------------------------------------------
e99aedcf 26.so ../common/defs.man \" @@@PRE@@@
fc916a09
MW
27.
28.\"--------------------------------------------------------------------------
0647ba7c 29.TH tripe 8tripe "10 February 2001" "Straylight/Edgeware" "TrIPE: Trivial IP Encryption"
fc916a09
MW
30.
31.\"--------------------------------------------------------------------------
74eb47db 32.SH "NAME"
fc916a09 33.
74eb47db 34tripe \- a simple VPN daemon
fc916a09
MW
35.
36.\"--------------------------------------------------------------------------
74eb47db 37.SH "SYNOPSIS"
fc916a09 38.
74eb47db 39.B tripe
46dde080 40.RB [ \-DF ]
74eb47db 41.RB [ \-d
42.IR dir ]
d13e5724 43.RB [ \-b
44.IR addr ]
33ced0d3 45.RB [ \-p
46.IR port ]
42da2a58 47.RB [ \-n
48.IR tunnel ]
d13e5724 49.br
85b1ebd6 50 \c
33ced0d3 51.RB [ \-U
52.IR user ]
53.RB [ \-G
54.IR group ]
d13e5724 55.RB [ \-a
56.IR socket ]
a9279e37
MW
57.RB [ \-m
58.IR mode ]
d13e5724 59.RB [ \-T
60.IR trace-opts ]
74eb47db 61.br
85b1ebd6 62 \c
74eb47db 63.RB [ \-k
64.IR priv-keyring ]
65.RB [ \-K
66.IR pub-keyring ]
67.RB [ \-t
68.IR key-tag ]
fc916a09
MW
69.
70.\"--------------------------------------------------------------------------
74eb47db 71.SH "DESCRIPTION"
fc916a09 72.
74eb47db 73The
74.B tripe
75program is a server which can provide strong IP-level encryption and
1a19f865 76authentication between co-operating hosts. The program and its protocol
77are deliberately very simple, to make analysing them easy and to help
78build trust rapidly in the system.
74eb47db 79.SS "Overview"
80The
81.B tripe
82server manages a number of secure connections to other `peer' hosts.
83Each daemon is given a private key of its own, and a file of public keys
84for the peers with which it is meant to communicate. It is responsible
85for negotiating sets of symmetric keys with its peers, and for
86encrypting, encapsulating and sending IP packets to its peers, and
87decrypting, checking and de-encapsulating packets it receives from
88them.
89.PP
90When the server starts, it creates a Unix-domain socket on which it
91listens for administration commands. It also logs warnings and
92diagnostic information to the programs connected to its admin socket.
93Clients connected to the socket can add new peers, and remove or find
94out about existing peers. The textual protocol used to give the
95.B tripe
96server admin commands is described in
97.BR tripe\-admin (5).
98A client program
99.BR tripectl (1)
100is provided to allow commands to be sent to the server either
101interactively or by simple scripts.
102.SS "Command-line arguments"
103If not given any command-line arguments,
104.B tripe
105will initialize by following these steps:
1a19f865 106.hP 1.
107It sets the directory named by the
108.B TRIPEDIR
109environment variable (or
f7b5d108 110.B "\*(/c"
1a19f865 111if the variable is unset) as the current directory.
112.hP 2.
74eb47db 113It acquires a UDP socket with an arbitrary kernel-selected port number.
114It will use this socket to send and receive all communications with its
115peer servers. The port chosen may be discovered by means of the
116.B PORT
117admin command (see
118.BR tripe\-admin (5)).
1a19f865 119.hP 3.
74eb47db 120It loads the private key with the tag or type name
fc5f4823
MW
121.B tripe
122(or, failing that,
74eb47db 123.B tripe\-dh
fc5f4823 124for backwards compatibility reasons) from the Catacomb-format file
74eb47db 125.BR keyring ,
126and loads the file
127.B keyring.pub
128ready for extracting the public keys of peers as they're introduced.
129(The format of these files is described in
130.BR keyring (5).
131They are maintained using the program
132.BR key (1)
133provided with the Catacomb distribution.)
1a19f865 134.hP 4.
74eb47db 135It creates and listens to the Unix-domain socket
136.BR tripesock .
137.PP
138Following this, the server enters its main loop, accepting admin
139connections and obeying any administrative commands, and communicating
140with peers. It also treats its standard input and standard output
141streams as an admin connection, reading commands from standard input and
33ced0d3 142writing responses and diagnostics messages to standard output. Finally,
143it will reload keys from its keyring files if it notices that they've
144changed (it checks inode number and modification time) \- there's no
145need to send a signal.
74eb47db 146.PP
147Much of this behaviour may be altered by giving
148.B tripe
149suitable command-line options:
150.TP
151.B "\-h, \-\-help"
152Writes a brief description of the command-line options available to
153standard output and exits with status 0.
154.TP
155.B "\-v, \-\-version"
156Writes
157.BR tripe 's
158version number to standard output and exits with status 0.
159.TP
160.B "\-u, \-\-usage"
161Writes a brief usage summary to standard output and exits with status 0.
162.TP
42da2a58 163.B "\-\-tunnels"
164Writes to standard output a list of the configured tunnel drivers, one
165per line, and exits with status 0. This is intended for the use of the
3cdc3f3a 166start-up script, so that it can check that it will actually work.
167.TP
74eb47db 168.B "\-D, \-\-daemon"
169Dissociates from its terminal and starts running in the background after
170completing the initialization procedure described above. If running as
171a daemon,
172.B tripe
173will not read commands from standard input or write diagnostics to
174standard output. A better way to start
175.B tripe
176in the background is with
177.BR tripectl (1).
178.TP
46dde080
MW
179.B "\-F, \-\-foreground"
180Runs the server in the `foreground'; i.e.,
181.B tripe
182will quit if it sees end-of-file on its standard input. This is
183incompatible with
184.BR \-D .
185.TP
74eb47db 186.BI "\-d, \-\-directory=" dir
187Makes
188.I dir
797cf76b
MW
189the current directory. The default directory to change to is given by
190the environment variable
191.BR TRIPEDIR ;
192if that's not specified, a default default of
f7b5d108 193.B "\*(/c"
797cf76b 194is used. Give a current directory of
74eb47db 195.B .
196if you don't want it to change directory at all.
197.TP
d13e5724 198.BI "\-b, \-\-bind-address="addr
199Bind the UDP socket to IP address
200.I addr
201rather than the default of
202.BR INADDR_ANY .
203This is useful if your main globally-routable IP address is one you want
204to tunnel through the VPN.
205.TP
74eb47db 206.BI "\-p, \-\-port=" port
207Use the specified UDP port for all communications with peers, rather
208than an arbitarary kernel-assigned port.
209.TP
42da2a58 210.BI "\-n, \-\-tunnel=" tunnel
211Use the specified tunnel driver for new peers by default.
212.TP
33ced0d3 213.BI "\-U, \-\-setuid=" user
214Set uid to that of
215.I user
216(either a user name or integer uid) after initialization. Also set gid
217to
218.IR user 's
219primary group, unless overridden by a
220.B \-G
aa2405e8
MW
221option. The selected user (and group) will also be the owner of the
222administration socket.
33ced0d3 223.TP
224.BI "\-G, \-\-setgid=" group
ec9b8aed
MW
225If the current effective uid is zero (i.e., the daemon was invoked as
226.BR root )
227then set gid to that of
33ced0d3 228.I group
ec9b8aed
MW
229(either a group name or integer gid) after initialization. In any
230event, arrange hat the administration socket be owned by the given
231.IR group .
33ced0d3 232.TP
74eb47db 233.BI "\-k, \-\-priv\-keyring=" file
234Reads the private key from
235.I file
236rather than the default
237.BR keyring .
238.TP
239.BI "\-K, \-\-pub\-keyring=" file
240Reads public keys from
241.I file
242rather than the default
243.BR keyring.pub .
244This can be the same as the private keyring, but that's not recommended.
245.TP
246.BI "\-t, \-\-tag=" tag
247Uses the private key whose tag or type is
248.I tag
249rather than the default
fc5f4823
MW
250.B tripe
251or
74eb47db 252.BR tripe\-dh .
253.TP
254.BI "\-a, \-\-admin\-socket=" socket
255Accept admin connections to a Unix-domain socket named
797cf76b
MW
256.IR socket .
257The default socket, if this option isn't specified, is given by the
258environment variable
259.BR TRIPESOCK ;
260if that's not set either, then a default default of
f7b5d108 261.B "\*(/s/tripesock"
797cf76b 262is used instead.
74eb47db 263.TP
a9279e37
MW
264.BI "\-m, \-\-admin\-perms=" mode
265Permissions (as an octal number) to set on the administration socket. The
266default is 600, which allows only the socket owner. Setting 660 allows
267members of the
268.I group
269configured through the
270.B \-G
271option to connect to the socket, which may be useful. Allowing world access
272is a terrible idea.
273.TP
74eb47db 274.BI "\-T, \-\-trace=" trace-opts
275Allows the enabling or disabling of various internal diagnostics. See
276below for the list of options.
fc5f4823 277.SS "Key exchange group types"
d6623498 278The
279.B tripe
fc5f4823 280server uses Diffie\(en\&Hellman key exchange to agree the symmetric keys
b86e6f3f 281used for bulk data transfer.
fc5f4823
MW
282.PP
283The server works out which it should be doing based on the key's
284.B kx-group
b86e6f3f 285attribute.
fc5f4823
MW
286If this attribute isn't present, then the key's type is examined: if
287it's of the form
1a0b1e9f 288.BI tripe\- group
fc5f4823
MW
289then the
290.I group
291is used. If no group is specified,
292.B dh
293is used as a fallback.
b86e6f3f
MW
294The following groups are defined.
295.TP
296.B dh
297.RS
298Use traditional Diffie\(enHellman in a
299.IR "Schnorr group" :
300a prime-order subgroup of the multiplicative group of
301a finite field; this is the usual
302.I g\*(ssx\*(se
303mod
304.I p
305kind of Diffie\(en\&Hellman.
fc5f4823
MW
306.PP
307To create usual Schnorr-group keys, say something like
74eb47db 308.VS
fc5f4823
MW
309key add \-adh-param \-LS \-b3072 \-B256 \e
310 \-eforever \-tparam tripe\-param kx-group=dh
74eb47db 311.VE
fc5f4823 312to construct a parameters key; and create the private keys by
d6623498 313.VS
314key add \-adh \-pparam \-talice \e
fc5f4823 315 \-e"now + 1 year" tripe
d6623498 316.VE
b86e6f3f
MW
317.RE
318.sv -1
319.TP
320.B ec
321.RS
322Use elliptic curve Diffie\(enHellman.
323An elliptic curve group is a prime-order
324subgroup of the abelian group of
325.BR K -rational
326points on an elliptic curve defined over a finite field
327.BR K .
328.PP
329Given current public knowledge, elliptic curves can provide similar or
330better security to systems based on integer discrete log problems,
331faster, and with less transmitted data. It's a matter of controversy
332whether this will continue to be the case. The author uses elliptic
333curves.
334.PP
fc5f4823 335To create elliptic curve keys, say something like
d6623498 336.VS
fc5f4823
MW
337key add \-aec\-param \-Cnist-p256 \-eforever \e
338 \-tparam tripe\-param kx-group=ec
52c03a2a 339.VE
340to construct a parameters key, using your preferred elliptic curve in
341the
342.B \-C
343option (see
344.BR key (1)
345for details); and create the private keys by
346.VS
347key add \-aec \-pparam \-talice \e
fc5f4823 348 \-e"now + 1 year" tripe
52c03a2a 349.VE
b86e6f3f 350.RE
26936c83
MW
351.sv -1
352.TP
353.B x25519
354.RS
355Use Bernstein's X25519 Diffie\(enHellman function.
356This is technically a variant on
357the general elliptic curve Diffie\(enHellman
358available through the
359.B ec
360setting,
361but carefully designed and heavily optimized.
362.PP
363To create
364.B x25519
365keys,
366say something like
367.VS
368key add \-aempty \-eforever \e
369 \-tparam tripe\-param kx-group=x25519
370.VE
371to construct a parameters key
372(see
373.BR key (1)
374for details);
375and create the private keys by
376.VS
377key add \-ax25519 \-pparam \-talice \e
378 \-e"now + 1 year" tripe
379.VE
380.RE
381.sv -1
382.TP
383.B x448
384.RS
385Use Hamburg's X448 Diffie\(enHellman function.
386Like
387.B x25519
388above,
389this is technically a variant on
390the general elliptic curve Diffie\(enHellman
391available through the
392.B ec
393setting,
394but carefully designed and heavily optimized.
395.PP
396To create
397.B x448
398keys,
399say something like
400.VS
401key add \-aempty \-eforever \e
402 \-tparam tripe\-param kx-group=x448
403.VE
404to construct a parameters key
405(see
406.BR key (1)
407for details);
408and create the private keys by
409.VS
410key add \-ax448 \-pparam \-talice \e
411 \-e"now + 1 year" tripe
412.VE
413.RE
fc5f4823
MW
414Note that the
415.BR tripe-keys (8)
416program provides a rather more convenient means for generating and
417managing keys for
418.BR tripe .
b5c45da1 419.SS "Using other symmetric algorithms"
420The default symmetric algorithms
421.B tripe
422uses are Blowfish (by Schneier) for symmetric encryption, and RIPEMD-160
423(by Dobbertin, Bosselaers and Preneel) for hashing and as a MAC (in HMAC
424mode, designed by Bellare, Canetti and Krawczyk). These can all be
425overridden by setting attributes on your private key, as follows.
426.TP
a93aacce 427.B bulk
b87bffcb
MW
428Names the bulk-crypto transform to use. See below.
429.TP
430.B blkc
431Names a block cipher, used by some bulk-crypto transforms (e.g.,
a305982d
MW
432.BR iiv ).
433The default is to use the block cipher underlying the chosen
b87bffcb
MW
434.BR cipher ,
435if any.
a93aacce 436.TP
b5c45da1 437.B cipher
438Names the symmetric encryption scheme to use. The default is
439.BR blowfish\-cbc .
440.TP
441.B hash
442Names the hash function to use. The default is
443.BR rmd160 .
444.TP
445.B mac
446Names the message authentication code to use. The name of the MAC may
447be followed by a
448.RB ` / '
449and the desired tag length in bits. The default is
450.IB hash \-hmac
451at half the underlying hash function's output length.
73d383c0
MW
452If the MAC's name contains a
453.RB ` / '
454character,
455e.g.,
456.RB ` sha512/256 ',
457then an
458.I additional
459.RB ` / '
460and the tag size is required to disambiguate,
461so, e.g.,
462one might write
463.RB ` sha512/256/256 '.
b5c45da1 464.TP
465.B mgf
466A `mask-generation function', used in the key-exchange. The default is
467.IB hash \-mgf
468and there's no good reason to change it.
b87bffcb
MW
469.PP
470The available bulk-crypto transforms are as follows.
471.TP
472.B v0
473Originally this was the only transform available. It's a standard
474generic composition of a CPA-secure symmetric encryption scheme with a
475MAC; initialization vectors for symmetric encryption are chosen at
476random and included explicitly in the cryptogram.
477.TP
478.B iiv
479A newer `implicit-IV' transform. Rather than having an explicit random
480IV, the IV is computed from the sequence number using a block cipher.
481This has two advantages over the
482.B v0
483transform. Firstly, it adds less overhead to encrypted messages
484(because the IV no longer needs to be sent explicitly). Secondly, and
485more significantly, the transform is entirely deterministic, so (a) it
486doesn't need the (possibly slow) random number generator, and (b) it
487closes a kleptographic channel, over which a compromised implementation
488could leak secret information to a third party.
de8edc7f
MW
489.TP
490.B naclbox
491A transform based on the NaCl
492.B crypto_secretbox
493transformation.
494The main difference is that NaCl uses XSalsa20,
495while TrIPE uses plain Salsa20 or ChaCha,
496because it doesn't need the larger nonce space.
497You can set the
498.B cipher
499key attribute to one of
500.BR salsa20 ,
501.BR salsa20/12 ,
502.BR salsa20/8 ,
503.BR chacha20 ,
504.BR chacha12 ,
505or
506.B chacha8
507to select the main cipher.
508You can set the
509.B mac
510key attribute to
511.B poly1305
512or
513.B poly1305/128
514but these are the default and no other choice is permitted.
515(This is for forward compatibility,
516in case other MACs and/or tag sizes are allowed later.)
07bdda1f
MW
517.SS "Other key attributes"
518The following attributes can also be set on keys.
519.TP
520.B serialization
521Selects group-element serialization formats.
522The recommended setting is
523.BR constlen ,
524which selects a constant-length encoding when hashing group elements.
525The default,
526for backwards compatibility, is
527.BR v0 ;
528but this is deprecated.
529(The old format uses a variable length format for hashing,
530which can leak information through timing.)
b9066fbb 531.SS "Using SLIP interfaces"
532Though not for the faint of heart, it is possible to get
533.B tripe
534to read and write network packets to a pair of file descriptors using
535SLIP encapsulation. No fancy header compression of any kind is
98fdb08d 536supported.
537.PP
538Two usage modes are supported: a preallocation system, whereby SLIP
539interfaces are created and passed to the
540.B tripe
541server at startup; and a dynamic system, where the server runs a script
542to allocate a new SLIP interface when it needs one. It is possible to
543use a mixture of these two modes, starting
b9066fbb 544.B tripe
98fdb08d 545with a few preallocated interfaces and having it allocate more
546dynamically as it needs them.
547.PP
548The behaviour of
549.BR tripe 's
550SLIP driver is controlled by the
551.B TRIPE_SLIPIF
1f68dfc5 552environment variable. The server will not create SLIP tunnels if this
553variable is not defined. The variable's value is a colon-delimited list
554of preallocated interfaces, followed optionally by the filename of a
555script to run to dynamically allocate more interfaces.
b9066fbb 556.PP
98fdb08d 557A static allocation entry has the form
b9066fbb 558.IR infd [ \c
559.BI , outfd \c
560.RB ] \c
561.BI = \c
98fdb08d 562.IR ifname ,
b9066fbb 563If the
564.I outfd
565is omitted, the same file descriptor is used for input and output.
566.PP
98fdb08d 567The dynamic allocation script must be named by an absolute or relative
e04c2d50 568pathname, beginning with
98fdb08d 569.RB ` / '
570or
571.RB ` . '.
572The server will pass the script an argument, which is the name of the
573peer for which the interface is being created. The script should
574allocate a new SLIP interface (presumably by creating a pty pair),
575configure it appropriately, and write the interface's name to its
576standard output, followed by a newline. It should then read and write
577SLIP packets on its stdin and stdout. The script's stdin will be closed
578when the interface is no longer needed, and the server will attempt to
579send it a
580.B SIGTERM
581signal (though this may fail if the script runs with higher privileges
582than the server).
583.PP
b9066fbb 584The output file descriptor should not block unless it really needs to:
585the
586.B tripe
1f68dfc5 587daemon assumes that it won't, and will get wedged waiting for it to
588accept output.
74eb47db 589.SS "About the name"
590The program's name is
591.BR tripe ,
592all in lower-case. The name of the protocol it uses is `TrIPE', with
593four capital letters and one lower-case. The name stands for `Trivial
594IP Encryption'.
fc916a09
MW
595.
596.\"--------------------------------------------------------------------------
74eb47db 597.SH "BUGS"
fc916a09 598.
74eb47db 599The code hasn't been audited. It may contain security bugs. If you
600find one, please inform the author
601.IR immediately .
fc916a09
MW
602.
603.\"--------------------------------------------------------------------------
74eb47db 604.SH "SEE ALSO"
fc916a09 605.
74eb47db 606.BR key (1),
607.BR tripectl (1),
fc5f4823
MW
608.BR tripe\-admin (5),
609.BR tripe\-keys (8).
74eb47db 610.PP
611.IR "The Trivial IP Encryption Protocol" ,
612.IR "The Wrestlers Protocol" .
fc916a09
MW
613.
614.\"--------------------------------------------------------------------------
74eb47db 615.SH "AUTHOR"
fc916a09 616.
d36eda2a 617Mark Wooding, <mdw@distorted.org.uk>
fc916a09
MW
618.
619.\"----- That's all, folks --------------------------------------------------