PGP (Pretty Good Privacy)

PGP is a Public Key Encryption program written by Phil Zimmerman,
ported to the QL by Johnathan Hudson, and has become the standard
encryption program for private citizens.  PGP has gained
notariety and popularity over the last few years.  Because of
U.S. Export laws that treat encryption schemes as munitions, PGP
has caused quite a stir in the computer and legal worlds.  Phil
Zimmerman had been under a Federal investigation to see if he
broke export laws when PGP was distributed via the Internet.
Some countries are not happy with the ordinary citizen having the
capability of very secure encryption.  Countries like encryption
that they can break.  This was demontrated in the US with the
introduction of the Clipper chip, where a federal agency keep the
"backdoor keys" to everybodys secret keys.

Public Key Encryption Basics

Most people are familiar with what is known as private key
encryption, that is, you use a password to encrypt data and use
it again to decrypt the data.  This all works fine except when
you want someone to decrypt it.  You must somehow send that
person your private key, and still keep it private.

Public key encryption (PKE) is based on having two keys, one
public and one private.  If you encrypt with one key, say your
private, you can only decrypt with the other key, your public.
This allows you to publish one key and keep the other as a close
guarded secret.

If you want to send a private message to a person and make sure
that only that person to read it, you would encrypt the message
in their public key.  The only way to decrypt the message is to
use the recievers private key, which means that only they could
decrypt the message.  This will also work to keep files private
on your computer.  Encrypt with your public key and only you can
decrypt it.

If you want to put a digital signature on a message, you would
encrypt it with your private key.  Anyone decrypting it using
your public key would know that only you could have encrypted it.
There are also digital signatures that keep the text of the
message in the clear, but guarentees the text will go unchanged.

UnZipping PGP

PGP version 2.3 (589K zipped) and 2.6 (688K zipped)  have both
been ported to the QL.  This article is based on 2.6.  To unzip
PGP26_ZIP you will need a ED disk.  I tried to unzip to HD but I
ran out of disk space.  If you don't have an ED disk drive, you
should be able to specify which files you want unzipped with
UNZIP.  The program unzips with two hard subdirectories (ala Gold
Card).  I don't know how it will unzip of your QL does not
support hard subdirectories.

The key files are PGP and PUBRING_PGP.  The rest of the files are
supporting documentation and source code.  Once you create your
own public and private keys, other files will be created.

Using PGP

PGP has been directly ported from the MS-DOS or Unix version, and
they  are very command line driven.  There is not nice front end
to PGP for the QL.  You will need to have TKII to use command
line arguments.  When running PGP you will run it like this:

   exec pgp;"-xx"

where -xx is one of the many command line options.

The advantages of directly porting to the QL are:

1.  Once you learn PGP on the QL, you already know it for MS-DOS
and UNIX.  Of course this also works the other way.  If you have
learned PGP using MS-DOS or UNIX, you know how to use it on the

2.  All prompts and program information is exactly the same as
the MS-DOS and UNIX versions.  Any books or articles showing PGP
screens will work for the QL.

In fact, there is a book for PGP.  It is "PGP: Pretty Good
Privacy" written by Simson Garfinkel and published by O'Reilly
and Associates.  It is THE book for PGP, it's use and history.
Since my office had a copy of the book, I used it to learn who to
use PGP on the QL.

Creating Your Own Keys

Once you unzip PGP you will first want to create your own public
and private key set.  This is done using the -kg option.

   exec pgp;"-kg"

Once a window pops up with some initial information, you will get
to choose what type of PGP key you want.  You can have a 512-bits
(less secure but fast), 768-bit (medium speed, good security),
and 1024-bits (highest security but slow).  I choose 512 bits,
primarily because I had nothing much to hide and I wanted
something fast.

You then get to type in a user id for your public key.  When you
give your public key, this is how you want your name to go with
it.  The documentation suggests your name plus an e-mail address.
So, I went with "Timothy C. Swenson ."

Next you are prompted to hit keys so that PGP can generate 624
random numbers.  Just hit some keys until you see the number
count down to 0.  If you hit too many, don't worry.   If you see
a question mark pop up it just means that you hit the keys too

Now the program will generate your public and private keys.  On a
Gold Card this took about 4-5 minutes.  On a regular QL, this may
take a while.  Once the program is done, your two keys are
written to disk.

Managing PGP Keys

Before I go into how to encrypt with PGP I want to talk about how
to manage PGP keys.  When you created your own set of keys, PGP
saved the keys to two files; SECRING_PGP and PUBRING_PGP.  PGP
keeps all keys in rings (key rings, get it).  Each ring is just a
binary file that stores all of the keys.  Typically the file
SECRING_PGP will only contain your secret key (because you really
should not know somebody else's) and PUBRING_PGP will contain
your public key plus any public keys you wish to add.

PGP uses a number of command line options (all beginning with -k)
that let you manage keys.  To get a summary of these options
execute PGP with just a -k option and it will list all of them.
A few of the important ones are:

-kv  View public keys in PUBRING_PGP
-kg  Generate your own keys (we just did that).
-ka  Add a key to either ring.
-kr  Remove a key from either ring.
-ke  Edit your User ID or Pass Phrase (password).
-kx  Extract a copy of your public key from the public key ring.

To show how some of this works, lets extract your public key from
your public key ring so that you can give it to somebody.  You do
this by using the -kx option:

   exec pgp;"-kx swenson tswenson"

This will extract the public key with the ID of "swenson" and put
it in the file "tswenson_pgp".  Now I can give this file to
anybody.  Remember that this file is still a binary file.  If you
want to extract an ASCII version use the -kxa option.  This makes
it easy to send via e-mail.

Now lets say were are somebody else and we want to add "my"
public key to our key ring.  We can do this using the -ka option.
We can add either binary or ASCII public keys with this option.

   exec pgp;"-ka tswenson_pgp"

This adds the public key in the file "tswenson_pgp" to the
current public key ring (PUBRING_PGP).  If we have a specific
name for our public key ring (say one for each department of a
company) we would add the name of that file right after the name
of the incoming file.

Encrypting with PGP

Now comes the core of the program, encrypting files.  You can
encrypt files for keeping or for sending secure messages.  The
difference is who the recipient is, since you will be encrypting
the file/message with the recipient's public key.  If you are
encrypting for yourself, you are the recipient.  If you are
sending the file via e-mail or disk, then the other person is the
recipient.  Either way the command line is the same:

   exec pgp;"-e file.txt recpient"

where file.txt is the file you want to encrypt and recpient is
who is going to get the file.If it was encrypting a message for
myself the command line would be:

   exec pgp;"-e file.txt swenson"

Since the resulting file will can be a binary file, using the
-eat option will make sure that the end encrypted file is in pure
ASCII so that it can be sent via e-mail.

Decrypting with PGP

Now that you've encrypted a file, lets figure out how to decrypt
it.  PGP does not require any command line options for decrypting
files.  And since it is assumed that you will be decrypting files
encrypted with our public key, PGP knows to decrypt with your
secret key.

   exec pgp;"file.txt"

This tells PGP to decrypt the file file.txt.  PGP looks up your
secret key in your secret key ring.  PGP can trust that file, but
it does not trust who executed it.  You will need to enter your
pass phrase (password) to let PGP know that you are who you say
you are.  This keeps other people from trying to decrypt your
files on your computer.

Digtal Signatures

Digitally signing your files is nothing more than encrypting a
file file your secret key.  Then when a person decrypts the file
sucessfully with your public key, they know that you encrypted
it.  In PGP, this is altered slightly.  When you sign a file, a
small PGP signature section is added to a file and it acts as
your signature.  The rest of the file in left un-encrypted.  When
signing a file, you do have the option of  encrypting it.

To sign a text message, you exec PGP like this,

   exec pgp;"-sta file.txt"

You will need to supply your pass phrase to sign the file.  The
resulting file will be called file.asc.  The -S option is for
signing, the T tells PGP that the input is a text file, and the A
tells PGP to make the output file ASCII.

To verify a digital signature, exec PGP like this,

   exec pgp;"file.asc"

PGP will work through the file and see the digital signature
section and verify the digital signature.  If any change is made
to the file after it was signed, the verify will come back as
invalid.  A form of checksum is done on the file to make sure
that any changes to the file will be noticed.


PGP give the QL user military-level encyption.  Anything you
encrypt is going to be safe.  I have not yet found a need for
encypting any of my data, but if I ever do, it is nice to know
that PGP is there.  But I can see a use for my using digital
signatures.  Since computer text is so easy to fake.  Posting a
document to the Internet means that anybody can alter it and pass
it along as yours.  Adding a few key "not"'s can really alter the
meaning of a statement.  Having a digital signature on the
document will foil any attempt to forge or spoof something I've
written.  This may not be important now, but if I am going to
post something as my "official" word on something, having the
digital signature give a greater level of confidence in not
having the message altered.
This article has only scratched the surface of what PGP can do.
Read the PGP documentation or pick up a copy of the PGP book to
learn more about the full capabilities of PGP.


               (                   (