密码大作业
cryptopals
题目描述:
(1) Implement PKCS#7 padding
(2) Implement CBC mode
(3) An ECB/CBC detection oracle
(4) Byte-at-a-time ECB decryption (Simple)
(5) ECB cut-and-paste
(6) Byte-at-a-time ECB decryption (Harder)
(7) PKCS#7 padding validation
(8) CBC bit flipping attacks
过程:
其中(8)的字节翻转攻击:
现在如果要将b变成明文c,则可以通过修改密文a,将a修改为abb’即可,不过这个时候会导致原先a处对应的明文产生变化。
MTC3 AES key -encoded in the machine readable zone of a European ePassport
题目描述:
题目给出了护照的一部分内容,以及一份密文。密文的加密密钥根据对应的规则生成,尝试根据提供的信息以及密钥生成规则解密密文。
过程:
1、根据护照的校验规则得到?处代表的字符为7
2、根据ka,kb生成规则,生成ka,kb之后再根据ka,kb的奇偶校验对ka,kb进行更改
3、得到key,进行分组密码解密
PA2 option
题目描述:
AES decrypt a challengecipher text generated usingAES in CBC-mode with PKCS#5 padding.
题目提供发送的密文解密后结果是否符合padding规则的反馈,要求解出给的密文
过程:
解密原理大致是:通过能够反馈解密后的明文是否符合padding规则,也就是说我们可以通过改变ciphertext的值,等到出现一个符合要求的padding出现时,就相当于我们同时知道了一部分ciphertext与plaintext,这样通过异或就可以求得红色的部分,在于题目提供的ciphertext异或就可以得到plaintext
RSA加密体制破译题目
题目描述:
题目给出了一些截获的帧,其中包含参数n,e,c。使用数学方法尽可能的进行破解得到明文。
过程:
1、针对frame0, frame4的共模攻击,可以在不分解n的情况下解得密文。
Frame0与frame4两者的模数n相同,假设gcd(e1,e2)=1此时则有e1s1+e2s2 = 1式中,s1、s2皆为整数通过扩展欧几里德算法,得到该式子的一组解(s1,s2),假设s1为正数,s2为负数.因为
c1 = m^e1%n c2 = m^e2%n所以
(c1s1*c2s2)%n = ((me1%n)s1*(me2%n)s2)%n
根据模运算性质,可以化简为
(c1s1*c2s2)%n = ((me1)s1*(me2)s2)%n
即(c1s1*c2s2)%n = (m(e1s1+e2^s2))%n
又前面提到e1s1+e2s2 = 1,所以
(c1s1*c2s2)%n = (m^(1))%n
(c1s1*c2s2)%n = m^%n
即c1s1*c2s2 = m
2、两个不同的模数n存在公因数,而导致n的分解(求解两个数的公因数算法时间复杂度较低)
Frame1与frame18这两个帧所对应的n存在公因数,公因数也就是n的一个因子,通过除法可以得到另外一个因子,也就是能够得到加密算法的私钥,从而解得明文。
3、frame3,8,12,16,20广播攻击
这些帧的加密指数均为5,可以构造一个同余方程组,通过求解同余方程后可以得到一个之后对Cx开5次方根。而对于e=3的情况,同样尝试使用广播攻击,但是最后没有破解成功,可能是因为所提供的帧的数量不够,最后通过中国剩余定理所得到的式子中的Cx还是模n’意义上的值,并不能直接通过开3次方根来求解出m。查找博客说可以通过Coppersmith attack来进行破解,这部分需要有关格的知识,不太会就略过了。
4、通过p-1的方法来分解模数n,破解frame2,6,19
当 p、q 相差很大的时候,即(p-1)或者(q-1)有一个很小,不妨设 p-1 很小,此时选择 一个整数 k,使其满足 (p-1)|k!,由费马小定理得 ,即n与-1存在公因数p,此时分解出 n。
5、通过fermat定理分解模数n,破解frame10,14
当p,q相差不大时,p-q相对于n和(p+q)来说可以忽略不计,所以有。通过不断尝试得到p, q
上述两种方法对于p和q之间的差值的大小有着不同的效果,但是实际破解过程中只知道n不知道关于p和q的任何信息。所以在破解的时候需要同时使用两种方法进行破解的尝试,可以开多进程进行并行计算。