11.密码技术与现实社会

11.密码技术与现实社会密码技术小结密码学家的工具箱密码与认证密码技术的框架化密码技术与压缩技术虚拟货币——比特币挖矿比特币交易并非真正匿名信任的意义追求完美的密码技术量子密码量子计算机哪一种技术会率先进入实用领域只有完美的密码,没有完美的人理论是完美的,现实是残酷的防御必须天衣无缝,攻击只需突破一点

密码技术小结

最基本的6中密码技术

密码学家的工具箱

以上整理成图:

image-20250505161248695

密码与认证

认证也是密码学重要的一部分。

公钥需要认证,接收到的密文也需要认证。

密码技术的框架化

框架的特点是能够对其中作为组成元素的技术进行替换。

使用框架能够提高密码技术系统的重用性,也能够提高系统的强度。

POODLE攻击利用了SSL/TLS在握手协议中确定密码套件的机制来对协议的版本进行强制降级,这可以说是一种针对SSL/TLS框架本身的攻击。

密码技术与压缩技术

image-20250505162404210

在密码学家的工具箱中,所有的技术都有一个共同点,那就是它们都可以看成是一种“压缩技术”。

无论对称密码还是公钥密码,密码的作用都是确保机密性。由于确保较长的明文整体机密性很困难,因此我们用密码将明文转换成密文。

此时,我们就不必保护明文本身了,相对的,我们需要保护加密时使用的密钥。

通过保护较短的密钥来保护较长的明文,这种做法可以称为 机密性的压缩

单向散列函数是用于确认完整性的。我们不必检查较长的明文的完整性,只要检查散列值就能确认完整性了。通过检查较短的散列值来确认较长的明文的完整性,这种做法可以称为 完整性的压缩

消息认证码和数字签名都是用于认证的技术,通过将较长的消息与密钥结合起来生成较短的比特序列(认证符号),再通过认证符号进行认证。在消息认证码中,MAC值就是认证符号;在数字签名中,签名就是认证符号。通过较短的认证符号来对较长的消息进行认证,这样的做法可以称为 认证的压缩

在伪随机数生成器中,所生成数列的不可预测性是非常重要的。要大量生成具备不可预测性的随机数列非常困难,于是我们通过将种子输入伪随机数生成器,生成具备不可预测性的伪随机数列。使用随机数种子,可以称为 不可预测性的压缩 。伪随机数生成器是将种子所具备的不可预测性进行了扩张。

 压缩前压缩后 
对称密码明文密钥机密性的压缩
公钥密码明文密钥机密性的压缩
单向散列函数消息散列值完整性的压缩
消息认证码消息认证符号(MAC值)认证的压缩
数字签名消息认证符号(签名)认证的压缩
伪随机数生成器伪随机数列种子不可预测性的压缩

虚拟货币——比特币

比特币是一种虚拟货币,也叫密码学货币。

脱离物理介质,仅通过互联网就可以流通,手续费低廉,便于小额交易。

比特币完全依赖于全世界所有比特币用户组成的 P2P网络 。也就是说,全世界所有比特币用户的计算机(node或者peer)共同保存、验证和使用支撑比特币体系的所有必要信息。

比特币是一种基于P2P网络的支付结算系统

比特币交易是在 比特币地址 之间完成的。交易过程与收发电子邮件类似,只是大多数情况下,人们会为每一次比特币交易创建不同的地址。比特币中使用的地址是由公钥的散列值生成的。具体来说,将椭圆曲线DSA的公钥输入SHA-256和RIPEMD-160两个单向散列函数来求出散列值,为其附上一些信息后再通过Base58Check进行编码,转换成字符串。为了防止混淆,Base58Check编码中不适用数字零、大写O、大写I及小写l。比特币公钥生成的地址(Bitcoin pubkey hash)都是以数字“1“开头的。

发送电子邮件时需要使用电子邮件客户端,比特币交易也一样,需要使用比特币客户端,这种客户端称为 钱包 (wallet)。用户可以在自己的计算机和智能手机上安装钱包应用程序,也可以通过提供钱包服务的网站来使用比特币。

用户通过钱包生成密钥对,并据此在互联网上进行交易。其中, 公钥用于接收比特币,私钥用于支付比特币 。私钥保存在钱包中,和一般的密钥对管理发放一样,不能泄露给别人。

区块链 (block chain)就是将交易以 区块 为单位组织起来,并形成一根链条。

支付的本质是【将地址A中减少的金额增加到地址B中】。

如果有一本公共账簿,记录了比特币体系中 所有的地址 至今为止 所有的交易 ,那么对于任意一个地址,都能够计算出当前它所拥有的比特币数量,而区块链正是用于实现这一目的的这本公共帐簿。

所以区块链的构建和维系对于比特币来说至关重要。

比特币的首付款是以 交易 (transaction)为单位进行的,若干条交易会被合并为一个区块,并被添加到区块链中。当P2P网络确认区块的添加后,相应的交易也就成立了。

image-20250506144815557

一个区块由若干条交易以及一个区块头组成。

区块头中保存了【上一个区块的区块头的散列值】,即上图中的【H*】。

此外,区块头中还保存着【本区块所有交易的整体散列值】,即上图中的【T*】。此散列值称为merkle root,使用SHA-256算法。

区块头中还保存了一个名为nonce的任意数值,以及时间戳等信息。

一旦对区块链中的数据进行任何改动,都需要重建所改动的区块之后的所有区块的数据。区块头中的两个散列值有效增加了篡改区块链数据的难度。

所谓交易,就是对【从一个地址向另一个地址转移了多少比特币】这一事件的描述。

进行交易时,交易双方需要进行身份确认(通过社交网络、电子邮件、网站等比特币系统之外的渠道进行)。当交易被合并到区块,并被添加到区块链后,交易双方的介入相应增减,这与现实世界中的转账操作具有相同意义。

在创建交易时运用了数字签名技术。比特币中使用的数字签名算法为椭圆曲线DSA,其中使用的椭圆曲线方程为 x2 = y3 +7 。

挖矿

随着全世界的比特币交易不断增加,区块链也会随之不断增长,这意味着P2P网络中的【某个人】在负责将新的区块添加到区块链。

【将新的区块添加到区块链】这一行为被称为 挖矿 (mining),从事挖矿的人则称为 矿工 (miner)。

由于区块链是一条单链,因此在某个特定的时间点只能向其中添加一个区块。按照比特币协议的规定,成功将区块链添加到区块链的矿工将获得挖矿奖励(reward)以及该区块所有交易的 手续费 (transaction fee)。根据比特币协议的规定,挖矿奖励大约每4年会减半一次。比特币启动初期(2009年),每个区块的挖矿奖励为50BTC,2015年的奖励为25BTC。

为了防止比特币被伪造,矿工必须证明自己确实完成了规定量的工作,这种证明称为 工作量证明 (Proof of Work,PoW)。工作量证明是通过散列值来计算的。

要向区块链添加新的区块,矿工需要生成合法的区块头,而且区块头中【前一区块的散列值】的格式是有规定的,它的前面若干个比特必须为0。如:

区块头中之所以需要一个称为nonce的任意数值,就是为了凑出像上面这样前面若干比特都是0的散列值。也就是说,矿工需要不断更换nonce进行尝试,直到计算出符合要求的散列值为止。

这个过程实际上和暴力破解单向散列函数十分相似。

比特币系统中大约每10分钟会添加一个新的区块,为了保持这样的恒定速率,计算的难度(即所需的0的个数)会不断被调整。

由于全世界有大量的矿工在不断尝试添加新的区块,因此如果在同一时间点有多个矿工同时计算出符合要求的散列值,区块链就可能会产生分支。由于比特币是一个P2P网络,因此无法确定哪个区块先到达节点。P2P网络需要对此做出判断,这个动作称为 确认 。当产生分支时,P2P网络的各个节点会选择计算量大的分支继续工作,从而抑制区块链继续产生分支。

image-20250506152405365

比特币系统假设善意的矿工所拥有的计算资源要大于恶意的矿工所拥有的计算资源,这也是比特币系统得以正常运作的前提。

比特币交易并非真正匿名

在钱包中生成地址时,不需要将这个地址和自己的身份(姓名、邮箱地址)进行关联,也没必要把自己的身份告诉交易对象。从这个意义上来说,比特币交易的确是匿名的。

然而,从上述原理来看,某个地址所进行的交易会公开给全世界所有的用户,而且交易记录也会近似永远地留在区块链上。

通常用户不会用同一个地址反复进行交易。

此外,商品(尤其是实物商品)交易中本来就需要在一定程度上公开身份信息,否则无法收到商品。

P2P网络的性质决定了某条交易所对应的节点IP是需要被记录的,这也产生了一定的风险。在Blockchain.info网站可以查询区块链的所有数据,任何人都可以查询与某个地址相关的所有交易。

将来比特币也许会改进这些匿名性相关的问题。

信任的意义

比特币不存在管理它的国家和中央银行,下面三个【信任】的意义各不相同:

即便比特币系统本身是可信的,交易所还是有可能会被盗或参与欺诈。

比特币系统是基于世界上广泛使用的密码技术以公开的方式设计的,其中并不包含任何隐蔽式安全的要素。从这个意义上来说,比特币系统本身是可信的。

但就目前来看,比特币更多地是被看作一种价值剧烈变化的高风险金融产品。一般认为以比特币的形式保有大量资金的风险还是很高的。

相比比特币本身来说,用户更应该关注自身的安全管理。

追求完美的密码技术

量子密码

量子密码 是基于量子理论的通信技术,由Bennett和Brassard于1980‘s提出。严格来说它并没有直接构成一种密码体系,而是一种让通信本身不可窃听的技术,也可以理解为是一种利用光子的量子特性来实现通信的方法。

最早的量子密码中,利用了下列两个事实:

  1. 从原理上说,无法准确测出光子的偏振方向

    可以让窃听得到的内容变得不正确。

  2. 测量行为本身会导致光子的状态发生改变

    接收者可以判断出通信是否被窃听。

计算机的数据之所以容易被窃听,是因为接收者无法发现窃听行为。然而量子密码通信的情况则不同。如果通信被窃听了,则一半的数据会变得杂乱,接收者可以据此发觉有人在进行窃听。

一次性密码本的最大问题在于难以发送和明文具有相同长度的大量密钥。如果使用量子密码来发送密钥,接收者就可以识别出密钥是否被窃听。量子密码让一次性密码本离实用更近一步。

量子密码有很多种实现方法正在研究之中:

1989年美国实现了32cm距离间的量子密码通信;2002年日本实现了87km距离的量子密码通信;2007年NTT研究所井上恭开发出了差分相移量子密钥配送(DPS-QKD)方法,通过200km的光纤传送了量子密钥;2014年中国宣布开始建设世界上最长的远距离量子通信干线——从北京到上海,距离达到2000km,2017年9月29日开通,是世界首条量子通信干线。

量子计算机

如果说量子密码是密码学家的终极武器,那么 量子计算机 就是密码破译者的终极工具。

利用粒子可同时具有多种状态的特性,可以同时完成多种状态的计算。

1994年Peter Shor发表了一种用量子计算机进行快速质因数分解的算法。2001年IBM成功实现了将15分解成3x5的质因数分解计算。

2011年D-Wave Systems公司发布了商用量子计算机系统 D-Wave。它是为解决最优化问题而设计的专用计算机,在物理上对量子退火(quantum annealing)算法进行了实现。可应用于网络最优化问题、机器学习、图像识别等领域,但并不能直接帮助破译密码。

哪一种技术会率先进入实用领域

如果量子密码比量子计算机先进入实用领域,则可以实用量子密码实现一次性密码本,从而产生完美的密码技术。

一次性密码本在原理上是无法破解的,即便使用量子计算机也无法破译量子密码,因为就算量子计算机能够快速完成暴力破解,也无法判断到底哪个是正确的密钥。

如果量子计算机比量子密码先进入实用领域,则目前使用的密码技术所产生的密文将会全部被破译。

在量子计算机出现后依然能够抵抗破译的秘密称为 耐量子秘密后量子秘密 (Post-Quantum Cryptosystem,PQCrypto)。其中有一种算法叫作 多变量公钥密码 (Multivariate Public Key Cryptosystem),它利用的是NP完全问题的复杂度,因此被认为是一种能对抗量子计算机的密码系统。

只有完美的密码,没有完美的人

理论是完美的,现实是残酷的

通过密码技术,我们可以提高机密性,也能够让认证变得更加容易,但这并不意味着我们可以实现完美的机密性和完美的认证。

生物识别认证需要将生物信息转换为比特序列,而实际的的认证则是通过转换后的比特序列来完成的。一旦这些比特序列被盗,就会和要使被偷产生相同的后果。更严重的是,生物信息是无法改变的,还不如一把可以换锁芯的锁。

生物识别认证技术震慑作用大于实际作用。

防御必须天衣无缝,攻击只需突破一点

为了保卫系统安全,我们必须应对各种可能发生的攻击,而且这种防御体系必须24小时连续工作。攻击方具有巨大的优势。

在拥有坚固的密码和认证机制的系统中,即便99.999%的人有很高的安全意识,总会有一个人没有做好安全管理,那个人就会成为攻击者入侵系统的垫脚石。

社会工程学 (social engineering)攻击

信息安全在于流程而非产品

拒绝服务攻击 ——Denial of Service Attack,DoS,是一种针对服务 可用性 (availability)的攻击方式。当安全性高的服务瘫痪时,用户往往会自发地转移到安全性较低的服务。即,通过拒绝服务,可以让窃听等其他攻击更容易进行。

对于不针对密码强度的攻击来说,即使使用量子密码也没有太大帮助。