174 lines
13 KiB
Plaintext
174 lines
13 KiB
Plaintext
|
|
Episode: 4399
|
||
|
|
Title: HPR4399: gpg-gen-key
|
||
|
|
Source: https://hub.hackerpublicradio.org/ccdn.php?filename=/eps/hpr4399/hpr4399.mp3
|
||
|
|
Transcribed: 2025-10-26 00:15:45
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
This is Hacker Public Radio Episode 4399 for Thursday 12 June 2025.
|
||
|
|
Today's show is entitled GPG Janky.
|
||
|
|
It is hosted by AXO and is about 20 minutes long.
|
||
|
|
It carries an explicit flag.
|
||
|
|
The summary is, AXO is back, and today with an interesting script that automates the
|
||
|
|
generation of GPG keys.
|
||
|
|
Hello and welcome to another episode of mine for Hacker Public Radio.
|
||
|
|
I think this is already the fourth episode.
|
||
|
|
And in this one, I want to talk a little bit about GPG, which is the tool that can be
|
||
|
|
used inside the command line of Linux, and it's an implementation of GPG standing for
|
||
|
|
GNU privacy guard, and it's an implementation of the OpenPGP pretty good privacy standard.
|
||
|
|
What this tool does, it is enabling users to encrypt and sign their data.
|
||
|
|
For example, files or emails, stuff like that.
|
||
|
|
By doing so, you can ensure that the file that you receive from another person is really
|
||
|
|
coming from the person that he is saying he or she is, and also that the file is not
|
||
|
|
tempered with when it's been sanded over the line.
|
||
|
|
So there's no man in the middle who has adjusted the contents of the file, and that is authenticity.
|
||
|
|
I'm not going to dive deep into these encryption terms and encryption theory or cryptology theory
|
||
|
|
for that.
|
||
|
|
By the way, that reminds me, for that I want to point out to these very sophisticated
|
||
|
|
videos of professional par of the Bogen University in Germany.
|
||
|
|
And here's great lectures on YouTube, I'll show a link in the show notes.
|
||
|
|
But today I'm going to not talk about that, I'm going to talk about GPG, and GPG is symmetric
|
||
|
|
key cryptography and also public read cryptography.
|
||
|
|
And with these public keys, I'm going to work in this episode, I shall quickly point out
|
||
|
|
the difference when you have symmetric key cryptography.
|
||
|
|
Then the key that is used by the sender is the same key that is used by the receiver.
|
||
|
|
So this key has to be shared upon when you want to do it safely, you have to share this
|
||
|
|
key over another medium than the medium that is used to send the message that is encrypted.
|
||
|
|
This problem is not existing when you use asymmetric cryptography, because then the sender
|
||
|
|
uses a different key than the receiver.
|
||
|
|
Actually, the sender has two keys, one key to encrypt is message with, and another key
|
||
|
|
that he is sharing openly, that the receiver can use to decrypt the message.
|
||
|
|
And that is the implementation that I'm going to talk about today.
|
||
|
|
GPG in the command line, you can install it, I'm on arch linux, you can install, I think
|
||
|
|
it is J, it is GNUPEG, I think, let's see,
|
||
|
|
the package in arch linux is called GNUPEG, current version that I'm using is 2.4.7-2,
|
||
|
|
the description is complete and free implementation of the open PGP standard, and there are quite
|
||
|
|
a lot of dependencies, but mostly, most of these dependencies are already on your system.
|
||
|
|
So probably it's not that hard of a net, not that heavy of a package.
|
||
|
|
Download size for me is 2.78 megabytes, approximately, and then when installed is approximately 10
|
||
|
|
megabytes.
|
||
|
|
So I have installed this tool, and then you can use a GPG, and if you want to know, if
|
||
|
|
you have installed it properly, you can, for example, enter a GPG testdesk version, then
|
||
|
|
you see what your GPG library version is, and your LyptG crypt library version, and you
|
||
|
|
can also see which public keys and cipher keys, hash keys and what kind of compression algorithms
|
||
|
|
are available.
|
||
|
|
So recently I had to generate quite a few keys, and while doing so, I got so annoyed because
|
||
|
|
I needed to use the expert flag on GPG, so normally when you generate a ordinary key,
|
||
|
|
you can just enter GPG, dash, dash full, dash, gen, dash, key.
|
||
|
|
And that's pretty straightforward, and you don't have to think about that much, probably
|
||
|
|
only it asks for your name, your email address, and what kind of algorithm, probably, and
|
||
|
|
that's pretty much it.
|
||
|
|
But with the expert key, you also need to define what kind of curve you want, and what
|
||
|
|
kind of subkeys you want to generate, at least because I want to generate subkeys, I
|
||
|
|
need to use the expert key.
|
||
|
|
But it's pretty much overhast, so I think it takes quite some time before you have generated
|
||
|
|
the right key.
|
||
|
|
You cannot make any mistakes because if you save it, if it's save is 40, then you have
|
||
|
|
to do it all over again.
|
||
|
|
So that was another one for me, and therefore I wrote this script, which you can find
|
||
|
|
in the code book repository under the tool section.
|
||
|
|
Here you can find three, let's see, again, in the tool section, you can scroll down to
|
||
|
|
GPG, and you can find three scripts of mine, which are handling of starting with GPG.
|
||
|
|
And I am currently on the scommet 95408 Delta 3122, and that commit is from 27 of May 2025.
|
||
|
|
The timestamp on this commit is 1420101, and there is another string attached to the name
|
||
|
|
of the commit, which is 6835 alpha echo to Delta.
|
||
|
|
So that's good for you to know, because if you listen into the future, which you probably
|
||
|
|
do, I hope you not listening live, and then there would be something wrong with my system.
|
||
|
|
But you will listen in the future, and then you can go back to the same commit and then
|
||
|
|
see the same file as I see right now in front of me.
|
||
|
|
I'm choosing for the GenKey script, GPG-Gen-Key, and that is the script that I want to talk
|
||
|
|
about today, because what this script does is auto-generating GPG keys, and not just the
|
||
|
|
ordinary keys, but the sophisticated keys, the way I want to have them, I shall explain.
|
||
|
|
So the script starts with some settings for how the script is running, well, my cat is
|
||
|
|
jumping on my table, hey, yeah, it's a nation, okay, but that's the side.
|
||
|
|
So first I want to point you to the end of the script, because probably for the first
|
||
|
|
time when you run and when you start experimenting with this script, you don't want to have the
|
||
|
|
key backup script called, which is currently called, as the script is right now, in line
|
||
|
|
number 180 you can see the key backup, and that is called via main, but if you comment
|
||
|
|
that one out, then you don't have backups for the keys that are generated.
|
||
|
|
So probably you want to have that when you are experimenting with how this script works.
|
||
|
|
Before you want to use it in production, you probably want to switch that off.
|
||
|
|
So then I'm going back to the top of the script, in line 10, there is a function set
|
||
|
|
Vars, that is set variables, and these variables are quite straightforward, I think the first
|
||
|
|
one is name, which is used for the key ID, as well as email and command R. So you fill out
|
||
|
|
your name, your email address that you want to have associated with this generated key,
|
||
|
|
and a command line, which you want to have quite short, but maybe you can make a unique
|
||
|
|
string or whatever.
|
||
|
|
And then there is a pass field, which contains the password that is being applied on this
|
||
|
|
key.
|
||
|
|
It is automatically applied, so you don't have to enter your password in the command line.
|
||
|
|
So you enter your password here in plain text in the script, and that's normally not
|
||
|
|
such a good idea, and that's why I recommend you to relieve the pass as is in the script
|
||
|
|
now.
|
||
|
|
And when after you have generated the key, you can use GPG password, pass WD, and then
|
||
|
|
you can change the password there.
|
||
|
|
And then there is another field, which is expiry, and that is setting an expiration date
|
||
|
|
for the key, you can leave this blank, and then there will be no expiration date.
|
||
|
|
And the last field you have to fill out is the curve, I have chosen for an elliptic curve
|
||
|
|
here, but you can also choose an RSA algorithm if you want.
|
||
|
|
And now my little cat is annoying me, huh?
|
||
|
|
There, continue with our podcast.
|
||
|
|
So those fields, you have to fill out before you run the script.
|
||
|
|
I have not built in a user interface, because I was thinking, yeah, if you want to have
|
||
|
|
that user interface, it's already built in in GPG itself, and then you have to, then
|
||
|
|
you can happily use that one, I think.
|
||
|
|
But the plus side of this one is, like I did, I have to generate quite a few keys, and
|
||
|
|
then you can automate the names, for example, with a number that is up to every time there
|
||
|
|
is a new key generated, you can add to the number, for example, or you can, yeah, you can
|
||
|
|
script everything here, and that is, that is, I think quite convenient.
|
||
|
|
But back to the working of this script, probably if you are going to download this script,
|
||
|
|
you have to invoke it with SH and then GPG dashed in just key, unless you have my full stack
|
||
|
|
integrated in your system, then you can just type GPG, dash, gen, dash key.
|
||
|
|
And if you run that, and I have to run it not here in this environment, wait a minute,
|
||
|
|
gen, okay, if you run it, that's all you have to do, there is nothing more than this
|
||
|
|
it gives some information back when it has run, and if you are prompted at the end of the
|
||
|
|
script with the pseudo, with the question of pseudo entering pseudo password, then you
|
||
|
|
have not commented out this backup script, and that is being called, and that is needing
|
||
|
|
pseudo privileges, so be careful with that, because if you enter your password, then it
|
||
|
|
will export also the armoured files to the backup location, and I'm not sure out of
|
||
|
|
my head here where that goes, but if you want to know more about that, then you have to
|
||
|
|
check the GPG backup key script as well.
|
||
|
|
But the gen key script is creating first of all a refocation certificate, which you can
|
||
|
|
use when your public key is compromised, and that is stored inside the GNU PG Home directory
|
||
|
|
and under the fingerprint string dot ref, the long accidental string you see there in front
|
||
|
|
of the ref is the fingerprint of the key, and that is a unique key identifying string.
|
||
|
|
Then there is some information about the generation of the key, and the first line of data about
|
||
|
|
the key itself is starting with Papa Uniform Bravo, but that is showing the algorithm that
|
||
|
|
is used for me, that is Echo Delta 25519, which is the elliptic curve algorithm, and then
|
||
|
|
0x to designate the hexadecimal value of the key, and then the hexadecimal long format of
|
||
|
|
this key. The long format of the key is the last part of the fingerprint, and then you have also
|
||
|
|
a short format, and that are the last eight characters of the fingerprint, or the last eight
|
||
|
|
characters of the long format. After the long format you can see the generation date, and then you
|
||
|
|
can see in square brackets what this key is used for, and for me that is a Charlie for a certificate,
|
||
|
|
certify, this is a certification key. Then my GPG config is printing out the key fingerprint as
|
||
|
|
well as the key grip. I'm not going into any details about what those are, and what the differences
|
||
|
|
are, like I said, the fingerprint is a unique identifier for the key, and the key grip is essentially
|
||
|
|
the same, but just with a little bit of tweaks here and there. The next line, which is interesting,
|
||
|
|
is the UID. This is the user ID, user identifier for the key, and that is for a human to designate
|
||
|
|
instead of these long strings of hexadecimal characters. You can just see, okay, there is a name,
|
||
|
|
called TestName, and then there is a number, and then there is a email address, and that is for
|
||
|
|
humans to identify the key. But also scripts, GPG King, you can also call TestName to call the key,
|
||
|
|
as long as it is unique in your key ring, that is. Your key ring is, by the way,
|
||
|
|
all the keys together, and you can call them by the command GPG-list-keys.
|
||
|
|
After the UID line, there are three lines starting with sub, which are my three sub keys.
|
||
|
|
The first sub key is an authentication key. The next one is an encryption key, and the last one
|
||
|
|
is a signing key. And that is how you generate this GPG key. By the way, the sub keys are all
|
||
|
|
expiring in 2026, the first of January. So there you have it. I also want to mention these other
|
||
|
|
two scripts of mine briefly. If you go into the tool section or the tool directory of my repository,
|
||
|
|
you can scroll to GPG, and you see, besides the generation, the Gen-key script, you can see the backup
|
||
|
|
key, and with this script you can designate a key, and then designate a target directory in which
|
||
|
|
you can store your backups. And the other script is GPG pass verify, or short the short form,
|
||
|
|
GPG-pass-VFI, Victor Foxtrot Yankee. That script is used to verify the password of your script,
|
||
|
|
and what it does, basically, if you do it right, if you enter your password right, it gives back
|
||
|
|
an exit code of zero. So then you have entered a correct password, and if it's giving back
|
||
|
|
an error, then you have the wrong password. I use this to verify my password, of course,
|
||
|
|
for the scripts, because I often forget them, and I want to verify if I still remember them correctly.
|
||
|
|
That is the end of this episode about my GPG scripts. I hope you find this episode interesting,
|
||
|
|
see you later next time. Goodbye.
|
||
|
|
You have been listening to Hacker Public Radio, and Hacker Public Radio does a walk.
|
||
|
|
Today's show was contributed by a HBR listener like yourself. If you ever thought of recording
|
||
|
|
broadcast, you can click on our contribute link to find out how easy it really is.
|
||
|
|
Hosting for HBR has been kindly provided by an honesthost.com, the internet archive, and our
|
||
|
|
things.net. On this address status, today's show is released under Creative Commons,
|
||
|
|
Attribution 4.0 International License.
|