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