@
acess 信任是个很宽泛的词语,不太好一概而论。
在本贴里的案例来说,信任分为 2 个层面。
1 、是对个人的信任。
2 、是对事实的信任。
对个人的信任每个人有不同的想法,你可以相信某个人不会刻意去做危害你的事情,也可以相信某个人会因为各种各样的目的来危害你。大多数情况下因为其不可证伪性,这个问题没有绝对正确的答案。
为了克服对个人信任的不确定性,人类需要可以证明或者证伪的事实来确保信任。
正确的开源本身保障了:
1 、开发者难以通过插入恶意代码来危害用户。即使用户自己不懂代码,只要一旦存在恶意代码会很容易被人审查到并且披露出来。因为源代码人人都可以看到,不可能所有审查代码的人都自己主动包庇开发者,所以我们可以相信恶意行为会被披露。
2 、通常开发者会直接提供二进制文件供用户直接使用,开发者仍然可能在二进制文件上动手脚,开源保证了如果用户不信任开发者提供的二进制文件可以自行来制作二进制文件。
基于这两点来考虑开源之后对开发者的信任就不再重要了。因为可以相信社会上一定存在懂代码的好人,所以如果有问题这么一群人一定会指出来。
政治因素无法扭曲这个逻辑过程,所以政治因素不会影响这个结论。
至于 KDF 的问题
增加密码的熵值并不能起到和 KDF 一样的效果,原因是对于这种对称加密来说密码必须是可重现或者可预测的,而增加再多的熵都只能是一次性的,并且增加的熵必须要以某种方式来保存,所以找到增加的熵的时间必然很短,这并不能起到抗穷举攻击的作用。
单纯给密钥增加一个随机熵的思想密码学上通常是用来预防查表攻击的。
原因是任意的加密算法只要给完全一致的参数都会得到完全一致的结果,所以对于常见的加密结果我们可以通过预先生成的结果来比对加快破解的速度。增加随机熵后因为随机熵不可预测,所以不可能预先生成结果来比对。
具体到实践上,一种典型的实践方式是使用加盐密码哈希,以此来对抗查表攻击。
使用 KDF 时要得到解密所需要的密钥就必须符合下面的过程:
解密所需要的密钥=KDF(密钥, 随机盐, 迭代次数)
尽管单次 KDF 运算所需要的时间很短,但是由于有迭代次数的存在,即使知道了全部正确的参数,不执行迭代次数次的 KDF 函数仍然无法得到正确的密钥。
迭代次数增加将会拉长得到解密密钥的时间,提高攻击者的时间成本实质上就是降低了攻击者再有限时间内能尝试密码的次数,所以说 KDF 是能抗穷举攻击的。