对称密码体制基础知识
对称密码模型
- 五个基本成分
- 明文:原始的消息或数据,既算法的输入。
- 加密算法:对明文进行各种代替和替换。
- 密钥:独立于明文和算法,也是加密算法的输入。算法根据所用的特定的密钥而产生不同的输出。
- 密文:算法的输出,依赖于明文和密钥。
- 解密算法:加密算法的逆运算,既得到明文的过程。
- 两个要求
- 加密算法足够强
- 发送者和接受者必须在某种安全的形式下获得密钥并且必须保证密钥安全
- 安全问题
算法不需要保密,首要的是密钥的保密性
密码编码学
3个独立特征:
- 转换明文为密文的运算类型
- 基于两个原理:代替和置换
- 所用的密钥数
- 对称密码:发送方和接收方使用了相同的密钥;
- 非对称密码:发送方和接收方使用了不同的密钥。
- 处理明文的方法
- 分组密码:每次处理输入的一组元素,相应地输出一组元素;
- 流密码:连续地处理输入元素,每次输出一个元素。
流密码
- 定义:流密码是对称密码算法,从明文输入流逐位或逐字节产生密文输出。
流密码的主要原理是通过随机数发生器产生性能优良的伪随机序列,使用该序列加密明文流(按比特位加密),得到密文流。由于每一个明文都对应一个随机的加密密钥,所以流密码在绝对理想的条件下应该是算一种无条件安全的一次一密密码。 - RC4
RC4算法是一个可变密钥长度、面向字节操作的流密码。该算法以随机置换作为基础,运行速度很快。被用于为网络浏览器和服务器间通信而制定的SSL/TLS(安全套接字协议/传输层安全协议)标准中,以及作为IEEE 801.11无线局域网标准一部分的WEP(Wired Equivalent Privacy)协议和新的WiFi受保护访问协议(WAP)中。
RC4的逻辑结构图如下:
分组密码
定义:分组密码是将一个明文分组作为整体加密并且通常得到的是与明文等长的密文分组,分组密码作用在n位明文分组上,而产生n位密文分组。
分组密码的设计应满足的要求:
分组要足够长。假设n为分组长度,则要使分组代换字母表中的元素个数2^n足够大,以防止明文穷举攻击。
密钥长度要足够长,以防止密钥穷举攻击。但密钥又不能过长,这不利于密钥的管理且影响加解密的速度。
由密钥确定的置换算法要足够复杂,足以抵抗各种已知的攻击,如查分攻击和线性攻击等,使攻击者除了利用穷举攻击外,无其他更好的攻击方法。
加密解密运算简单,易于软件和硬件的快速实现。为了便于软件编程和通过逻辑电路实现,算法中的运算应尽量简单,如二进制加法或移位运算,参与运算的参数长度也应选择在8的整数倍,可以充分发挥计算机中字节运算的优势。
一般无数据扩展,即明文和密文长度相同。在采用同态置换和随机话加密技术时可引入数据扩展。
差错传播尽可能的小。
设计密码时,前3点的安全性为必要条件,同时还需考虑后3点。
Feistel密码结构
Feistel加密算法的输入是长为2w的明文和一个密钥K=(K1,K2…,Kn)。将明文分组分成左右两半L和R,然后进行n轮迭代,迭代完成后,再将左右两半合并到一起以产生密文分组。其第i轮迭代的函数为:
轮函数F不一定要可逆
Feistel密码的解密算法与加密算法是相同的,只是子密钥的使用次序相反。此外,初始置换和最终置换是相反的。
- Feistel网络的安全性与以下参数有关:
- 分组长度
- 密钥长度
- 子密钥产生算法
- 轮数
- 轮函数
流密码与分组密码的区别
- 分组密码每次只能处理一个固定长度的明文,不足还需要补全,分组密码的体制一般首先将M‘进行填充得到消息M,使其长度为固定分组长度L的整数倍。
- 流密码加密时不一定得到相同的密码,因为明文的重复部分是使用密钥流的不同部分加密的。对于分组密码,在一个固定的密钥的作用下,对相同的明文加密,一定能得到相同的密文。
- 流密码的潜在优势在于流密码不使用块密码作为构建块,比分组密码更快,代码更短(AES减弱了这个优势)
- 分组密码可以重复使用密钥
- 流密码通常用于数据通信信道或者网页浏览链接上
- 分组密码常用于处理成块的数据,用于文件传输,e-mail, 数据库等