(不定期更新)应用密码学笔记

简称为“大网安数”。

密码学概述

现代密码学四性:机密性,完整性,鉴别和不可抵赖性。

三个时期为:古典密码(算法保密),近代密码(密钥保密)和现代密码时期。

对密码系统的攻击:唯密文攻击,已知明文攻击,选择明文攻击,选择密文攻击。

Kerckhoffs原则:安全性只取决于密钥的保密,而不是算法。否则是“受限制的密码算法”。

安全性分类:无条件安全性,计算安全性,可证明安全性。

密码算法的功能:加密,杂凑,数字签名,身份鉴别,密钥协商。

私钥用于签名,公钥用于验证。

作业(p14):

1-1,1-2,1-4,1-6,1-7

古典密码

单表替代密码

Caesar

仿射密码

密钥短语密码

把密钥放在最前面,剩余字母排在密钥后作为替换表。

缺点

词频分析。

多表替代密码

Vigenere

Hill

其中为列向量,为加密矩阵。

优缺点:

  • 对抗唯密文攻击,密钥空间大。
  • 易受已知明文攻击与选择明文攻击。

OTP (Vernam)

不能重复使用密钥,理论上不可破译。

playfair

密钥字母去重,放在前面,剩下字母接上,i/j占一个空,排成5*5的矩阵。

对明文两两分组(记为p1 p2),如果:

  • 如果在同一行,那么密文就是明文靠右的字母。(最右的右边就是左边第一个)
  • 如果在同一列,那么密文就是明文靠下的字母。(同理)
  • 如果都不是,那么取另一个对角线作为密文,原文与对应密文的行相同。
  • 如果相同(或剩一个),则在中间(右边)插一个约定的字母x。

链式密码算法

利用一个明文加密的结果作为下一个明文加密密钥。

缺点:误码扩散。

置换密码

周期置换

密钥规定了位置的置换。

属于Hill的特例,即属于线性变换的密码。

列置换密码

把明文按行填入矩阵,密钥规定以列读取的顺序。

转轮机密码

不考。

作业:

2.1 2.4 2.5 2.7 2.8 2.10 2.11 2.13 2.14 2.15

分组密码

设计原则

  • 扩散原则:明文每一位影响密文尽可能多的位,密文每一位被尽可能多的明文影响。
  • 混乱原则:敌手获得明文和密文也无法求出密钥的任意信息。
  • 软件设计:使用子块和简单的运算。
  • 硬件实现:尽量使用规则的结构。

则是幂等密码体制,如仿射密码、置换密码等。

迭代密码体制必须是非幂等的。

典型结构

  • SPN结构:扩散更快速,但是加密和解密不相似。
  • Feistel结构:加密解密相似,扩散慢一些(至少需要两轮才能改变输入的每一位)。

DES

  • 安全性完全依赖于密钥保密。

  • 密钥 64 位(8 位用于奇偶校验)

步骤:

  • 明文IP置换。
  • 扩展得到(32 -> 48):把分成8块,每块记为,然后前面加上前一块的后面加上后一块的.
  • 加上校验位(8的倍数),通过PC-1得到C[0]D[0],左移一位得到C[1]D[1],通过PC-2得到48位.
  • 盒变换(48 -> 32):不同的块是不同的盒,取 作为盒的行,作为盒的列,查表得到的值作为密钥块。(重点)
  • 盒变换。
  • 异或以后得到,便完成了一轮迭代。
  • 经过 16 次迭代后再经过一次IP逆置换。

优点:

  • 加密解密结构相同。
  • 强度高。

改进:三重DES。

分组密码的工作模式

  • ECB:每块明文加密成相应的密码块,最后不足64 bit的部分用随机串补全。(本身是一种大的单字母替换)
  • CBC(常用):当前明文块在加密之前要与前面的密文块进行异或,需严格保密初始向量。
  • CFB:按比分组小得多的单位进行加密,密文依赖于前面所有明文。
  • OFB:在块内部进行反馈。(易受篡改)
  • CTR:可并行、预处理,可产生较好的伪随机数序列。

如何选择:

  • 安全性
  • 高效性
  • 功能