zoukankan      html  css  js  c++  java
  • 现代密码学(对称密码——第一部分)

    第三章对称密码(第一部分)

    本部分重点:

    掌握随机的含义

    掌握一次一密的工作原理、实用性不强的原因

    掌握流密码的工作原理

    掌握完善保密性的含义

    掌握语义安全性的含义、安全模型及证明方法

    掌握相关定理和推论

    一.古典密码->现代密码

    古典密码

    手工或机械方式对字符或单词进行处理

    明文一般是有意义的自然语言文本

    现代密码

    面向计算机和和芯片,对比特、字节或字进行处理

    明文可以是任意比特串

    二.技术->科学

    1949年,《保密系统的通信原理》拉开密码学从技术进化到科学的序幕(用信息论研究密码安全性)

    三.加密体制的安全性

    讨论加密体制的安全性时,需要考虑两点:

    1. 攻击能力:能抵抗攻击者什么类型的攻击

    唯密文攻击,已知明文攻击......

    1. 攻击目的:能阻止攻击者实现什么样的目的

    找到密钥,回复特定明文,区分两个明文......

    攻击者的攻击能力越强,要实现的目的越低,越难对付。

    四.加密体制的分类

     

    五.对称加密体制的定义

    定义:对称加密体制是一对高效可计算的算法ED

    EK × M ->C

    DK × C ->M

    满足Dk(Ek(m)) = m,    m Mk K

    六.随机性

    随机性的概念在密码学中占有极其重要的地位

    随机数不仅可以作为密钥使用

    在随机化加密、数字签名等密码体制和协议中也得到广泛应用

    七.是否存在真正的随机?

    是否存在真正的随机性,这是一个哲学问题

    量子力学告诉我们:现实世界中存在真随机性

    八.随机序列

    性质:不能可靠重复产生

    用完全同样的输入操作两次,得到两个不相关的序列

    数学解释:概率服从均匀分布

    1. 产生每个比特的概率为1/2
    2. 任意两个比特统计上相互独立

    九.如何产生随机序列

    1. 使用一种专门的设备(随机数发生器)
    2. 输入是不断变化的,输出也就不可重复
    3. 没人能预测下一个数因为他必须重构输入信号。

    十.计算机不能产生真正的随机序列

    相同计算环境下,对于相同输入,计算机只能产生相同的输出

    1. 计算机产生的一系列所谓的随机序列是周期性的(周期可以很大)
    2. 任何周期性的东西都是可以预测的,可预测的就不是随机的
    3. 要产生真正的随机序列,需要随机的输入,但计算机本身无法提供随机输入

    十一.任何人考虑用数学的方法产生随机数肯定是不合理的

    十二.计算机本身只能产生伪随机序列

    十三.一次一密

    加解密很简单

    加密:明文流与密钥流对应比特异或

    解密:密文流与密钥流对应比特异或

    密钥流是随机序列,且不重复使用(故得名“一次一密”)

    十四.唯密文攻击下密文不能泄露任何信息

    十五.完善保密性

    如果一个对称加密体制满足以下条件,则它具有完善保密性

     

    对于任意两个明文,给定密文,攻击者无法确定密文对应哪个明文

    及时拥有无限计算资源也无法从密文获得明文的任何信息

    唯密文攻击无效

    十六.香农定理

    完善保密性->|K|>=|M|

    即使拥有无限计算资源也无法从密文获得明文任何信息(唯密文攻击,无效无条件安全)

    密钥至少要和明文一样长(香农定理)

    告诉我们:要满足完善保密性,所需密钥至少和明文一样长

    给定明文m和其密文c,对应的密钥k有多少个? 1

    十七.一次一密具有完善保密性

    如何证明加密体制具有完善保密性?

             ∀ m, c|k: Ek(m)=c | 是常数,则该加密体制具有完善保密性

    不实用!!!

     

    是否可以改造一次一密,让它更实用?

    完善保密性->密钥至少要和明文一样长(香农定理)

    解决思路:

    降低安全性要求->缩短密钥长度

    十八.流密码

    基本思想:

    使用“伪随机”密钥流代替“随机”密钥流

    使用工具:

    “伪随机序列发生器”(PRG

    实现方法:

    利用一个短的随机密钥(称作“种子”)作为PRG的输入,由PRG产生伪随机密钥流,再与明文流异或。

    十九.PRG

    G是一个高效可计算的确定性函数,如果G是一个PRG,则

    PRG的功能:利用一个短输入 (种子) 产生一个很长的输出

    1. PRG必须是不可预测的

    不可预测性:给定以前输出的某些比特,高效预测下一比特的成功概率可忽略

    如果是可预测的,会泄露明文信息

    1. PRG的安全性:设G是一个PRG,如果对于任何高效的可计算的算法,成功区分G的输出和等长的随机序列的概率都是可忽略的(计算上不可区分),则G是一个安全的PRG
    2. 一个PRG是安全的->他是不可预测的
    3. 一个PRG是不可预测的->他是安全的

    二十.流密码不具有完善保密性

    流密码是否能达到完善保密性?

    不能,因为密钥比明文短

    如何衡量流密码的安全性?

    需要换个思路定义安全” (语义安全性)

    总结:完善保密性

    1. 唯密文攻击无效
    2. 无条件安全(即使拥有无限计算资源,唯密文攻击也无法破译)

    语义安全性:

    1. 选择明文攻击无效(密钥只用一次)
    2. 计算上安全(攻击者的计算资源有限,更符合现实)

    二十一.语义安全性的定义

    如果一个对称加密体制是语义安全的,它应满足以下条件是可忽略的

    等价于 对于任何高效可计算的攻击者选择的明文m0,m1 { Ek(m0) }   c   { Ek(m1) }在计算上不可区分

    等价的定义

     对于任何高效可计算的攻击者选择的明文 m0 , m1 猜中b的优势可以忽略不计

    定理:

    一次一密是语义安全的

    PRG具有不可预测性->相应的流密码是语义安全的

    二十二.如果重复使用密钥,流密码不是语义安全的

    如果重复使用密钥,已知明文攻击下,流密码也很容易被破译

    若攻击者获得了一个密文 c  和对应明文 m 时,就很容易得出密钥流。

    若重复使用该密钥,就很不安全。

    如果重复使用密钥,即使唯密文攻击下,它们仍不安全

    好的解决方法

    每帧使用一个伪随机密钥

    永远不要直接重复使用流密码的密钥!!

     网络通信:为每次会话协商一个新密钥

     磁盘文件:最好不要用流密码 (修改文件可能泄露文件内容)

    二十三.攻击者可能尝试重构生成密钥流的种子

    攻击原理:

      攻击者完全可以知道你收集种子的方法 (柯克霍夫斯原则)

      如果你使用的种子不够 “好”,就很容易被攻击者重构。

      必须使用“好”的种子,使之具有不可预测性

    如何收集种子才是安全的?

     毫秒计的时间

     用户的输入

     鼠标点击的位置,

    它们混合在一起便有了不可预测性,可以抵抗种子猜测攻击

     

    想重复使用密钥时,不要“直接”使用流密码!!!

    习题:

    随机序列满足 (概率均匀分布) 性质

    以下说法正确的是 (攻击目的越容易实现,越难抵抗)

    A. 攻击目的越容易实现,越难抵抗

    B. 攻击能力越强,越容易抵抗    

    C. 01110010110101010随机   

    D. 以上答案都不对

    以下哪种加密体制可以达到完善保密性 (    D  )

        A. Rabbit          B. Salsa20         C. RC4        D. one-time pad

    如果一个加密体制达到完善保密性,则 (C )

        A. 密钥必须长于明文

        B. 密钥可以短于明文

        C. 唯密文攻击对它无效

        D. 选择明文攻击对它无效

    作者:LightAc
    出处:https://www.cnblogs.com/lightac/
    联系:
    Email: dzz@stu.ouc.edu.cn
    QQ: 1171613053
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    根据百度API获得经纬度,然后根据经纬度在获得城市信息
    Map实现java缓存机制的简单实例
    JMS学习(七)-ActiveMQ消息的持久存储方式之KahaDB存储
    JMS学习(六)-ActiveMQ的高可用性实现
    排列与组合的一些定理
    带权图的最短路径算法(Dijkstra)实现
    JMS学习(六)--提高非持久订阅者的可靠性 以及 订阅恢复策略
    JMS学习(五)--ActiveMQ中的消息的持久化和非持久化 以及 持久订阅者 和 非持久订阅者之间的区别与联系
    分布式系统理论之两阶段提交协议
    自定义栈的实现及使用两个栈模拟队列
  • 原文地址:https://www.cnblogs.com/lightac/p/12821085.html
Copyright © 2011-2022 走看看