Crypto理论

text::Crypto密码


一、密码学概论

official::四种密码学攻击


二、古典密码

1 置换加密

定义:字符的位置与其他字符发生变换。

2 代换加密

定义:字符用其他字符代替。

3 词频分析

词频分析网站


三、信道通信


四、现代密码

1 序列密码

1.1 原理

定义:序列密码又称流密码(同函数不同密钥)。

优势:

  1. 硬件实现简单。
  2. 可以逐个字符处理。
  3. 有较理想的数学分析工具。

用处:军事,外交等国家重要部门的保密通信。

过程:先由密钥生成一个密钥流序列,再依次加密:

  • 明文流:M = m1m2m3…mi…
  • 密钥流:K = k1k2k3….ki…
  • 加密算法:C=c1c2c3…ci… = Ek1(m1)Ek2(m2)….
  • 解密算法:M=m1m2m3…mo… = Dk1(c1)Dk2(c2)…

设计:序列密码的设计重点是密钥流生成器。

1.2 分类

自同步流密码

异步流密码

1.3 案例

A5算法:

RC4算法(RC4密码。算法原理RC4算法是一种流密码,密钥长度可变,面向字节操作。以下是原理说明中使用的主要变量。):

  1. 密钥流:RC4算法的关键是根据明文和密钥生成相应的密钥流,密钥流的长度和明文的长度是对应的,也就是说,如果明文的长度是500字节,那么密钥流的长度也是500字节,加密生成的密文也是500字节,因为密文第i字节=明文第i字节⊕密钥流第i字节。

  2. 状态数组S:长度为256字节,各单元为S[0],S[1],…,S[255]。每个单元为1字节,在算法运行的任何时候,S都包括0~255之间所有的8位二进制数,只不过值的位置发生了变化。

  3. 临时数组T:长度为256字节,每个单元为1字节。如果密钥的长度是256字节,就直接把密钥的值赋给T,否则轮转地将密钥的每字节赋给T。

  4. 密钥K:长度为1~256字节,密钥的长度与明文的长度、密钥流的长度没有必然关系,通常密钥的长度为16字节(128位)。

  5. 密钥流Ks:由从S的256个单元中按一种系统化的方式选出的一个单元生成,每生成一个Ks,S中的单元就被重新置换一次。

RC4算法首先使用密钥编排算法(Key Scheduling Algorithm,KSA)来完成S和T的初始化及S的初始置换。在置换时使用密钥K,其长度一般取5~16字节,即40~128位,也可以更长,通常不超过256字节。首先用0~255初始化S,然后使用密钥进行替换。

完成S的初始化和初始置换后,密钥K就不再被使用了。在S[0],S[1],…,S[255]中,对每个S[I],根据S的当前配置,将S[I]与另一字节置换,输出1字节的密钥流。当S[255]完成置换后,从S[0]开始进行重复操作。

RC4算法流程:

  1. 初始化S

  2. 随机序列生成

2 分组密码

2.1 原理

2.2 案例

DES算法原理:

  • DES算法为密码体制中的对称密码体制,又被称为美国数据加密标准。

  • DES是一个分组加密算法,典型的DES以64位为分组对数据加密,加密和解密用的是同一个算法。
    密钥长64位,密钥事实上是56位参与DES运算(第8、16、24、32、40、48、56、64位是校验位,使得每个密钥都有奇数个1),分组后的明文组和56位的密钥按位替代或交换的方法形成密文组。

img

AES

3 Hash密码

md5碰撞

性质:

  1. 抗碰撞。
  2. 不可逆。

4 公钥密码

4.1 案例

RSA:

RSA过程:

  1. 质数p q … 任取(可以不止两个)
  2. n = p q
  3. φ( n ) = ( p - 1 ) ( q - 1 )
  4. gcd( e , φ( n ) ) = 1 ,e为公钥,任取小于φ(n)的数
  5. d = e^-1 mod φ( n ),d为私钥
  6. c = pow( m , e , n ) ,c = m ** e % n
  7. m = pow ( c , d , n ),m = c ** d % n

ECC:


五、数字签名


六、身份认证

1 HMAC

hmac主要应用在身份验证中

HMAC

HAMC流程:

  1. 客户端发出登录请求。(假设是浏览器的GET请求)
  2. 服务器返回一个随机值,并在会话中记录这个随机值 。
  3. 客户端将该随机值作为密钥,用户密码进行hmac运算,然后提交给服务器。
  4. 服务器读取用户数据库中的用户密码和步骤2中发送的随机值做与客户端一样的hmac运算,然后与用户发送的结果比较,如果结果一致则验证用户合法。

七、密钥管理


八、破译思路

1 简单识别思路

  1. 看密文位数
  2. 看密文特征(字符串头,组成部分,特殊符号,结构等)
  3. 看密文出现的地方(Web、数据库、操作系统等地方)