Update manuals.
[u/mdw/catacomb] / key.1
1 .\" -*-nroff-*-
2 .ie t \{\
3 . if \n(.g \{\
4 . fam P
5 . \}
6 . ds ss \s8\u
7 . ds se \d\s0
8 . ds us \s8\d
9 . ds ue \u\s0
10 . ds *b \(*b
11 .\}
12 .el \{\
13 . ds ss ^
14 . ds se
15 . ds us _
16 . ds ue
17 . ds *b \fIbeta\fP
18 .\}
19 .TH key 1 "5 June 1999" "Straylight/Edgeware" "Catacomb cryptographic library"
20 .SH NAME
21 key \- simple key management system
22 .SH SYNOPSIS
23 .B key
24 .RB [ \-k
25 .IR keyring ]
26 .I command
27 .PP
28 where
29 .I command
30 is one of:
31 .PP
32 .B add
33 .RB [ \-lqrLS ]
34 .RB [ \-a
35 .IR alg ]
36 .RB [ \-b | \-B
37 .IR bits ]
38 .RB [ \-p
39 .IR param ]
40 .RB [ \-R
41 .IR tag ]
42 .br
43 \h'8n'
44 .RB [ \-e
45 .IR expire ]
46 .RB [ \-t
47 .IR tag ]
48 .RB [ \-c
49 .IR comment ]
50 .RB [ \-C
51 .IR curve ]
52 .br
53 \h'8n'
54 .I type
55 .IR attr ...
56 .br
57 .B expire
58 .IR tag ...
59 .br
60 .B delete
61 .IR tag ...
62 .br
63 .B tag
64 .I tag
65 .RI [ new-tag ]
66 .br
67 .B comment
68 .I tag
69 .RI [ comment ]
70 .br
71 .B setattr
72 .I tag
73 .IR attr ...
74 .br
75 .B lock
76 .I qtag
77 .br
78 .B unlock
79 .I qtag
80 .br
81 .B list
82 .RB [ \-uqv ]
83 .RB [ \-f
84 .IR filter ]
85 .RI [ tag ...]
86 .br
87 .B fingerprint
88 .RB [ \-f
89 .IR filter ]
90 .RI [ tag ...]
91 .br
92 .B tidy
93 .br
94 .B extract
95 .RB [ \-f
96 .IR filter ]
97 .I file
98 .RI [ tag ...]
99 .br
100 .B merge
101 .I file
102 .SH DESCRIPTION
103 The
104 .B key
105 command performs useful operations on Catacomb keyring files. It
106 provides a number of subcommands, by which the various operations may be
107 carried out.
108 .SS "Global options"
109 Before the command name,
110 .I "global options"
111 may be given. The following global options are supported:
112 .TP
113 .BR "\-h, \-\-help " [ \fIcommand ]
114 Writes a brief summary of
115 .BR key 's
116 various options to standard output, and
117 returns a successful exit status. With a command name, gives help on
118 that command.
119 .TP
120 .B "\-v, \-\-version"
121 Writes the program's version number to standard output, and returns a
122 successful exit status.
123 .TP
124 .B "\-u, \-\-usage"
125 Writes a very terse command line summary to standard output, and returns
126 a successful exit status.
127 .TP
128 .BI "\-k, \-\-keyring " file
129 Names the keyring file which
130 .B key
131 is to process. The default keyring, used if this option doesn't specify
132 one, is the file named
133 .B keyring
134 in the current directory. The keyring must be stored in a regular file:
135 pipes, sockets, devices etc. are not allowed.
136 The
137 .B key
138 program attempts to lock the keyring before accessing it, using
139 .BR fcntl (2)
140 locking. It will however time out after a short while (10 seconds) and
141 report a failure.
142 .SS Concepts
143 In addition to the actual key data itself, a Catacomb key has a number
144 of other pieces of information attached to it:
145 .TP
146 .B "keyid"
147 Every key has a 32-bit identifying number, written in hexadecimal.
148 Keyids are not actually related to the key contents: they're generated
149 randomly. Applications use keyids to refer to specific keys; users are
150 probably better off with tags and types. A
151 .I deleted
152 key cannot be looked up by keyid.
153 .TP
154 .B "tag"
155 A key's tag is a unique string which can be used by users and
156 applications to identify the key. Tag strings may not contain spaces,
157 colons or dots. A
158 .I deleted
159 key cannot be looked up by tag. Whenever a tag name is wanted, a hex
160 keyid or key type string can be given instead.
161 .TP
162 .B "type"
163 A key's type string describes what the key may be used for. The type
164 string is arbitrary, except that it may not contain whitespace
165 characters, dots or colons. Applications use key types to obtain an
166 arbitrary but suitable key for some purpose. An
167 .I expired
168 key cannot be looked up by type, but may be looked up by keyid or tag.
169 .TP
170 .B "key encoding"
171 There are a number of different ways in which keys can be represented,
172 according to the uses to which the key will be put. Most symmetric
173 algorithms use
174 .I binary
175 keys. Keys used with number-theoretic systems (like most common
176 public-key systems) use
177 .I "multiprecision integer"
178 keys. Elliptic curve systems use
179 .I "curve point"
180 keys, which are either a pair of integers representing field elements,
181 or a `point at infinity'. Algorithms which require several key
182 constituents (again, like most public-key systems) use
183 .I structured
184 keys, which consist of a collection of named parts. It's possible to
185 store an
186 .I "ASCII string"
187 as a key, though this is usually done as a component of a structured
188 key. Finally, keys (including structured keys) can be encrypted.
189 .TP
190 .B "filter"
191 Keys and key components may be selected by a filter expression, a
192 sequence of flag names separated by commas. Flags are:
193 .BR binary ,
194 .BR integer ,
195 .BR struct ,
196 .BR ec ,
197 .BR string ,
198 or
199 .B encrypt
200 (describing the key encoding);
201 .BR symmetric ,
202 .BR private ,
203 .BR public ,
204 or
205 .B shared
206 (describing the category of key);
207 .B burn
208 and its negation
209 .B \-burn
210 (whether the key should be erased from memory after use); and
211 .B secret
212 and its negation
213 .B \-secret
214 (whether the key is safe to divulge).
215 .TP
216 .B "qualified tag"
217 A key component may be identified by the key's tag (or keyid, or type).
218 Subcomponents of structured keys are identified by following the tag by
219 a dot and the name of the subcomponent.
220 .TP
221 .B "expiry time"
222 Most keys expire after a certain amount of time. Once a key has
223 expired, it will no longer be chosen as a result of a lookup by key
224 type. However, it is not deleted until its deletion time is also
225 reached.
226 .TP
227 .B "deletion time"
228 A key's deletion time is the latest expiry time of any of the objects
229 which require that key. For example, a key used for authenticating
230 cryptographic cookies should have its deletion time set to the longest
231 expiry time of any of the cookies it can authenticate. Once a key's
232 deletion time is passed, it can no longer be referred to by
233 applications, and will be removed from the keyring next time it's
234 written to disk.
235 .TP
236 .B "comment"
237 A key may be given a comment when it's created. The comment is for the
238 benefit of users, and isn't interpreted by applications at all.
239 (Hopefully.)
240 .TP
241 .B "attributes"
242 A key as zero or more name/value pairs. The names and values are
243 arbitrary strings, except they may not contain null bytes. Some
244 attributes may have meaning for particular applications or key types;
245 others may be assigned global meanings in future.
246 .SH "COMMAND REFERENCE"
247 .SS add
248 The
249 .B add
250 command creates a new key and adds it to the keyring. The command
251 accepts the following options:
252 .TP
253 .BI "\-a, \-\-algorithm " alg
254 Selects a key generation algorithm. The default algorithm is
255 .BR binary ;
256 the different algorithms are described below.
257 .TP
258 .BI "\-b, \-\-bits " bits
259 The length of the key to generate, in bits. The default, if this option
260 is not supplied, depends on the key-generation algorithm.
261 .TP
262 .BI "\-B, \-\-qbits " bits
263 The length of the subsidiary key or parameter, in bits. Not all
264 key-generation algorithms have a subsidiary key size.
265 .TP
266 .BI "\-p, \-\-parameters " tag
267 Selects a key containing parameter values to copy. Not all
268 key-generation algorithms allow the use of shared parameters.
269 .TP
270 .BI "\-e, \-\-expire " expire
271 The expiry date for the generated key. This may be the string
272 .RB ` forever '
273 if the key should never expire automatically, or any date acceptable to
274 the
275 .BR getdate (3)
276 library function. Briefly,
277 .B getdate
278 understands absolute dates such as
279 .RB ` 1999-08-02 '
280 or
281 .RB ` "August 2nd, 1999" ',
282 and (perhaps more usefully) relative dates such as
283 .RB ` "+2 weeks" '.
284 The default is to allow a 2 week expiry, which isn't useful.
285 .TP
286 .BI "\-c, \-\-comment " comment
287 Sets a comment for the key. The default is not to attach a comment.
288 .TP
289 .BI "\-C, \-\-curve " curve-spec
290 Use the elliptic curve described by
291 .I curve-spec
292 when generating elliptic curve parameters.
293 .TP
294 .BI "\-t, \-\-tag " tag
295 Selects a tag string for the key. The default is not to set a tag. It
296 is an error to select a tag which already exists.
297 .TP
298 .BI "\-r, \-\-retag"
299 If a
300 .B \-t
301 option is given, remove this tag from any key which already has it.
302 .TP
303 .BI "\-R, \-\-rand-id " tag
304 Selects the key to use for the random number generator. Catacomb's
305 random number generator can be
306 .IR keyed ,
307 so that, even if the inputs to the generator are compromised, knowledge
308 of the key is also necessary to be able to predict the output. By
309 default, the latest-expiring key with type
310 .B catacomb-rand
311 is used, if present; if not, no key is used.
312 .TP
313 .BI "\-l, \-\-lock"
314 Requests that the secret parts of the newly-generated key be encrypted
315 using a passphrase.
316 .TP
317 .BI "\-q, \-\-quiet"
318 Suppresses the progress indication which is usually generated while
319 time-consuming key generation tasks are being performed.
320 .TP
321 .BI "\-L, --lim-lee"
322 When generating Diffie-Hellman parameters, generate a Lim-Lee prime
323 rather than a random (or safe) prime. See the details on Diffie-Hellman
324 key generation below.
325 .TP
326 .BI "\-S, --subgroup"
327 When generating Diffie-Hellman parameters with a Lim-Lee prime, choose a
328 generator of a prime-order subgroup rather than a subgroup of order
329 .RI ( p "- 1)/2."
330 .PP
331 The key's type is given by the required
332 .I type
333 argument. Following the type are zero or more attributes, which are
334 attached to the key in the same way as for the
335 .B setattr
336 command.
337 .PP
338 The key-generation algorithms supported are as follows:
339 .TP
340 .B "binary"
341 Generates a plain binary key of the requested length. If the requested
342 key length is not a multiple of eight, the high-order bits of the first
343 octet of the key are zeroed. The default key length is 128 bits.
344 .TP
345 .B "des"
346 Generates a DES key, with parity bits. The key length must be 56, 112
347 or 168; the default is 56. The low-order bit of each octet is ignored by
348 the DES algorithm; it is used to give each octet odd parity.
349 .TP
350 .B "rsa"
351 Generates a public/private key pair for use with the RSA algorithm.
352 .IP
353 The key components are
354 .I p
355 and
356 .IR q ,
357 a pair of prime numbers;
358 .IR n ,
359 the product of
360 .I p
361 and
362 .IR q ;
363 .IR e ,
364 the public exponent;
365 .IR d ,
366 the private exponent, chosen such that
367 .IR ed \ \(==\ 1
368 (mod
369 .RI ( p \ \-\ 1)( q \ \-\ 1));
370 and some other values useful for optimizing private-key operations:
371 .IR q \*(ss\-1\*(se\ mod\ p ,
372 .IR d \ mod\ p \ \-\ 1,
373 and
374 .IR d \ mod\ q \ \-\ 1.
375 The values
376 .I n
377 and
378 .I e
379 constitute the public key; the rest must be kept secret. The key size
380 requested by the
381 .B \-b
382 option determines the size of the modulus
383 .IR n ;
384 the default is 1024 bits.
385 .IP
386 The key generation algorithm chooses
387 .I p
388 and
389 .I q
390 to be
391 .I strong
392 primes: both
393 .IR p \ \-\ 1
394 and
395 .IR p \ +\ 1
396 have large prime factors \- call them
397 .I r
398 and
399 .I s
400 respectively \- and
401 .IR r \ \-\ 1
402 also has a large prime factor;
403 .I q
404 has similar properties.
405 .IP
406 The modulus
407 .I n
408 cannot be sensibly used as a shared parameter, since knowledge of
409 corrssponding public and private exponents is sufficient to be able to
410 factor the modulus and recover other users' private keys.
411 .TP
412 .B "dh-param"
413 Generates parameters for use with the Diffie-Hellman key exchange
414 protocol, and many related systems, such as ElGamal encryption and
415 signatures, and even DSA. (The separate DSA algorithm uses the
416 generator described in FIPS186-1.)
417 .IP
418 The Diffie-Hellman parameters are a prime modulus
419 .I p
420 and a generator
421 .I g
422 of a subgroup of
423 .BR Z / \c
424 .IB p Z
425 of order
426 .IR q .
427 The
428 .B \-b
429 option controls the size of the modulus
430 .IR p ;
431 the default size is 1024 bits.
432 .IP
433 If no
434 .I q
435 size is selected using the
436 .B \-B
437 option and the Lim-Lee prime option is disabled, then
438 .I p
439 is chosen to be a `safe' prime (i.e.,
440 .IR p \ =\ 2 q \ +\ 1,
441 with
442 .I q
443 prime). Finding safe primes takes a very long time. In this case, the
444 value of
445 .I g
446 is fixed as 4.
447 .IP
448 If a size is chosen for
449 .I q
450 and Lim-Lee primes are not selected then the prime
451 .I q
452 is generated and
453 .I p
454 is chosen so that
455 .IR p \ \-\ 1
456 is a multiple of
457 .IR q .
458 .IP
459 If the
460 .B \-L
461 option was given Lim-Lee primes are selected: the parameters are chosen
462 such that
463 .IR p \ =\ 2\ q \*(us0\*(ue\ q \*(us1\*(ue\ q \*(us2\*(ue\ ...\ +\ 1,
464 where the
465 .IR q \*(us i\*(ue
466 are primes at least as large as the setting given by the
467 .B \-B
468 option (or 256 bits, if no setting was given).
469 .IP
470 If the
471 .B \-S
472 option was given, the generator
473 .I g
474 is chosen to generate the subgroup of order
475 .IR q \*(us0\*(ue;
476 otherwise,
477 .I g
478 will generate the group of order
479 .RI ( p \ \-\ 1)/2\ =\ q \*(us0\*(ue\ q \*(us1\*(ue\ q \*(us2\*(ue\ ...
480 .IP
481 Finally, the
482 .B \-C
483 option can be given, in which case the parameters are taken directly
484 from the provided group specification, which may either be the the name
485 of one of the built-in groups (say
486 .B "key add \-a dh\-param \-C list 42"
487 for a list) or a triple
488 .RI ( p ,\ q ,\ g ).
489 separated by commas. No random generation is done in this case: the
490 given parameters are simply stored.
491 .TP
492 .B "dh"
493 Generates a public/private key pair for use with offline Diffie-Hellman,
494 ElGamal, DSA or similar discrete-logarithm-based systems. It selects a
495 private key
496 .IR x \ <\ q ,
497 and computes the public key
498 .IR y \ =\ g\*(ssx\*(se \ mod\ p .
499 .TP
500 .B "dsa-param"
501 Generates parameters for the DSA algorithm. DSA parameters are also
502 suitable for use with Diffie-Hellman and ElGamal system.
503 .IP
504 The main difference between DSA and Diffie-Hellman parameter generation
505 is thatthe DSA parameter generation
506 algorithm creates a
507 .I seed
508 from which the parameters are derived, and, assuming that the SHA-1 hash
509 function is strong, it's not feasible to construct a seed from which
510 deliberately weak parameters are derived. The algorithm used is the one
511 described in the DSA standard, FIPS\ 186, extended only to allow
512 sequential search for a prime
513 .I q
514 and to allow arbitrary parameter sizes. The seed is stored,
515 Base64-encoded, as the value of the attribute
516 .BR seed .
517 .IP
518 The default lengths for
519 .I p
520 and
521 .I q
522 are 768 and 160 bits respectively, since the DSA standard specifies that
523 .I q
524 be 160 bits, and the choice of 768 bits for
525 .I p
526 gives commensurate security.
527 .TP
528 .B "dsa"
529 Generates a public/private key pair for DSA. As for Diffie-Hellman
530 keys, it selects a
531 private key
532 .IR x \ <\ q ,
533 and computes the public key
534 .IR y \ =\ g\*(ssx\*(se \ mod\ p .
535 .TP
536 .B "bbs"
537 Generates a public/private key pair for the Blum-Blum-Shub random-number
538 generator, and the Blum-Goldwasser semantically-secure public-key
539 encryption system.
540 .IP
541 The key components are prime numbers
542 .I p
543 and
544 .IR q ,
545 both congruent to 3 (mod\ 4), and their product
546 .IR n .
547 The public key is simply the modulus
548 .IR n ;
549 the factors
550 .I p
551 and
552 .I q
553 are the private key.
554 .IP
555 The key-generation algorithm ensures that the two primes
556 .I p
557 and
558 .I q
559 are
560 .I strong
561 (see the discussion of strong primes above, in the section on RSA keys),
562 and that
563 .RI ( p \ \-\ 1)/2
564 and
565 .RI ( q \ \-\ 1)/2
566 are relatively prime, giving a maximum possible period length.
567 .IP
568 The key size requested by the
569 .B \-b
570 option determines the length of the modulus
571 .IR n ;
572 the default length is 1024 bits.
573 .TP
574 .B "ec-param"
575 Store an elliptic curve specification. If no explicit
576 .I curve-spec
577 is given (the
578 .RB ` \-C '
579 option) then a curve is chosen whose order is about the size given by the
580 .RB ` \-b '
581 option (default is 256 bits).
582 .IP
583 A
584 .I curve-spec
585 can be given explicitly (in which case
586 .RB ` \-b '
587 is ignored). It can either be the name of a built-in curve (say
588 .B "key add \-a ec\-param \-C list 42"
589 for a list of curve names) or a full specification. The curve is
590 checked for correctness and security according to the SEC1
591 specification: failed checks cause a warning to be issued to standard
592 error (though the program continues anyway). The check can be
593 suppressed using the
594 .RB ` \-q '
595 option.
596 .IP
597 A curve specification consists of the following elements optionally
598 separated by whitespace: a
599 .IR "field type" ,
600 which is one of
601 .BR "prime" ,
602 .BR "niceprime" ,
603 .BR "binpoly" ,
604 .or
605 .BR "binnorm" ;
606 an optional
607 .RB ` : ';
608 the field modulus
609 .IR p ;
610 if the field type is
611 .B binnorm
612 then an optional
613 .RB ` , '
614 and the representation of the normal element \*(*b; an optional
615 .RB ` / ';
616 a
617 .IR "curve type" ,
618 which is one of
619 .BR "prime" ,
620 .BR "primeproj" ,
621 .BR "bin" ,
622 and
623 .BR "binproj"
624 (the `proj' types currently have much better performance);
625 an optional
626 .RB ` : ';
627 the two field-element parameters
628 .I a
629 and
630 .IR b
631 which define the elliptic curve
632 .IR E ,
633 separated by an optional
634 .RB ` , ';
635 an optional
636 .RB ` / ';
637 the
638 .IR x -
639 and
640 .IR y -coordinates
641 of the generator point
642 .IR G ,
643 separated by an optional
644 .RB ` , ';
645 an optional
646 .RB ` : ';
647 the order
648 .I r
649 of the group generated by
650 .IR G ;
651 an optional
652 .RB ` * ';
653 and the
654 .I cofactor
655 .I h
656 =
657 .RI # E / r .
658 .TP
659 .B "ec"
660 Generate a private scalar and a corresponding public point on an
661 elliptic curve. See
662 .B ec-param
663 above for how to specify elliptic curve parameter sets. The scalar
664 .I x
665 is chosen unformly between 0 and the curve order
666 .IR r ;
667 the public point is then
668 .I x
669 \(mu
670 .IR G .
671 .SS "expire"
672 Forces keys to immediately expire. An expired key is not chosen when a
673 program requests a key by its type. The keys to expire are listed by
674 their
675 .IR tag s.
676 .SS "delete"
677 Deletes keys immediately. The keys to delete are listed by their
678 .IR tag s.
679 Be careful when deleting keys. It might be a better idea
680 to expire keys rather than deleting them.
681 .SS "tag"
682 Sets, deletes or changes the tag attached to a key. The first tag or
683 keyid names the key to be modified; the second, if present specifies the
684 new tag to be set. If no second argument is given, the existing tag, if
685 any, is removed and no new tag is set. It is an error to set a tag
686 which already exists on another key, unless you give the
687 .B \-r
688 option, which removes the tag first.
689 .SS "setattr"
690 Attaches attributes to a key. The key to which the attributes should be
691 attached is given by its
692 .IR tag .
693 Each attribute has the form
694 .IB name = value\fR.
695 An attribute can be deleted by assigning it an empty value. Although
696 the keyring file format is capable of representing an attribute with an
697 empty value as distinct from a nonexistant attribute, this interface
698 does not allow empty attributes to be set.
699 .SS "comment"
700 Sets, deletes or changes the comment attached to a key. The first
701 argument is a key tag or keyid which names the key to be modified; the
702 second, if present, is the new comment. If no second argument is given,
703 the existing comment, if any, is removed, and no new comment is set.
704 .SS "lock"
705 Locks a key or key component using a passphrase. If the key is already
706 locked, the existing passphrase is requested, and a new passphrase is
707 set.
708 .SS "unlock"
709 Unlocks a passphrase-locked key or key component. If the key is not
710 locked, an error is reported.
711 .SS "list"
712 Lists the keys in the keyring. A couple of options are supported:
713 .TP
714 .B "\-v, \-\-verbose"
715 Increases the amount of information displayed for each key. Repeat for
716 a greater effect.
717 .TP
718 .B "\-q, \-\-quiet"
719 Decreases the amount of information displayed for each key. Each use
720 cancels a
721 .RB ` \-v '
722 option.
723 .TP
724 .B "\-u, \-\-utc"
725 Display key expiry times as UTC rather than using the local time zone.
726 .TP
727 .BI "\-f, \-\-filter " filter
728 Specifies a filter. Only keys and key components which match the filter
729 are listed.
730 .PP
731 By default, a single line of output is generated for each, showing
732 keyids, types, expiry and deletion dates, and comments. Additional
733 .RB ` \-v '
734 options show more information, such as the exact time of day for expiry
735 and deletion, key attributes, and a dump of the actual key data. If the
736 verbosity level is sufficiently high, passphrases are requested to
737 decrypt locked keys. Make sure nobody is looking over your shoulder
738 when you do this!
739 .SS "fingerprint"
740 Reports a fingerprint (secure hash) on components of requested keys.
741 The following option is supported:
742 .TP
743 .BI "\-f, \-\-filter " filter
744 Specifies a filter. Only keys and key components which match the filter
745 are fingerprinted. The default is to only fingerprint nonsecret
746 components.
747 .PP
748 The keys to be fingerprinted are named by their tags or keyids given as
749 command line arguments. If no key tags are given, all keys which match
750 the filter are fingerprinted.
751 .SS "tidy"
752 Simply reads the keyring from file and writes it back again. This has
753 the effect of removing any deleted keys from the file.
754 .SS "extract"
755 Writes a selection of keys to a file. An option is supported:
756 .TP
757 .BI "\-f, \-\-filter " filter
758 Specifies a filter. Only keys and key components which match the filter
759 are written.
760 .PP
761 Keys extracted are written to the file named by the first argument,
762 which may be
763 .RB ` \- '
764 to designate standard output. The keys to extract are listed by their
765 tags; if no tags are given, all keys which match the filter are
766 extracted. The output is a valid keyring file.
767 .SS "merge"
768 Merges the keys from the named
769 .IR file ,
770 which may be
771 .RB ` \- '
772 to designate standard input, with the keyring. Keys already in the
773 keyring are not overwritten: you must explicitly remove them first if
774 you want them to be replaced during the merge.
775 .SH "SEE ALSO"
776 .BR keyring (5).
777 .SH AUTHOR
778 Mark Wooding, <mdw@nsict.org>
779