詳細資訊請參閱維基百科(連分數)
在數學中,連分數或繁分數即如下表示式:
這裡的a0是某個整數,而所有其他的數an都是正整數,可依樣定義出更長的表示式。
下面通過實際的例子來學習如何將乙個實數轉換為連分數
eg:找出3.245的連分數
結合rsa演算法,我們理解上面的定理
根據上面的定理,我們根據給定的實數a求出p、q。具體過程如下
在正式開啟程式設計之前,必須明確本次攻擊是有前提的:
1.嘗試的d有限(可以事先設定乙個閾值n,即嘗試的次數,本測試案例設定n為10,實際上這遠不夠,可根據自己的需要適當增大n)
其次,與其他rsa攻擊目標不同,這次攻擊的目標是d
[cpp]view plain
copy
#include
#include
#include "gmp.h"
#include "iostream"
#include
#define n 10
using
namespace
std;
/*本案例為測試工程,所設定的n比較小*/
intmain()
mpf_t b_tmp[n];
for( i=0;i
mpz_t b[n];
for( i=0;i
mpz_t q[n];
for(i=0;i
mpf_div(a[0],e,n);
gmp_printf("a[0]:%ff\n"
, a[0]);
mpf_trunc(b_tmp[0],a[0]);
gmp_printf("b_tmp[0]:%ff\n"
, b_tmp[0]);
tmpb=mpf_get_ui (b_tmp[0]) ;
mpz_set_ui(b[0],tmpb);
gmp_printf("b[0]:%zd\n"
,b[0]);
mpz_set_ui(q[0],1);
gmp_printf("q[0]:%zd\n"
, q[0]);
mpf_t sub_tmp;
mpf_init(sub_tmp);
mpf_sub(sub_tmp,a[0],b_tmp[0]);
mpf_div(a[1],one,sub_tmp);
gmp_printf("a[1]:%ff\n"
,a[1]);
mpf_trunc(b_tmp[1],a[1]);
tmpb=mpf_get_ui (b_tmp[1]) ;
mpz_set_ui(b[1],tmpb);
gmp_printf("b[1]:%zd\n"
,b[1]);
mpz_set(q[1],b[1]);
gmp_printf("q[1]:%zd\n"
,q[1]);
mpz_t mul_tmp;
mpz_init(mul_tmp);
mpz_t ed,result;
mpz_init(ed);
mpz_init(result);
for(i=2;i
} printf("目前破解失敗,請調大n重試!"
);
} 先假設n=9449868410449 e=6792605526025 執行程式觀察實驗結果:
RSA 時序攻擊
rsa的破解從理論上來講是大數質數分解,可是就是有一些人另闢蹊徑,根據你解密的時間長短就能破解你的rsa私鑰。舉乙個不恰當但是比較容易理解的例子 密文 0101 私鑰0110 明文0100 問題的關鍵來了,進行 運算時如果有乙個0,那麼運算的時間為1ms,如果兩個都是1,運算的時間是10ms 只是個...
RSA攻擊總結
相關概念 什麼是dp dp d mod p 1 推導過程 dp equiv d mod p 1 dp times e equiv d times e mod p 1 d times e k times p 1 dp times e d times e equiv 1 mod p 1 times q ...
DDOS攻擊之DNS放大攻擊
此ddos攻擊是基於反射的體積分布式拒絕服務 ddos 攻擊,其中攻擊者利用開放式dns解析器的功能,以便使用更大量的流量壓倒目標伺服器或網路,從而呈現伺服器和它周圍的基礎設施無法進入。所有放大攻擊都利用了攻擊者和目標web資源之間的頻寬消耗差異。當在許多請求中放大成本差異時,由此產生的流量可能會破...