现代密码学概论(3 Edition)第一章

现代密码学概论(3 Edition)

by Jonathan Katz and Yehuda Lindell

1.1 密码学和现代密码学

​ 简明牛津英语词典(第9版)定义密码学为“编码或解码的艺术”。这在历史上是准确的,但是没有捕捉到该领域的广度或其现代科学基础。这个定义只关注了几个世纪以来一直用于实现秘密通信的代码。但如今的密码学包含的远不止这些:它处理确保完整性的机制、交换密钥的技术、进行用户身份验证的协议、电子投票、加密货币等等。在不试图提供一个完整的描述的情况下,我们会说,现代密码学涉及到保护数字信息、数字系统和分布式计算免受对抗攻击的数学技术的研究

​ 字典中也将密码学定义为一门艺术。实际上,直到20世纪末,密码学都还是一门艺术。构建好的代码,或者打破现有的代码,依赖于创造力和对代码运作方式的深刻理解。几乎没有什么理论可以依赖,并且很长一段时间内,都没有关于什么能构成一个好代码的有效定义。从20世纪七八十年代开始,密码学景象从根本上发生了改变。一个丰富的理论开始出现,这有可能将密码学作为一门科学和一门数学学科来进行严格研究。这一观点反过来又影响了研究人员对计算机安全中更广泛领域的看法。

​ 古典密码(或者说20世纪八十年代之前的)与现代密码中另外一个非常重要的区别在于它的适用性。在历史上,密码学的主要消费者是军事组织和政府。现在,密码学无处不在!如果你曾经通过输入密码来证明自己,通过信用卡在网上购买东西,或者下载了你的操作系统的验证更新,你就使用了密码学。越来越常见的是,经验相对较少的程序员被要求通过结合加密机制来“保护”他们编写的应用程序。

​ 简而言之,密码学已经从一种为少数特定应用场景提供加密通信的启发式技术,发展成为一门帮助全世界普通人保护系统的广泛化的科学。

1.2 私钥加密的设置

​ 经典密码学关注点在于设计和使用密码,使得通信双方能够发送消息,同时保证对能够监听他们之间所有通信的监听者隐藏这些消息。在现代说法中,密码被叫作加密方案,也是我们要使用的专业术语。所有经典加密方案的安全性依赖于密钥–即通信方事先共享而窃听者不知道。在此场景中,通信方提前共享的秘密信息,称作私钥(private-key、shared-key、secret-key)。在描述一些历史加密方案中,我们更常讨论私钥加密。在私钥加密情景里,双方共享一把钥匙并且在他们想进行秘密通信时使用这个密钥。一方使用这个共享密钥加密(encrypt)消息(也即明文,plaintext),并将其以密文(ciphertext)形式发送给接收方。接收方使用相同密钥解密(decrypt)密文并恢复原始消息。使用相同的密钥可以将明文转换为密文并转换回来;这也就是为什么这种状况也叫做对称密钥(symmetric-key),这依赖于双方在加密和解密时使用相同的密钥这一事实。与之相反的是非对称加密(asymmetric-key)也即公钥(public-key)加密,加密与解密使用不同的密钥。

​ 如前所述,加密的目标是保持明文对窃听者来说是隐藏的,而窃听者可以监视通信信道并且观察到密文。

​ 对于对称密码系统有两个规范化应用。首先,通信双方在空间上是分开的,假定这两个用户能在通信前安全地共享密钥(需要注意的是,如果一方通过公共通信信道向另一方发送密钥,则窃听者也能获得密钥)。这是可以实现的,比如说可以通过让双方在分离前在一个安全地点进行物理相见来共享密钥。在其他情况下,安全共享密钥是比较困难的。(空间上,同一时间内两不同地点的通信双方可使用对称密码满足保密通信的要求)

​ 对称密钥系统的第二个广泛的应用场景涉及到同一方随着时间推移与自己通信。(时间上,同一地点的不同时间维度的双方使用对称密码进行保密通信)。比如思考一下磁盘加密,使用者加密一些明文并且在他的硬盘驱动上存储生成的密文;同一用户可在稍后的一个时间点内返回来解密密文并且重新获得原始数据。这里的硬盘充当了通信信道,如果攻击者可以获得硬盘并且可以读取其内容时就可能窃听。虽然用户依然需要一个安全可靠的方式来记录/存储密钥以供日后使用,但“共享”密钥现在已经很常见了。

加密的语法:正式地说,私钥加密方案是通过指定消息空间M(Message Space)和三种算法来定义的:生成密钥的过程(Gen)、加密的过程(Enc)和解密的过程(Dec)。消息空间M定义了一组“合法”消息,即方案支持的消息。方案中的算法有以下功能:

1、密钥生成算法Gen:是一个概率性算法,输出根据某种分布选择的密钥k

2、加密算法Enc:输入明文m和密钥k,输出密文c。我们用Enck(m)来表示使用密钥k对明文m加密

3、解密算法Dec:输入密钥k和密文c,输出明文m。我们用Deck(c)来表示使用密钥k对密文c解密

加密方案必须满足以下正确性要求:对于Gen输出的每个密钥k和每条消息m∈M,必须满足:Deck(Enck(m)) = m 即:加密一条消息,然后使用相同的密钥解密生成的密文,能够得到原始消息

由密钥生成算法产生的所有可能密钥的集合叫做密钥空间记作K。Gen几乎总是从密钥空间中统一地选择一个密钥;事实上,人们可以在不丧失一般性的情况下假设情况就是这样。

​ 回顾我们之前的讨论,一个加密方案被希望安全通信的双方使用。首先,Gen运行来获得通信方共享的密钥k;然后,当一方想发送明文m给另一方时,计算c := Enck(m)并且把生成的密文c通过公共信道发送给另一方。收到密文c,另一方计算m := Deck(c)来获得原始明文。

**密钥和Kerckhoffs原理:**就像之前提到的,如果一个窃听敌手知道Dec以及通信双方共享的密钥k,那敌手就能解密通信方传送的任何密文。为此,通信方必须安全共享密钥k,并且保证k对其他所有人完全隐蔽。可能也需要保证Dec安全?就此而言,他们对加密方案的所有细节保密不是更好吗?

在19世纪末阐明军用密码的几个设计原则时,Auguste Kerckhoffs提出了相反的观点。其中一个重要观点,被称作Kerckhoffs原理,内容:**密码方案并不需要保密,而且它必须很容易被敌方获取。**也就是说,一个加密方案应该被设计为即使窃听者知道方案的所有细节,但只要他不知道所用密钥,就是安全的。换句话说,安全性不能依赖于加密方案的保密性,而应该仅仅依赖于密钥的隐秘性

支持该原则的主要依据有三个:①保证短的密钥的隐秘性比保证整个复杂的密码方案的安全性容易很多。尤其是当加密被广泛使用时这一点尤为重要。比如说,当一些组织中的所有雇员之间需要加密通信时,除非每一对参与方都使用自己的、唯一的方案,否则一些参与方会知道其他参与方正在使用的方案。而且,关于加密方案的信息可能会被一些雇员泄露,或者被攻击者采用逆向工程获得。简言之,假定加密方案能保持安全性是不现实的。

②如果诚实的共享方的秘密信息被泄露,**更换密钥比更换整个加密方案要容易得多。**此外,生成一个新的随机密钥相对简单,而设计一个新的加密方案则是一项巨大的任务。

③在加密方案广泛应用之前,鼓励大家对方案进行评判可以检查出其中的弱点。往长远来说,加密方案的标准化是很有必要的,使得(1)不同用户兼容(2)公众可使用经过大量审查后的强方案。总的来说,也许与直觉相反,广泛地、公开地传播加密方案的全部细节是有利的,这与保守方案的秘密正好相反

​ 如今,Kerckhoffs原则被理解为主张将整个密码设计过程完全公开,这与隐密安全的概念形成鲜明对比,隐密安全建议将算法保密可以提高安全性。事实上,使

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值