现代密码学快速指南
密码学在我们的生活中变得越来越重要。每次登录应用程序或发送电子邮件时,您都依赖于一种巧妙的加密基础设施,该基础设施很大程度上源自 1970 年代的突破。
除了专业的软件开发人员和编码人员之外,即使是非编程的普通大众也可以从了解密码学的工作原理中受益,尤其是在加密货币和加密投资的时代。
我们所有人都在日常生活中使用密码学,无论我们是否知道。
什么是密码学?
密码学是保护通信的实践。这是通过使用各种技术实现的,这些技术归结为实施协议,防止不受欢迎的一方查看或更改数据。
密码学学科可以描述为四个方面:
- 保密性:数据不会暴露给非预期的各方。
- 完整性:数据不会被操纵或破坏。
- 身份验证:各方能够可靠地验证彼此的身份。
- 不可否认性:通信可以被确认,之后参与者不会否认。
对称密码
计算机出现之前的密码学依赖于密码的使用。密码是从可读文本到乱码,然后再返回的映射。例如,一个简单的密码是在文本中的每个字母上加四个(所以 A 变成 E)。然后解码将涉及简单地从每个字母中减去四个。这些过程称为加密和解密。
在字母表中移动四个位置非常明显,而且不安全。更安全的是创建一个需要翻译密钥的复杂映射。这样的密钥必须分发给所有参与方。这种必要性意味着各种后勤弱点。
盗版软件如何为 Ryuk 勒索软件铺平道路
对称密码的一个著名例子是二战期间使用的Enigma 机。
单向功能
随着计算机的出现和随之而来的数学进步,加密的可能性变得更加复杂。出现了许多新技术,但其中最基本的是所谓的单向函数(包括单向哈希,用于生成固定长度的输出)。单向函数被认为是一种加密原语。顾名思义,单向函数仅在一个方向上起作用。
单向函数的一个常见用途,也是理解它们的一种好方法,是在将密码持久化到数据库时对其进行散列处理(例如,在 Java和JavaScript 中)。密码取自纯文本(“fluffy123”),单向算法将其转换为随机字符串(“XFcbe2d3bh0sa”)。即使攻击者获得了对数据库的访问权限,密码也是安全的。没有已知的方法(使用当前的计算机系统)来有效地逆转该过程。
一个奇怪的事实是,即使攻击者可以完全访问算法的逻辑(例如,这里是BCrypt的来源),但他们通常无法逆转该功能。也就是说,单向散列并不完美,并且已经引入了多种技术来破解它们(例如彩虹表)。
现代散列库包括增加散列难度的能力(从而允许散列强度随着计算能力的增加而增加)并在算法中引入“盐”(从而确保相同输入的散列仍然是唯一的)。只要盐是保密的,用它散列的密码基本上是不可破解的。
要简要了解单向散列背后的理论,请查看此 Stack Overflow 答案。
伪随机函数
与单向函数一起,用于生成类似随机数的算法被认为是密码学“原语”,即确保通信安全所必需的基本构建块。这是为什么?简而言之,任何秘密通信系统都依赖于安全方已知而外部未知的值。这取决于生成随机数。(通常,用户提供的输入也被合并,但众所周知,人类在提供此类输入时不可靠。)
大多数类型的随机种子(如从系统时钟中提取)只是“某种”随机。如果黑客知道数字是如何生成的,他们就可以设计随机数攻击。黑客的聪明才智似乎与白帽程序员的聪明才智并驾齐驱。的确,密码学的故事是一场来回的角逐,一种对创新的呼唤和回应。
已经开发了更安全的随机数生成方法来挫败随机数攻击。大多数加密库都包含用于这些生成器的工具。
非对称密钥
也许现代密码学中最巧妙和最有影响力的发展是非对称密钥对,也称为公私密钥对。基本思想是生成两个密钥,一个用于加密,一个用于解密。加密密钥可安全分发,解密密钥保密。
这项创新是在 1970 年代后期由两位程序员和一位数学家开创的,他们将他们的首字母缩写为他们发明的开创性加密系统:RSA。(一个有趣的旁注:一个类似的系统是在几年前由一位英国情报数学家发明的,但该发明被保密,考虑到计算机系统的局限性,该系统当时被认为不切实际。)
RSA 和其他非对称密钥系统通过创建两个以非对称方式工作的密钥,将单向函数的思想向前迈进了一大步:第一个密钥用于创建加密消息(公钥),第二个用于创建加密消息解密它们(私钥)。参见图 1。
图 1. 公钥-私钥
这个技巧背后的数学并不简单。事实上,有一段时间,参与研究的研究人员甚至对理论上是否可能存在严重怀疑。今天,公私密钥加密是现代互联网安全基础设施的基础,包括 SSL/TLS 使用的“传输层”安全、数字签名和比特币等加密货币。
需要注意的是,非对称密钥不会创建无法破解的系统。但只要私钥保密,破解加密实际上是不可能的。除了众多在最狂野的攻击(包括随机数的攻击,攻击时机,和其他人)已败露,即使是最安全的公共-私有密钥对的安全性是基于多久将采取扭转对所涉及的数字进行因式分解的过程。
这可能看起来不太安全,但引用 Brett Slatkin关于公钥加密数学的文章,“即使是地球上最快的计算机上的奇特解决方案也需要直到宇宙的尽头”才能破解现代非对称加密。除非引入实用的量子计算,这将使破解类似 RSA 的加密成为多项式时间可解的问题(不一定是遥远的可能性),否则现代算法被认为是实际应用中可行的。
在当前的应用中,非对称密钥通常被用作一种握手,以建立对称密钥交换的安全通道。(这就是浏览器“协商 TLS”时发生的情况。)因为对称密钥在实践中要快得多,服务器和客户端通过非对称密钥相互验证,然后交出对称密钥以用于进一步的通信。即使通过非机密渠道,这种通信也不会被窃听或操纵。
公钥基础设施
非对称密码学的另一个重要警告是它通常需要一个可信的、集中的权威。这是因为验证某人是他们所说的人的问题不仅限于证明某人持有私钥(非对称加密可以自行完成)。相反,为了确保(例如)网络服务器的 SSL/TLS 证书不仅在技术上有效,而且是真实的(真正代表它声称的组织),必须参考中央机构(例如 Google)。
这为黑客创造了更多机会,因为验证密钥层次结构中的任何漏洞都会危及下面的所有密钥。尽管确实会发生此类违规行为,但大部分互联网都依赖于该系统。该系统作为一个整体被称为公钥基础设施 (PKI)。颁发证书的受信任方是证书颁发机构 (CA)。
PKI 的一个替代方案是相当好的隐私(PGP),其中用户在点对点、分布式的基础上相互信任,而不是依赖于集中式授权(这里也使用非对称密钥来交换对称密钥)。PGP 通常用于加密电子邮件并验证下载内容未被篡改。
一般而言,非对称密钥和密码学的最复杂用途是在区块链系统中发现的,例如比特币。通过消除对集中授权的需求并将加密签名交易的验证转移到网络,区块链为构建在互联网基础设施之上的分布式但安全层上的新型系统开辟了可能性。我们现在正在目睹这些可能性的变现。
区块链和建立在其上的系统是必不可少的加密结构。密钥对用于签署交易,加密哈希用于验证链中的链接。
这是对当前加密领域的旋风之旅。尽管涉及很多复杂性,但对我们所有人(无论是程序员还是非程序员)来说,了解土地的位置都越来越有价值。