zoukankan      html  css  js  c++  java
  • Cryptography | 密码学课程笔记 | 一次密码本

    definition

    一个三元组定义了密码的环境 ——(K, M, C)

    • K:key space, a set of all possible keys
    • M:a set of all possible messages
    • C:a set of all possible ciphertexts

    密码本身是一对算法E和D。(E, D)

    • 加密算法 E(K,M) = C
    • 解密算法 D(K,C) = M

    一次性方程

    密码必须满足一致性方程(算法一致,密钥一致,否则无法解密)

    任意m∈M, k∈K ,
    D(k,E(k,m)) = m

    Tips

    1.加密算法随机生成密钥(总是随机算法),解密算法的密钥和密文总是一致的(确定算法)

    2.算法的效率

    • 多项式时间内完成,取决于输入的规模
    • 特定时间内完成

    一次性密码本(The One Time Pad )

    加密: C = E(K,M) = K⊕M

    msg 0 1 1 0 1 1 1
    k 1 0 1 1 0 0 1
    c 1 1 0 1 1 1 0

    解密: M = D(K,C) = D(K,E(K,M)) = K⊕(K⊕M) = K⊕K⊕M = 0⊕M = M;

    k 1 0 1 1 0 0 1
    c 1 1 0 1 1 1 0
    msg 0 1 1 0 1 1 1

    由此可见,一次性密码本满足一次性方程,是密码!

    Tips: K = M⊕C

    如何推导?
    C = K⊕M => C⊕M = K⊕M⊕M => C⊕M = K

    OTP算法评价
    优点:安全
    确定:密钥太长

    密码安全性

    香农的贡献一
    完美安全密码

    任何明文(M1,M2...)经过加密后生成C的概率都一样,就是完美安全密码。
    从密文来看,我们无法得知C背后的明文是哪一个,因为概率都相等啊!

    OTP has perfect secrecy!
    
    proof:
    E(K,M) = C  
    =>  K⊕M = C
    => K = C⊕M = M⊕C  
    => #{k ∈ K:E(k,m) = c} = 1 
    //满足E(k,m) = c的密钥只有一个!
    对于一次性密码本OTP,没有惟密文攻击!(因为给了密文也没用,参照香农的定义~)
    

    香农的贡献二
    密钥的长度
    完美安全的密码,密钥的长度不小于明文的长度

  • 相关阅读:
    JS数据结构第二篇---链表
    原来你是这样的---原型和原型链
    JS数据结构第一篇---算法之复杂度判断
    程序员的数学
    一位码农的转行
    如何看待程序媛们的职场焦虑和未来职业规划?
    如何快速融入团队并成为团队核心(九)
    如何快速融入团队并成为团队核心(八)
    使用ASP.NET Core构建RESTful API的技术指南
    如何快速融入团队并成为团队核心(七)
  • 原文地址:https://www.cnblogs.com/tanghm/p/12941350.html
Copyright © 2011-2022 走看看