PART 1 看题第一眼
首先,审题有助于避免偏离主题。有时候问题可能会比较复杂或多方面,通过仔细审题可以确定问题的核心,避免在解答过程中走题或偏离方向。这样可以节省时间和精力,提高解决问题的效率。
例1 异性相吸
下载题干文件后,发现密文是一堆乱码一样的东西,key由一些由规律的字母组成,在尝试多次解码解密后无解,因此可以审题,图1中题干的标题为“异性相吸”,考虑将key和密文进行异或运算,而异或运算之前需要将key和密文转为二进制形式,在转二进制的时候需要注意的是密文和key的二进制格式的内容长度需要相同,否则无法进行异或计算。
有了思路后就可以解题了,步骤如下:
1.使用CyberChef将key转为二进制格式,转换结果如图3;
2.再将密文输入CyberChef转换,但是转换结果的位数和key的转换结果不一致,无法进行异或计算,因此在尝试多个转换工具后,在工具010 Editor中得出了长度一致的二进制结果如下所示:
3.将key的二进制码和密文的二进制码进行异或计算得出flag的二进制码,再将二进制解码,得到flag结果如下所示:
例2 变异凯撒
题干要求解题格式为flag开头,并且题干写了“变异凯撒”,因此可知是一种可以找出规律的替换密码算法。
因此考虑"flag"的ASCII码依次为:102 108 97 103,afZ_"的ASCII码:97 102 90 95,分别相差5,6,7,8,可以推测出这是个ascii码变异凯撒密码。最终得出flag{Caesar_variation}。
本章小结
做密码学题时,当解压拿到题干文件后首先要审题,比如根据标题推导题目文件内容之间的关系,比如本题与上一题之间的关系、题干文件之间、题干与加密算法之间的关系等。
PART 2 借助工具省时间
例1 信息化时代的步伐
打开题目文件后发现只有“606046152623600817831216121621196386”这行数字,因此先排除一些常用的编码/加密算法的可能。而题干说明文是“伟人说的一句话”,因此明文为中文,排除ASCII码转换的可能,因此可能是电码转换,可以使用在线中文电码转换工具http://code.mcdvisa.com/进行转换得出flag。因此在平时做题时随时积累工具也是学习重点之一。
使用在线中文电码转换工具转换后的结果如下所示:
例2 萌萌哒的八戒
下载题干文件后,看到文件内容,首先题干以八戒为主题,并且密文为猪圈密码的密文,很明显该题考察猪圈密码,因此借用猪圈密码的密码表如图11就可以进行密文/明文转换。
猪圈密码的密文如下所示:
猪圈密码的密码本将猪圈密码和英文字母相互转换:
PART 3 透过现象看本质
了解加密算法原理可以帮助我们更好地解决问题和进行调试。当我们在使用加密算法时遇到问题时,通过对算法原理的理解,可以更快地定位问题所在,并采取相应的修复措施,提高开发和调试的效率。
其中加密算法以RSA算法为例。
例1 RSA1
题干:
p= 8637633767257008567099653486541091171320491509433615447539162437911244175885667806398411790524083553445158113502227745206205327690939504032994699902053229
q= 12640674973996472769176047937170883420927050821480010581593137135372473880595613737337630629752577346147039284030082593490776630572584959954205336880228469
dp= 6500795702216834621109042351193261530650043841056252930930949663358625016881832840728066026150264693076109354874099841380454881716097778307268116910582929
dq= 783472263673553449019532580386470672380574033551303889137911760438881683674556098098256795673512201963002175438762767516968043599582527539160811120550041
c= 24722305403887382073567316467649080662631552905960229399079107995602154418176056335800638887527614164073530437657085079676157350205351945222989351316076486573599576041978339872265925062764318536089007310270278526159678937431903862892400747915525118983959970607934142974736675784325993445942031372107342103852
思路:这种题属于已知c、dp、dq、p、q求m的类型,只要根据RSA算法公示的特点,将m用c、dp、dq、p、q表示出来即可。
先列出公式:
1. c = me mod n
2. m = cd mod n
3. ϕ ( n ) = (p − 1) ∗(q − 1)
4.d ∗e = 1 m o d ϕ ( n )
5. dp = d mod ( p − 1 )
6.dq = d mod ( q − 1 )
根据已有条件,解题步骤如下:
再将结果使用CyberChef转成文字得出flag:
例2 RSA2
题干:
e = 65537
n= 248254007851526241177721526698901802985832766176221609612258877371620580060433101538328030305219918697643619814200930679612109885533801335348445023751670478437073055544724280684733298051599167660303645183146161497485358633681492129668802402065797789905550489547645118787266601929429724133167768465309665906113
dp= 905074498052346904643025132879518330691925174573054004621877253318682675055421970943552016695528560364834446303196939207056642927148093290374440210503657
c= 140423670976252696807533673586209400575664282100684119784203527124521188996403826597436883766041879067494280957410201958935737360380801845453829293997433414188838725751796261702622028587211560353362847191060306578510511380965162133472698713063592621028959167072781482562673683090590521214218071160287665180751
根据题干所给条件,可知是由e、n、dp、c计算m,根据求解题目RSA1的习惯,考虑使用已知参数组合求解m的公式,再用代码将公式复现。
首先由题干解读可知:
根据公式推导可知,若将(e·dp-1)% k3 = 0作为判定条件得出k3,就可以求出p-1 = (e·dp-1) % k3,接着通过p、e、q求出私钥d,就能求出明文m,从而得出flag。
python解题脚本如下:
import gmpy2
e = 65537
n= 248254007851526241177721526698901802985832766176221609612258877371620580060433101538328030305219918697643619814200930679612109885533801335348445023751670478437073055544724280684733298051599167660303645183146161497485358633681492129668802402065797789905550489547645118787266601929429724133167768465309665906113
dp= 905074498052346904643025132879518330691925174573054004621877253318682675055421970943552016695528560364834446303196939207056642927148093290374440210503657
c= 140423670976252696807533673586209400575664282100684119784203527124521188996403826597436883766041879067494280957410201958935737360380801845453829293997433414188838725751796261702622028587211560353362847191060306578510511380965162133472698713063592621028959167072781482562673683090590521214218071160287665180751
for i in range(1,e):
if (e * dp - 1) % i == 0:
p = 1 + ((e * dp -1)// i)
if n%p == 0:
q = n // p
d = gmpy2.invert(e,(p-1)*(q-1)) #d和e互为逆元,用invert函数求e的逆元
m = pow(c,d,n)
print("明文m的值为:",m)
得出flag:flag{wow_leaking_dp_breaks_rsa?_98924743502}。
下面的哈希算法以MD5算法和SHA系列算法为例:
例3 还原大师(MD5)
题干:我们得到了一串神秘字符串:TASC?O3RJMV?WDJKX?ZM,问号部分是未知大写字母,为了确定这个神秘字符串,我们通过了其他途径获得了这个字串的32位MD5码。但是我们获得它的32位MD5码也是残缺不全,E903???4DAB????08?????51?80??8A?,请猜出神秘字符串的原本模样,并且提交这个字串的32位MD5码作为答案。注意:得到的 flag 请包上 flag{} 提交。
这时需要知道MD5算法的特点:加密结果唯一且不可逆,因此只要将神秘字符串的问号处循环改成A-Z的字母并MD5加密,所加密结果与MD5码的“E903”相同则结束循环。接着使用Python代码解题:
例4 还原大师(SHA系列)
题干:小明最近捡到了一个恶意u盘里面一个文件a19738aa61ce87c789d5eca1e84f192a46a16860dc110802dd9fcd2e6064526d.zip看长度应该是某种常规加密u盘上方写着12位数字但是只能看清楚开头的7545。
拿到题目时,先看到很长的哈希值,以及“开头的7545”字眼,这肯定是“还原大师”类型的题目,因此观察题干中的哈希值,发现它由32个16进制的字节组成,也就是256位,锁定SHA-256哈希算法,接着使用python代码循环匹配,还原出对应的u盘上的数字。Python代码以及执行结果如下:
得到输出:
本章小结
常用哈希算法有SHA系列和MD系列,而SHA系列和MD5系列位数的不同,如何区分以爆破他们?
先讲SHA系列算法之间的不同:
SHA系列算法分为三个分支:SHA-1、SHA-2和SHA-3,其中SHA-2包括SHA-224、SHA-256、SHA-384和SHA-512。SHA算法和MD5算法类似,也是产生一个固定长度的散列码。
SHA-1:
SHA-1算法可以从明文生成160bit的信息摘要,示例如下:
给定明文:abcd
使用SHA-1算法进行哈希,得出SHA-1摘要:81FE8BFE87576C3ECB22426F8E57847382917ACF
SHA-1与MD5的主要区别为摘要长度不同,MD5的摘要的长度为128bit,SHA-1摘要长度160bit。多出32bit意味着不同明文的碰撞几率降低了2^32倍。
SHA-2:
SHA-2是一系列SHA算法变体的总称,其中包含如下子版本:
1. SHA-256:可以生成长度256bit的信息摘要。
2. SHA-224:SHA-256的“阉割版”,可以生成长度224bit的信息摘要。
3. SHA-512:可以生成长度512bit的信息摘要。
4. SHA-384:SHA-512的“阉割版”,可以生成长度384bit的信息摘要。
显然,信息摘要越长,发生碰撞的几率就越低,破解的难度就越大。但同时,耗费的性能和占用的空间也就越高。其中SHA系列算法的底层原理和MD5很相似,只是在摘要分段和处理细节上有少许差别。
MD5把128bit的信息摘要分成A,B,C,D四段(Words),每段32bit,在循环过程中交替运算A,B,C,D,最终组成128bit的摘要结果。
再看一下SHA-1算法,核心过程大同小异,主要的不同点是把160bit的信息摘要分成了A,B,C,D,E五段。
再看一下SHA-2系列算法,核心过程更复杂一些,把信息摘要分成了A,B,C,D,E,F,G,H八段。
其中SHA-256的每一段摘要长度是32bit,SHA-512的每一段摘要长度是64bit。SHA-224和SHA-384则是在前两者生成结果的基础上做出裁剪。
综上所述,当解题涉及到具体的密码学算法时,要熟悉该算法的具体特征和算法步骤,比如RSA算法公式的相互转换、哈希算法的值唯一却摘要长度不同,因此可以通过摘要长度区分出摘要算法再进行爆破也是个方法,只有知道算法的内部结构特征才能找出破解方法。
原文始发于微信公众号(瑞不可当):密码学的奇幻漂流
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论