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