JHHK

欢迎来到我的个人网站
行者常至 为者常成

传统与现代加密技术

目录

传统加密方法

传统的加密方式主要采用替代和换位两种方式,来混淆要加密的内容,解密时对照密码本进行恢复。

替代密码(substitution cipher): 利用一种东西替代另一种东西

  1. 凯撒密码:一个字母替代另一个字母
    将一个字母利用字母表中该字母后面的第k个字母替代
    如k=3,bob. i love you. alice → ere, l oryh brx. dolfh

  2. 单码(字母)替代密码:26个字母集合向26个字母集合的映射
    明文:abcdefghijklmnopqrstuvwxyz
    密文:mnbvcxzasdfghjklpoiuytrewq
    明文: bob. i love you. alice
    密文: nkn. s gktc wky. mgsbc

  3. 多码(字母)替代加密:使用多个单码替代密码,明文中不同位置的字母使用不同的单码替代密码
    例如,使用采用两个凯撒密码的多码替代加密:
    img 加密秘钥: (C1=5, C2=19); C1, C2, C2, C1, C2 ……
    明文: bob. i love you.
    密文: ghu. n etox dhz.
    C1(k=5) :使用该字母后面的第 5个字母替代
    C2(k=19):使用该字母后面的第19个字母替代
    C1, C2, C2, C1, C2 …… 代表了明文中字符替换使用的规则,如第一个字符采用C1,第二个字符采用C2,第三个字符采用C2….
    C1与C2 与 C1,C2,C2 … 这个串,共同构成了密码本

换位密码(transpositions): 重新排列明文中的字母

  1. 置换法(permutation method)
    将明文划分为固定长度(d)的组,每个组内的字母按置换规则 (f)变换位置
    密钥:(d, f) 例如:
    秘钥: d=4, f:=(1→3, 2→1, 3→4, 4→2) 每组长度4 每组的第1个字符放在第3个位置,第2个字符放在第1个位置,。。。

    明文(m): i love you.
    分 组: ilov eyou
    密文(c): lvio yueo

  2. 列置换加密 将明文按行组成一个矩阵,然后按给定列顺序输出得到密文
    例如:
    秘钥: k=4(矩阵列数), (2, 3, 1, 4)(输出顺序)
    明文(m): bob. i love you.
    密文(c): ooo bvu bly iex

    变换规则如图所示:
    img

  3. 列置换加密的密钥包括列数和输出顺序
    可以用一个单词来表示 单词长度表示列数,单词中的字母顺序表示输出顺序
    例如: 秘钥: nice
    明文(m): bob. i love you.
    密文(c): bvu iex ooo bly
    img

现代加密技术

现代加密技术的基本操作包括经典的替代和置换,但是不再针对一个个字母,而是针对二进制位操作

现代加密技术主要分为:
对称密钥加密 DES、 3DES、 AES
非对称密钥加密(公开密钥加密) RSA

对称密钥加密:
需要发送方与接收方知道共享的秘密密钥

  1. 流密码(stream ciphers)
    • 首先利用密钥K产生一个密钥流:z=z0 z1 z2 …
    • 然后使用如下规则对明文串x=x0x1x2…加密:y=y0y1y2…=Ez0(x0)Ez1(x1)Ez2(x2)…
    • 解密时,使用相同的密钥流与密文做运算 (XOR)
  2. 分组密码,也称块密码(block ciphers)
    将明文序列划分成长为m的明文组,各明文组在长为i的密钥组的控制下变换成长度为n的密文组
    通常取n=m
    n>m 扩展分组密码
    n<m 压缩分组密码

在设计密码体制的过程中,Shannon提出了能够破坏对密码系统进行各种统计分析攻击的两个基本操作: 扩散(diffusion)和混淆(confusion)基于1949年Shannon提出的交替使用替代和置换方式构造密码体制。

非对称秘钥加密
发送方与接收方无需共享秘密密钥
公开密钥(公钥)完全公开
私有密钥(私钥)只有接收方知道

Feistel分组密码结构

基于“扩散”和“混乱”的思考 ,Feistel提出通过替代和置换交替操作方式构造密码Feistel是一种设计原则,并非一个特殊的密码。流程图大致如下
img

加密过程:
将明文分成左、右两部分:
明文 = (L0, R0)
每一轮i=1, 2 , … , n计算:
Li= Ri-1 Ri= Li-1 xor (Ri-1, Ki)
其中F是轮函数; Ki是子密钥
密文 = (Ln, Rn)

解密过程: 密文 = (Ln,Rn)
每一轮i=n, n-1, … , 1计算:
Ri-1 = Li
Li-1 = Ri xor F(Ri-1,Ki) 其中F是轮函数; Ki是子密钥
明文 = (L0, R0)

Feistel结构的分组密码安全性取决于:

  • 分组长度
    分组长度越大,安全性越高,加密速度越慢,效率越低
    目前常用的分组加密算法的分组长度取64位
  • 子密钥的大小
    子密钥长度增加,安全性提高,加密速度降低
    设计分组密码时需要在安全性和加密效率之间进行平衡
  • 循环次数
    循环越多,安全性越高,加密效率越低
  • 子密钥产生算法
    在初始密钥给定的情况下,产生子密钥的算法越复杂,安全性越高
  • 轮函数
    一般情况下,轮函数越复杂,加密算法的安全性越高

行者常至,为者常成!





R
Valine - A simple comment system based on Leancloud.