Re: 生成一个漂亮的 GPG key
注:本文不保证这种方式生成的 GPG key 的安全性。
最近 Keybase 被 Zoom 收购了。由于 Keybase 有个托管私钥的功能,有些曾经托管私钥到 Keybase 上的人担心自己私钥的安全性,想换个 GPG key 来用。
反正基于各种原因,有人想生成一个 fingerprint 漂亮点的 key 来用。这种时候就可以使用 scallion 啦。
Scallion 可以用于生成漂亮的 GPG 密钥或者 .onion 地址 (v2)。至于生成方法,就是纯暴力地生成然后检查 GPG key 或者 .onion 地址是否符合要求。所以这其实是欧皇的游戏:你的运气好,那就很快能生成完毕;运气不好,就可能要等很长很长时间。如果能用到比较好的 GPU 的话,生成/验证速度可以变快很多。
步骤
首先下载 Scallion。
用法很简单:
scallion -k <KEY_LENGTH> --gpg <FINGERPRINT_REGEX>
这里的正则并不是正则表达式的全集,而是一个子集,不过大部分情况下也够用了。例如,我想生成一个 fingerprint 以 114514
结尾的 GPG key:
scallion -k 4096 --gpg '114514$'
之后 Scallion 就会开始生成。因为是暴力生成,所以并没有什么「生成进度」之类的东西,停止或者重新运行,都不会减少期望工作量。算完之后会给你类似这样的一段 XML:
<XmlMatchOutput>
<!-- (略) -->
<PrivateKey>-----BEGIN PGP PRIVATE KEY BLOCK-----
Version: Scallion
<!-- (略) -->
-----END PGP PRIVATE KEY BLOCK-----
</PrivateKey>
<!-- (略) -->
<PublicExponentBytes>tAD0Pw==</PublicExponentBytes>
</XmlMatchOutput>
当然中间的 <PrivateKey>
块就是我们想要的私钥啦。试着导入一下:
$ gpg --import key.pri
gpg: key 0x12AC733D62114514: no valid user IDs
gpg: this may be caused by a missing self-signature
gpg: Total number processed: 0
gpg: w/o user IDs: 1
gpg: secret keys read: 1
这确实是我们想要的 key,但是似乎没有导入成功。至于如何导入进来:
$ gpg --allow-non-selfsigned-uid --import key.pri
gpg: key 0x12AC733D62114514: accepted non self-signed user ID "Scallion UID (replace me)"
gpg: key 0x12AC733D62114514: public key "Scallion UID (replace me)" imported
gpg: key 0x12AC733D62114514: secret key imported
gpg: Total number processed: 1
gpg: imported: 1
gpg: secret keys read: 1
gpg: secret keys imported: 1
这样就导入成功了。然后用 gpg --edit-key 62114514
删除 Scallion 填入的 uid,加入自己的 uid,你就有了一个 fingerprint 很漂亮的 GPG key 啦。
至于为什么标题带个"Re:",当然是为了纪念一下延迟到七月的 Re:0 第二季。