从入门到放弃(bushi
能读到咱这篇文章的,应该也不用咱赘述pgp是啥,能干什么用之类的了
pgp就是咱们常说的“优良保密协议”,目前来说,它代指一个标准,即RFC4880标准,
而GPG是”GnuPG”的缩写,是一个实现了pgp标准的开源软件。
一切从这里开始,输入gpg -h
可以看到帮助信息,一共有三个选项和生成密钥有关
--generate-key generate a new key pair
--quick-generate-key quickly generate a new key pair
--full-generate-key full featured key pair generation
这里推荐使用--full-generate-key
,这应该是最常用的选项
S:\work_temp\ayw>gpg --full-generate-key
gpg (GnuPG) 2.3.6; Copyright (C) 2021 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.
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?
这里选择要生成的密钥种类,你可能发现了,条目前的序号似乎并不连续;如果查阅过其他教程,更会发现,几乎每个教程,这一步显示出来的种类都不一样
其实咱也不清楚为啥会这样.jpg ,但是这里只需要关心密钥所采用的算法即可,这里列出了你需要生成的密钥所采用的算法(RSA/DSA/ECC/…)。
在业界,这仍然没有确定的答案,GPG所支持的所有算法都足够强大且不易被破解,所以给出“最佳算法”往往带有很强的主观成分
GPG给出的默认值
P.S. : 咱的看法,目前是不推荐RSA了,越来越多的迹象表明,计算机科学的发展已经逼近RSA的安全阈值,破解一份RSA密钥的成本也将在可预期的未来变得可以被接受
言归正传,咱们在这里推荐先选择RSA (sign only)
条目,简单一点
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048)
这里询问你需要生成的密钥长度,当然是越长越安全,但是越长的密钥在生成和使用时会耗费更长的时间,这里咱填了4096。Requested keysize is 4096 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确定
接下来,PGP将询问你三条信息来建立这个密钥的身份信息,
PGP依靠一个用户ID
来确定一个唯一的身份信息,这个用户ID由真实名字(Real name)
、邮箱(Email address)
、备注(Comment)
三个部分组成,
GnuPG needs to construct a user ID to identify your key.
Real name: test
Email address: test@smyhw.online
Comment:
You selected this USER-ID:
"test <test@smyhw.online>"
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit?
备注(Comment)字段可以为空
最后使用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.
这里的意思是,程序正在收集随机值(从硬盘操作,鼠标移动,键盘输入等),但是请注意,不要在这个命令窗口中随机敲击键盘,你的输入会在随机值生成完毕后作为正常输入被敲进下一行命令。
同时,这里会弹出窗口让你输入私钥的密码,会弹两次(一次输入,一次验证是否正确)。
Note that this key cannot be used for encryption. You may want to use
the command "--edit-key" to generate a subkey for this purpose.
pub rsa4096 2022-06-09 [SC]
95A32031500EC67D8060F9236715CC3A19CC6770
uid test <test@smyhw.online>
最后,你现在应该已经拥有了一个pgp密钥
gpg --output <文件名> --armor --export <密钥id>
这样会导出指定密钥的公钥,这包括主密钥的公钥和所有的子秘钥的公钥
参数解释:
--output <文件名>
指定要保存的文件名--armor
导出为文本,而不是一个二进制文件--export <密钥id>
导出公钥,同时这里换成--export-secret-key
可以导出私钥WIP
事实上,没有办法指定使用哪个子秘钥,在执行操作(签名/加密/…)时,你只能指定你的主密钥id,然后gpg会自动选择选择使用哪一个子密钥(会根据密钥长度,你指定的密钥用途等参数),
你可以指定每一个子秘钥有什么用途(C/S/A/E标志),但是如果有两个子秘钥都具有相同的用途,比如你需要加密一个文件,而你指定的主密钥下有多个子秘钥均拥有E标志,则具体使用哪一个子秘钥取决与gpg的实现, 你无法自己指定 。
你可以为你的邮件加密、或者签名
加密可以做到
如果你需要更换你的主密钥,无论是它的有效期临近,或是它使用的算法已经不再安全
通过编写并签名一份 “GPG Key Transition” 来向他人说明你已经更新了你的主密钥
TIP -> 以GPG Key Transition
为关键词,可以在google上找到不少例子
在这里有一份ubuntu的GPG迁移实践,这应该较为权威