Re:Linked
Re:Linked
ionicons-v5-j
ionicons-v5-q

Re: 生成一个漂亮的 GPG key

Created: 1812 char, ~8 min to read

TOC

注:本文不保证这种方式生成的 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 第二季。