22 \h'-\w'\\$1\ 'u'\\$1\ \c
27 .TH catcrypt 1 "30 September 2004" "Straylight/Edgeware" "Catacomb cryptographic library"
29 catcrypt \- encrypt and decrypt messages
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.
90 Before the command name,
92 may be given. The following global options are supported:
94 .BR "\-h, \-\-help " [ \fIcommand ...]
95 Writes a brief summary of
97 various options to standard output, and returns a successful exit
98 status. With command names, gives help on those commands.
100 .B "\-v, \-\-version"
101 Writes the program's version number to standard output, and returns a
102 successful exit status.
105 Writes a very terse command line summary to standard output, and returns
106 a successful exit status.
108 .BI "\-k, \-\-keyring " file
109 Names the keyring file which
111 is to process. The default keyring, used if this option doesn't specify
112 one, is the file named
114 in the current directory. See
118 for more details about keyring files.
120 Algorithms to be used with a particular key are described by attributes
121 on the key, or its type. The
123 command deals with both signing and key-encapsulation keys. (Note that
125 uses signing keys in the same way as
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.)
150 attribute is present on the key, then it must have this form; otherwise,
151 the key's type must have the form
154 Algorithm selections are taken from appropriately-named attributes, or,
155 failing that, from the
158 The key-encapsulation mechanism is chosen according to the setting of
162 for a list of supported KEMs.
165 This is Shoup's RSA-KEM (formerly Simple RSA); see
167 A proposal for an ISO standard for public key encryption (version 2.0)
169 .BR http://eprint.iacr.org/2000/060/ .
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).
185 command, preferably with the
187 options, to generate the key.
190 This is the elliptic-curve analogue of
196 command to generate the key.
199 This is a simple symmetric encapsulation scheme. It works by hashing a
200 binary key with a randomly-generated salt. Use the
209 This is Bernstein's Curve25519, a fast Diffie-Hellman using a specific
221 This is Hamburg's Curve25519, a strong Diffie-Hellman using a specific
232 The bulk crypto transform is chosen based on the
234 attribute on the key, or, failing that,
240 .B catcrypt show bulk
241 for a list of supported bulk crypto transforms.
244 A generic composition of
245 a cipher secure against chosen-plaintext attack,
246 and a message authentication code.
252 This is the default transform.
255 Use Salsa20 or ChaCha and Poly1305 to secure the bulk data.
256 This is nearly the same as the NaCl
261 uses Salsa20 or ChaCha rather than XSalsa20,
262 because it doesn't need the latter's extended nonce.
265 attribute may be set to one of
276 As well as the KEM itself, a number of supporting algorithms are used.
277 These are taken from appropriately named attributes on the key or,
278 failing that, derived from other attributes as described below.
281 This is the symmetric encryption algorithm
282 used by the bulk data transform.
289 is used; if that it absent, then the default of
292 .B catcrypt show cipher
293 for a list of supported symmetric encryption algorithms.
296 This is the hash function used to distil entropy from the shared secret
297 constructed by the raw KEM. If there is no
303 is used; if that is absent then the default of
306 .B catcrypt show hash
307 for a list of supported symmetric encryption algorithms.
310 This is the message authentication algorithm
314 to ensure integrity of the encrypted message and
315 defend against chosen-ciphertext attacks.
320 is chosen as a default. Run
322 for a list of supported message authentication algorithms.
325 This is the key derivation function used to stretch the hashed shared
326 secret to a sufficient length to select symmetric encryption and
327 authentication keys, initialization vectors and other necessary
328 pseudorandom quantities. If there is no
332 is chosen as a default. Run
334 for a list of supported key derivation functions.
336 Not all supported functions have the required security features: don't
337 override the default choice unless you know what you're doing.
347 attribute is present on the key, then it must have this form; otherwise,
348 the key's type must have the form
351 Algorithm selections are taken from appropriately-named attributes, or,
352 failing that, from the
355 The signature algorithm is chosen according to the setting of
359 for a list of supported signature algorithms.
362 This is almost the same as the RSASSA-PKCS1-v1_5 algorithm described in
363 RFC3447; the difference is that the hash is left bare rather than being
364 wrapped in a DER-encoded
366 structure. This doesn't affect security since the key can only be used
367 with the one hash function anyway, and dropping the DER wrapping permits
368 rapid adoption of new hash functions. Regardless, use of this algorithm
369 is not recommended, since the padding method has been shown vulnerable
379 This is the RSASSA-PSS algorithm described in RFC3447. It is the
380 preferred RSA-based signature scheme. Use the
389 This is the DSA algorithm described in FIPS180-1 and FIPS180-2. Use the
398 This is the ECDSA algorithm described in ANSI X9.62 and FIPS180-2. Use
408 This is the revised KCDSA (Korean Certificate-based Digital Signature
409 Algorithm) described in
410 .I The Revised Version of KCDSA
411 .RB ( http://dasan.sejong.ac.kr/~chlim/pub/kcdsa1.ps ).
423 This is an unofficial elliptic-curve analogue of the KCDSA algorithm.
433 This is Bernstein, Duif, Lange, Schwabe, and Yang's Ed25519 algorithm.
434 More specifically, this is HashEd25519
437 algorithm \(en by default
449 This uses a symmetric message-authentication algorithm rather than a
450 digital signature. The precise message-authentication scheme used is
453 attribute on the key, which defaults to
455 if unspecified. Use the
463 As well as the signature algorithm itself, a hash function is used.
464 This is taken from the
466 attribute on the key, or, failing that, from the
470 or, if that is absent, determined by the signature algorithm as follows.
478 the default hash function is
485 the default hash function is
489 .B catcrypt show hash
490 for a list of supported hash functions.
492 Two encodings for the ciphertext are supported.
495 The raw format, which has the benefit of being smaller, but needs to be
496 attached to mail messages and generally handled with care.
499 PEM-encapsulated Base-64 encoded text. This format can be included
500 directly in email and picked out again automatically; but there is a
501 4-to-3 data expansion as a result.
502 .SH "COMMAND REFERENCE"
506 command behaves exactly as the
508 option. With no arguments, it shows an overview of
510 options; with arguments, it describes the named subcommands.
514 command prints various lists of tokens understood by
516 With no arguments, it prints all of the lists; with arguments, it prints
517 just the named lists, in order. The recognized lists can be enumerated
522 command. The lists are as follows.
525 The lists which can be enumerated by the
530 The key-encapsulation algorithms which can be used in a
531 key-encapsulation key's
536 The symmetric encryption algorithms which can be used in a
537 key-encapsulation key's
542 The message authentication algorithms which can be used in a
543 key-encapsulation key's
548 The signature algorithms which can be used in a signing key's
553 The hash functions which can be used in a key's
558 The encodings which can be applied to encrypted messages; see
564 command encrypts a file and writes out the appropriately-encoded
565 ciphertext. By default, it reads from standard input and writes to
566 standard output. If a filename argument is given, this file is read
567 instead (as binary data).
569 The following options are recognized.
572 Produce ASCII-armoured output. This is equivalent to specifying
578 .BI "\-f, \-\-format " format
579 Produce output encoded according to
582 .BI "\-k, \-\-key " tag
583 Use the key-encapsulation key named
585 in the current keyring; the default key is
588 .BI "\-p, \-\-progress"
589 Write a progress meter to standard error while processing large files.
591 .BI "\-s, \-\-sign-key " tag
592 Use the signature key named
594 in the current keyring; the default is not to sign the ciphertext.
596 .BI "\-o, \-\-ouptut " file
599 rather than to standard output.
601 .B "\-C, \-\-nocheck"
602 Don't check the public key for validity. This makes encryption go much
603 faster, but at the risk of using a duff key.
607 command decrypts a ciphertext and writes out the plaintext. By default,
608 it reads from standard input and writes to standard output. If a
609 filename argument is given, this file is read instead.
611 The following options are recognized.
614 Read ASCII-armoured input. This is equivalent to specifying
621 Buffer plaintext data until we're sure we've got it all. This is forced
622 on if output is to stdout, but is always available as an option.
624 .BI "\-f, \-\-format " format
625 Read input encoded according to
628 .BI "\-p, \-\-progress"
629 Write a progress meter to standard error while processing large files.
631 .B "\-v, \-\-verbose"
632 Produce more verbose messages. See below for the messages produced
633 during decryption. The default verbosity level is 1. (Currently this
634 is the most verbose setting. This might not be the case always.)
637 Produce fewer messages.
639 .BI "\-o, \-\-output " file
642 instead of to standard output. The file is written in binary mode.
643 Fixing line-end conventions is your problem; there are lots of good
644 tools for dealing with it.
646 .B "\-C, \-\-nocheck"
647 Don't check the private key for validity. This makes decryption go much
648 faster, but at the risk of using a duff key, and possibly leaking
649 information about the private key.
651 Output is written to standard output in a machine-readable format.
652 Major problems cause the program to write a diagnostic to standard error
653 and exit nonzero as usual. The quantity of output varies depending on
654 the verbosity level and whether the plaintext is also being written to
655 standard output. Output lines begin with a keyword:
658 An error prevented decryption. The program will exit nonzero.
662 encountered a situation which may or may not invalidate the decryption.
665 Decryption was successful. This is only produced if main output is
666 being sent somewhere other than standard output.
669 The plaintext follows, starting just after the next newline character or
670 sequence. This is only produced if main output is also being sent to
674 Any other information.
676 The information written at the various verbosity levels is as follows.
678 No output. Watch the exit status.
683 All output written has been checked for authenticity. However, output
684 can fail midway through for many reasons, and the resulting message may
685 therefore be truncated. Don't rely on the output being complete until
693 command encodes an input file according to one of the encodings
696 The input is read from the
698 given on the command line, or from standard input if none is specified.
699 Options provided are:
701 .BI "\-p, \-\-progress"
702 Write a progress meter to standard error while processing large files.
704 .BI "\-f, \-\-format " format
709 for a list of encoding formats.
711 .BI "\-b, \-\-boundary " label
712 Set the PEM boundary string to
714 i.e., assuming we're encoding in PEM format, the output will have
715 .BI "\-\-\-\-\-BEGIN " label "\-\-\-\-\-"
717 .BI "\-\-\-\-\-END " label "\-\-\-\-\-"
718 at the bottom. The default
723 .BI "\-o, \-\-output " file
726 instead of to standard output.
730 command decodes an input file encoded according to one of the encodings
733 The input is read from the
735 given on the command line, or from standard input if none is specified.
736 Options provided are:
738 .BI "\-f, \-\-format " format
743 for a list of encoding formats.
745 .BI "\-b, \-\-boundary " label
746 Set the PEM boundary string to
748 i.e., assuming we're encoding in PEM format, start processing input
750 .BI "\-\-\-\-\-BEGIN " label "\-\-\-\-\-"
752 .BI "\-\-\-\-\-END " label "\-\-\-\-\-"
753 lines. Without this option,
755 will start reading at the first plausible boundary string, and continue
756 processing until it reaches the matching end boundary.
758 .BI "\-p, \-\-progress"
759 Write a progress meter to standard error while processing large files.
761 .BI "\-o, \-\-output " file
764 instead of to standard output.
765 .SH "SECURITY PROPERTIES"
766 Assuming the security of the underlying primitive algorithms, the
767 following security properties of the ciphertext hold.
769 An adversary given the public key-encapsulation key and capable of
770 requesting encryption of arbitrary plaintexts of his own devising is
771 unable to decide whether he is given ciphertexts corresponding to his
772 chosen plaintexts or random plaintexts of the same length. This holds
773 even if the adversary is permitted to request decryption of any
774 ciphertext other than one produced as a result of an encryption request.
775 This property is called
778 An adversary given the public key-encapsulation and verification keys,
779 and capable of requesting encryption of arbitrary plaintext of his own
780 devising is unable to produce a new ciphertext which will be accepted as
781 genuine. This property is called
784 An adversary given the public key-encapsulation and verification keys,
785 and capable of requesting encryption of arbitrary plaintext of his own
786 devising is unable to decide whether the ciphertexts he is given are
787 correctly signed. This property doesn't seem to have a name.
789 Not all is rosy. If you leak intermediate values during decryption then
790 an adversary can construct a new correctly-signed message. Don't do
791 that, then \(en leaking intermediate values often voids security
792 warranties. But it does avoid the usual problem with separate signing
793 and encryption that a careful leak by the recipient can produce evidence
794 that you signed some incriminating message.
800 provide `non-repudiation' in any useful way. This is deliberate: the
801 purpose of signing is to convince the recipient of the sender's
802 identity, rather than to allow the recipient to persuade anyone else.
803 Indeed, given an encrypted and signed message, the recipient can
804 straightforwardly construct a new message, apparently from the same
805 sender, and whose signature still verifies, but with arbitrarily chosen
807 .SH "CRYPTOGRAPHIC THEORY"
808 Encryption of a message proceeds as follows.
810 Emit a header packet containing the key-ids for the key-encapsulation
811 key, and signature key if any.
813 Use the KEM to produce a public value and a shared secret the recipient
814 will be able to extract from the public value using his private key.
815 Emit a packet containing the public value.
817 Hash the shared secret. Use the KDF to produce a pseudorandom keystream
818 of indefinite length.
820 Use the first bits of the keystream to key a symmetric encryption
821 scheme; use the next bits to key a message authentication code.
823 If we're signing the message then extract 1024 bytes from the keystream,
824 sign the header and public value, and the keystream bytes; emit a packet
825 containing the signature. The signature packet doesn't contain the
826 signed message, just the signature.
828 Split the message into blocks. For each block, pick a random IV from
829 the keystream, encrypt the block and emit a packet containing the
830 IV, ciphertext, and a MAC tag over the ciphertext and a sequence number.
832 The last chunk is the encryption of an empty plaintext block. No
833 previous plaintext block is empty. This lets us determine the
834 difference between a complete file and one that's been maliciously
837 That's it. Nothing terribly controversial, really.
845 Mark Wooding, <mdw@distorted.org.uk>