生成属于你的PGP密钥ID靓号
# 前言
最近在折腾 PGP(OpenPGP)密钥,发现原来 PGP 也有所谓的 “靓号”,于是在网上查了些资料,最后整理一下做个笔记。
# 原理
为方便描述,下文的 “位” 均按十六进制计算而非二进制。
PGP 所谓的 “靓号” 其实就是指密钥的十六位的 ID,对应密钥指纹的后十六位。
例如我的 PGP 密钥指纹为 7B49 3862 FEFB 5A10 B875 4458 391C C423 AEFF 3B06
,那么它的密钥 ID 则为 391C C423 AEFF 3B06
。
其实部分场景还会以后八位为 ID,但在当今算力下,八位 ID 还是太容易碰撞了,因此现在一般以后十六位为密钥 ID。
而我们的 “靓号” 本质上也是通过碰撞来获得的。
经过博主测试,博主的 NVIDIA GeForce RTX 3060 laptop 140W 在满载情况下,八位 ID 仅需不到 1s 即可碰撞成功,十二位全重复(十二个相同的数字)ID 耗时三小时仅碰撞成功一次。
所以,能否获得自己喜欢的靓号还是要拼(mai)财(xian)力(ka)(doge)。
# 开始
因为本篇博文仅作为笔记,因此笔记环境仅按照博主当前环境配置,其他环境请自行摸索。
# 环境
显卡使用 NVIDIA 显卡,AMD 显卡请自行寻找教程。
系统环境使用 WSL2 下的 Ubuntu22.04。
Tips:不要使用 msys2,会变得不幸。
安装或者更新 NVIDIA 显卡驱动至最新版。
Tips:此步骤不是必须,但需要保证后面 CUDA toolkit 支持当前版本驱动,否则可能会出现驱动过老或过新导致的无法正常使用。
在 WSL2 内安装 CUDA Toolkit,具体教程 NVIDIA 官方已出,请参考 https://docs.nvidia.com/cuda/wsl-user-guide/index.html
根据官方教程安装完 CUDA Toolkit 后输入 nvcc -V
检查是否能够正常使用,如果无法正常出现版本信息请添加环境变量。
# 拉取程序
本次使用 gpg-fingerprint-filter-gpu 这个项目进行靓号生成。
1 | apt install libgcrypt20-dev |
如果出现缺少包情况补全相关依赖包即可。
# 生成靓号
这里我推荐使用 gpg-fingerprint-filter-gpu 下的 batch_generate_keys.sh shell 脚本来生成。(因为原项目生成一个靓号后就会自动停止,使用脚本可以生成自定义数目的靓号)
1 | wget https://raw.githubusercontent.com/comicchang/gpg-fingerprint-filter-gpu/master/batch_generate_keys.sh |
将脚本下载到和原项目同一文件夹下后编辑脚本
在其中找到正则表达式部分,将自己想要的正则表达式代替填入,例如想要八个八就可以填 8{8}
,既想要八个八也想要 114514 就可以填 8{8}|114514
。更多玩法可以参考项目介绍。
tips:密钥 ID 是十六进制,因此不可能出现大于
F
的字母。
改完脚本后运行脚本(可能还需要增加可执行权限)
1 | ./batch_generate_keys.sh 0 100 ed25519 ~/output |
- 0:GPU_INDEX
- 100:KEY_COUNT
- ed25519:算法
- ~/output:私钥输出路径
运行脚本后即开始碰撞想要的密钥 ID。
# 导入密钥
因为生成的 key 都是空的 UID,因此导入时需要加上 --allow-non-selfsigned-uid
1 | gpg --allow-non-selfsigned-uid --import xxx.gpg |
或者,你甚至可以尝试 “卖号”?(不知道有没有人买 doge)
# 后记
本来生成了几个靓号,但是自己的 PGP 密钥早已在使用中,懒得更换了,所以这次折腾也就图个乐子。
# 参考
Use this card to join MyBlog and participate in a pleasant discussion together .
Welcome to GoodBoyboy 's Blog,wish you a nice day .