zoukankan      html  css  js  c++  java
  • RSA实例破解

    Description:

    Decode the message.

    You intercept the following message, which you know has been encoded using the modulus

    m = 956331992007843552652604425031376690367    and exponent    e = 12398737.

    Break the code and decipher the message.

    821566670681253393182493050080875560504,

    87074173129046399720949786958511391052,

    552100909946781566365272088688468880029,

    491078995197839451033115784866534122828,

    172219665767314444215921020847762293421.

    Answer:

    1、观察到模数m比较小,使用sage 可以轻松做分解质因数的运算:prime_divisors(956331992007843552652604425031376690367)

    提醒:sage还提供另外的方法直接求欧拉函数(因为求出p和q也就是为了求欧拉函数):euler_phi(956331992007843552652604425031376690367)

    2、此时得到:

    n = 956331992007843552652604425031376690367

    p = 7746289204980135457

    q = 123456789012345681631

    fn = (p-1)*(q-1) = 956331992007843552521401346814050873280

    e = 12398737

    这是需要计算用扩展欧几里得算法计算e的乘法逆元d,使用sage 依然可以轻松做扩展欧几里得算法:r,x,d = xgcd(fn,e),此时得到的d为负数,根据模运算的性质,d = d + fn。[-x ≡ n-x (mod n)]

    得到d = 801756262003467870842260800571951669873

    提醒:为了求乘法逆元d,sage还有更直接的方法: inverse_mod(e,fn)

    3、解密阶段。运用快速幂取模算法可以高效求出 M = C^d % n.得到的明文如下:

    30181514191616152815243012281124131815

    29251611281930182315301913281526221915

    14301815232513213031283022151123121930

    19252414192930281113301925243117221916

    19131130192524112414141528192919252434

    4、为了解密信息,理应考虑如何将数字串转换为符号串。显然无论如何划分,数字都是十进制,若根据现有的编码方式,应该把十进制转换为二进制数进行编码。以下是我尝试的过程:

    (1)  Ascii码:Ascii码范围是[0x0, 0x7f],即[0, 127]。先看第一个串,划分显然是30, 18,… ,会出现不可打印字符,不可行。

    (2)  Unicode码:汉字字符集的范围是[0x4e00, 0x9fa5],即[19968, 40896]。先看第一个串,划分显然为30181, 51419,…,第二个划分会超出范围,不可行(英文字母的范围与Ascii码相同)。

    当然还有其他很多种编码方式,但是做到这里就不应该再尝试下去了。理由如下:回到问题本身,我们要传输的是信息,是英文或汉字。我相信应该优先考虑信息是英文,因为如果信息是汉字而又不采用Unicode,采用GBK等其他编码方式,问题就过于复杂,偏离了问题本身关注的RSA,当然也有可能存在这种可能性,留作其他方式都不行再尝试。[另外一个不靠谱的根据是题目本身是英文题目:-)  ]

    基于这个假设,重新看看Ascii码。原因是转换后存在不可打印字符。那么不存在不可打印字符就行了,也就是说只有26个英文字母(忽略大小写)的26个映射。可以假设这里是一种新的简单的编码方式,只存在26种映射。(http://www.cfca.com.cn/zhishi/wz-012.htm 网上就有一个简单的实例来说明RSA算法,它就用到一个简单的映射01-a, 02-b, … , 26-z.)

    受此启发,我将数字串分为两个数字为一组,得到如下序列:

    30, 18, 15, 14, 19, 16, 16, 15, 28, 15, 24, 30, 12, 28, 11, 24, 13, 18, 15

    29, 25, 16, 11, 28, 19, 30, 18, 23, 15, 30, 19, 13, 28, 15, 26, 22, 19, 15

    14, 30, 18, 15, 23, 25, 13, 21, 30, 31, 28, 30, 22, 15, 11, 23, 12, 19, 30

    19, 25, 24, 14, 19, 29, 30, 28, 11, 13, 30, 19, 25, 24, 31, 17, 22, 19, 16

    19, 13, 11, 30, 19, 25, 24, 11, 24, 14, 14, 15, 28, 19, 29, 19, 25, 24, 34

    不难观察到,所有数字的范围都在[11, 34]。可以猜测a-10或a-11

    当a-10时,得到以下序列:

    uifejggfsfoucsbodiftpgbsjuinfujdsfqmjfeuifnpdluvsumfbncjujpoejtusbdujpovhmjgjdbujpoboeefsjtjpoy

    不能得到有含义的英文信息。

    当a-11时,得到以下序列:

    thedifferentbranchesofarithmeticrepliedthemockturtleambitiondistractionuglificationandderisionx

    简单划分后得到:the different branches of arithmetic replied the mock turtle ambition distraction uglification and derision x

    猜测最后那个x的出现可能只是用作填充,即The different branches of arithmetic replied the mock turtle, ambition, distraction, uglification and derision.

    出处:(The Mock Turtle's Story, Alice's Adventures in Wonderland, by Lewis Carroll)《爱丽丝梦游仙境》

    到这里可以肯定以上假设都正确。解密完毕。 

  • 相关阅读:
    《小团团团队》第一次作业:团队亮相
    《代码敲不队》第六次作业:团队项目系统设计改进与详细设计
    《代码敲不队》第五次作业:项目需求分析改进与系统设计
    《代码敲不队》第四次作业:项目需求调研与分析
    《代码敲不队》第三次作业:团队项目的原型设计
    《代码敲不队》第二次作业:团队项目选题报告
    《代码敲不队》第一次作业:团队亮相
    《队长说得队》第六次作业:团队项目系统设计改进与详细设计
    《队长说得队》第五次作业:项目需求分析改进与系统设计
    《队长说得队》第四次作业:项目需求调研与分析
  • 原文地址:https://www.cnblogs.com/7hat/p/3395925.html
Copyright © 2011-2022 走看看