2014-01-06 63 views
-1

我想創建自己的RSA密鑰對(實際上我想用我自己的私鑰創建配對密鑰),但是我意識到我應該使用RSA Class爲我生成的密鑰導致公衆(e)和私人(d)鍵在數學上相關在一起。如何計算RSA私鑰(D)的公鑰(E)?

我一直在研究找到一種方法來做到這一點,並最終發現它有可能獲得私鑰的公鑰。

所以我找到了解決方案! 計算我自己的私鑰的公鑰。

這不是一個傳統的工作,所以我想有沒有爲此,在任何編程語言的功能,我應該基於RSA算法的基礎上,給出D.

即計算E創建我自己的函數任何想法如何做到這一點?

(我更喜歡C#!但其實我是想一個解決方案(事件一個數學公式!),語言也沒關係。)

+0

http://stackoverflow.com/questions/5244129/openssl-use-rsa-private-key-to-generate-public-key – Flexo

+0

它似乎是相關的但實際上這個帖子沒有我的問題的答案 –

+1

是的,這是可能的(正如那個鏈接的問題建議)。但是,除非你正在用特定的語言來實現這個問題,否則這個問題是脫離主題的? –

回答

0

RSA密鑰由公共密鑰(指數e和模數N)和私鑰(指數d和模數N)

在這個普通的版本,它是相同的,如果你想計算與公共或其他私鑰約爲...幾乎不可能

...然而...

如果你碰巧有一個私人密鑰包含更多的性能價值(例如像d,dQ,dP,P,Q,N),那麼你就可以擁有一切你需要計算的公開指數:

calculate phi_n作爲(P-1)*(Q-1)

運行擴展歐幾里德算法來計算d mod phi_n的乘法逆...這是您的公開指數...因爲N已知(P * Q)你的公鑰

EDIT(更精確地說):

存在指數e和d之間不存在數學上的差異......一個是其他乘法的逆...

以最簡單的方式你可以看看RSA,密鑰對的一個密鑰不過是一個指數和一個通用模數...實際上,當你創建密鑰對並計算值e和d,您可以交換他們對對方,一切都將仍然工作

來計算你需要的模乘法模逆...現在來有問題的部分:有兩個

一個模數是N ......這是兩個鍵的共同模數......這個數值並不是祕密,因爲它是公鑰的一部分

第二個模量是N(eulers phi函數)的phi ...這個值是一個祕密......每個擁有這個值的人,都可以計算出逆密鑰...在RSA的情況下phi(n)是(P -1)*(Q-1)

P和Q是RSA中使用的兩個大素數......N = P * Q

現在您可以看到,要計算給定鍵的其他鍵,您需要知道phi(n)...唯一已知的獲得phi(N)的方法是eulers phi函數,爲此,你需要N的因素......因爲N是兩個大素數的乘積,則需要這兩個素數...所以要麼你有一個包含P和Q(實際上他們中的一個會的關鍵足夠了,因爲你可以devide N到拿到其他...),或者你將有N因子自己......

分解即只包括兩個大素因子大量是需要時間的任務......這就是RSA的安全性......誰曾經能做到這一點,可以打破RSA密鑰

所以要回到你的具體問題:

它不要緊,如果你想計算E通過D或D通過E ...數學問題是一樣的......你可以解決這個問題IF,AND ONLY IF你至少有一個共同模數係數N

+0

其實我想用我的自定義私鑰創建一個RSA密鑰對。 我倒是搜查,並發現我們可以通過d計算Ë但是我們無法通過E. 獲得d現在我有d,我想獲得它的E. –

+0

看到編輯...... – DarkSquirrel42

+0

謝謝你非常想要你的完整答案。 –