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