生成属于你的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 .