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 |
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 |
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" |
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 |
fa54fe1e |
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).) |
c65df279 |
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" |
fa54fe1e |
481 | Read ASCII-armoured input. This is equivalent to specifying |
c65df279 |
482 | .BR "\-f pem" . |
483 | The variant spelling |
484 | .B "\-\-armor" |
485 | is also accepted. |
486 | .TP |
fa54fe1e |
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 |
c65df279 |
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 |
fa54fe1e |
514 | standard output. Output lines begin with a keyword: |
c65df279 |
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 |
fa54fe1e |
530 | standard output. |
c65df279 |
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! |
fa54fe1e |
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 |
c65df279 |
546 | .B catcrypt decrypt |
fa54fe1e |
547 | exits successfully. |
c65df279 |
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 |
aaa2361e |
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. |
c65df279 |
675 | .PP |
676 | That's it. Nothing terribly controversial, really. |
677 | .SH "SEE ALSO" |
678 | .BR key (1), |
fa54fe1e |
679 | .BR catsign (1), |
c65df279 |
680 | .BR dsig (1), |
681 | .BR hashsum (1), |
682 | .BR keyring (5). |
683 | .SH AUTHOR |
684 | Mark Wooding, <mdw@nsict.org> |