加密很容易,密钥管理却很难
有些加密标准是值得信赖的,因为它们是历经千辛万苦开发出来的。从开源库中获取一个加密标准并且确信加密是安全,这并不难。
然而,难点就在于,在需要密钥的人之间分发密钥。AES这样的对称加密系统要求密钥通过安全通道单独传输,但如果我们已经有安全通道,我们就不需要加密了。如果我们提前规划好,我们通常可以将合适的密钥交给合适的人保管。
公钥系统使人们很容易在没有提前会面的情况下建立安全路径,但它们也不是没有问题。你怎么知道你正在对某个人使用正确的公钥?证书颁发机构是否值得信赖?人们仍需对系统放胆一试。
支持代码是很脆弱的
密钥分发并不是使加密开发人员噩梦连连的唯一方面。算法的很多部分都有可能泄漏信息,有时是故意泄露的。例如,将随机数与报文混合是很常见的,但找到这些随机数可能很棘手。有些所谓的随机数生成器是有缺陷的,根本算不上随机,而且由于它们是可预测的,人们可用其来猜测密钥并破解报文。光有加密算法是不够的。
共享硬件是很危险的
最近,由于云端成本低廉且十分灵活,有越来越多的代码在云中运行。没有人知道与你共享机器的邻居在做什么,这就是问题所在。有很多漏洞可以让一个软件窥视同一台计算机上另一个软件所占用的内存。操作系统开发人员试图阻止这样的软件,但新漏洞频频出现,如RowHammer等。这就好像云中的机器会遭到数十种可能的攻击,而我们才刚刚开始意识到问题的严重性。
被黑的硬件是很难检测到的
你见过芯片上的晶体管吗?你确定它们已经忠于你,忠于软件开发人员?有些聪明的黑客对某一芯片进行逆向工程并发现内有乾坤,即里面有一个由随机字节串触发的全能模式(god mode),非常隐秘且没有任何记录。到底是谁将这个模式植入芯片的?并没有人出来邀功领赏。
数字签名不过是转移责任
一些最好的数字签名算法,其背后的数学具有欺骗性并使人放松警惕。只有私钥的所有者才能执行产生合法数字签名的计算。这听起来比手写签名要可信得多,因为连小学生都可以在不合格的试卷上伪造父母的签名。
但真的是这样吗?私钥不受人们的约束。数字签名只能由有权使用私钥的人生成。这个人可能是合法的所有者,或可能是某个黑入计算机或直接偷窥密码或植入键盘记录器或发现了获取密钥的方法的人。如果你的密钥保存在计算机里,而且你的计算机接入了网络,那么这可能是世界上任何一个同样接入了网络的人。
科学家正在努力打造安全的硬件和强大的解决方案,但他们充其量也只是使攻击者没那么容易发动攻击。但即使是普普通通的弱点也能轻松地颠覆精妙绝伦的数学。
有人保持沉默
有些数学家和密码学专家喜欢公开谈论加密技术。而另一些数学家和密码学专家则沉默不语。我们甚至不知道究竟有多少人对此保持沉默。
社会掌握了那么多代码和密码方面的知识,这简直是一个奇迹。但是,我们使用加密技术的次数越多,对所有弱点保持沉默的动机就越大。当白花花的银子和真正的秘密流经由加密武装的互联网管道时,掌握任何一个漏洞都价值连城。换句话说,我们使用加密越频繁,秘密就越深藏不露,越不可告人。