公共密钥、受信硬件与分组链接——开发人员应当利用这些技术工具帮助实现面向每位用户的互联网保护目标。
时至今日,互联网已经成为认识论层面的混沌深渊。根据Peter Steiner在其著名的《纽约客》动画中所提出的假定——同时也得到了数百万同行的支持——无论是凶猛的恶犬还是宣称将捍卫我们财产安全的银行,都没办法真正了解我们的交换数据包是否被人调了包。更糟糕的是,Edward Snowden已经披露称,美国国安局可能已经将我们的部分或者全部数据包进行了备份,这意味着其它国家以及部分黑客组织完全可以效法国安局干出类似的恶行。
然而,我们仍然在将大量数据倾卸给路由器,并一厢情愿地认为这些小小的传输设备能为自己搞定一切——即使不行,麻烦也处于可控范围之内。黑客们有可能会取得联邦政府计算机的root权限并窃取到税收资料的副本,但除非他们愿意帮大家交税(这显然不可能),否则这类信息外泄好像也没什么大不了。而在恶意人士窃取到我们的信用卡信息并在Office Depot上购买iPad时,信用卡公司会负责承担相应损失。没错,我们很容易陷入这样一种虚假的安全感当中,并为此沾沾自喜。
虽然大多数普通群众都因为上述理由而对互联网的混乱不堪与信任缺失状况视而不见,但这并不代表我们也应当继续心安理得地听之任之。这种趋势除了让欺诈人士愈发猖狂之外,还会带来更为惊人的深层社交成本。毕竟我们每个人都需要承受更为可观的交易费用,因为其中包含着可观的潜在欺诈损失成本。这种日益严重的信任缺失最终将伤害到我们每一个人。
我们当然没办法运起神功让互联网在一夜之间变得完美无瑕,但我们确实能够添加更多保障性功能,使得用户对互联网的信任逐步提高。有鉴于此,今天的文章将为大家带来以下九项指导思路,旨在更为可靠地保护数据、隐私以及通信内容安全。修复互联网安全问题是一项崇高、甚至有些高不可攀的目标,但如果我们每个人都在项目开发工作当中将安全考量纳入进去,那么相信互联网世界终将变成美好的人间。
Facebook公司一直在致力于确保自身所服务的用户皆为使用真实姓名的可信群体。考虑到如此庞大的社交规模与人类的某些天性,我们没办法断言Facebook在这方面已经取得全面成功,但其长期以来坚定推动用户账户实名可信度的作法确实给互联网带来了深远影响与积极意义。
今年以来最令人振奋的消息,可能莫过于Facebook将允许用户通过Faceoobk系统分发其PGP公共密钥了。任何打算通过PGP向个人发送邮件的用户将能够访问Facebook并下载到对方的公共密钥,并以此为起点立即实现安全通信。
出于多种原因,这套方案尚称不上完美,不过其安全水平至少要比使用保障力度更为低下的公共密钥库好得多,而且基本上要比寄希望于随机网络页面提供的正确公共密钥更为靠谱。在上一次检查的时候,我发现公共PGP服务器上某些与我姓名相关联的密钥并不能为我所使用。相比之下,Facebook公司确实迈出了坚实的一步,其效果比那些运行在随机服务器上的免费服务好得多。
我们还需要考虑虚假账户的存在以及Facebook与用户间连接的安全性水平。不过,可以肯定的是真人用户往往会定期更新当前状态,我们能够很轻松地利用这一点评估其密钥是否可信。
那么其它服务是否也会开始分发公共密钥?它们是否也会着手建立一套更为可信的网络环境?银行与信用卡发卡机构可能会率先行动。出纳员及分支机构员工已经非常了解监管事务,他们能够有效提高公共密钥库的受信水平。学校与大学对于学生们的操作活动也比较了解,因此能够作为另一种理想的起步环境。总而言之,任何一种能够帮助我们更接近PGP缔造者Phil Zimmerman长久以来所构想的理想网络信任效果的努力都值得我们称道并加以推动。
如果攻击者能够猜出我们的密钥,那么目前市面上现有的任何加密机制都将失去作用。解决这一问题的传统办法之一在于使用由随机数生成器所挑选的随机密钥。不过新的问题又来了:这种随机数生成器是否值得信任?
这绝不仅仅是种理论层面的可能性。2007年,来自微软公司的两位研究人员就在Dual_EC_DRBG(即双椭圆曲线确定性随机数位生成器)当中出现了潜在的后门,随后技术行业很快将其打入了冷宫。最后,在经过数年的论证之后,国家标准与技术协会于2014年决定彻底中止对该算法的支持。
然而,即使是最出色的研究人员也很难找出那些潜在的后门,因此将希望单纯寄托在他们身上将令用户身陷危险。那么我们该如何确保自己所使用的随机数生成器安全可靠?举例来说,大家可以利用加密安全散列功能提高复杂性水平,从而进一步提高生成器所生成数值的随机性。
任何加扰机制都会加入额外的数字内容,从而提高攻击者获取控制权的难度——举例来说,他们可能需要投入更多时间或者来自网络的全局可下载值,例如比特币分组链接之上的当前散列值。这将有效防止攻击者们对随机数生成器的输入内容加以控制。
随着越来越多算法开始将加密机制纳入自身,我们需要比以往更为丰富的备选随机密钥。要拥有一套稳定且不易被猜到的随机密码生成机制,我们在技术基础的构建方面还有很长的道路需要探索。
考虑到软件层以及现代计算机设备的复杂性,我们在默认情况下应当将它们首先视为不安全状态。台式设备乃至智能手机当中可能包含有大量潜在后门,就连打印机产品也未必像大家想象的那样处于全面受控状态之下。
技术研究业界长期以来都在尝试创造出一种有针对性的小型计算机设备。其中一部分专门负责计算特定登录操作,另一部分则计算数字签名。用户的个人密钥可以被锁定在单一芯片当中,这样恶意人士将很难提取到其中的机密数据。尽管我们可能永远无法保证信息百分之百处于安全状态之下,但这类设备确实能够构建起相对理想的防御体系,从而限制恶意人士的攻击能力。举例来说,它能够利用机械开关来防止机密数据为他人所访问。另外,每次开关处于启用状态时,它也可以确保赋值操作只生效一次。
如果每个人都能使用这样一款小型受信设备,那么每个人都将能够创建数字化签名,从而将网络信任水平推上新的高度。虽然设备丢失及安全漏洞仍可能构成威胁,但这些小部件的出现无疑将令互联网变得更加靠谱、也更令人放心。
众所周知,数字文件的内容能够轻松进行修改。相较于将修改过程详细表现出来的纸质记录,数字文件显然能够根据需要以任意内容示人。而更糟糕的是,大部分文件系统并不太关注内容修改时的操作记录。水平较高的黑客不仅能够修改文件本身,同时也能够对记录进行回溯,从而令人完全看不出其篡改痕迹。
检测内容变更的最简单办法就是使用加密安全散列功能,该值的作用类似于对文件进行校验且很难被攻击者所伪造。数据当中的任何变更都会反映到该散列值当中,而且我们几乎不可能在不影响散列值变化的前提下对文件内容加以修改。
当文件内容随时间推移发生变化时,散列值序列本身可以通过Merkle树进行散列化处理。这能够确保我们了解文件的变化历史,包括其具体修改时间。像这类经过良好计算的散列值已经成为Git协议当中的固有组成部分。只要更多地将此类处理思路纳入到总体文件系统当中,我们就能更为准确地把握文件动态。虽然这些系统只能检测到是否存在内容变更,但却无法随时加以修复,不过仍然要比以往那种一无所知的状态好得多。