manual page
This commit is contained in:
parent
18449bdc8a
commit
7270e90cf1
|
@ -14,6 +14,7 @@ echo > $OUT
|
|||
DISTDIRS=""
|
||||
|
||||
echo "AUTOMAKE_OPTIONS = subdir-objects" >>$OUT
|
||||
echo "dist_man_MANS = man/ccr.1" >>$OUT
|
||||
echo "dist_noinst_SCRIPTS = autogen.sh" `for i in $DISTDIRS ; do find \$i -type f ; done | tr "\n" " " ` >>$OUT
|
||||
|
||||
echo "bin_PROGRAMS = ccr" >>$OUT
|
||||
|
|
312
man/ccr.1
Normal file
312
man/ccr.1
Normal file
|
@ -0,0 +1,312 @@
|
|||
.TH CCR 1 2013-05-24 "ccr" "Codecrypt"
|
||||
.SH NAME
|
||||
.B ccr
|
||||
\- The post-quantum cryptography encryption and signing tool
|
||||
.SH SYNOPSIS
|
||||
.B ccr
|
||||
.RI [OPTION]...
|
||||
|
||||
.SH DESCRIPTION
|
||||
|
||||
\fBccr\fR (short of Codecrypt) is a general purpose encryption/decryption
|
||||
signing/verification tool that uses only quantum-computer resistant algorithms.
|
||||
|
||||
.SS
|
||||
General options:
|
||||
|
||||
.TP
|
||||
\fB\-h\fR, \fB\-\-help\fR
|
||||
Show a simple help with option listing.
|
||||
|
||||
.TP
|
||||
\fB\-V\fR, \fB\-\-version\fR
|
||||
Display only version information.
|
||||
|
||||
.TP
|
||||
\fB\-T\fR, \fB\-\-test\fR
|
||||
This option exists as a convenience for hackers - in this case, \fBccr\fR
|
||||
initializes itself, calls a test() function from source file src/main.cpp (that
|
||||
is meant to be filled by testing stuff beforehand) and terminates. In
|
||||
distribution packages, it will probably do nothing.
|
||||
|
||||
.TP
|
||||
\fB\-R\fR, \fB\-\-in\fR <\fIfile\fR>
|
||||
Redirect standard input to be read from \fIfile\fR instead from stdin. You can
|
||||
still specify "-" to force reading from stdin.
|
||||
|
||||
.TP
|
||||
\fB\-o\fR, \fB\-\-out\fR <\fIfile\fR> Redirect standard output to be written to
|
||||
\fIfile\fR. You can specify "-" to force writing to stdout.
|
||||
|
||||
.TP
|
||||
\fB\-a\fR, \fB\-\-armor\fR
|
||||
Where expecting input or output of data in codecrypt communication format, use
|
||||
ascii-armoring.
|
||||
|
||||
Codecrypt otherwise usually generates raw binary data, that are very hard to
|
||||
pass through e-mail or similar text communication channels.
|
||||
|
||||
.TP
|
||||
\fB\-y\fR, \fB\-\-yes\fR
|
||||
Assume the user knows what he is doing, and answer "yes" to all questions.
|
||||
|
||||
.SS
|
||||
Actions:
|
||||
|
||||
.TP
|
||||
\fB\-s\fR, \fB\-\-sign\fR
|
||||
Produce a signed message from input.
|
||||
|
||||
.TP
|
||||
\fB\-v\fR, \fB\-\-verify\fR
|
||||
Take a signed message from input, verify whether the signature is valid, and
|
||||
output message content if the verification succeeded.
|
||||
|
||||
.TP
|
||||
\fB\-e\fR, \fB\-\-encrypt\fR
|
||||
Produce an encrypted message from input.
|
||||
|
||||
.TP
|
||||
\fB\-d\fR, \fB\-\-decrypt\fR
|
||||
Decrypt the message from input.
|
||||
|
||||
.P
|
||||
Note that the actions for signature/encryption and decryption/verification can
|
||||
be easily combined into one command, simply by specifying both options usually
|
||||
as "-se" or "-dv".
|
||||
|
||||
.SS
|
||||
Action options:
|
||||
|
||||
.TP
|
||||
\fB\-r\fR, \fB\-\-recipient\fR <\fIkeyspec\fR>
|
||||
Specify that the message for encryption should be encrypted so that only the
|
||||
owner of a private key paired with public key specified by \fIkeyspec\fR can
|
||||
decrypt it.
|
||||
|
||||
.TP
|
||||
\fB\-u\fR, \fB\-\-user\fR <\fIkeyspec\fR>
|
||||
Specify a private key to use for signing the message.
|
||||
|
||||
.TP
|
||||
\fB\-C\fR, \fB\-\-cleartext\fR
|
||||
When working with signatures, produce/expect a cleartext signature. The basic
|
||||
property of cleartext signature is that the message it contains is easily
|
||||
readable by users, therefore it is a very popular method to e.g. sign e-mails.
|
||||
|
||||
.TP
|
||||
\fB\-b\fR, \fB\-\-detach\-sign\fR <\fIfile\fR>
|
||||
On signing, produce a detached signature and save it to \fIfile\fR. When
|
||||
verifying, read the detached signature from \fIfile\fR. Note that files that is
|
||||
being signed or verified must be put into program's input (potentially using
|
||||
"-R" option.
|
||||
|
||||
.SS
|
||||
Key management:
|
||||
|
||||
In Codecrypt, each public key has a KeyID, which is basically a hash of its
|
||||
representation that is used to identify the key globally. Each public key is
|
||||
stored along with a key name, which is a convenience tool for users who can
|
||||
store arbitrary information about e.g. what is the key meant for or who it
|
||||
belongs to. Public keys also have an algorithm identifier to specify how to
|
||||
work with them, and sometimes also attached a private key to form a secret
|
||||
"keypair".
|
||||
|
||||
Keys can be specified using several methods:
|
||||
|
||||
Using KeyID -- the key specification consists of @ and several first characters
|
||||
to identify a prefix of KeyID of a single key.
|
||||
|
||||
Using a name -- key specification consists of string and matches any key, that
|
||||
has a name that contains that string.
|
||||
|
||||
.TP
|
||||
\fB\-g\fR, \fB\-\-gen\-key\fR <\fIalgorithm\fR>
|
||||
Generate a keypair for usage with specified algorithm. Use "-g help" to get
|
||||
list of all algorithms available. Listing also contains flags "S" and "E",
|
||||
meaning that algorithm can be used for signatures or encryption. Algorithm name
|
||||
does not need to be a full name, but must match only one available algorithm.
|
||||
|
||||
.TP
|
||||
\fB\-N\fR, \fB\-\-name\fR <\fIkeyname\fR>
|
||||
Specify that affected keys (those being imported, generated, exported or
|
||||
renamed) should be newly renamed to \fIkeyname\fR.
|
||||
|
||||
.TP
|
||||
\fB\-F\fR, \fB\-\-filter\fR <\fIkeyspec\fR>
|
||||
When listing, importing or exporting keys, only process keys that match
|
||||
\fIkeyspec\fR.
|
||||
|
||||
.TP
|
||||
\fB\-k\fR, \fB\-\-list\fR
|
||||
List available public keys.
|
||||
|
||||
.TP
|
||||
\fB\-K\fR, \fB\-\-list\-secret\fR
|
||||
List available private keys (in keypairs).
|
||||
|
||||
.TP
|
||||
\fB\-i\fR, \fB\-\-import\fR
|
||||
Import public keys.
|
||||
|
||||
.TP
|
||||
\fB\-I\fR, \fB\-\-import\-secret\fR
|
||||
Import private keypairs.
|
||||
|
||||
.TP
|
||||
\fB\-n\fR, \fB\-\-no\-action\fR
|
||||
On import, do not really import the keys, but only print what keys and names
|
||||
will be imported. This is useful for preventing accepting unwanted private or
|
||||
public keys.
|
||||
|
||||
.TP
|
||||
\fB\-f\fR, \fB\-\-fingerprint\fR
|
||||
When printing keys, format full KeyIDs. Note that full KeyIDs can be used in
|
||||
similar way as fingerprints known from other cryptosystems.
|
||||
|
||||
.TP
|
||||
\fB\-p\fR, \fB\-\-export\fR
|
||||
Export public keys in keyring format.
|
||||
|
||||
.TP
|
||||
\fB\-P\fR, \fB\-\-export\-secret\fR
|
||||
Export private keys. (Do this carefully!)
|
||||
|
||||
.TP
|
||||
\fB\-x\fR, \fB\-\-delete\fR <\fIkeyspec\fR>
|
||||
Remove matching keys from public keyring.
|
||||
|
||||
.TP
|
||||
\fB\-X\fR, \fB\-\-delete\-secret\fR <\fIkeyspec\fR>
|
||||
Remove matching keys from private keypairs.
|
||||
|
||||
.TP
|
||||
\fB\-m\fR, \fB\-\-rename\fR <\fIkeyspec\fR>
|
||||
Rename matching public keys. Use "-N" to specify a new name.
|
||||
|
||||
.TP
|
||||
\fB\-M\fR, \fB\-\-rename\-secret\fR <\fIkeyspec\fR>
|
||||
Rename matching private keys.
|
||||
|
||||
.SH FILES
|
||||
|
||||
Codecrypt stores user data in a directory specified by environment variable
|
||||
CCR_DIR, which defaults to "$HOME/.ccr". It contains the files "pubkeys" and
|
||||
"secrets" which are sencode keyring representations of user's public and
|
||||
private keyring.
|
||||
|
||||
When Codecrypt is running, it locks the .ccr directory using a lockfile "lock"
|
||||
and applying flock(2) to it.
|
||||
|
||||
.SH RETURN VALUE
|
||||
|
||||
\fBccr\fR returns 0 if there was no error and all cryptography went fine, or 1
|
||||
on errors. If the error was that a missing public or private key was needed to
|
||||
complete the operation, 2 is returned. If signature verification fails (e.g.
|
||||
the signature is bad or likely forged), the program returns 3.
|
||||
|
||||
.SH ALGORITHMS
|
||||
|
||||
Program offers several "algorithms" that can be used for signatures and
|
||||
encryption. Use "ccr -g help" to get a list of supported algorithms.
|
||||
|
||||
FMTSeq-named schemes are the Merkle-tree signature algorithms. The name
|
||||
FMTSEQxxx-HASH1-HASH2 means, that the scheme provides attack complexity ("bit
|
||||
security") around 2^xxx, HASH1 is used as a message digest algorithm, and HASH2
|
||||
is used for construction of Merkle tree.
|
||||
|
||||
McEliece-based encryption schemes are formed from McEliece trapdoor running on
|
||||
quasi-dyadic Goppa codes with Fujisaki-Okamoto encryption padding. Algorithm
|
||||
name MCEQDxxxFO-HASH-CIPHER means that the trapdoor is designed to provide
|
||||
attack complexity around 2^xxx, and HASH and CIPHER are the hash and symmetric
|
||||
cipher functions that are used in Fujisaki-Okamoto padding scheme.
|
||||
|
||||
As of June 2013, users are advised to deploy the 2^128-secure variants of the
|
||||
algorithms -- running 2^128 operations would require around 10^22 years of CPU
|
||||
time (of a pretty fast CPU), which is considered more than sufficient for any
|
||||
reasonable setup and using stronger algorithms seems just completely
|
||||
unnecessary. Note that using stronger algorithm variants does not come with any
|
||||
serious performance drawback.
|
||||
|
||||
For comparison, 2^128 security level is very roughly equivalent to that of
|
||||
classical RSA with 3072bit modulus (which is reported to provide 2^112 attack
|
||||
complexity).
|
||||
|
||||
All algorithms are believed to be intractable by quantum computers, except for
|
||||
the generic case of Grover search which (in a very idealized case and very
|
||||
roughly) halves the bit security (although the attack remains exponential).
|
||||
Users who are aware of large quantum computers being built are advised to use
|
||||
2^192 or 2^256 bit security keys.
|
||||
|
||||
.SH WARNINGS AND CAVEATS
|
||||
|
||||
Codecrypt does not do much to prevent damage from mistakes of the user. Be
|
||||
especially careful when managing your keyring, be aware that some operations
|
||||
can rename or delete more keys at once.
|
||||
|
||||
FMTSeq signatures are constructed from one-time signature scheme, for this
|
||||
reason the private key changes after each signature, basically by increasing
|
||||
some counter. IF THE PRIVATE KEY IS USED MORE THAN ONCE TO SIGN WITH THE SAME
|
||||
COUNTER AND THE SIGNATURES GET PUBLISHED, SECURITY OF THE SCHEME IS SEVERELY
|
||||
DAMAGED. Never use the same key on two places at once. If you backup the
|
||||
private keys, be sure to backup it everytime after a signature is made.
|
||||
|
||||
If something goes wrong and you really need to use the key that has been, for
|
||||
example, recovered from a backup, you can still "skip" the counter by producing
|
||||
and \fBdiscarding\fR some dummy signatures (ccr -s </dev/null >/dev/null). If
|
||||
you plan to do that for some real purpose, for your own safety be sure to
|
||||
understand inner workings of FMTSeq, especially how the Diffie-Lamport
|
||||
signature scheme degrades after publishing more than one signature.
|
||||
|
||||
FMTSeq can only produce a limited amount of signatures (but still a pretty
|
||||
large number). When the remaining signature count starts to get low, Codecrypt
|
||||
will print warning messages. In that case, users are advised to generate and
|
||||
certify new keys.
|
||||
|
||||
Try to always use the "-n" option before you actually import keys -- blind
|
||||
import of keys can bring serious inconsistencies into your key naming scheme.
|
||||
|
||||
In a distant universe after much computation, KeyIDs can collide. If you find
|
||||
someone who has a colliding KeyID, kiss him and generate another key.
|
||||
|
||||
.SH EXAMPLE
|
||||
Following commands roughly demonstrate command line usage of \fBccr\fR:
|
||||
.nf
|
||||
.sp
|
||||
ccr -g help
|
||||
ccr -g fmtseq128 --name "John Doe" # your signature key
|
||||
ccr -g mceqd128 --name "John Doe" # your encryption key
|
||||
|
||||
ccr -K #watch the generated keys
|
||||
ccr -k
|
||||
|
||||
ccr -p -a -o my_pubkeys.asc -F Doe # export your pubkeys for friends
|
||||
|
||||
#see what people sent us
|
||||
ccr -ina < friends_pubkeys.asc
|
||||
|
||||
#import Frank's key and rename it
|
||||
ccr -i -R friends_pubkeys.asc --name "Friendly Frank"
|
||||
|
||||
#send a nice message to Frank (you can also specify him by @12345 keyid)
|
||||
ccr -se -r Frank < Document.doc > Message_to_frank.ccr
|
||||
|
||||
#receive a reply
|
||||
ccr -dv -o Decrypted_verified_reply.doc <Reply_from_frank.ccr
|
||||
|
||||
#rename other's keys
|
||||
ccr -m Frank -N "Unfriendly Frank"
|
||||
|
||||
#and delete pukeys of everyone who's Unfriendly
|
||||
ccr -x Unfri
|
||||
.fi
|
||||
|
||||
.SH DISCLAIMER
|
||||
|
||||
Used cryptography is relatively new. For this reason, codecrypt eats data. Use
|
||||
it with caution.
|
||||
|
||||
.SH Authors
|
||||
|
||||
Codecrypt was written by Mirek Kratochvil in 2013.
|
||||
|
Loading…
Reference in a new issue