N栏栅栏加密,把要加密的明文分成N个一组,然后把每组的第1个字符组合,每组第2个字符组合…每组的第N(最后一个分组可能不足N个)个字符组合,最后把他们全部连接起来就是密文,N就是栏数
明文:The quick brown fox jumps over the lazy dog
去空格:Thequickbrownfoxjumpsoverthelazydog
分组:Th eq ui ck br ow nf ox ju mp so ve rt he la zy do g
第一组:Teucbonojmsvrhlzdg
第二组:hqikrwfxupoeteayo
密文:Teucbonojmsvrhlzdghqikrwfxupoeteayo
将明文去空格后按顺序放入5×7的表格中,即栏数为5,分为7组
换顺序读取
带秘钥栅栏
按字母在字典中出现的先后顺序排序
明密文一一对应,可以使用词频分析http://quipqiup.com/
明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文
明文:The quick brown fox jumps over the lazy dog
偏移量:1
密文:Uif rvjdl cspxo gpy kvnqt pwfs uif mbaz eph
偏移量为10:Avocat(A→K)
偏移量为13:ROT13
偏移量为-5:Cassis(K6)
偏移量为-6:Cassette(K7)
它的加密函数是E(x)=(ax+b)(mod m),其中
a和m互质;
m是字母的数目。
解密函数是D(x)=a−1(x−b)(mod m),其中a−1是a在Zm群的乘法逆元
以(5x+8)mod26为例:
因为密文明文必是一一对应的,所以可以用爆破的方法解密
由多个简单的代替密码组合构成
使用一系列凯撒密码组成密码字母表的加密算法多表密码的一种最简单形式
例:
明文:come greatwall
密钥:crypto
密文:efkt zferrltzn
维吉尼亚密码破解:
破译维吉尼亚密码的关键在于它的密钥是循环重复的。如果我们知道了密钥的长度,那密文就可以被看作是交织在一起的凯撒密码,而其中每一个都可以单独破解
卡西斯基试验
在大批量明密文对样本中,如果两个相同字母序列间距正好是密钥长度的倍数时,也可能产生相同的密文序列.寻找重复出现的字母序列,并求其长度
工具:
https://www.mygeocachingprofile.com/codebreaker.vigenerecipher.aspx
https://www.guballa.de/vigenere-solver
明文:we are discovered save yourself
密钥:deceptive
密文:ZICVTWQNGRZGVTWAVZHCQYGLMGJ
解密:
1、在密文中标出重复的字符结构——VTW;
2、两个字符结构的起始位置分别为4和13;
3、两个起始点的距离是9;
4、9的因数有3和9;
5、根据步骤4出现的因数,确定密钥的可能长度是3位或9位
每个字母当作26进制数字:A=0,B=1,C=2等,一串字母当成n维向量,跟一个n×n的矩阵相乘,再将得出的结果模26。
密文即为:POH
解密
(英语:pigpen cipher),亦称共济会密码(英语:masonic cipher)或共济会员密码(英语:Freemason’scipher),是一种以格子为基础的简单替代式密码。即使使用符号,也不会影响密码分析,亦可用在其它替代式的方法。
变形
一一对应,单表映射
培根密码实际上就是一种替换密码,根据所给表一一对应转换即可加密解密。它的特殊之处在于:可以通过不明显的特征来隐藏密码信息,比如大小写、正斜体等,只要两个不同的属性,密码即可隐藏。
在对称密码中,加密者不解密者所使用的秘钥相同
对称加密又分为分组加密和序列密码
分组密码,也叫块加密(block cyphers),一次加密明文中的一个块。是将明文按一定的位长分组,明文组经过加密运算得到密文组,密文组经过解密运算(加密运算的逆运算),还原成明文组。
密钥的长度64位,8个字节。(秘钥太短,易爆破)
DES全称为Data Encryption Standard,是典型的块加密,其基本信息如下:
每轮加密:
s盒:
密钥的长度可以为128、192和256位,也就是16个字节、24个字节和32个字节
AES全称为Advanced Encryption Standard,典型的块加密,被设计来取代DES。其基本信息如下:
分组长度和秘钥长度均可变,可以有以下几种数值
128bit
192bit
256bit
明文经过10、12、14轮迭代得到密文
序列密码,也叫流加密(stream cyphers),一次加密明文中的一个位。是指利用少量的密钥(制乱元素)通过某种复杂的运算(密码算法)产生大量的伪随机位流,用于对明文位流的加密。
RC4
每次加密明文中的一个字节
秘钥长度可变,1-256字节
基本流程:
ECB(Electronic Code Book)/电码本模式
特点
1.简单,有利于并行计算,误差不会被传送;
2.不能隐藏明文的模式;在密文中出现明文消息的重复
3.可能对明文进行主动攻击;加密消息块相互独立成为被攻击的弱点
缺点
明密文一一对应,易破解
CBC(Cipher Block Chaining)/密码分组链接模式
特点
1.不容易主动攻击,安全性好于ECB,适合传输长度长的报文,是SSL、IPSec的标准。每个密文块依赖于所有的信息块,明文消息中一个改变会影响所有密文块
2.发送方和接收方都需要知道初始化向量
3.加密过程是串行的,无法被并行化
4.在解密时,从两个邻接的密文块中即可得到一个明文块。因此,解密过程可以被并行化
…
…
在非对称密码中,加密者与解密者所使用的秘钥并不一样,典型的有RSA加密,椭圆曲线加密
RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准。
RSA公开密钥密码体制。所谓的公开密钥密码体制就是使用不同的加密密钥不解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。
基于对极大整数做因数分解的困难性
将两个大质数相乘十分容易,但是想要对其乘积迚行因式分解却极其困难
原理:
①公钥与私钥的产生
此时,(N,e)是公钥,(N,d)是私钥。
②消息加密
将消息m以一个双斱约定好的格式转化为一个小于N且不N互质的整数n迚行加密,消息太长可以分段
③消息解密
例题
已知RSA公钥生成参数:
p = 3487583947589437589237958723892346254777
q = 8767867843568934765983476584376578389
e = 65537
求d
①分解N
在N的比特位数小于512的时候,可以采用大整数分解的策略获叏p和q。
工具:http://factordb.com/ http://souceforge.net/projects/yafu/
②共模攻击
当两个用户使用相同的模数N、不同的私钥时,即存在共模攻击
原理:
设两个用户的公钥分别为e1和e2,且两者互质。明文消息为m,密文分别为:
c1=me1 mod N
c2=me2 mod N
当攻击者截获c1和c2后,就可以恢复出明文。
用扩展欧几里得算法求出re1+se2=1 mod N中的r ,s
得到
c1r×c2s mod N = ((me1 mod N)r×(me2 mod N)s)mod N = ((me1)r×(me2))s) mod N = m(e1^r+e2^s) mod N
e1r+e2s=1
则c1r×c2s mod N =m mod N
③小公钥指数攻击
e特别小,比如e为3
假设用户使用的密钥e=3。考虑到加密关系满足:
攻击者可以从小到大枚举n,依次开三次根,直到开出整数为止
openssl rsa -pubin -in pubkey.pem -text -modulus查看公钥
④低解密指数攻击
低解密指数可以加快解密的过程,但是者也带来了安全问题。Wiener表示如果满足:
那么一种基于连分数(一个数论当中的问题)的特殊攻击类型就可以危害RSA的安全。此时需要满足:
如果满足上述条件,通过Wiener Attack可以在多项式时间中分解n。
rsa-wiener-attack的攻击源码开源在了github中,采取python编写,可以很容易使用。
识别:
非常简单,e看起来很大就行了。
Rabin特征在于e=2
Python gmpy库,gmpy.root(a, b),返回一个元组(x, y)
其中x为a开b次方的值,y是判断x是否为整数的布尔型变量。