一位 PGP 进步青年的科学算号实践

一位 PGP 进步青年的科学算号实践

https://www.douban.com/note/763978955/

在这篇文章里我将与大家严肃探讨 PGP 科学算号这个话题,顺便分享自己对宇宙、人生、爱情、理想、中美脱钩、火星殖民、FreeBSD、吃虾要不要去除虾线、你需不需要一台炒菜机等一系列重大问题的看法

与所有重视隐私且患有被害妄想症的进步青年一样,使用 PGP 是我的日常。加密后的信息不光别人无法看到,要是有一天我自己丢了私钥,最后也一定成为千古悬案(在量子计算实用化之前)。这样的安全性让我很满意

PGP 的工作原理在此不予赘述。PGP 公钥会有一个四十位的十六进制指纹(哈希值),可以近似理解为加密通信界的电话号码。密钥服务器以及应用软件通常会显示这四十位中的最后八位或者十六位(唤作 Key ID),乍一看长这样:

PGP 进步青年的日常就是盼望别人给自己发送用这个公钥加密的信息,再用对方的公钥加密回信

什么是 PGP 靓号

有号码的地方就有人,有人的地方就有江湖,有江湖的地方自然就有靓号烂号之分

类似电话号码,好看好记且意义吉祥的 PGP 公钥指纹被尊为靓号,受到对生活品质有较高要求的进步青年的热烈追捧。而那些千奇百怪的沙雕烂号,在进步青年眼里是断然没脸拿出手的

烂号对人的伤害罄竹难书,不信请看这位钢铁直男与烂号 542B91BB 不得不说的真实故事:

对比一下,要是像下面这位暖男一样使用靓号 520BB520,气氛是不是一下子就温馨起来了呢:

靓号的重要性不言而喻。然而,有的朋友在追求靓号的过程中迷失了自己,偏离了辩证唯物主义的轨道,将靓号的出现寄托在求神拜佛上,在社会上造成了不好的影响

鲁迅曾经说过,「靓号的最高境界,就是以科学的头脑武装自己。」邓小平进一步指出,「科学算号是第一生产力。」

亲爱的朋友,历史告诉我们,科学算号才是黑暗中指引人类前进的明灯

什么是科学算号

科学算号,就是(一小撮)受过高等教育的和/或在高科技行业工作的进步青年以(看似)科学的方法利用各种科学工具精确计算出期待的密钥号码的一种高级别创造性生产活动(请注意不要随意简化「创造性生产活动」这个固定搭配

其实严格说来并不是算,而是暴力穷举然后过滤出靓号。算靓号程序的主要功能就是无限循环产生 PGP 密钥,然后根据靓号标准过滤

几年前我写了一个调用 GPG 套件的简单 bash 脚本,只花了不到一周时间就在笔记本上算出了一个 PGP 镶钻五连号,运气好到爆炸

这个陪伴我多年的 2048 位 RSA 镶钻五连号是如此的与众不同,也因此被誉为人类文明史上的瑰宝

这个靓号长这样:99999ABC

我还有另外一些次靓号,比如这样的:00788888

有一些人可能会反驳了,切,多大点儿事,我还以为抢鸡蛋呢,不就是五个 9 加 ABC,还有 007 加五个 8 嘛。为啥不是 88888888 或者 99999999 那样的八连号,岂不是更靓?

呵呵,你们这些缺乏生活磨砺的年轻人实在是太天真了

PGP 指纹完全随机生成,最后八位组合根本就不可预测。四连号的出现概率在实测中差不多低至千里挑一的 0.1%,而五连号更是凤毛麟角,再加上 ABC、007 这样的高级要求,最终镶钻五连号的概率会降低到什么程度?

我怕答案说出来吓死你们

当然我统计学得烂,自己都算不清。但是请相信我,镶钻五连号已经属于普罗大众所能触碰的极限,妥妥的人中吕布马中赤兔。妄想拥有八连号?洗洗睡吧,那简直比登月还难

可惜,由于需要把 RSA 加密更换成安全和性能都更好的 ECC 加密,我不得不忍痛割爱重新算号

不必深究 RSA 和 ECC 的区别,只需要知道当今 PGP 界最炫的仔都以使用 ECC 密钥为荣就好。ECC 靓号被誉为 PGP 皇冠上的璀璨明珠

「这是不是有病?」我听到有人在问

是的

可是,亲爱的朋友,一个没病的人又怎么会去使用 PGP 呢?

我的科学算号实践

回想之前的 RSA 镶钻五连号并没有花费多少时间,而 ECC 比 RSA 的计算速度更快,再算一个靓号应该是分分钟的事,最不济让它多跑几天就好了。于是设好参数就美滋滋睡觉去了

第二天一早醒来发现自己错了

原来这几年 GPG 套件变化不少。除了增加 ECC 算法,具体的内部实现方式也各种大改,比如换了新的密钥存储格式。结果就是不光单个算号速度变慢,就连存储也会因为受不了持续添加密钥而卡死(旧版 GPG 套件可以将生成密钥以文件形式存到别处再处理,不需要添加进密钥环

我的电脑呻吟了一晚上也才憋出几千个号而已,连几年前的效率都比不上

没办法,活人总不能被一个 GPG 套件憋死。PGP 进步青年不得不另辟蹊径

无巧不成书,就在我刚刚准备研究新策略的时候,Arch Linux 主页上一位成员的 PGP 号码映入眼帘

霸道总裁爽文都不敢这么编,但那个号居然是吊炸天的十六位极品 EEEEE2EEEE2EEEEE!更强大的地方在于它同时还是个工整的回文!

天哪!我的妈!

当场我就目瞪口呆。回过神来之后给他发了封加密信,大概这么个意思:

嘿,我亲爱的老伙计,真是见鬼,你的 PGP 号码简直太不可思议了!我向圣母玛利亚保证,那是我这辈子见过的最靓的号码!噢我的上帝啊,它竟然还是个回文,就像隔壁苏珊婶婶做的苹果派一样!
请原谅我的愚蠢问题,但我真的很好奇。看在上帝的份上,你能告诉我究竟是怎么办到的吗?我敢打赌这该死的靓号一定是被刻意算出来的,否则就请你用坚硬的靴子狠狠地踢我的屁股!我向上帝发誓!
你真诚的 金沙雕

靓号界圈子不大,进步青年们大多也惺惺相惜。果然很快就收到了热情洋溢的回信:

沙雕君一定是怀着对天下美好的期盼来的吧,真是让人无法拒绝呢。
算号的秘密在于计算成本。穷举密钥的成本很高,但最终的指纹还取决于其他参数。对同一密钥采用修改时间戳这个低成本参数的方式来获得新的随机指纹,比直接换密钥测试的速度要快很多。所谓心有猛虎,细嗅蔷薇,这就是我猛虎算号流的终极奥义!!!
加油吧沙雕君!!!你不能输,因为你是龙的传人,帝国复兴的野望就拜托你了!!!
以上 靓号帝

原来是这样。得到了靓号帝的悉心指点和亲切勉励,我的脑洞膨胀得更大了。虽然因为需求不同,靓号帝的方案于我而言没有实用价值(靓号帝对时间戳无所谓,而我的密钥时间戳设成了一个吉时,也是靓号的重要组成部分),但是他直接霍霍 GPG 程序实现大力出奇迹的思路还是给了我很多启示。于是我决定从霍霍程序入手

研究了几套方案,从 GPG 到 kbpgp 到 OpenPGP.js,最后采用了 OpenPGP.js,一个 JavaScript 的 OpenPGP 实现。JavaScript 的特点是野,给点星星之火就可以燎原。不光野,还浪,比 GPG 的 C 容易上手,以至于不管是谁都能上去霍霍两下

在霍霍过程中,我甚至还顺手修了一个小 bug:

很快,一整套基于 OpenPGP.js 的算号生态系统就写好了,覆盖了一个普通人所能想到的常用算号场景:

1. 电脑算号
2. 服务器算号
3. 树莓派算号
4. Lambda 算号

同时它还覆盖了一个 PGP 进步青年所能想到的更多算号场景:

5. 手机算号
6. 平板算号
7. 电视算号
8. 特斯拉算号

其中,电脑、服务器与树莓派算号都属于传统 Node.js 应用,每个核心分配给一个算号进程:

Lambda 算号也是类似的 Node.js 程序,只是放到 Lambda 运行,以 Lambda 免费额度为上限,采用裂变式触发机制:

Lambda 并发进程数:1000(系统默认限制
Lambda 裂变进程数:9^0 + 9^1 + 9^2 + 9^3 = 820(每级触发下级 9 次,一共 4 级,不超过 1000 个并发进程
Lambda 计算号码数:1200 * 820 = 984000(单次触发计算 1200 个号码
Lambda 每月免费额度:984000 * 6 = 5904000(6 个 AWS 账户

而手机、平板、电视和特斯拉算号则是采用同一套 SPA 方案(Vue.js 实现),只需要支持浏览器的设备就能随时随地算号

特斯拉算号:

值得一提的是,第一次电视算号使用了事先毫不知情的朋友的 Smart TV 来演示。后来听说这个资深算号异议分子还给气病了,在床上躺了好几天

所有算号都在不同设备上同时进行,结果统一存放到 DynamoDB。当它们一起运行时,画风是这样的:

科学算号成果总结

科学算号工程自 2019 年 5 月启动以来,大半年时间里最多也就是七连号。2020 年 1 月出现了第一个八连号 22222222,这个尴尬的号码似乎是在嘲笑我白费力气

可是我并没有气馁,整个科学算号生态系统仍然照常运行

最终,命运女神被我顽强拼搏不屈不挠的精神感动,在太平洋时间 2020 年 5 月 22 日凌晨 3 点 26 分 27 秒时将完美的八连号 99999999 奖励到服务器上!

事后仔细检查发现,之前还有另一个八连号 55555555 被算出,所以时间轴应该是:

1. 22222222(2020 年 1 月
2. 55555555(2020 年 1 月至 5 月之间
3. 99999999(2020 年 5 月

是的,从嘲笑的 22222222,到哭笑不得的 55555555,到缴械投降的 99999999,PGP 进步青年终究还是扼住了命运女神的喉咙!金沙雕终究还是没有辜负靓号帝的期望!

整整一年多时间,全覆盖的算号生态系统 24x7 全负荷工作,粗略估计超过十亿号码的运算量,却只出现了三个八连号。这是何等的残酷!

想到这里,我不禁流下了鳄鱼的眼泪。嘤嘤嘤,我好强啊!!!

亲爱的朋友,如果你自信能拿出比 99999999 更靓的 PGP 号码,请指教。我一定请你吃饭

Report Page