0%

密码学原理

密码学能做什么?

  • 机密性:如何使得某个数据自己看得懂,别人看不懂
  • 认证:如何确保数据的正确来源,如何保证通信实体的真实性
  • 完整性:如何确保数据在传输过程中没有删改
  • 不可否认性:如何确保用户行为的不可否认性

Kerckhoffs假设:假定密码分析者和敌手知道所使用的密码系统,即密码体制的安全性仅仅依赖于对密钥的保密,而不应依赖对算法的保密。

密码体制的攻击:

  • 穷举密钥 -> 增大密钥数量
  • 统计分析攻击:通过分析密文和明文规律来破译 -> 设法使明文密文统计规律不一样
  • 解决密变换攻击:针对加密变换的数学基础,通过数学求解设法找到解密变换 -选用有坚实数学基础的算法

密码安全的准则:

  • 破译密文的代价超过了被加密的价值
  • 破译密文的时间超过了信息的有用期

古典密码

  1. 置换密码(permutation)

    • 只对字符和字符组做位置的移动
    • 本质上内容只是顺序变了
    • 例子:500B.C.斯巴达天书
  2. 代替密码(Substitution)

    • 代替密码构造字母表,用表中字符代替明文字符,字符相对位置不不变,其本身值变了
    • 单表代替密码:加法,乘法%26,仿射密码
    • 多表代换密码

流密码学

一次一密

  • y = x&k;
  • 优点:密钥随机产生,仅用一次,无条件安全,加密解密效率极高(二进制流按位与)
  • 缺点:密钥和明文必须一样长,共享困难,不实用。

    流密码定义

    同步流密码

分组密码

用于构造伪随机数生成器,流密码,消息认证码和杂凑函数,消息认证技术,数据完整性测试,数据完整性机制,实体认证协议以及单钥数字签名体制的核心组成部分。

要求:安全性,运行速度,存储量

既可以硬件实现,也可以软件实现

明文序列:

分组为n,加密函数:

密文长度分组为m,这种加密实际上是字长为n的数字序列的代换密码。通常取n=m,即明文和密文分组相等,若n < m, 则为有数据扩展的分组密码,若n > m,则为有数据压缩的分组密码。

  1. 混淆原则(Confusion):
    将密文,明文,密钥三者之间的统计关系和代数关系变的尽可能复杂,使得敌手即使获得了密文和明文,也无法求出密钥的任何信息;即使获得了明文和密文的统计规律,也无法求出明文的新信息。即明文/密钥不能由少许的密钥比特代数的或统计的表示出来

  2. 散射原则(diffusion):
    应将明文的统计规律和结构规律散射到相当长的一段统计中去,也就是让明文中的每一位影响密文中尽可能多的位,或者说让密文中的每一位都受到明文中尽可能多的位的影响。

分组密码应该满足的原则

  • 分组长度n应该足够大:防止穷举攻击法奏效
  • 密钥量要足够大:尽可能消除弱密钥并使所有密钥同等好,使穷举密钥攻击失效
  • 由密钥确定的置换算法要足够复杂,充分实现明文和密钥的扩散和混淆
  • 加密和解密算法要简单,让计算机软件高速实现
Disqus评论区没有正常加载,请使用科学上网