0x05-Crypto

Crypto

古典密码

  • 基本情况
    • 加密和破译依赖于设计者和敌人的创造力与技巧
    • 没有对密码学清晰的定义
  • 主要包括
    • 单表替换
    • 多表替换
    • 奇奇怪怪的加密

现代密码

  • 起源于20世纪末出现的大量理论
  • 系统严格
  • 对称密码:DES、AES、RC4
  • 非对称密码:RSA、椭圆曲线
  • 哈希函数:MD5、SHA1、SHA512

加密模式

存在的原因:明文可能很长,也可能很短

模式: * 流加密:每次加密一个字节、或一个比特 * 块加密:将明文按照一定大小分组,会进行一定的填充,然后按照一定的方式加密

  • 机密性:防止未授权用户访问
  • 完整性:防止未授权用户修改,或在修改后能被迅速发现
  • 可用性:保证授权用户可支持访问数据
  • 不可否认性:不能否认自己发送信息的行为和信息的内容(签名)

一般步骤:

  1. 识别密码算法
  2. 利用暴力破解或者密码框架的漏洞进行破解->机密性
  3. 也可能是希望构造假的哈希值或者签名来绕过相应的检测->不可否认性
攻击类型 说明 适用场景
唯密文攻击 攻击者只拥有密文 古典密码
已知明文攻击 知道明文和对应的密文 古典密码、对称密码、非对称密码
选择明文攻击 能够对选择一些明文加密后获得其相应的密文 对称密码、非对称密码
选择密文攻击 能够对选择一些密文解密后获得明文 非对称密码

单表替换加密

  • 通用特点
    • 明密文一一对应
    • 破解方式:密钥空间较小可以暴力破解。密文长度较长,词频分析(http://quipqiup.com)
  • 基本工具
    • CAP4\JPK\CrypTool
    • http://inventwithpython.com
  1. 凯撒加密
    • 每个字母按照在字母表的顺序向后或者向前移动固定数目作为密文
    • 偏移量左移或右移
    • 偏移量为13(ROT13)
    • 偏移量-5(K6)

基于密钥的凯撒密码:利用一个密钥,将密钥的每一位转换为数字,分别以这一数字为密钥加密明文的每一位字母。

属性
明文 s0a6u3u1s0bv1a
密钥 guangtou
偏移 7,21,1,14,7,20,15,21
密文 y0u6u3h1y0uj1u
  • 破解
    • 对于不带密钥的凯撒密码来说,破解方法有2种
      1. 遍历26个偏移量(一定会有正确的)
      2. 利用词频分析(不一定正确)
    • 对于基于密钥的凯撒,必须知道对应的密钥。
  • 工具
    • JPK(可解带密钥与不带密钥)
    • http://planetcalc.com/1434
    • http://www.qqxiuzi.cn/bianma/ROT5-13-18-47.php

移位密码

与凯撒密码类似,区别在于移位密码不仅会处理字母,还会处理其他符号。

2.Atbash Cipher

  • 原理:使用字母表最后一个代替第一个,倒数第二个代替第二个
  • 简单的替换密码
  • 破解:词频分析
  • http://www.practicalcrytography.com/ciphers/classical-era/atbash-cipher

将每个明文字母替换为与之唯一对应且不同的字母

与凯撒的区别在于密码字母表的字母不是简单移位,而完全是混乱的。

破解靠词频分析

仿射密码

仿射密码的加密函数是 E(x)=(ax+b)(mod m)

  • x表示明文按照某种编码得到的数字
  • a和m互质

      gcd(a,m)=d
      ax+my=d
      ax-d=my
      ax=d mod m
      a\m互质
      《数论》
    
  • m是编码系统中字母的数目

解密函数是:

\[ D(x)=a^-1(x-b)(mod m) \]

,其中a^-1是a在Zm群的乘法逆元

明文 A F F I N
X 0 5 5 8 13
y=5x+8 8 33 33 48 73
y mod 26 8 7 7 22 21
密文 I H H W V

特点在于只有26个字母

破解:仿射密码对于任意两个不同的字母,最后得到的密文必然不一样,所以密文长度够的时候,词频分析。

一般来说,我们至少得在已知部分明文的情况下才可以攻击,不知道也可以暴力

一般来说使用放射密码时,使用的是字母表,26个字母,而不大于26的与26互素的数一共有12,算上b的偏移,密钥空间312

\o(26)=\o(2)*\o(13)=12

12*26=312

多表替换加密

  • 使用多个表加密
  • 加密后字母几乎不保持原有频率
  • 工具:CAP4 JPK CrypTool

Playfair Polybius vigenre hill

原理:选取一串英文字母,除去重复的字母,剩下的字母逐个逐个加入5x5的矩阵,剩下的空间由未加入的英文字母按A-Z的顺序加入。将Q去除,I、J视为同一字

将要加密的明文分为2个一组,组内字母相同,将X或Q加到第一个字母后,重新分组,若剩下一个,也加入X或Q。

在每组中,找出两个字母在矩阵的地方:

  • 若两个字母不同行不同列,在矩阵找出另外2个字母,第一个字母对应行优先。

Playfair

例子:以Playfair example为密钥,矩阵如下: { PLAYF IREXM BCDGH KNOQS TUVWZ }

Polybius

1 2 3 4 5  
1 A B C D E
2 F G H I K
3 L M N O P
4 Q R S T U
5 V W X Y Z

加密后结果只有1-5

其他密码表:ADFGX ADFGVX

工具:CrypTool

Vigenere

使用一系列凯撒密码组成密码字母表的加密算法,属于多表密码的一种简单形式。

暴力破解:

  • 一个字母可以被加密成不同密文。
  • 关键在于密钥是循环重复的
  • 密文是交织在一起的凯撒,若已知密钥长度,则每一个都可以单独破解
  • 使用卡西斯基试验和弗里德曼试验获取密钥长度,明文不一定可靠
  • Cryptool
  • http://inventwithpython.com/hacking/downloads
  • vigenereDictionaryHacker.py detectEnglish.py vigenereCihper.py

Nihilist

原理:新建一个5X5矩阵,将字符不重复依次填入,剩下字母按顺序填入,字母I=J

Hill

原理:

  • 使用每个字母在字母表的顺序作为其对应的数字,即A=0,B=1
  • 将明文转化为N维向量,跟NXN的矩阵(可逆)相乘,结果再模26
  • Cryptool,CAP4

培根密码

  • 用两种不同字体,代表A、B。结合加密表加解密。
  • 另一种加密表,AB代表01,将字母编码。

特点:只有两种字符,每段长度为5,加密结果形式特殊。

栅栏密码

  • 把要加密的明文分成N个一组,然后将每组的第1个字连起来,形成无规律的话。
  • 暴力跑出所有组合即可

01248密码

  • 云影密码
  • 使用0、1、2、4、8四个数字
  • 0表示间隔
  • 其他数字以加法可以表示如28=10,124=7.1->26表示A->Z

特点:只有01248

键盘密码

  1. 手机键盘
  • 手机键盘加密方式,两位数字表示字母
  • 加密不可能1开头,第二位数字不可能超过4
  • RU表示7382
  1. 电脑键盘‘
  2. 电脑键盘坐标
  3. 电脑键盘QWE
  4. 键盘布局加密

其他

  1. JSFUCK
  2. JJCODE
  3. Brainfuck
  4. Ook
  5. 舞动的小人
  6. 曲路密码
  7. 列移位密码
  8. 波利比奥斯方阵密码
  9. 猪圈密码
  10. 摩斯密码
  11. ……

破解古典密码:

  • 如何识别密码的类别
  • 加密方式判别、字符集判别、加密结果样子判别
  • 多种密码组合

现代密码

  • 流加密:RC4
  • 块加密:DES、AES

RC4

  • 每次加密明文中一个字节
  • 密钥长度可变,1-256字节
  1. 初始化S、T
  2. 计算排列S,j从0-255
  3. 产生与明文等长密钥流
  4. 加密

DES

  • 典型的块加密。
  • 使用64位密钥中的56位,剩余的8为要么丢弃,要么作为奇偶校验位
  • 输入64位
  • 输出64位
  • 明文经过16轮迭代得到密文

AES

  • 分组长度和密钥长度均可变
    • 128比特
    • 196比特
    • 256比特
  • 明文经过10轮迭代得到密文。

会将明文消息划分为固定大小的块,每块分别在密钥控制下加密为等长密文,并不是每个消息都会是相应大小的整数倍,所以需要填充。

ECB模式

电子密码本模式

CBC

特点:

  • 密文块中的一位变化只会影响当前密文块和下一密文块
  • 加密过程难以并行化

攻击:

  • 字节反转攻击
    • iv向量,影响第一个明文分组
    • 第n个密文分组,影响第n+1个明文分组
  • padding oracle attack

CFB模式

非对称密码

  • 加密与解密者使用的密钥不同
  • 安全性依赖于数学难题

RSA

大数分解问题

  1. 随机选择两个不同大质数p、q,计算N=p*q
  2. 根据欧拉函数,求得r=(p-1)(q-1)
  3. 选择一个小于r的整数e,使r和e互质。并求得e关于r的模反元素,命名为d(ed=1(mod r))
  4. (N,e)是公钥,(N,d)是私钥

非对称数学太差了,实在跟不上了。坑留这里了。以后明白了再补。。。

转载请注明:碎雪的小屋 » 0x05-Crypto

Show Disqus Comments

Search

    Table of Contents