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