chiark / gitweb /
progs/cc-kem.c: Add `naclbox' crypto transform.
[catacomb] / progs / catcrypt.1
CommitLineData
c65df279 1.\" -*-nroff-*-
2.de VS
3.sp 1
4.RS
5.nf
6.ft B
7..
8.de VE
9.ft R
10.fi
11.RE
12.sp 1
13..
14.ie t \{\
15. if \n(.g \{\
16. fam P
17. \}
18.\}
19.de hP
20.IP
21.ft B
22\h'-\w'\\$1\ 'u'\\$1\ \c
23.ft P
24..
25.ie t .ds o \(bu
26.el .ds o o
27.TH catcrypt 1 "30 September 2004" "Straylight/Edgeware" "Catacomb cryptographic library"
28.SH NAME
29catcrypt \- encrypt and decrypt messages
30.SH SYNOPSIS
31.B catcrypt
32.RB [ \-k
33.IR keyring ]
34.I command
35.PP
36where
37.I command
38is one of:
39.PP
40.B help
41.RI [ command ...]
42.br
43.B show
44.RI [ item ...]
45.br
46.B encrypt
cd6eca43 47.RB [ \-apC ]
c65df279 48.RB [ \-k
49.IR tag ]
50.RB [ \-f
51.IR format ]
52.RB [ \-o
53.IR output ]
54.RI [ file ]
55.br
56.B decrypt
cd6eca43 57.RB [ \-apqvC ]
c65df279 58.RB [ \-f
59.IR format ]
60.RB [ \-o
61.IR output ]
62.RI [ file ]
63.br
64.B encode
cd6eca43 65.RB [ \-p ]
c65df279 66.RB [ \-f
67.IR format ]
68.RB [ \-b
69.IR boundary ]
70.RB [ \-o
71.IR output ]
72.RI [ file ]
73.br
fa54fe1e 74.B decode
cd6eca43 75.RB [ \-p ]
c65df279 76.RB [ \-f
77.IR format ]
78.RB [ \-b
79.IR boundary ]
80.RB [ \-o
81.IR output ]
82.RI [ file ]
83.SH "DESCRIPTION"
84The
85.B catcrypt
86command encrypts and decrypts messages. It also works as a simple PEM
87encoder and decoder. It provides a number of subcommands, by which the
88various operations may be carried out.
89.SS "Global options"
90Before the command name,
91.I "global options"
92may be given. The following global options are supported:
93.TP
94.BR "\-h, \-\-help " [ \fIcommand ...]
95Writes a brief summary of
96.BR catcrypt 's
97various options to standard output, and returns a successful exit
98status. With command names, gives help on those commands.
99.TP
100.B "\-v, \-\-version"
101Writes the program's version number to standard output, and returns a
102successful exit status.
103.TP
104.B "\-u, \-\-usage"
105Writes a very terse command line summary to standard output, and returns
106a successful exit status.
107.TP
108.BI "\-k, \-\-keyring " file
109Names the keyring file which
110.B key
111is to process. The default keyring, used if this option doesn't specify
112one, is the file named
113.B keyring
114in the current directory. See
115.BR key (1)
116and
117.BR keyring (5)
118for more details about keyring files.
119.SH "KEY SETUP"
120Algorithms to be used with a particular key are described by attributes
121on the key, or its type. The
122.B catcrypt
fa54fe1e 123command deals with both signing and key-encapsulation keys. (Note that
124.B catcrypt
45c0fd36 125uses signing keys in the same way as
fa54fe1e 126.BR catsign (1).)
c65df279 127.SS "Key-encapsulation keys"
128(Key encapsulation is a means of transmitting a short, known, random
129secret to a recipient. It differs from encryption in technical ways
130which are largely uninteresting at this point.)
131.PP
132A
133.I kemalgspec
134has the syntax
135.IR kem \c
136.RB [ / \c
66ff643c
MW
137.IR bulk \c
138.RB [ \- \c
139.IR cipher ] \c
140.RB [ / \c
141.IR hash ]]
142or
143.IR kem \c
144.RB [ / \c
c65df279 145.IR cipher \c
146.RB [ / \c
147.IR hash ]].
148If a
149.B kem
150attribute is present on the key, then it must have this form; otherwise,
151the key's type must have the form
152.BR cckem- \c
153.IR kemalgspec .
154Algorithm selections are taken from appropriately-named attributes, or,
155failing that, from the
156.IR kemalgspec .
157.PP
158The key-encapsulation mechanism is chosen according to the setting of
159.I kem
160as follows. Run
161.B catcrypt show kem
162for a list of supported KEMs.
163.TP
164.B rsa
165This is Shoup's RSA-KEM (formerly Simple RSA); see
166.I
167A proposal for an ISO standard for public key encryption (version 2.0)
168available at
169.BR http://eprint.iacr.org/2000/060/ .
170Use the
171.B rsa
172algorithm of the
173.B key add
174command (see
175.BR key (1))
176to generate the key.
177.TP
178.B dh
179This is standard Diffie-Hellman key exchange, hashing the resulting
180shared secret to form the key, as used in, e.g., DLIES (P1363a).
181Use the
182.B dh
183algorithm of the
184.B key add
185command, preferably with the
186.B \-LS
187options, to generate the key.
188.TP
189.B ec
190This is the elliptic-curve analogue of
b98200ad 191.BR dh .
192Use the
c65df279 193.B ec
194algorithm of the
195.BR key (1))
196command to generate the key.
02dfbd5b
MW
197.TP
198.B symm
199This is a simple symmetric encapsulation scheme. It works by hashing a
200binary key with a randomly-generated salt. Use the
201.B binary
202algorithm of the
203.B key add
204command (see
205.BR key (1))
206to generate the key.
c65df279 207.PP
66ff643c
MW
208The bulk crypto transform is chosen based on the
209.B bulk
210attribute on the key, or, failing that,
211from the
212.I bulk
213stated in the
214.IR kemalgspec .
215Run
216.B catcrypt show bulk
217for a list of supported bulk crypto transforms.
218.TP
219.B gencomp
220A generic composition of
221a cipher secure against chosen-plaintext attack,
222and a message authentication code.
223Makes use of
224.B cipher
225and
226.B mac
227attributes.
228This is the default transform.
d9d419b0
MW
229.TP
230.B naclbox
231Use Salsa20 or ChaCha and Poly1305 to secure the bulk data.
232This is nearly the same as the NaCl
233.B crypto_secretbox
234construction,
235except that
236.B catcrypt
237uses Salsa20 or ChaCha rather than XSalsa20,
238because it doesn't need the latter's extended nonce.
239The
240.B cipher
241attribute may be set to one of
242.BR salsa20 ,
243.BR salsa20/12 ,
244.BR salsa20/8 ,
245.BR chacha20 ,
246.BR chacha12 ,
247or
248.BR chacha8 ;
249the default is
250.BR salsa20 .
66ff643c 251.PP
c65df279 252As well as the KEM itself, a number of supporting algorithms are used.
253These are taken from appropriately named attributes on the key or,
254failing that, derived from other attributes as described below.
255.TP
256.B cipher
66ff643c
MW
257This is the symmetric encryption algorithm
258used by the bulk data transform.
259If there is no
c65df279 260.B cipher
261attribute then the
66ff643c 262.I bulk
c65df279 263in the
264.I kemalgspec
265is used; if that it absent, then the default of
266.B blowfish-cbc
267is used. Run
268.B catcrypt show cipher
269for a list of supported symmetric encryption algorithms.
270.TP
271.B hash
272This is the hash function used to distil entropy from the shared secret
273constructed by the raw KEM. If there is no
274.B hash
275attribute then the
276.I hash
277in the
b98200ad 278.I kemalgspec
279is used; if that is absent then the default of
c65df279 280.B rmd160
281is used. Run
282.B catcrypt show hash
283for a list of supported symmetric encryption algorithms.
284.TP
285.B mac
66ff643c
MW
286This is the message authentication algorithm
287used by the
288.B gencomp
289bulk data transform
290to ensure integrity of the encrypted message and
291defend against chosen-ciphertext attacks.
292If there is no
c65df279 293.B mac
294attribute then
295.IB hash -hmac
296is chosen as a default. Run
297.B catcrypt show mac
298for a list of supported message authentication algorithms.
299.TP
300.B kdf
301This is the key derivation function used to stretch the hashed shared
302secret to a sufficient length to select symmetric encryption and
303authentication keys, initialization vectors and other necessary
304pseudorandom quantities. If there is no
305.B kdf
306attribute then
307.IB hash -mgf
308is chosen as a default. Run
309.B catcrypt show kdf
310for a list of supported key derivation functions.
311.B Caution!
312Not all supported functions have the required security features: don't
313override the default choice unless you know what you're doing.
314.SS "Signing keys"
315A
316.I sigalgspec
317has the form
318.IR sig \c
319.RB [ / \c
320.IR hash ].
321If a
322.B sig
323attribute is present on the key, then it must have this form; otherwise,
324the key's type must have the form
325.BI ccsig- \c
326.IR sigalgspec .
327Algorithm selections are taken from appropriately-named attributes, or,
328failing that, from the
329.IR sigalgspec .
330.PP
331The signature algorithm is chosen according to the setting of
332.I sig
333as follows. Run
334.B catcrypt show sig
335for a list of supported signature algorithms.
336.TP
337.B rsapkcs1
338This is almost the same as the RSASSA-PKCS1-v1_5 algorithm described in
339RFC3447; the difference is that the hash is left bare rather than being
45c0fd36 340wrapped in a DER-encoded
c65df279 341.B DigestInfo
342structure. This doesn't affect security since the key can only be used
343with the one hash function anyway, and dropping the DER wrapping permits
344rapid adoption of new hash functions. Regardless, use of this algorithm
345is not recommended, since the padding method has been shown vulnerable
346to attack. Use the
347.B rsa
348algorithm of the
349.B key add
350command (see
351.BR key (1))
352to generate the key.
353.TP
354.B rsapss
355This is the RSASSA-PSS algorithm described in RFC3447. It is the
356preferred RSA-based signature scheme. Use the
357.B rsa
358algorithm of the
359.B key add
360command (see
361.BR key (1))
362to generate the key.
363.TP
364.B dsa
45c0fd36 365This is the DSA algorithm described in FIPS180-1 and FIPS180-2. Use the
c65df279 366.B dsa
367algorithm of the
368.B key add
369command (see
370.BR key (1))
371to generate the key.
372.TP
373.B ecdsa
374This is the ECDSA algorithm described in ANSI X9.62 and FIPS180-2. Use
375the
376.B ec
377algorithm of the
378.B key add
379command (see
380.BR key (1))
381to generate the key.
382.TP
383.B kcdsa
384This is the revised KCDSA (Korean Certificate-based Digital Signature
385Algorithm) described in
386.I The Revised Version of KCDSA
387.RB ( http://dasan.sejong.ac.kr/~chlim/pub/kcdsa1.ps ).
388Use the
389.B dh
390algorithm of the
391.B key add
392command with the
393.B \-LS
394options (see
395.BR key (1))
396to generate the key.
397.TP
398.B eckcdsa
399This is an unofficial elliptic-curve analogue of the KCDSA algorithm.
400Use the
401.B ec
402algorithm of the
403.B key add
404command (see
405.BR key (1))
406to generate the key.
02dfbd5b
MW
407.TP
408.B mac
409This uses a symmetric message-authentication algorithm rather than a
410digital signature. The precise message-authentication scheme used is
411determined by the
412.B mac
413attribute on the key, which defaults to
414.IB hash -hmac
415if unspecified. Use the
416.B binary
417algorithm of the
418.B key add
419command (see
420.BR key (1))
421to generate the key.
c65df279 422.PP
423As well as the signature algorithm itself, a hash function is used.
424This is taken from the
425.B hash
426attribute on the key, or, failing that, from the
427.I hash
428specified in the
429.IR sigalgspec ,
430or, if that is absent, determined by the signature algorithm as follows.
431.hP \*o
432For
433.BR rsapkcs1 ,
434.BR rsapss ,
435.BR dsa ,
436and
437.BR ecdsa ,
438the default hash function is
439.BR sha .
440.hP \*o
441For
45c0fd36 442.BR kcdsa
c65df279 443and
444.BR eckcdsa ,
445the default hash function is
446.BR has160 .
447.PP
448Run
449.B catcrypt show hash
450for a list of supported hash functions.
451.SH "ENCODINGS"
452Two encodings for the ciphertext are supported.
453.TP
454.B binary
455The raw format, which has the benefit of being smaller, but needs to be
456attached to mail messages and generally handled with care.
457.TP
458.B pem
459PEM-encapsulated Base-64 encoded text. This format can be included
460directly in email and picked out again automatically; but there is a
4614-to-3 data expansion as a result.
462.SH "COMMAND REFERENCE"
463.SS help
464The
465.B help
466command behaves exactly as the
467.B \-\-help
468option. With no arguments, it shows an overview of
469.BR catcrypt 's
470options; with arguments, it describes the named subcommands.
471.SS show
472The
473.B show
474command prints various lists of tokens understood by
475.BR catcrypt .
476With no arguments, it prints all of the lists; with arguments, it prints
477just the named lists, in order. The recognized lists can be enumerated
478using the
479.VS
480catcrypt show list
481.VE
482command. The lists are as follows.
483.TP
484.B list
485The lists which can be enumerated by the
486.B show
487command.
488.TP
489.B kem
490The key-encapsulation algorithms which can be used in a
491key-encapsulation key's
492.B kem
493attribute.
494.TP
495.B cipher
496The symmetric encryption algorithms which can be used in a
497key-encapsulation key's
498.B cipher
499attribute.
500.TP
501.B mac
502The message authentication algorithms which can be used in a
503key-encapsulation key's
504.B mac
505attribute.
506.TP
507.B sig
508The signature algorithms which can be used in a signing key's
509.B sig
510attribute.
511.TP
512.B hash
513The hash functions which can be used in a key's
514.B hash
515attribute.
516.TP
517.B enc
45c0fd36 518The encodings which can be applied to encrypted messages; see
c65df279 519.B ENCODINGS
520above.
521.SS encrypt
522The
523.B encrypt
524command encrypts a file and writes out the appropriately-encoded
525ciphertext. By default, it reads from standard input and writes to
526standard output. If a filename argument is given, this file is read
527instead (as binary data).
528.PP
529The following options are recognized.
530.TP
531.B "\-a, \-\-armour"
532Produce ASCII-armoured output. This is equivalent to specifying
533.BR "\-f pem" .
534The variant spelling
535.B "\-\-armor"
536is also accepted.
537.TP
538.BI "\-f, \-\-format " format
539Produce output encoded according to
540.IR format .
541.TP
542.BI "\-k, \-\-key " tag
543Use the key-encapsulation key named
544.I tag
545in the current keyring; the default key is
546.BR ccrypt .
547.TP
cd6eca43
MW
548.BI "\-p, \-\-progress"
549Write a progress meter to standard error while processing large files.
550.TP
c65df279 551.BI "\-s, \-\-sign-key " tag
552Use the signature key named
553.I tag
554in the current keyring; the default is not to sign the ciphertext.
555.TP
556.BI "\-o, \-\-ouptut " file
557Write output to
558.I file
559rather than to standard output.
946c3f72 560.TP
561.B "\-C, \-\-nocheck"
562Don't check the public key for validity. This makes encryption go much
563faster, but at the risk of using a duff key.
c65df279 564.SS decrypt
565The
566.B decrypt
567command decrypts a ciphertext and writes out the plaintext. By default,
568it reads from standard input and writes to standard output. If a
569filename argument is given, this file is read instead.
570.PP
571The following options are recognized.
572.TP
573.B "\-a, \-\-armour"
fa54fe1e 574Read ASCII-armoured input. This is equivalent to specifying
c65df279 575.BR "\-f pem" .
576The variant spelling
577.B "\-\-armor"
578is also accepted.
579.TP
fa54fe1e 580.B "\-b, \-\-buffer"
581Buffer plaintext data until we're sure we've got it all. This is forced
582on if output is to stdout, but is always available as an option.
583.TP
c65df279 584.BI "\-f, \-\-format " format
585Read input encoded according to
586.IR format .
587.TP
cd6eca43
MW
588.BI "\-p, \-\-progress"
589Write a progress meter to standard error while processing large files.
590.TP
c65df279 591.B "\-v, \-\-verbose"
592Produce more verbose messages. See below for the messages produced
593during decryption. The default verbosity level is 1. (Currently this
594is the most verbose setting. This might not be the case always.)
595.TP
596.B "\-q, \-\-quiet"
597Produce fewer messages.
598.TP
599.BI "\-o, \-\-output " file
600Write output to
601.I file
602instead of to standard output. The file is written in binary mode.
603Fixing line-end conventions is your problem; there are lots of good
604tools for dealing with it.
946c3f72 605.TP
606.B "\-C, \-\-nocheck"
607Don't check the private key for validity. This makes decryption go much
608faster, but at the risk of using a duff key, and possibly leaking
609information about the private key.
c65df279 610.PP
611Output is written to standard output in a machine-readable format.
612Major problems cause the program to write a diagnostic to standard error
613and exit nonzero as usual. The quantity of output varies depending on
614the verbosity level and whether the plaintext is also being written to
fa54fe1e 615standard output. Output lines begin with a keyword:
c65df279 616.TP
617.BI "FAIL " reason
618An error prevented decryption. The program will exit nonzero.
619.TP
620.BI "WARN " reason
621.B catcrypt
622encountered a situation which may or may not invalidate the decryption.
45c0fd36 623.TP
c65df279 624.BI "OK " message
625Decryption was successful. This is only produced if main output is
626being sent somewhere other than standard output.
627.TP
628.B "DATA"
629The plaintext follows, starting just after the next newline character or
b98200ad 630sequence. This is only produced if main output is also being sent to
fa54fe1e 631standard output.
c65df279 632.TP
633.BI "INFO " note
634Any other information.
635.PP
636The information written at the various verbosity levels is as follows.
637.hP 0.
638No output. Watch the exit status.
639.hP 1.
640All messages.
641.PP
642.B Warning!
fa54fe1e 643All output written has been checked for authenticity. However, output
77e4471a 644can fail midway through for many reasons, and the resulting message may
45c0fd36 645therefore be truncated. Don't rely on the output being complete until
4224d0b9 646.B OK
647is printed or
c65df279 648.B catcrypt decrypt
fa54fe1e 649exits successfully.
c65df279 650.SS "encode"
651The
652.B encode
653command encodes an input file according to one of the encodings
654described above in
655.BR ENCODINGS .
45c0fd36 656The input is read from the
c65df279 657.I file
658given on the command line, or from standard input if none is specified.
659Options provided are:
660.TP
cd6eca43
MW
661.BI "\-p, \-\-progress"
662Write a progress meter to standard error while processing large files.
663.TP
c65df279 664.BI "\-f, \-\-format " format
665Produce output in
666.IR format .
667Run
668.B catcrypt show enc
669for a list of encoding formats.
670.TP
671.BI "\-b, \-\-boundary " label
672Set the PEM boundary string to
673.IR label ;
674i.e., assuming we're encoding in PEM format, the output will have
675.BI "\-\-\-\-\-BEGIN " label "\-\-\-\-\-"
676at the top and
677.BI "\-\-\-\-\-END " label "\-\-\-\-\-"
678at the bottom. The default
679.I label
680is
681.BR MESSAGE .
682.TP
683.BI "\-o, \-\-output " file
684Write output to
685.I file
686instead of to standard output.
687.SS "decode"
688The
689.B decode
690command decodes an input file encoded according to one of the encodings
691described above in
692.BR ENCODINGS .
45c0fd36 693The input is read from the
c65df279 694.I file
695given on the command line, or from standard input if none is specified.
696Options provided are:
697.TP
698.BI "\-f, \-\-format " format
699Decode input in
700.IR format .
701Run
702.B catcrypt show enc
703for a list of encoding formats.
704.TP
705.BI "\-b, \-\-boundary " label
706Set the PEM boundary string to
707.IR label ;
708i.e., assuming we're encoding in PEM format, start processing input
709between
710.BI "\-\-\-\-\-BEGIN " label "\-\-\-\-\-"
45c0fd36 711and
c65df279 712.BI "\-\-\-\-\-END " label "\-\-\-\-\-"
713lines. Without this option,
714.B catcrypt
715will start reading at the first plausible boundary string, and continue
716processing until it reaches the matching end boundary.
717.TP
cd6eca43
MW
718.BI "\-p, \-\-progress"
719Write a progress meter to standard error while processing large files.
720.TP
c65df279 721.BI "\-o, \-\-output " file
722Write output to
723.I file
724instead of to standard output.
725.SH "SECURITY PROPERTIES"
726Assuming the security of the underlying primitive algorithms, the
727following security properties of the ciphertext hold.
728.hP \*o
729An adversary given the public key-encapsulation key and capable of
730requesting encryption of arbitrary plaintexts of his own devising is
731unable to decide whether he is given ciphertexts corresponding to his
732chosen plaintexts or random plaintexts of the same length. This holds
733even if the adversary is permitted to request decryption of any
734ciphertext other than one produced as a result of an encryption request.
735This property is called
736.BR IND-CCA2 .
737.hP \*o
738An adversary given the public key-encapsulation and verification keys,
739and capable of requesting encryption of arbitrary plaintext of his own
740devising is unable to produce a new ciphertext which will be accepted as
741genuine. This property is called
742.BR INT-CTXT .
743.hP \*o
744An adversary given the public key-encapsulation and verification keys,
745and capable of requesting encryption of arbitrary plaintext of his own
746devising is unable to decide whether the ciphertexts he is given are
747correctly signed. This property doesn't seem to have a name.
748.PP
749Not all is rosy. If you leak intermediate values during decryption then
750an adversary can construct a new correctly-signed message. Don't do
751that, then \(en leaking intermediate values often voids security
752warranties. But it does avoid the usual problem with separate signing
753and encryption that a careful leak by the recipient can produce evidence
754that you signed some incriminating message.
4224d0b9 755.PP
756Note that
757.BR catcrypt 's
758signatures do
759.I not
760provide `non-repudiation' in any useful way. This is deliberate: the
761purpose of signing is to convince the recipient of the sender's
762identity, rather than to allow the recipient to persuade anyone else.
763Indeed, given an encrypted and signed message, the recipient can
764straightforwardly construct a new message, apparently from the same
765sender, and whose signature still verifies, but with arbitrarily chosen
766content.
c65df279 767.SH "CRYPTOGRAPHIC THEORY"
768Encryption of a message proceeds as follows.
769.hP 0.
770Emit a header packet containing the key-ids for the key-encapsulation
771key, and signature key if any.
772.hP 1.
773Use the KEM to produce a public value and a shared secret the recipient
774will be able to extract from the public value using his private key.
775Emit a packet containing the public value.
776.hP 2.
777Hash the shared secret. Use the KDF to produce a pseudorandom keystream
778of indefinite length.
779.hP 3.
780Use the first bits of the keystream to key a symmetric encryption
781scheme; use the next bits to key a message authentication code.
782.hP 4.
783If we're signing the message then extract 1024 bytes from the keystream,
f9e51332 784sign the header and public value, and the keystream bytes; emit a packet
785containing the signature. The signature packet doesn't contain the
786signed message, just the signature.
c65df279 787.hP 5.
788Split the message into blocks. For each block, pick a random IV from
789the keystream, encrypt the block and emit a packet containing the
aaa2361e 790IV, ciphertext, and a MAC tag over the ciphertext and a sequence number.
791.hP 6.
792The last chunk is the encryption of an empty plaintext block. No
793previous plaintext block is empty. This lets us determine the
794difference between a complete file and one that's been maliciously
795truncated.
c65df279 796.PP
797That's it. Nothing terribly controversial, really.
798.SH "SEE ALSO"
799.BR key (1),
fa54fe1e 800.BR catsign (1),
c65df279 801.BR dsig (1),
802.BR hashsum (1),
803.BR keyring (5).
804.SH AUTHOR
f387fcb1 805Mark Wooding, <mdw@distorted.org.uk>