文章摘要
GoodBoyboyGPT
本篇文章讲述了原作者在折腾 PGP 密钥,发现 PGP 也有所谓的 “靓号”,于是整理笔记,详细介绍了生成和导入密钥等过程。其中包括如何获取 GPU ID、安装环境以及利用相关项目进行靓号生成的步骤,并提供了一些技巧提示。最后还分享了自己的使用体验和部分参考链接。/span>
此内容根据文章生成,并经过人工审核,仅用于文章内容的解释与总结

前言

最近在折腾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
2
3
4
5
6
7
apt install libgcrypt20-dev

git clone https://github.com/cuihaoleo/gpg-fingerprint-filter-gpu

cd gpg-fingerprint-filter-gpu

make

如果出现缺少包情况补全相关依赖包即可。

生成靓号

这里我推荐使用 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密钥早已在使用中,懒得更换了,所以这次折腾也就图个乐子。

参考