【Security】密码学(Cryptography)基础

Posted by 西维蜀黍 on 2019-05-13, Last Modified on 2021-09-21

背景

Alice和Bob是谁?

讨论密码学时,我们为了方便起见,通常会使用Alice和Bob这两个名字。他们可以使枯燥的密码学命题变得更加有趣一些。大家公认,Ron Rivest在1977年介绍RSA密码系统的论文中,首次使用了这两个名字。

此后,又有其他一些名字进入了密码学文化。比如,一名具备窃听能力的攻击者叫Eve,一位能妨碍网络流量的主动攻击者叫 Mallory。

对称加密(symmetric encryption)/私钥加密(private-key cryptography)

**对称加密(symmetric encryption)**又称私钥加密(private-key cryptography),是一种混淆算法,能够让数据在非安全信道上进行安全通信。

为了保证通信安全,Alice和Bob首先得到双方都认可的加密算法和密钥。当Alice需要向Bob发送数据时,她使用这个密钥加密数据。Bob使用相同的密钥解密。

Eve能够访问信道,所以可以看到加密数据;但因为没有密钥,所以看不到原始数据。Alice和Bob只要能保证密钥安全,就能一直安全地通信,如下图所示。

注意

讨论加密时通常会使用到三个术语:明文(plaintext,即原始数据)密钥(cipher, 用于加密)密文(ciphertext,即加密后的数据)

对称加密可以追溯到上千年以前。比如,加密时将字母表中的每个字母替换成其他字母,解 密时反向操作,这就是代替密码加密。在这个例子中,不存在密钥;安全性取决于保守加密方法 的秘密。那就是最早的算法的例子。随着时间的流逝,我们采用了另一种方法。它是依照19世纪 的一位密码破解专家Auguste Kerckhoffs的观察结果发展而来的 。

即使攻击者知晓了整个密码系统除密钥以外的所有情报,系统仍然应当能保证安全。

Kerckhoffs的原则初看起来有些奇怪,但如果继续深刻思考,就会觉得有道理,原因如下。

  • 如果一种加密算法要得到广泛使用,就必须让其他人知道。当越来越多的人接触到这个算法,那么敌人得到这个算法的可能性也会增加。
  • 没有密钥的简单算法非常不便于在大群体中使用;每个人都可以解密所有人的通信。
  • 设计出优秀的加密算法非常困难。一种算法想要更安全,就得经过更多的曝光和审视。
    • 当需要采用一种新算法时,密码学家推荐使用保守的方法来确定算法是否安全,那就是算法需要经过许多年的破解尝试。

优秀的加密算法需要产出表面上看来随机的密文,这样攻击者就无法分析得出任何关于明文的信息。比如,替换密码就不是一种好算法,因为攻击者可以确定密文中各个字母的使用频率, 并将其与英语中的字母使用频率进行对比。因为某些字母比其他字母使用得更频繁,攻击者可以 利用这个结果恢复明文。如果加密算法优秀,攻击者只有一种方法,那就是尝试所有可能的解码密钥,俗称穷举密钥搜索(exhaustive key search)

基于这一点,我们可以说密文的安全性完全取决于密钥。如果密钥是从某个非常大的密钥空 间中选取出来的,那么破解也需要遍历所有这些可能的密钥,其数量极大,几乎不可能。我们可 以说这种算法在计算上是安全性的。

非对称加密(Asymmetric Encryption)/ 公钥加密(Public key Cryptography)

背景

对称加密在高速处理大量数据方面做得非常好,然而随着使用它的团体增加,产生了更多的 需求,使得对称加密无法满足。

  • 相同团体的成员必须共享相同的密钥。越多人加入,团体密钥出现问题的次数就越多。
  • 为了更好的安全性,你可以在每两个人之间使用不同的密钥,但是这个方法不可扩展。虽然3个人只需要3个密钥, 但10个人就需要45(9+8+…+1)个密钥,而1000个人需要 499 500个密钥!
  • 对称加密不能用于访问安全数据的无人系统。因为使用相同的密钥可以反转整个过程, 这样的系统出现任何问题都会影响到存储在系统中的所有数据。

非对称加密(asymmetric encryption)又称为公钥加密(public key cryptography),它是另一 种方法,使用两个密钥,而不是一个;其中一个密钥是私密的,另一个是公开的。顾名思义,一 个密钥用于私人,另一个密钥将会被所有人共享。这两个密钥之间存在一些特殊的数学关系,使 得密钥具备一些有用的特性。如果你利用某人的公钥加密数据,那么只有他们对应的私钥能够解 密,如下图所示。

从另一个方面讲,如果某人用私钥加密数据,任何人都可以利用对应的公钥 解开消息。后面这种操作不提供机密性,但可以用作数字签名。

非对称加密使得大规模团体的安全通信大幅简化。假设你可以广泛并且安全地分享你的公钥,那么任何人都可以向你发送消息,只有你可以阅读。如果他们使用各自的私钥签名,你还可以精确地知道消息出自何人之手。

虽然公钥密码的属性非常有趣,但它却非常缓慢,不适用于数据量大的场景。因此,它往往 被部署于进行身份验证和共享秘密的协商,这些秘密后续将用于快速的对称加密。

数字签名(Digital Signature)

数字签名(digital signature)是一个密码学方案。它使得验证一条电子消息或者一篇电子文档的真实性成为可能。

借助公钥密码,数字签名可以与现实生活中的手写签名类似。我们可以利用公钥密码的非对称性设计出一种算法,使用私钥对消息进行签名,并使用对应的公钥验证它。

实际的方式依照选择的公钥密码体系而有所不同。下面以RSA为例。RSA可以用于加密,也可以用于解密。如果使用RSA私钥加密,那么仅能通过对应的公钥解密。我们可以利用这个性质, 并且结合散列函数,实现数字签名。

  • 计算希望签名的文档的散列。不论输入文档的长度如何,输出长度总是固定的。比如, 使用SHA256就是256位。
  • 对结果散列和一些额外的元数据进行编码。比如,接收方需要知道你使用的散列算法, 否则不能处理签名。
  • 使用私钥加密编码过的数据,其结果就是签名,可以追加到文档中作为身份验证的依据。 为了验证签名,接收方接收文档并使用相同的散列算法独立计算文档散列。接着,她使用公钥对消息进行解密,将散列解码出来,再确认使用的散列算法是否正确,解密出的散列是否与本地计算的相同。这个方案的强度取决于加密、散列以及编码组件各自的强度。

中间人(man-in-the-middle,MITM)攻击

  1. 取得访问权

在很多案例中,攻击者需要接近受害人或服务器,或者取得通信设施的访问权。无论是谁, 只要能进入线路和中间通信节点(比如路由器),就能够看到线路上通行的数据帧,并且能够对它们进行干预。可以通过割开电缆 、与运营商共谋或者直接侵入设备来获取访问权。

理论上,执行MITM攻击的最简单方法是加入网络,然后将受害者的通信重新路由到恶意节 点。现在很多人都在使用的无线网络并没有身份验证机制,任何人都可以加入,所以尤其容易受 到这种攻击。

其他攻击方式包括妨碍域名解析、IP地址路由等的路由基础设施。

ARP欺骗

地址解析协议(address resolution protocol,ARP)用于在局域网中将MAC地址 ④ 与IP地址进 行关联。进入网络的攻击者可以声明任何IP地址,并对网络流量进行有效的重路由。

WPAD劫持

浏览器使用Web代理自动发现协议(web proxy auto-discovery protocol,WPAD)自动获取HTTP 代理的配置。WPAD使用了好几种方法,包括DHCP和DNS。为了攻击WPAD,攻击者在局域网 中启动一台服务器并将其通知到那些寻找服务的本地客户端。

DNS劫持

只要攻击者能通过注册或者改变DNS配置来劫持某个域名,就可以劫持访问这个域名的所有 流量。

DNS缓存中毒

DNS缓存中毒(DNS cache poisoning)是一种攻击者利用DNS缓存服务器的缺陷在缓存中注 入非法域名信息的攻击方式。成功完成这种攻击以后,受影响的DNS服务器的所有用户都将收到 攻击者构造的非法信息。

BGP路由劫持

边界网关协议(border gateway protocol,BGP)是一种互联网骨干网络用于发现如何精确定 位IP地址段的路由协议。如果某个非法路由信息被一个或更多路由器所接受,所有通往某个特定 IP地址段的流量都将被重定向到另一处,即攻击者那里。

Reference

  • 《HTTPS权威指南》