密码学能做什么?
- 机密性:如何使得某个数据自己看得懂,别人看不懂
- 认证:如何确保数据的正确来源,如何保证通信实体的真实性
- 完整性:如何确保数据在传输过程中没有删改
- 不可否认性:如何确保用户行为的不可否认性
Kerckhoffs假设:假定密码分析者和敌手知道所使用的密码系统,即密码体制的安全性仅仅依赖于对密钥的保密,而不应依赖对算法的保密。
密码体制的攻击:
- 穷举密钥 -> 增大密钥数量
- 统计分析攻击:通过分析密文和明文规律来破译 -> 设法使明文密文统计规律不一样
- 解决密变换攻击:针对加密变换的数学基础,通过数学求解设法找到解密变换 -选用有坚实数学基础的算法
密码安全的准则:
- 破译密文的代价超过了被加密的价值
- 破译密文的时间超过了信息的有用期
古典密码
置换密码(permutation)
- 只对字符和字符组做位置的移动
- 本质上内容只是顺序变了
- 例子:500B.C.斯巴达天书
代替密码(Substitution)
- 代替密码构造字母表,用表中字符代替明文字符,字符相对位置不不变,其本身值变了
- 单表代替密码:加法,乘法%26,仿射密码
- 多表代换密码
流密码学
一次一密
分组密码
用于构造伪随机数生成器,流密码,消息认证码和杂凑函数,消息认证技术,数据完整性测试,数据完整性机制,实体认证协议以及单钥数字签名体制的核心组成部分。
要求:安全性,运行速度,存储量
既可以硬件实现,也可以软件实现
明文序列:
分组为n,加密函数:
密文长度分组为m,这种加密实际上是字长为n的数字序列的代换密码。通常取n=m,即明文和密文分组相等,若n < m, 则为有数据扩展的分组密码,若n > m,则为有数据压缩的分组密码。
混淆原则(Confusion):
将密文,明文,密钥三者之间的统计关系和代数关系变的尽可能复杂,使得敌手即使获得了密文和明文,也无法求出密钥的任何信息;即使获得了明文和密文的统计规律,也无法求出明文的新信息。即明文/密钥不能由少许的密钥比特代数的或统计的表示出来散射原则(diffusion):
应将明文的统计规律和结构规律散射到相当长的一段统计中去,也就是让明文中的每一位影响密文中尽可能多的位,或者说让密文中的每一位都受到明文中尽可能多的位的影响。
分组密码应该满足的原则
- 分组长度n应该足够大:防止穷举攻击法奏效
- 密钥量要足够大:尽可能消除弱密钥并使所有密钥同等好,使穷举密钥攻击失效
- 由密钥确定的置换算法要足够复杂,充分实现明文和密钥的扩散和混淆
- 加密和解密算法要简单,让计算机软件高速实现