第58章

没有去上课的时夜, 今天坐在图书馆里,借用这边的网络。

当楚英纵上完课来招人的时候,就看见这冰山小学弟坐在某个多功能媒体室的最角落里, 若有所思地看着自己的笔记本电脑,眉头有若有似无的皱起痕迹。

——问题真的很难解吗?

楚英纵走进来带上了门, 看了时夜一阵, 不知不觉把自己带来的橘子全剥好了,悄悄放在时夜手边。

时夜抬头看向楚英纵。

楚英纵:“我超安静的!没打扰你!”

“……”时夜默默地又低下了头。

过了一会儿, 楚英纵偷瞄着时夜屏幕上的内容, 见他这次好像在看一个dll文件, 看函数名的名字大概为:CertDllVerifyMicrosoftRootCertificateChainPolicy……

楚英纵不由好奇地问:“你不是要破解手机吗?怎么在看数字证书的东西?”

时夜道:“ECC更新了新版本,和IOS兼容性不是很好,可能有漏洞。”

楚英纵听了, 精神一振:“有道理啊!”

他跟着也瞄起了屏幕,粗略地看了看里头新更新的函数。

根据版本更行后的对比来看,微软这次主要是修改了几个证书链接策略有关的函数, 新增了几个对于新协议的兼容性入口。

时夜若有所思地来回调试,将一些关于内存对比的代码进行了高亮处理。

楚英纵对于这点东西还是能看懂的, 好奇地说:“是这里在对公钥进行对比吗?”

时夜说:“嗯。”

数字证书, 可以类比人的“签证”,需要通过官方信赖的机构进行签发。

用微软发明的这个椭圆曲线算法(ECC)来进行举例:签证机构首先选取一个私钥, 将私钥定义一条椭圆曲线,引入额外参数, 来得到椭圆上的另一个解, 这个解就是公钥。

私钥这个东西只有签证机构自己知道,但是公钥是要发布到全网上的。

当签证机构给某个软件签发数字证书的时候,他会用自己的私钥、某些局域参数和哈希值一并来产生签名, 也就变成了那个软件的“签证”。

然后,公网上的任何人,都能够使用公钥,来比较这个软件的签证,也就是自己再通过一次椭圆曲线计算,可以对比得到结果是否相等——

相等就说明“签证”就是官方机构签发的,没问题了;

如果不相等,那么这就是“无效签证”,这个软件就是可疑的,是没有护照的黑户,不予信任。

这一整个数字签证的过程,就是一场不对称的加密策略。

“不对称”就在于:签证机构持有私钥,而所有人都持有公钥,整个过程只能验算,却无法逆推。

就像国家掌握了印钱的防伪技术,所有人都能简单地用看一看、摸一摸的手段来验明钱币的防伪标记,但是没有人能伪造出这种标记来。

这种技术也能最大程度地帮助计算机软件来防伪,也就变相保证了设备本身的安全性。

但是,在时夜的世界里,没有不可能一说。

毕竟——“世界上没有绝对安全的系统,只有尚未被发现的漏洞”。

他来回调试着更新后的ECC签证算法,接着发现了一个叫做“CertVerifyCertificateChainPolicy”的函数,连续传递了四个证书相关的参数,而且未做任何处理,便传向了下游的函数。

他陷入了沉思。

楚英纵见时夜突然停在了某个确定的位置上,不由也盯着看了半晌,抓耳挠腮的问:“时小夜,我能看懂OID这个参数,剩下三个是什么意思?”

时夜拿起笔,随手在纸上写下了这几个参数,对他解释道:“假设根证书的私钥是p,这个私钥我们无从得知,但ECC的基点为G,那么公钥就是pG。这几个参数只是在自定义椭圆曲线的参数r、s和公钥……”

说到此处,他声音突然停住了。

楚英纵猛地“啊”了一声,说:“那这么校验的话,我自己传参进去,用一模一样的自定义参数,不就可以用随便一个私钥也可以进行签证了?”

时夜沉默片刻,说:“你想的不错。”

时夜在电脑上打开了命令提示符,开始使用openssl命令,自己伪造一系列参数,尝试生成新的ECC证书。

然后用伪造的ECC证书,他随手对一个三无小软件做了签名。

楚英纵看到一半的时候,已经自发自觉,默默地将自己的手机掏了出来,连接到电脑上。

接着,时夜尝试将软件安装到他的手机上——

数字签名校验通过。

软件安装成功。

到这一步,楚英纵的嘴巴已经变成了“O”型,叫道:“哇哇哇哇哇哇哇我们发现了一个0day!时小夜,发了啊!”

时夜平静地:“嗯。”

他继续做着接下来的工作,检查了一下这个自己伪造的数字证书,名字只是随便打了一个“1”而已,签名者的名字和日期都没有,但在系统里却是可被信任的“正常证书”。