GPG Walk Through Noobs - Ubuntu Containers: Difference between revisions
 Created page with "Going to learn the basics of GPG in a quick walk through  * <b>IMPORTANT NOTE</b>: In the <b>LXC Containers</b> <code>sudo</code> is required - not 100% sure why - is not required when using on normal host (not container)  == Step one creating conatiners and logging in == * Create 2 ubuntu 24.04 containers foo and bar <pre> lxc launch ubuntu:24.04 foo lxc exec foo bash su - ubuntu </pre>  <pre> lxc launch ubuntu:24.04 bar lxc exec bar bash su - ubuntu </pre>  and have 2..."  | 
			
(No difference) 
 | 
Latest revision as of 21:28, 9 July 2025
Going to learn the basics of GPG in a quick walk through
- IMPORTANT NOTE: In the LXC Containers 
sudois required - not 100% sure why - is not required when using on normal host (not container) 
Step one creating conatiners and logging in
- Create 2 ubuntu 24.04 containers foo and bar
 
lxc launch ubuntu:24.04 foo lxc exec foo bash su - ubuntu
lxc launch ubuntu:24.04 bar lxc exec bar bash su - ubuntu
and have 2 terminals open logged into both as user ubuntu
Step 2 - update container and install GPG
- Update and install 
gnupg2in both containers 
- gnupg2 installs the `gnupg` package, which includes the `gpg` command.
 
sudo apt update && sudo apt upgrade -y && sudo apt install gnupg2 -y
- Verify installation
 
gpg --version
Step 3 - Creating KeyPairs
- IMPORTANT NOTE: In the LXC Containers 
sudois required - not 100% sure why - is not required when using on normal host (not container) 
Create Key Pair for Container Foo
- Generate new GPG key pair
 
sudo gpg --full-generate-key
- Follow prompts:
 
- Choose key type: (9) ECC (default)
 - Key size: 1024 to 4096 bits ( 3072 default)
 - Key expiration: 0 = key does not expire
 - Real name: foo
 - Email: foo@foo.com
 - Comment: i am foo
 - Passphrase: choose a secure passphrase
 
sudo gpg --full-generate-key OutPut:
ubuntu@foo:~$ sudo gpg --full-generate-key
gpg (GnuPG) 2.4.4; Copyright (C) 2024 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 '/root/.gnupg' created
gpg: keybox '/root/.gnupg/pubring.kbx' created
Please select what kind of key you want:
   (1) RSA and RSA
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
   (9) ECC (sign and encrypt) *default*
  (10) ECC (sign only)
  (14) Existing key from card
Your selection? 
Please select which elliptic curve you want:
   (1) Curve 25519 *default*
   (4) NIST P-384
   (6) Brainpool P-256
Your selection? 
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: foo
Email address: foo@foo.com
Comment: i am foo
You selected this USER-ID:
    "foo (i am foo) <foo@foo.com>"
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: /root/.gnupg/trustdb.gpg: trustdb created
gpg: directory '/root/.gnupg/openpgp-revocs.d' created
gpg: revocation certificate stored as '/root/.gnupg/openpgp-revocs.d/107B0222408951691EF6C91B4D9C986B00A60CFE.rev'
public and secret key created and signed.
pub   ed25519 2025-07-08 [SC]
      107B0222408951691EF6C91B4D9C986B00A60CFE
uid                      foo (i am foo) <foo@foo.com>
sub   cv25519 2025-07-08 [E]
Create Key Pair for Container Bar
- Generate new GPG key pair
 
sudo gpg --full-generate-key
- Follow prompts:
 
- Choose key type: (1) RSA
 - Key size: 1024 to 4096 bits ( 3072 default)
 - Key expiration: 0 = key does not expire
 - Real name: bar
 - Email: bar@bar.com
 - Comment: i am bar
 - Passphrase: choose a secure passphrase
 
sudo gpg --full-generate-key:
ubuntu@bar:~$ sudo gpg --full-generate-key
gpg (GnuPG) 2.4.4; Copyright (C) 2024 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 '/root/.gnupg' created
gpg: keybox '/root/.gnupg/pubring.kbx' created
Please select what kind of key you want:
   (1) RSA and RSA
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
   (9) ECC (sign and encrypt) *default*
  (10) ECC (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: bar
Email address: bar@bar.com
Comment: i am bar
You selected this USER-ID:
    "bar (i am bar) <bar@bar.com>"
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: /root/.gnupg/trustdb.gpg: trustdb created
gpg: directory '/root/.gnupg/openpgp-revocs.d' created
gpg: revocation certificate stored as '/root/.gnupg/openpgp-revocs.d/56107DF2FB1A226BDFED3CC362C74C327D5EB42B.rev'
public and secret key created and signed.
pub   rsa3072 2025-07-09 [SC]
      56107DF2FB1A226BDFED3CC362C74C327D5EB42B
uid                      bar (i am bar) <bar@bar.com>
sub   rsa3072 2025-07-09 [E]
Exchanging Keys
- List Keys
 
sudo gpg --list-keys
ubuntu@bar:~$ sudo gpg --list-keys
/root/.gnupg/pubring.kbx
------------------------
pub   rsa3072 2025-07-09 [SC]
      56107DF2FB1A226BDFED3CC362C74C327D5EB42B
uid           [ultimate] bar (i am bar) <bar@bar.com>
sub   rsa3072 2025-07-09 [E]
Export Public Key
- Container Bar
 
sudo gpg --armor --export bar@bar.com > me_bar_pub_key.asc
cat me_bar_pub_key.asc output:
ubuntu@bar:~$ cat me_bar_pub_key.asc -----BEGIN PGP PUBLIC KEY BLOCK----- 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 fDRVOWaor6+4jz0= =sRdV -----END PGP PUBLIC KEY BLOCK-----
- Container Foo
 
sudo gpg --armor --export foo@foo.com > me_foo_pub_key.asc
cat me_foo_pub_key.asc output:
ubuntu@foo:~$ cat me_foo_pub_key.asc -----BEGIN PGP PUBLIC KEY BLOCK----- mDMEaGzhvxYJKwYBBAHaRw8BAQdAreSi7V/fTPbOtIDqPfqcp8gCUA7kxJ45s+yP 7GlrsU20HGZvbyAoaSBhbSBmb28pIDxmb29AZm9vLmNvbT6IkwQTFgoAOxYhBBB7 AiJAiVFpHvbJG02cmGsApgz+BQJobOG/AhsDBQsJCAcCAiICBhUKCQgLAgQWAgMB Ah4HAheAAAoJEE2cmGsApgz+0EwBAPQEdUfNPZsSg3z5IWzKi3Z6eZXPk2Jz5mdn /T7RcL5XAPwPfPCPyVjxu6MJ+5ptRtXXe0Qruchbkn09bY/G+HIvCrg4BGhs4b8S CisGAQQBl1UBBQEBB0C7bpVfaiEpBLBrtL4flajkeYP8RppnrU8/PYy4Y5STLgMB CAeIeAQYFgoAIBYhBBB7AiJAiVFpHvbJG02cmGsApgz+BQJobOG/AhsMAAoJEE2c mGsApgz+BLMA+wVv5cYQbz3e7cKOARYXQ0nfzYVBcdo690ehVXixRWZ3AQDbYe3X atp32bolscNX8YBRO47eMuDONZ3mVikRjH7VBQ== =aMeG -----END PGP PUBLIC KEY BLOCK-----
Import Public Key
Swap Key Pairs in LXC - copy nad paste OR push and pull :
- Option 1 - Copy and Paste
 
cat me_foo_pub_key.asc
Copy content and paste in a file in bar container bar-pub.asc and vice versa.
- Note: file containing pub key can be called anything, does not require extension 
.ascas long as you know what it is 
- Option 2 - Push and Pull
 
Optional: Create a Dir for the swap on host:
noob@noob-ThinkPad-T470:~$ mkdir keyswap noob@noob-ThinkPad-T470:~$ cd keyswap/ noob@noob-ThinkPad-T470:~/keyswap$ lxc file pull bar/home/ubuntu/me_bar_pub_key.asc . noob@noob-ThinkPad-T470:~/keyswap$ lxc file pull foo/home/ubuntu/me_foo_pub_key.asc . noob@noob-ThinkPad-T470:~/keyswap$ ls me_bar_pub_key.asc me_foo_pub_key.asc noob@noob-ThinkPad-T470:~/keyswap$ lxc file push me_bar_pub_key.asc foo/home/ubuntu/ noob@noob-ThinkPad-T470:~/keyswap$ lxc file push me_foo_pub_key.asc bar/home/ubuntu/
- In Container Foo we are going to Import the Public Key for Bar
 
sudo gpg --import me_bar_pub_key.asc
OutPut:
ubuntu@foo:~$ sudo gpg --import me_bar_pub_key.asc gpg: key 62C74C327D5EB42B: public key "bar (i am bar) <bar@bar.com>" imported gpg: Total number processed: 1 gpg: imported: 1
- Verify import
 
sudo gpg --list-keys
OutPut:
ubuntu@foo:~$ sudo gpg --list-keys
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
/root/.gnupg/pubring.kbx
------------------------
pub   ed25519 2025-07-08 [SC]
      107B0222408951691EF6C91B4D9C986B00A60CFE
uid           [ultimate] foo (i am foo) <foo@foo.com>
sub   cv25519 2025-07-08 [E]
pub   rsa3072 2025-07-09 [SC]
      56107DF2FB1A226BDFED3CC362C74C327D5EB42B
uid           [ unknown] bar (i am bar) <bar@bar.com>
sub   rsa3072 2025-07-09 [E]
- Do the same for other container - vice versa
 
Trust Level for Imported Key
- Just do this on one container for now -
 
In container Foo
- Edit Bar's key to set trust
 
sudo gpg --edit-key bar@bar.com
- At gpg prompt, type:
 
trust
- Choose option 5 (ultimate trust)
 
quit
Example of not trusting a public key:
- Bar did not place/mark Foo's public key as trusted - and was prompted if sure when encrypting to that recipients public key.
 
ubuntu@bar:~$ sudo gpg --armor --encrypt --recipient foo@foo.com test.txt
gpg: 50307AF320586962: There is no assurance this key belongs to the named user
sub  cv25519/50307AF320586962 2025-07-08 foo (i am foo) <foo@foo.com>
 Primary key fingerprint: 107B 0222 4089 5169 1EF6  C91B 4D9C 986B 00A6 0CFE
      Subkey fingerprint: 4A5D 347A EA1A 88D6 A69C  51CA 5030 7AF3 2058 6962
It is NOT certain that the key belongs to the person named
in the user ID.  If you *really* know what you are doing,
you may answer the next question with yes.
Use this key anyway? (y/N) y
Encrypt file from Foo to Bar
- Create super secret file:
 
echo "This is a secret message from Foo to Bar!" > secret.txt
- Encrypt for Bar
 
sudo gpg --armor --encrypt --recipient bar@bar.com secret.txt
- This creates a file encrypted to bar's public key with an 
.ascextension. 
secret.txt.asc
- Send this file to Bar
 
File Contents:
ubuntu@foo:~$ cat secret.txt.asc -----BEGIN PGP MESSAGE----- hQGMA44ulauDXPBRAQwA23c4BIk9J3CgLno+/M0y15394m6nfqCXDZ272LsaBEcR xnbOvJFGdDpqPKVphU/2T4hJ2INqq6f47jZt3xinADPIcLD4r6uIhAeRAIEGUFcq MkfeBuFTlMNDgS8e+B3HSEu58UyBSHxLfGzQF2Y/msG4GV3Em7/C32qEaXlw+5J3 GbYM6xFcR0kKM3rjGQyPPHUTiipR1THHW8C5uUbiywtZqYXBHfj4ahd5iazyBW8f 2Q+abJR987KlEYhcabEvbem/vYjSQIqspXOLgAR+KmSO0w9epbCAkSuwAtHePMT9 QFSBP73+CH9wvdA70EA6mzXY1rer5sDSefMd6w1i95/jxxwQ0jKBS4oJjuzH+L7C P0Io6iUrKsZ+KOVPSW2+gTQaOpg/N0TGK9SyMVSWnrvqKO+joMkfMmSt/i166UXW /PQfn8l4ToUflplzHAmdVQ138XJaaEH9Ul6pUEKrsIZ38Vh/AysXpxukDW3JJAUa qDneeJy0xXSY+CIffcro1HMBCQIQvXTlUw1MexSnpGCbr2y6e/ymT6u3MaZ8lO/T tCpmKzItlOSLRmbpCNfIEInbNJ94oPCNWLue/tJKsHJvCW9nK9Aq2qDN27o6pUGy c2wRHN+nOJIYcAcGIsNAogsQVHmLFUm9L3eaA/LZsLsRAic7 =Vdc9 -----END PGP MESSAGE-----
Decrypting file
- In container Bar
 
sudo gpg --decrypt secret.txt.asc > decrypted_secret.txt
Will Be Prompted for your Passphase:
cat decrypted_secret.txt
This is a secret message from Foo to Bar!
Encryption Image
- Encrypting a image is the same as encrypting a file
 
sudo gpg --armor --encrypt --recipient bar@bar.com test_image.jpg
- Will end up with a file with the 
.ascextensiontest_image.jpg.asc 
Decrypt Image
sudo gpg --decrypt test_image.jpg.asc > decrypted_image.jpg
Encryption Directory
- To Encrypt a Directory just Archive the Directory and encrypt that
 
tar -czf secret_folder.tar.gz secret_folder/
- And Encrypt the Archive
 
sudo gpg --armor --encrypt --recipient bar@bar.com secret_folder.tar.gz
- secret_folder.tar.gz.asc now encrypted and safe to send over network.
 
Decrypt Directory
- Decrypt the archive
 
sudo gpg --decrypt secret_folder.tar.gz.asc > decrypted_folder.tar.gz
- Extract the archive
 
tar -xzf decrypted_folder.tar.gz
Symmetric Encryption (Password-based)
- Will be prompted to enter PassPhase (this is gonna be the password required to decrypt)
 
sudo gpg --armor --symmetric msg.txt
- A file with 
.ascentension will be created. 
msg.txt.asc
Decrypt Symmetric Encryption
- Will be prompted for password
 
sudo sudo gpg --decrypt msg.txt.asc
- The above command will print text file content on terminal, if you want decrypted content stored to file, then:
 
sudo sudo gpg --decrypt msg.txt.asc > decrypted-file.txt
Signing and Verifying Files
- IMPORTANT NOTE: In the LXC Containers 
sudois required for signing and verifying due to the same issue as key generation (likely missing/run/user/<uid>directory). This is not typically required on a normal host. 
Signing and Encrypting a File (Foo to Bar)
- In container Foo, create a file to sign and encrypt:
 
echo "This is a signed and encrypted message from Foo to Bar!" > secret_signed.txt
- Sign and encrypt the file for Bar's public key:
 
sudo gpg --armor --sign --encrypt --recipient bar@bar.com secret_signed.txt
- This creates 
secret_signed.txt.asc, which is signed by Foo's private key and encrypted for Bar's public key. 
cat secret_signed.txt.asc output:
ubuntu@foo:~$ cat secret_signed.txt.asc -----BEGIN PGP MESSAGE----- hQGMA44ulauDXPBRAQv/U/tg2p/YuYCA5KLrmRDSLEULp7P7rlQyCWSdCW3N4uL8 vZSDioA7PX/ferpIZWJgh4ulvLG0rWWRWSuzN15C8CCnaFNXd2wzMileMEey6I7b m+kNO6z6CHWc8K+NU2tFZLr/41s71dNiq2zh9gF4D+MOeGHnVXJWOJoG8bVLI1Db jGZiwD23rwzzJR+fuIyufO9g/dLkvBzrTbQVgo7o/BLQrzb9osfoQTOeNa+zGYGe d4728qBmL+vx99yNqA1npw3DpwQSodbMWDTP6VINRzuKFFbNYcz6EqTAyrPInYyi Rko3qPOAadHWeggdnDse3eKS/Kn5omt7uo5gMrl9G6uX7/xUMQ8yicv3By5RrVS1 O8/4R+ZN2Q8kpsyCRY+NiYisBx+Ekx5+EQHws5L5Ez/YR3hlJEc3hJC9/VhvcPR1 rT3RnHoGo2j+fcOLs41XPezAXSd2DtSxVl/m2O7zg4FIx2DMiVAEGCmPw6eKkDQB Xo2SjiG5kcs0bvZTAlv71MBDAQkCEADDE0u8CdcQgc6kW/OU8/bHnws1M2qeZjPQ 5pRgWpH49BKBi4eT4TR0Iq7uMjJuInnzEO+CTims+7CC3T6kXv7GOL3EDwbQ0VjJ mmP4VGvGYu0FaNeJOVkLrMKXepwIFaqjoYWsHDl79h0NdLTdIM6E1BGcDA+A5jJc ydWR3TEQQE+xC/Rt2hem+OKZE5PZpvAXoIz9rVpE/SHi0+2WrHdw9YjQlcE1Tp1M /ZFeuX14pnS0dAmpYWXdm9b1uq4aCPSbyMgAUz1NTRLRD79Ya3qL7DqeLUBUY2vN 4WVCmdV22FhbpGniGxld2zhoyjn2LMiuBPF6eUtRPnvcLt6n4Q== =nKdq -----END PGP MESSAGE-----
- Send 
secret_signed.txt.ascto Bar (e.g., vialxc file pushor copy-paste). 
Checking the Signer (Encrypted File)
- In Container Bar we did not Trust Foo's public key
 
- Decrypt and verify the signed file:
 
sudo gpg --decrypt secret_signed.txt.asc > decrypted_signed.txt
- GPG will decrypt the file using Bar's private key and verify the signature using Foo's public key. You will be prompted for Bar's passphrase.
 
sudo gpg --decrypt secret_signed.txt.asc > decrypted_signed.txt output:
ubuntu@bar:~$ sudo gpg --decrypt secret_signed.txt.asc > decrypted_signed.txt
gpg: encrypted with rsa3072 key, ID 8E2E95AB835CF051, created 2025-07-09
      "bar (i am bar) <bar@bar.com>"
gpg: Signature made Wed Jul  9 21:00:20 2025 UTC
gpg:                using EDDSA key 107B0222408951691EF6C91B4D9C986B00A60CFE
gpg: Good signature from "foo (i am foo) <foo@foo.com>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 107B 0222 4089 5169 1EF6  C91B 4D9C 986B 00A6 0CFE
- The output shows the file was signed by 
foo (i am foo) <foo@foo.com>. "Good signature" confirms the signature is valid (file is authentic and unaltered). - The output shows you did not add 'foo' to trusted signers 
WARNING: This key is not certified with a trusted signature! - Check the decrypted content:
 
cat decrypted_signed.txt
This is a signed and encrypted message from Foo to Bar!
Signing Without Encryption
- In container Foo, sign a file without encrypting it:
 
echo "This is a signed but not encrypted message from Foo!" > public_signed.txt
sudo gpg --armor --sign public_signed.txt
- This creates 
public_signed.txt.asc, signed by Foo's private key but readable by anyone. - This file 
public_signed.txt.ascappears as encrypted when you read content but is not - no password required to make readable. 
cat public_signed.txt.asc output:
ubuntu@bar:~$ cat public_signed.txt.asc -----BEGIN PGP MESSAGE----- owEBEwLs/ZANAwAKAWLHTDJ9XrQrAaxMYhFwdWJsaWNfc2lnbmVkLnR4dGhu2+RU aGlzIGlzIGEgc2lnbmVkIGJ1dCBub3QgZW5jcnlwdGVkIG1lc3NhZ2UgZnJvbSBG b28hCokBswQAAQoAHRYhBFYQffL7GiJr3+08w2LHTDJ9XrQrBQJobtvkAAoJEGLH TDJ9XrQrtQIL/3xU9S/YekqNt+dx5axx8/elK7gm4CMBvrkxugILdb7H1s2XS/d1 hxBDcRf955vFhiJM3rlC1EpVLEOkrFDIEvIu0NH5A6D6TDNT6ThS+Mcch+35HtFo dAgZv5nBia4Z9uV2PXSS3JhHxZitFmWNX/YCpPaDaMSPCGZHWSq6Li2gBZ74FvzJ A91NVSst2cPXdHbuNyScpHl4E/FegLjQlfUwTq/oGvJ8PWW4Ny5zkzpo+QsNO7O7 DU6vcRrry66AzASanUV8NS6fAjuvxWOaRDRaIn3MctzlEXsQPa6rsS9l3/eNcXT2 qYf7xfF5bMOHk4/c2zxM1+vhooPYg5423OGprvU74T4taSaYvbEm08ul+C9L805c Kk/Z41EDgsDfxGjwf0c3ZfdxkCdVE2xnGxhypxyHan0qTscT+kEnEd67vSGWOXJF B2Y6JvDj6K4ToUDd27gYZtO29jyIA7Ggj+6GpmqbNYgr8nHpaR7xeixLiLz2snuu nBrQq8ixE+Z67Q== =I0Gt -----END PGP MESSAGE-----
Make Signed Content Readable
- This command will take the signed content and output to a readable file called decrypted-file.txt and gpg wil verify signatory.
 
sudo gpg --output decrypted-file.txt --decrypt public_signed.txt.asc
- Note: bar imported and trusted foo's public key
 
ubuntu@bar:~$ sudo gpg --output decrypted-file.txt --decrypt public_signed.txt.asc gpg: Signature made Wed Jul 9 21:15:16 2025 UTC gpg: using RSA key 56107DF2FB1A226BDFED3CC362C74C327D5EB42B gpg: Good signature from "bar (i am bar) <bar@bar.com>" [ultimate]