密码学大作业总结
一、9.30
Question1 Many Time Pad(Coursera Week 1 Program Assignment)
待更新
Question2 PA1 option
Write a program that allows you to"crack"ciphertexts generated using a Vigenere-like cipher,where byte-wise XOR is used instead of addition modulo 26.
Question3 cryptopals
题目链接:Question3
- Convert hex to base64
- Fixed XOR
- Single-byte XOR cipher
- Detect single-character XOR
- Implement repeating-key XOR
- Break repeating-key XOR
第六题思路:首先要计算hamming距离,选择将文本字符串转换为位值数组,然后比较二进制数据并计算差异数。
然后迭代2-40的密钥长度,并将密文拆分为(文本大小)/密钥长度的组数并计算hamming距离,将其标准化,并排序,得到密钥长度为29。
然后分别进行测试,安照密钥长度将密文分块,然后将每个块的第一个字节组成新的第一个块,将每个块的第二个字节组成新的第二个块…然后按照单字节xor的方式来分别处理每一块,将得到的明文拼接起来。最后通过字符频率相加计算分数的方法,分数最大的则是最有可能是正确明文。
Question4 MTC3 Cracking SHA1-HashedPasswords
题目链接:MTC3
二、1024
PA2 option
AES decrypt a challengecipher text generated usingAES in CBC-mode with PKCS#5 padding.
connect((‘128.8.130.16’, 49101)))
CBC字节翻转攻击,加密解密相关机制原理参考tr0y’ blog
Question2 cryptopals
题目链接:Question2
- Implement PKCS#7 padding
- Implement CBC mode
- An ECB/CBC detection oracle
- Byte-at-a-time ECB decryption
(Simple) - ECB cut-and-paste
- Byte-at-a-time ECB decryption
(Harder) - PKCS#7 padding validation
- CBC bit flipping attacks
Question3 MTC3 AES key
MTC3 AES key — encoded inthe machine readable zone ofa European ePassport
1、按照参考文章步骤求未知数字,即校验位,求出为7
2、把证件的数字和校验位直接sha1散列,然后取前16位即可得到k_seed,把之前生成的k_seed和c级联,然后再进行一次sha1散列得到三十二位数字,然后对前十六位和后十六位进行奇偶校验计算出key
3、拿key和base64解码后的密文AES解密即可
三、RSA加密体制破译题目
有人制作了一个 RSA 加解密软件(采用的 RSA 体制的参数特点描述见密码背景部分)。已知该软件发送某个明文的所有参数和加密过程的全部数据(加密案例文件详见附件 3-1)。Alice 使用该软件发送了一个通关密语,且所有加密数据已经被截获,请问能否仅从加密数据恢复该通关密语及 RSA 体制参数?如能请给出原文和参数,如不能请给出已恢复部分并说明剩余部分不能恢复的理由?
破解步骤如下:
题目给出了21个明文分片的加密结果。针对任意待加密明文,根据赛题所给的加密信息,以8字符为单位长度进行划分,得到的结果随后进行相关填充,在填充过程中加入通信序号(非接收序号),就可以通过通信序号进行片段还原,即分离出重要参数模数n,加密指数e和密文c。
然后对解析得到的参数进行分析,分析方法如下:遍历所有的模数N,判断是否存在模数相同的加密片段;遍历寻找任意两个模数N的公因子,如果得到不为1的公因子则可以成功分解这两个模数;遍历所有加密指数e,寻找低加密指数及对应的加密对;剩下的片段采用费马分解和Pollard p-1分解进行尝试。笔者能力不够,剩下帧靠Google搜索等方法暴力破解。具体对应如下:
Frame0和Frame4的模数N相同,可以使用公共模数攻击的方法;Frame1和Frame18的模数N具有公共因子,可以通过因数碰撞法还原明文;Frame3,Frame8,Frame12,Frame16和Frame20采用低加密指数e=5进行加密,Frame7,Frame11,Frame15采用低加密指数e=3进行加密,通过低指数广播攻击即可,但这里7、11、15存在Coppersmith attack,这是一种利用格的攻击方法,而对于e=3的包,需要解如下方程:。这里需要用到一种LLL算法(格基规约算法)。不太会,就失败了。通过尝试其他Frame10、Frame14可以通过费马算法分解(p、q过于接近),Frame2、Frame6、Frame19用Pollard p-1算法分解(p、q相差过大)。
具体攻击算法可以参考tr0y大佬总结的RSA大礼包链接
本题目具体代码及题目所给数据上传了Github