mirror of
https://codeberg.org/scip/pcp.git
synced 2025-12-16 19:40:57 +01:00
105 lines
3.8 KiB
Plaintext
105 lines
3.8 KiB
Plaintext
|
|
=head1 DESCRIPTION
|
|
|
|
B<Pretty Curved Privacy> (pcp1) is a commandline utility which can
|
|
be used to encrypt files. B<pcp1> uses eliptc curve cryptography
|
|
for encryption (CURVE25519 by Dan J. Bernstein). While CURVE25519
|
|
is no worldwide accepted standard it hasn't been compromised by
|
|
the NSA - which might be better, depending on your point of view.
|
|
|
|
B<Caution>: since CURVE25519 is no accepted standard, B<pcp1> has
|
|
to be considered as experimental software. In fact, I wrote it just
|
|
to learn about the curve and see how it works.
|
|
|
|
Beside some differences it works like B<GNUPG>. So, if you already
|
|
know how to use gpg, you'll feel almost home.
|
|
|
|
=head1 QUICKSTART
|
|
|
|
Lets say, Alicia and Bobby want to exchange encrypted messages.
|
|
Here's what the've got to do.
|
|
|
|
First, both have create a secret key:
|
|
|
|
Alicia Bobby
|
|
pcp1 -k pcp1 -k
|
|
|
|
After entering their name, email address and a passphrase to protect
|
|
the key, it will be stored in their B<vault file> (by default ~/.pcpvault).
|
|
|
|
Now, both of them have to export the public key, which has to be
|
|
imported by the other one. With B<pcp> you can export the public
|
|
part of your primary key, but the better solution is to export
|
|
a derived public key especially for the recipient:
|
|
|
|
Alicia Bobby
|
|
pcp1 -p -r Bobby -O alicia.pub pcp1 -p -r Alicia -O bobby.pub
|
|
|
|
They've to exchange the public key somehow (which is not my
|
|
problem at the moment, use ssh, encrypted mail, whatever). Once exchanged,
|
|
they have to import it:
|
|
|
|
Alicia Bobby
|
|
pcp1 -K -I bobby.pub pcp1 -K -I alicia.pub
|
|
|
|
They will see a response as this when done:
|
|
|
|
key 0x29A323A2C295D391 added to .pcpvault.
|
|
|
|
Now, Alicia finally writes the secret message, encrypts it and
|
|
sends it to Bobby, who in turn decrypts it:
|
|
|
|
Alicia Bobby
|
|
echo "Love you, honey" > letter
|
|
pcp1 -e -r Bobby -I letter -O letter.asc
|
|
cat letter.asc | mail bobby@foo.bar
|
|
|
|
pcp1 -d -I letter.asc | less
|
|
|
|
And that's it.
|
|
|
|
Please note the big difference to B<GPG> though: both Alicia
|
|
AND Bobby have to enter the passphrase for their secret key!
|
|
That's the way CURVE25519 works: you encrypt a message using
|
|
your secret key and the recipients public key and the recipient
|
|
does the opposite, he uses his secret key and your public key
|
|
to actually decrypt the message.
|
|
|
|
Oh - and if you're wondering why I named them Alicia and Bobby:
|
|
I was just sick of Alice and Bob. We're running NSA-free, so we're
|
|
using other sample names as well.
|
|
|
|
=head1 FILES AND PIPES
|
|
|
|
Pcp behaves like any other unix tool. If not otherwise specified
|
|
it will read input from standard input (STDIN) and print output
|
|
to standard output (STDOUT). For instance:
|
|
|
|
pcp1 -e -O output
|
|
|
|
will read the text to be encrypted from standard input, because B<-I>
|
|
has not been specified. It works the same with B<-O>:
|
|
|
|
pcp1 -e -I myfile
|
|
|
|
In this case the encrypted result will be written to standard output.
|
|
|
|
Therefore it is possible to use pcp within pipes. Another more
|
|
realistic example:
|
|
|
|
ssh remote cat file | pcp1 -ez | mailx -s 'as requested' bob@somewhere
|
|
|
|
here we encrypt a file symmetrically without downloading it from a
|
|
remote ssh server and sending the encrypted result via email to
|
|
someone.
|
|
|
|
The behavior is the same with any other functionality where files are involved
|
|
like importing or exporting keys. However, there's one exception:
|
|
If the option B<-X> (B<--password-file>) has been used and is set
|
|
to B<->, then this will take precedence over any other possible use
|
|
of standard input. So if you want to encrypt something and don't
|
|
specify an input file you cannot use B<-X ->, and vice versa. IF
|
|
you use B<-X -> the passphrase will be read from standard input, which
|
|
then can't be used further for input files elsewhere. Pcp will exit
|
|
with an error in such a case.
|