古典密码体制
古典密码体制可以分为两种:
置换密码(列置换和周期置换)
代换密码(单表代换和多表代换)
单表代换密码又可以分为移位密码、基于密钥的单表代换密码和放射密码
多表代换的典型例子就是维吉尼亚密码
多表代换密码分析:(相同的名文字母可能对应不容的密文字母)
第一步:确定密钥的长度
常见的方法是Kasiski测试法和重合指数法
第二步:确定密钥字相对位移
常见的方法是拟重合指数测试法(或者称重合互指数)
第三步:根据第二步确定的密钥恢复出明文(穷举搜索密钥字)
密码学信息理论基础
熵的概念
熵的基本性质
联合熵的定义
条件熵的定义
联合熵的期望
互信息
完美保密性
分组密码
- 分组密码的设计原则:扩散、混淆、乘积密码体制
- 分组密码的迭代结构:Feistel、SP网络
DES的基本结构(有效密钥为56bit)
①ip置换(将得到的64位分位各两半,各32bit,不包含密码学信息)
②轮函数
③密钥编排(目的是生成轮迭代的子密钥)
轮函数包括:
①扩展置换(也称E盒):具有雪崩效应,将32-》48
②密钥加:48bit与密钥逐位异或
③S盒:唯一的非线性部分,加快了数据的扩散,将48-》32bit
④置换运算(也称P盒):简单的位置调换,不包括扩展和压缩
Des会受穷举攻击
双重DES:存在中间相遇攻击,密码强度为2^56
三种DES:当K1=K3时,也会遭遇中间相遇攻击
攻击类型
强力攻击:穷举攻击、查表攻击(预计算和在线阶段)、时间存储权衡攻击
差分攻击:
线性攻击:利用高偏差的线性逼近式
AES的基本结构
密钥长度128位,轮数十轮。分组长度也是128位。
密钥和明文都是以字节为单位处理,128bit可以变成4×4的字节矩阵
主要包括密钥扩展和轮函数
轮函数包括:
①字节代换(查表操作,也就是S盒,S盒的设计非常巧妙,能够防止各种密码分析攻击)
②行位移(简单的左循环操作)
③列混合(通过矩阵相乘实现,移位后的矩阵与固定的矩阵相乘)
④轮密钥加(将128位轮密钥同明文进行逐位异或操作)
注意:最后一轮不执行列混合
另外第一轮迭代之前,先将明文和原始密钥进行一次异或加密操作
流密码
分类:
- 同步流密码:密钥序列的产生独立于明文消息和密文消息,则此类序列密码为同步序列密码。
- 自同步流密码:密钥序列的产生是密钥以及固定大小的以往密文位的函数,则这种序列密码被称为自同步序列密码或者非同步序列密码。
LFSR:线性反馈意移位寄存器
为了是LFSR生成最大周期序列m,其生成多项式必须是本原多项式。
Hash函数
Hash也称散列函数,杂凑函数,它是一种将任意长度的输入变换为固定长度输出的不可逆的单向密码体制。
Hash的函数迭代结构,也称为MD结构
Hash函数应用:
- 数字签名
- 文档的“数字指纹”
- 用于安全传输和存储口令
Hash函数的设计主要分为两类:
一类是基于加密体制实现的,例如使用对称分组密码算法的CBC模式来产生散列值。
另一类是通过直接构造复杂的非线性关系实现单向性,比如MD5、SHA1、SHA256.
Hash函数的攻击:生日攻击
消息认证码
消息认证码(message authentication code)是一种确认完整性并进行认证的技术,取三个单词的首字母,简称为MAC。
消息认证的两个作用:一个是验证消息来源的真实性
一个是验证消息的完整性
问题:
改进方案
从哈希函数入手,需要将要发送的数据进行哈希运算, 将哈希值和原始数据一并发送
需要在进行哈希运算的时候引入加密的步骤
步骤
总结
- 前提条件:
- 在消息认证码生成的一方和校验的一方, 必须有一个秘钥
- 双方约定好使用同样的哈希函数对数据进行运算
- 流程:
- 发送者:
- 发送原始法消息
- 将原始消息生成消息认证码
-((原始消息) + 秘钥) * hash函数 = 散列值(消息认证码) - 将消息认证码发送给对方
- 接收者:
- 接收原始数据
- 接收消息认证码
- 校验:
- ( 接收的消息 + 秘钥 ) * 哈希函数 = 新的散列值
- 通过新的散列值和接收的散列值进行比较
- 发送者:
公钥密码体制
目前最广泛的公钥加密体制主要有3个:RSA公钥加密体制,ELGamal公钥加密体制和椭圆曲线公钥加密体制。(后两者属于基于离散对数问题)
数字签名
消息认证码的问题
- 弊端
- 有秘钥分发困难的问题
- 无法解决的问题
- 不能进行第三方证明
- 不能防止否认
数字签名方法:
数字签名的实现方法:
- 基于RSA的签名方案
- 基于离散对数的签名方案