簡體   English   中英

使用RSA密鑰的Diffie Hellman密鑰協議?

[英]Diffie Hellman key agreement using RSA keys?

我想讓兩個當事方使用其公鑰和私鑰就同一秘密密鑰達成一致。 我不希望他們有任何互動。 所以我想method(A.privKey, B.pubKey)給出了相同數量的method(B.privKey, A.pubKey)

我想知道當您使用KeyPairGenerator.getInstance("RSA")時Diffie-Hellman密鑰協商算法是否可以在Java中工作

如果是這樣,我該怎么做? 還是我需要使用KeyPairGenerator.getInstance("DH")

我已經在網上搜索,但似乎找不到答案。

Diffie-Hellman和RSA背后的數學方法足夠不同,因此RSA密鑰不能用於DH。

迪菲·赫爾曼

DH是一個密鑰交換,給定兩個密鑰對,它將產生一個共享密鑰。 它不會直接加密數據。 (但是通過將DH與對稱加密相結合來構建加密很容易)。

在由gp定義的最簡單的情況下,雙方都同意一個組,其中p是安全的素數。

私鑰只是一個數字a ,對應的公鑰Ag^a mod p 由於指數是可交換的,因此需要計算一個共享密鑰,因此

A^b = (g^a)^b = g^(ab) = (g^b)^a = B^a

為此,兩個密鑰對都需要使用相同的組。 實現此目的的最簡單方法是選擇一個特定的組並將其硬編碼到協議/應用程序中。

RSA

RSA用公共密鑰加密消息m ,產生密文c 因此,它僅使用一個密鑰對,即接收者的密鑰對。

私鑰是固定指數e (通常為65537)以及一對素數pq

對應的公鑰是e和素數n = p * q的乘積。

加密是通過計算c = m^e mod n來進行的,只有知道pq才能被驗證,但是僅知道n

比較方式

您可以使用RSA生成共享密鑰,方法是生成一個隨機密鑰作為發送者,並使用接收者的公共密鑰對其進行加密。 這用於加密發送給收件人的郵件而無需進行交互。 但是,由於發送者可以控制共享密鑰,因此它不對發送者進行身份驗證。 因此,如果您不能使用RSA來實現非交互式可拒絕身份驗證。 但是您可以使用RSA簽名郵件(但不要使用相同的密鑰對進行簽名和加密),從而為您提供不可否認的身份驗證。

由於RSA實際上並不產生公鑰和私鑰對,而是一對反向密鑰,因此您可以與RSA密鑰進行交換,從而產生一對反向密鑰,但每一側只知道一個部分它的。 它依賴於這樣一個事實,即不僅來自同一對的RSA密鑰都會通勤,而且它們也可以與其他對的RSA通勤。 今天早上我只是寫了一些代碼來演示它。

alice -> bob: alice.pub
bob -> alice: bob.pub
alice: a = (alice.priv * bob.pub)
bob: b = (bob.priv * alice.pub)

向上和向下是反向鍵。 這是協商的非對稱密鑰。 愛麗絲可以申請a,而鮑勃可以申請b。 同時應用它們時,它們會相互抵消。 因此,這是不對稱的密鑰協議。 如果我們嘗試使用RSA執行此操作,則alice或bob會知道這兩個密鑰。 但是,與此相關,給Bob的消息肯定是由Alice創建的,反之亦然。

我是在要求應用程序為我們加密密鑰的情況下發現這一點的-在它檢查我們是否已授權它之后,以便該應用程序以后不能解密密鑰-僅是被授予者。 而且即使被授予者可以獲得明文密鑰,他也無法生成可以為其他被授予者正確解碼的密鑰。 換句話說,如果給某人簽名密鑰是授權,那么授予此類授予實際上不取決於被授予者-該程序知道誰被授權編寫什么內容。

這很像Diffie Hellman交換,因為我們協商了一個共享的秘密。 區別在於,當我們加密到另一端時,即使以后也無法解密。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM