密码学的奇幻漂流

admin 2023年8月16日20:14:53评论9 views字数 6441阅读21分28秒阅读模式
随着数字技术的快速发展,信息交流和存储成为了现代社会的核心和基础。然而,随之而来的是信息泄露、恶意攻击和窃取的风险。密码学通过应用数学算法和技术手段,保护信息的机密性、完整性和可用性。密码学在政府、银行、电子商务、社交媒体以及个人隐私等领域有着广泛的应用。它能够保证敏感信息在传输和存储过程中不被窃取和篡改,确保通信的机密性。同时,密码学也能够验证信息来源的真实性,防止伪造和欺骗。

PART 1 看题第一眼

    首先,审题有助于避免偏离主题。有时候问题可能会比较复杂或多方面,通过仔细审题可以确定问题的核心,避免在解答过程中走题或偏离方向。这样可以节省时间和精力,提高解决问题的效率。

例1 异性相吸

密码学的奇幻漂流

    下载题干文件后,发现密文是一堆乱码一样的东西,key由一些由规律的字母组成,在尝试多次解码解密后无解,因此可以审题,图1中题干的标题为异性相吸,考虑将key和密文进行异或运算,而异或运算之前需要将key和密文转为二进制形式,在转二进制的时候需要注意的是密文和key的二进制格式的内容长度需要相同,否则无法进行异或计算。

密码学的奇幻漂流

有了思路后就可以解题了,步骤如下:

1.使用CyberChefkey转为二进制格式,转换结果如图3;

密码学的奇幻漂流

2.再将密文输入CyberChef转换,但是转换结果的位数和key的转换结果不一致,无法进行异或计算,因此在尝试多个转换工具后,在工具010 Editor中得出了长度一致的二进制结果如下所示:

密码学的奇幻漂流

3.将key二进制码和密文的二进制码进行异或计算得出flag的二进制码,再将二进制解码,得到flag果如下所示:

密码学的奇幻漂流

例2 变异凯撒

    题干要求解题格式为flag开头,并且题干写了“变异凯撒”,因此可知是一种可以找出规律的替换密码算法。

密码学的奇幻漂流

  因此考虑"flag"ASCII码依次为:102 108 97 103afZ_"ASCII码:97 102 90 95,分别相差5678,可以推测出这是个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

思路:这种题属于已知cdpdqpqm的类型,只要根据RSA算法公示的特点,将mcdpdqpq表示出来即可。

先列出公式:

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

根据题干所给条件,可知是由endpc计算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)) #de互为逆元,用invert函数求e的逆元

m = pow(c,d,n)

print("明文m的值为:",m)

得出flagflag{wow_leaking_dp_breaks_rsa?_98924743502}

下面的哈希算法以MD5算法和SHA系列算法为例

例3 还原大师(MD5)

    题干:我们得到了一串神秘字符串:TASC?O3RJMV?WDJKX?ZM,问号部分是未知大写字母,为了确定这个神秘字符串,我们通过了其他途径获得了这个字串的32MD5码。但是我们获得它的32MD5码也是残缺不全,E903???4DAB????08?????51?80??8A?,请猜出神秘字符串的原本模样,并且提交这个字串的32MD5码作为答案。注意:得到的 flag 请包上 flag{} 提交。

    这时需要知道MD5算法的特点:加密结果唯一且不可逆,因此只要将神秘字符串的问号处循环改成A-Z的字母并MD5加密,所加密结果与MD5码的“E903”相同则结束循环接着使用Python代码解题:

密码学的奇幻漂流

例4 还原大师(SHA系列)

    题干:小明最近捡到了一个恶意u盘里面一个文件a19738aa61ce87c789d5eca1e84f192a46a16860dc110802dd9fcd2e6064526d.zip看长度应该是某种常规加密u盘上方写着12位数字但是只能看清楚开头的7545

    拿到题目时,先看到很长的哈希值,以及“开头的7545”字眼,这肯定是“还原大师”类型的题目,因此观察题干中的哈希值,发现它由3216进制的字节组成,也就是256位,锁定SHA-256哈希算法,接着使用python代码循环匹配,还原出对应的u盘上的数字。Python代码以及执行结果如下:

密码学的奇幻漂流

得到输出:

密码学的奇幻漂流

本章小结

常用哈希算法有SHA系列和MD系列,而SHA系列和MD5系列位数的不同,如何区分以爆破他们?

先讲SHA系列算法之间的不同:

SHA系列算法分为三个分支:SHA-1SHA-2SHA-3,其中SHA-2包括SHA-224SHA-256SHA-384SHA-512SHA算法和MD5算法类似,也是产生一个固定长度的散列码。

SHA-1

SHA-1算法可以从明文生成160bit信息摘要,示例如下:

给定明文:abcd

使用SHA-1算法进行哈希,得出SHA-1摘要:81FE8BFE87576C3ECB22426F8E57847382917ACF

SHA-1MD5的主要区别为摘要长度不同,MD5的摘要的长度为128bitSHA-1摘要长度160bit。多出32bit意味着不同明文的碰撞几率降低了2^32倍。

SHA-2

SHA-2是一系列SHA算法变体的总称,其中包含如下子版本:

1. SHA-256:可以生成长度256bit的信息摘要。

2. SHA-224SHA-256阉割版,可以生成长度224bit的信息摘要。

3. SHA-512:可以生成长度512bit的信息摘要。

4. SHA-384SHA-512阉割版,可以生成长度384bit的信息摘要。

    显然,信息摘要越长,发生碰撞的几率就越低,破解的难度就越大。但同时,耗费的性能和占用的空间也就越高。其中SHA系列算法的底层原理和MD5很相似,只是在摘要分段和处理细节上有少许差别。

     MD5128bit的信息摘要分成ABCD四段(Words),每段32bit,在循环过程中交替运算ABCD,最终组成128bit的摘要结果。

密码学的奇幻漂流

  再看一下SHA-1算法,核心过程大同小异,主要的不同点是把160bit的信息摘要分成了ABCDE五段

密码学的奇幻漂流

  再看一下SHA-2系列算法,核心过程更复杂一些,把信息摘要分成了ABCDEFGH八段。

密码学的奇幻漂流

  其中SHA-256的每一段摘要长度是32bitSHA-512的每一段摘要长度是64bitSHA-224SHA-384则是在前两者生成结果的基础上做出裁剪。

    综上所述,当解题涉及到具体的密码学算法时,要熟悉该算法的具体特征和算法步骤,比如RSA算法公式的相互转换、哈希算法的值唯一却摘要长度不同,因此可以通过摘要长度区分出摘要算法再进行爆破也是个方法,只有知道算法的内部结构特征才能找出破解方法。

密码学的奇幻漂流


原文始发于微信公众号(瑞不可当):密码学的奇幻漂流

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年8月16日20:14:53
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   密码学的奇幻漂流http://cn-sec.com/archives/1960150.html

发表评论

匿名网友 填写信息