• 距离产生美之大素数的分解运算


    距离产生美之大素数的分解运算

    目标

    已知模数N的值,p,q是一个随机数R附近的质数,且满足下式:

    [| p-q | < 2sqrt[4]{n} ]

    目标:对RSA模数N = pq作因式分解,求出p、q的值

    程序要求

    • gcc编译环境
    • gmp大数运算库

    代码解析

    伪代码为:
    (BEGIN)

    [A = lceil{sqrt{n}} ceil ]

    [X = sqrt{A^2-N} ]

    [p = A - x ]

    [q = A + x ]

    (END)

    代码实现为:

    #include <gmp.h>
    
    int main() {
    	/* declare variants */
    	mpz_t N, A, p, q, x, one, temp;
    	/* init variants */
    	mpz_init_set_str(N, "17976931348623159077293051907890"
    	                    "24733617976978942306572734300811"
    	                    "57732675805505620686985379449212"
    	                    "98295958550138753716401571013985"
    	                    "86478337786069255834975410851965"
    	                    "91615128057575940752635007475935"
    	                    "28871082364994994077189561705436"
    	                    "11494748650467110151015639406805"
    	                    "27540071584560878577663743040086"
    	                    "340742855278549092581", 10);
    	mpz_init(A);	mpz_init(x);
    	mpz_init(p);	mpz_init(q);
    	mpz_init_set_si(one, 1);
    	mpz_init(temp);
    	/* sqrt(N) */
    	mpz_sqrt(temp, N);
    	/* A = ceil(sqrt(N)) */
    	mpz_add(A, temp, one);
    	/* A * A */
    	mpz_mul(temp, A, A);
    	/* A * A - N */
    	mpz_sub(temp, temp, N);
    	/* x = sqrt(A * A - N) */
    	mpz_sqrt(x, temp);
    	/* p = A - x */
    	mpz_sub(p, A, x);
    	/* q = A + x */
    	mpz_add(q, A, x);
    	/* print p and q */
    	gmp_printf("Factor N result is :
    ");
    	gmp_printf("  p = %Zd
    ", p);
    	gmp_printf("  q = %Zd
    ", q);
    	/* exit */
    	return 0;
    }
    

    简单点来说呢,就是根据右边这个伪代码为流程写的。这个需要计算A= ⌈√N⌉,如果正常的运算,会造成浮点溢出异常。但是,由于声明的类型都是大整数,因此开方后的结果一定会是整数,小数部分会被过滤,再进行+1操作,就是伪代码中的向上取整的操作。剩下的操作,就按照流程运行就是了,最后输出结果。
    注意:GMP库声明的变量都需要初始化。(好想知道它是怎么实现的,一定用了泛型编程的思想)

    后记

    从这次的实验中,应该就是从大整数的角度来看待RSA密钥的复杂性,更准确点来说,由于是大整数,在不知道密钥的情况下,暴力枚举破解这个密钥所需要花费的时间是远远大于使用密钥加密的内容的时效性的,充分说明且体验了RSA密钥的密钥生成和分解的密钥的难度。

    传送门:下载

  • 相关阅读:
    推荐]历史上最强的绕口令
    超级经理人的关系学:打造黄金人脉
    个人创业的难点和解决之道
    你的人脉关系中不可缺少的十种人[推荐]
    哲理短文一则:揭示最好的成功法则
    [经验交流]太精彩,太有启发性了(经典经典) 转
    权力领域是人才浪费的致命区域
    2006创业完全手册
    爱你我的宝贝(转)
    最远的你是我最近的爱
  • 原文地址:https://www.cnblogs.com/wsine/p/5620492.html
Copyright © 2020-2023  润新知