【Internet History, Technology, and Security】第九讲心得
之前的课程中有提到加密方式分为两种,那次着重强调了密钥,而这次则是从剩下一种加密方式,公钥开始说起:
Security Public/Private Key - Secure Sockets
先在上一节课中,提出了两个概念:保密性和可靠性,我们有谈到了一些简单可行的方法来确保像凯撒密码这样的东西的保密性,比如使用一个基于共享的数字签名来实现完整性。但在互联网世界,这样很难,因为你不能总是将用户先聚集到某个地点,然后与他们分享这个签名,再让他们回到各自的生活去使用他。
公钥加密被认为是解决这个问题的一种非常优雅的解决方案。它是由Diffie和Hellman在1976年提出的。它依赖于两把钥匙,它是不对称的,这意味着我们不再使用相同的密钥来加密和解密,有一个不需要任何保护的公钥,还有一个自己保存的私钥。你发送公共密钥,公共密钥被用来进行加密,然后使用私钥进行解密。它们在数学上是相关的,以一种很好理解的方式,但是很难计算出它们的密钥长度,因为这二者都足够长。
但是“很难”并不意味着“不可能”,就像前面课程说的那样,不存在绝对的安全性,当计算机足够快时,我们可以通过暴力破解来解除公有密钥,当然,随着计算机速度的加快,公钥的长度也会相应地变长,对应的计算也会加大。所以至少就目前而言,公钥还是相对安全的保护方式。
如果要使用公钥加密,就必须生成一对钥匙。先选择两个足够大的随机数字,将它们相乘,得到的数字就是公钥,而开始的两个随机数则为私钥。从这里你应该就能看出来,如果只知道公钥去破解私钥的难度有多大,简单来说就是求某个数字的因子,但如果这个数足够大,计算量是非常恐怖的。但换句话说,如果你能掌握其中一个私钥,那么自然,找出另一个就是很容易的事。
在生活中,假设你现在在亚马逊上购物,你将银行卡的信息输入进了网站。亚马逊公司自身会有一个公钥和一个密钥,他们将公钥通过互联网发给你,你用公钥对你的银行卡信息加密,再将其发送出去,而这时候,有个窃听者窃取了你加密后的银行卡信息,诚然他们可以用超级计算机不眠不休地运转几个月时间来破解这串密码,但对于亚马逊来说,解除这段加密信息则只要几秒钟的时间。
在拥有了这样的密码机制后,工程师们就可以对原本的网络层次做出一些修改,在应用层与传输层之间增加一个新的概念:TLS(Transport Layer Security,传输层安全协议),也被称作SSL(Secure Sockets Layer,安全套接层协议)或者HTTPS,它负责加密和解密应用层传递过来的信息,保证传递信息的可靠,而其他层次则维持原来的搬运工作。因为价格原因,曾经有许多公司尝试在不适用安全协议的情况下进行一些活动,对于我们消费者而言,千万不要将敏感信息键入一个没有HTTPS的URL中。虽然仍然会存在病毒或者钓鱼网站威胁着你的信息安全,但至少这最基本的安全意识还是应该要有的,对吧?
Security - Integrity and Certificate Authorities
SSL实现了信息传递的保密性,那么剩下的问题就是可靠性了。在网络中,你也需要一个像之前提到的数字签名一样的东西来证明这是由对方发送的,我们需要一个可靠的第三方来当作中间人,这就是CA(Certificate Authority,证书授权机构),它能证明公钥所属和所有人身份并生成证书,其中既有国际性组织和政府设立的组织,也有通过提供认证服务来盈利的组织。比如我们访问本次课程的平台,Coursera时,并不是从Coursra得到的证书,而是从GoDaddy那得来的,GoDaddy用自己的私钥给Coursera的公钥加密,生成数字签名,再将公钥和数字签名以及原本的服务器信息整合到一起,发回网站,这样就能实现高度的保密性。
取得证书其实是一件很昂贵的事,它可以便宜到几百美元,也可能要花费数千美元。但因为它们的可靠新,很多人都乐意去支出这笔开销。而CA也会认真对待这些请求,在颁发证书的时候也会非常慎重,确保证书能够送到公司真正的持有人,而不是一个坏人手上。同时,我们的浏览器和操作系统,也会预先安装认证,来验证加载的证书是不是属于CA的。
这次的内容又是用很真实的例子来讲解安全,不过后半段课程稍微有点绕,对于最后一部分的公钥认证还是有些不理解,英语水平的提高得再加油了。