Public key encryption (asymmetric encryption)
Generating RSA public/private key pairs with gpg
The gpg
program is the OpenPGP encryption and signing tool. PGP stands for "pretty good protection".
Step 1. Generate a public private key pair.
-
First ssh to the Kali Linux machine.
- Run the following
gpg
command:$ gpg --full-generate-key
-
Follow the prompts to answer the questions.
-
Below is how I answered these questions to generate my keys:
gpg (GnuPG) 2.2.40; Copyright (C) 2022 g10 Code GmbH This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. gpg: directory '/home/kali/.gnupg' created gpg: keybox '/home/kali/.gnupg/pubring.kbx' created Please select what kind of key you want: (1) RSA and RSA (default) (2) DSA and Elgamal (3) DSA (sign only) (4) RSA (sign only) (14) Existing key from card Your selection? 1 RSA keys may be between 1024 and 4096 bits long. What keysize do you want? (3072) Requested keysize is 3072 bits Please specify how long the key should be valid. 0 = key does not expire <n> = key expires in n days <n>w = key expires in n weeks <n>m = key expires in n months <n>y = key expires in n years Key is valid for? (0) Key does not expire at all Is this correct? (y/N) y GnuPG needs to construct a user ID to identify your key. Real name: Dr. David Balash Email address: david.balash@richmond.edu Comment: RSA keys for CMSC 240 You selected this USER-ID: "Dr. David Balash (RSA keys for CMSC 240) <david.balash@richmond.edu>" Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. gpg: /home/kali/.gnupg/trustdb.gpg: trustdb created gpg: directory '/home/kali/.gnupg/openpgp-revocs.d' created gpg: revocation certificate stored as '/home/kali/.gnupg/openpgp-revocs.d/3EE0A0EFB95B62BECAE0F893059FA9C60FCE1D9B.rev' public and secret key created and signed. pub rsa3072 2024-01-31 [SC] 3EE0A0EFB95B62BECAE0F893059FA9C60FCE1D9B uid Dr. David Balash (RSA keys for CMSC 240) <david.balash@richmond.edu> sub rsa3072 2024-01-31 [E]
Step 2. Verify that your keys where created.
- Run the following
gpg
command:$ gpg --list-public-keys
- Mine looks like this:
gpg: checking the trustdb gpg: marginals needed: 3 completes needed: 1 trust model: pgp gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u /home/kali/.gnupg/pubring.kbx ----------------------------- pub rsa3072 2024-01-31 [SC] 3EE0A0EFB95B62BECAE0F893059FA9C60FCE1D9B uid [ultimate] Dr. David Balash (RSA keys for CMSC 240) <david.balash@richmond.edu> sub rsa3072 2024-01-31 [E]
Step 3. Output your public key to a file.
- Run this
gpg
command to output your public key to a file (but change the email address to your email address and change the name of your key to your firstname.key):$ gpg --output ~/firstname.key --armor --export your.email@richmond.edu
Step 4. Take a look at your key.
- View the file.
$ cat firstname.key
- Here is what mine looks like:
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 =wZCC -----END PGP PUBLIC KEY BLOCK-----
Step 5. Copy your key to the directory /opt/publickeys/
.
- Copy the file.
$ cp firstname.key /opt/publickeys/