密码技术学习——《图解密码技术》笔记(一)

第3章 对称密码(共享密钥密码)——用相同的密钥进行加密和解密

一次性密码本——绝对不会被破译的密码

原理: 将明文与一串随机的比特序列进行XOR运算。

完全随机,密钥空间是所有可能的01组合,所以就算破译成功了,我们也无法判断它是正确的明文。比如正确明文是code,但破译会出现从aaaa到zzzz,其中不乏有意义的book,cook等“疑似明文”,由于是完全随机带来的密钥空间有全部可能,我们无法判断真正的明文是什么。

理论上无法破译

不过这样密钥的传送也成了问题,假设我们能够安全的传送密钥,那本身这个方法可以用来安全传递我们的消息了,所以现实中除了特工配送密钥完成元首热线通话以外,一次性密码本没有很高的应用价值。

DES

Feistel网络的一轮,右侧直接向下变为输出,右侧与轮密钥XOR生成左侧。

多轮操作,每轮反转左右。

解密就是重复过程(两次XOR抵消从而得到这一轮前的输入)。

三重DES

如名,不过是DES加密->DES解密->DES加密(由IBM公司提出,用来兼容普通DES,比如三层都是同样的DES密钥,就是普通DES了)

解密过程为DES解密->DES加密->DES解密

目前在银行等机构还在使用,但处理速度不高,除了特别重视向下兼容性的情况以外,很少被用于新的用途。

AES

取代DES在2000成为新的标准,选定的算法名为Rijndael ### Rijndael Rijndael算法也是由多个轮构成的,其中每一轮分为SubBytes(逐字节替换)、ShiftRows(平移行)、MixColumns(混合列)、AddRoundKey(与轮密钥进行XOR) 共四个不中。DES使用Feistel网络作为基本结构,而Rijndael使用SPN结构。

  • 加密:SubBytes -> ShiftRows -> MixColumns -> AddRoundKey
  • 解密:AddRoundKey -> InvMixColumns -> InvShiftRows -> InvSubBytes

  • 破译:由于其过程可以由数学公式来表达,那么理论上可以通过数学运算来求解,意味着Rigndael能够通过数学方法进行破译。不过现在为止还没有出现针对Rigndael的有效攻击。

第4章 分组密码的模式——分组密码是如何迭代的

  • 模式总结表格
    模式 名称 优点 缺点 备注
    ECB模式 Electronic CodeBook 电子密码本模式
    • 简单
    • 快速
    • 支持并行计算(加密、解密)
    • 明文中的重复排列会反映在密文中
    • 通过删除、替换密文分组可以对明文进行操作
    • 对包含某些比特错误的密文进行解密时,对应的分组会出错
    • 不能抵御重放攻击
    不应使用
    CBC模式 Cipher Block Chaining 密文分组链接模式
    • 明文的重复排列不会反映在密文中
    • 支持并行计算(仅解密)
    • 能够解密任意密文分组
    • 对包含某些错误比特的密文进行解密时,第一个分组的全部比特以及后一个分组的相应比特会出错
    • 加密不支持并行计算
    CRYPTREC推荐
    《实用密码学》推荐
    CFB模式 Cipher-FeedBack 密文反馈模式
    • 不需要填充(padding)
    • 支持并行计算(仅解密)
    • 能够解密任意密文分组
    • 对包含某些错误比特的密文进行解密时,第一个分组的相应比特以及后一个分组的全部比特会出错
    • 加密不支持并行计算
    • 不能抵御重放攻击
    CRYPTREC推荐
    OFB模式 Output-FeedBack 输出反馈模式
    • 不需要填充(padding)
    • 可事先进行加密、解密的准备
    • 加密、解密使用相同结构
    • 对包含某些错误比特的密文进行解密时,只有明文中相应的比特会出错
    • 不支持并行计算
    • 主动攻击者反转密文分组中的某些比特时,明文分组中相对应的比特也会被反转
    CRYPTREC推荐
    CTR模式 CounTeR 计数器模式
    • 不需要填充(padding)
    • 可实现进行加密、解密的准备
    • 加密、解密使用相同的结构
    • 对包含某些错误比特的密文进行解密时,只有明文中相对应的比特会出错
    • 支持并行计算(加密、解密)
    主动攻击者反转密文分组中的某些比特时,明文分组中相对应的比特也会被反转 CRYPTREC推荐
    《实用密码学》推荐

第5章 公钥密码——用公钥加密,用私钥解密

密钥配送问题

  • 通过事先共享密钥来解决(部分场景不现实)
  • 通过密钥分配中心来解决(中心负担大,被破坏代价大风险高)
  • 通过Diffie-Hellman密钥交换来解决(第11章)
  • 通过公钥密码来解决(本章后续)

公钥密码

一些特征 - 发送者只需要加密密钥 - 接收者只需要解密密钥 - 解密密钥不可以被窃听者获取 - 加密密钥被窃听者获取也没问题

无法解决的问题 - 解决了密钥配送问题,但是无门需要判断所得到的公钥是否正确合法,这个问题被称为公钥认证问题(后面章节)。 - 速度是对称密的几百分之一,解决方法后面会讲到。

时钟运算

补充一些数论知识

除法:在模12的条件下两个数相乘为1,“类倒数”。可以发现规律,和12的最大公约数为1的数(5,7,11),即于12互质的数,存在倒数。

乘方:可以先模再乘,应用同余的性质。

对数:时钟运算中对数成为离散对数。能快速求出离散对数的算法到现在还没有被发现,Diffie-Hellman密钥交换协议以及ElGamal公钥算法中 就运用了离散对数。

RSA