Crypto
古典密码
- 基本情况
- 加密和破译依赖于设计者和敌人的创造力与技巧
- 没有对密码学清晰的定义
- 主要包括
- 单表替换
- 多表替换
- 奇奇怪怪的加密
现代密码
- 起源于20世纪末出现的大量理论
- 系统严格
- 对称密码:DES、AES、RC4
- 非对称密码:RSA、椭圆曲线
- 哈希函数:MD5、SHA1、SHA512
加密模式
存在的原因:明文可能很长,也可能很短
模式: * 流加密:每次加密一个字节、或一个比特 * 块加密:将明文按照一定大小分组,会进行一定的填充,然后按照一定的方式加密
- 机密性:防止未授权用户访问
- 完整性:防止未授权用户修改,或在修改后能被迅速发现
- 可用性:保证授权用户可支持访问数据
- 不可否认性:不能否认自己发送信息的行为和信息的内容(签名)
一般步骤:
- 识别密码算法
- 利用暴力破解或者密码框架的漏洞进行破解->机密性
- 也可能是希望构造假的哈希值或者签名来绕过相应的检测->不可否认性
攻击类型 | 说明 | 适用场景 |
---|---|---|
唯密文攻击 | 攻击者只拥有密文 | 古典密码 |
已知明文攻击 | 知道明文和对应的密文 | 古典密码、对称密码、非对称密码 |
选择明文攻击 | 能够对选择一些明文加密后获得其相应的密文 | 对称密码、非对称密码 |
选择密文攻击 | 能够对选择一些密文解密后获得明文 | 非对称密码 |
单表替换加密
- 通用特点
- 明密文一一对应
- 破解方式:密钥空间较小可以暴力破解。密文长度较长,词频分析(http://quipqiup.com)
- 基本工具
- CAP4\JPK\CrypTool
- http://inventwithpython.com
- 凯撒加密
- 每个字母按照在字母表的顺序向后或者向前移动固定数目作为密文
- 偏移量左移或右移
- 偏移量为13(ROT13)
- 偏移量-5(K6)
基于密钥的凯撒密码:利用一个密钥,将密钥的每一位转换为数字,分别以这一数字为密钥加密明文的每一位字母。
属性 | 值 |
---|---|
明文 | s0a6u3u1s0bv1a |
密钥 | guangtou |
偏移 | 7,21,1,14,7,20,15,21 |
密文 | y0u6u3h1y0uj1u |
- 破解
- 对于不带密钥的凯撒密码来说,破解方法有2种
- 遍历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
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开头,第二位数字不可能超过4
- RU表示7382
- 电脑键盘‘
- 电脑键盘坐标
- 电脑键盘QWE
- 键盘布局加密
其他
- JSFUCK
- JJCODE
- Brainfuck
- Ook
- 舞动的小人
- 曲路密码
- 列移位密码
- 波利比奥斯方阵密码
- 猪圈密码
- 摩斯密码
- ……
破解古典密码:
- 如何识别密码的类别
- 加密方式判别、字符集判别、加密结果样子判别
- 多种密码组合
现代密码
- 流加密:RC4
- 块加密:DES、AES
RC4
- 每次加密明文中一个字节
- 密钥长度可变,1-256字节
- 初始化S、T
- 计算排列S,j从0-255
- 产生与明文等长密钥流
- 加密
DES
- 典型的块加密。
- 使用64位密钥中的56位,剩余的8为要么丢弃,要么作为奇偶校验位
- 输入64位
- 输出64位
- 明文经过16轮迭代得到密文
AES
- 分组长度和密钥长度均可变
- 128比特
- 196比特
- 256比特
- 明文经过10轮迭代得到密文。
会将明文消息划分为固定大小的块,每块分别在密钥控制下加密为等长密文,并不是每个消息都会是相应大小的整数倍,所以需要填充。
ECB模式
电子密码本模式
CBC
特点:
- 密文块中的一位变化只会影响当前密文块和下一密文块
- 加密过程难以并行化
攻击:
- 字节反转攻击
- iv向量,影响第一个明文分组
- 第n个密文分组,影响第n+1个明文分组
- padding oracle attack
CFB模式
非对称密码
- 加密与解密者使用的密钥不同
- 安全性依赖于数学难题
RSA
大数分解问题
- 随机选择两个不同大质数p、q,计算N=p*q
- 根据欧拉函数,求得r=(p-1)(q-1)
- 选择一个小于r的整数e,使r和e互质。并求得e关于r的模反元素,命名为d(ed=1(mod r))
- (N,e)是公钥,(N,d)是私钥
非对称数学太差了,实在跟不上了。坑留这里了。以后明白了再补。。。
转载请注明:碎雪的小屋 » 0x05-Crypto