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