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