初级密码学题,由蓝鲸安全平台提供

题目:失落的祝愿,文件地址:https://pan.baidu.com/s/1Xc2kxrQAxPS9AUJtZxXoVw

题干:RSA的考古学家在亚马逊河流尽头找到古代神庙遗迹,在破解了遗迹语言后,为了向先灵们致敬,用他们的密码系统加密了破译资料后离开了。

知识点:Maya numerals系统,RSA简单解密

目录

  1. 背景知识
    1. Maya numerals
  2. 题目解析
  3. 总结

背景知识

Maya numerals

  • 玛雅文明已知是人们热衷的研究领域,今天要介绍的时候玛雅数字系统。它是一个六度(基数为20)的位置数字系统。数字有三个符号组成:零(贝壳形状)、点、条。这种结构构成的数字系统很精巧,对于加减乘除之列的运算在图像上可以直接展现:

  • 玛雅人的数字也有“大小写”之分,这和中文很像,例如“一”对应“壹”,“二”对应“贰“等。玛雅人的数字大写是一些象形人头:

那么玛雅人的数字系统是如何统计大数字呢(20以上的数字)

  • 如今的数字系统,使用的是10进制,16进制等这些现代人或计算机习惯的进制;但是玛雅人的进制无比神奇,他们的计数方法让玛雅人在天文学方面的研究非常先进,他们计算的太阳日,也就是现在的年为:365.2422天,与现在的研究非常接近(我们闰年+1平均下来玛雅人的更为精准)。他们的数字系统不再是单一进制,而是4位数字占比例不同
  • 最高位:8000
  • 次高位:400
  • 第二位:20
  • 第一位:1

题目解析

拿到题目后,发现第一个知识点需要识别出图形是什么密码。可以从题目的提示:失落、亚马逊,神殿等词汇联想玛雅人。根据上述玛雅人计数系统,判断出

根据上述玛雅人计数系统,判断出这三行符号是代表了3个数字,现将每个符号对应的数字找到,如下:

接着利用maya数字系统的计算式:a*8000+b*400+c*20+d*1可以得到以下三个数字,不难检查出这三个数都是素数。

1
2
3
1*8000+7*400+15*20+13*1 = 11113
8*8000+17*400+15*20+19*1 = 71119
8*8000+3*400+16*20+17*1 = 65537

然后,根据题目描述又想到RSA解密,而这三个数字猜测对应了p、q、e。

1
2
3
P=11113
Q=71119
E=65537

然后利用rsatool计算出私钥d,如果想了解具体怎么算的,需要知道欧几里得算法(又称辗转相除法)。

最后对密文进行解密plain = (cipher) ^d mod n,脚本如下:

1
2
3
4
5
6
7
8
9
10
11
p = 11113
q = 71119
n = p*q
e = 65537
d = 484260353
f = open('./cipher.txt','r')
msg = []
for c in f:
c = int(c,10)
msg.append(chr(pow(c,d,n)))
print ''.join(msg)

总结

此题脑袋比较大,需要联想到玛雅文明,大家了解下就好了,对敬佩玛雅人的智慧。