簡體   English   中英

是否可以使用.net RSACryptoServiceProvider使用私鑰加密?

[英]Is it possible to encrypt with private key using .net RSACryptoServiceProvider?

我知道RSACryptoServiceProvider可以使用公鑰加密,然后可以使用私鑰解密。

是否可以使用私鑰加密並使用RSACryptoServiceProvider使用公鑰解密?

只是為了清理一下:

RSA既可用於加密(確保Eve無法讀取Alice發送給Bob的消息),也可用於簽名(確保如果Alice向Bob發送消息,Bob知道實際上是Alice發送了消息,而不是Eve假裝是愛麗絲)

RSA生成一對密鑰 - 公鑰和私鑰。 RSA的設計使得如果您應用公鑰然后應用私鑰,反之亦然,您將收到相同的消息。 公鑰可以從私鑰派生,但相反是不可能的。

為了使用RSA進行加密,Alice使用Bob的公鑰加密消息。 閱讀此消息的唯一方法是使用Bob的私鑰,只有他擁有。 因此,Eve無法閱讀該消息,因為他沒有此密鑰。 另一方面,這不提供消息源的認證。 Eve還可以獲取Bob的公鑰(因為它是公開的)並向Bob發送消息,假裝是Alice。

要使用RSA進行簽名,Alice會獲取消息的哈希值,使用自己的私鑰加密哈希值,並將結果(這是簽名)附加到消息中。 Eve當然可以使用Alice的公鑰解密它。 但是,Bob可以使用Alice的公鑰解密簽名,看看它是否匹配。 如果是這樣,它必須使用Alice的私鑰加密,只有她擁有,所以它必須來自Alice。


現在,我不熟悉.NET加密API,所以我不確定它是否與此處描述的完全一致。 但是這個解釋可能會幫助您理解您獲得的一些答案。

編輯:我應該在這個答案RSACyrptoServiceProvider說,特定的.NET RSACyrptoServiceProvider可能不會支持這個,因為貨物崇拜“知道”這是不可能的,或者更實用的知識,這在實踐中很少有用。

原版的:

每個人都聲稱沒有這樣的東西,或者不知道RSA是如何工作的,或者他們被困在“簽約”的車轍中。

用私鑰加密是完全可能的,也是完全合理的。 是的,這與簽名相似,但這並不是大多數現代圖書館所采用的簽名方式。 對他們而言,這意味着計算消息摘要或HMAC,並使用私鑰加密。 使用私鑰進行簽名的加密加密與將文檔粘貼在保險箱中並將密鑰留在周圍的說法一樣有意義,這是簽署文檔的替代方法。

是的,它是加密的,因為它的操作相同。 私鑰加密密文與公鑰加密密文一樣難以辨認; 一個人需要兩個密鑰才能解密密文。

有關RSA算法的參考,請參見http://fringe.davesource.com/Fringe/Crypt/RSA/Algorithm.html

使用私鑰執行原始RSA操作通常稱為解密操作(正如使用公鑰執行它稱為加密操作)。

訪問此操作很有用 - 例如,實現框架不支持的操作。

該操作存在:它是DecryptValue -method,由RSACryptoServiceProvider的基類定義: System.Security.Cryptography.RSA 不幸的是,RSACryptoServiceProvider不支持它(因為底層的win32-api,CryptoAPI不支持它)。 但是,如果您可以獲得RSA類的另一個.NET實現,那么您將能夠執行此操作。

幸運的是沒有。 但是,您可以使用私鑰進行簽名,並使用公鑰驗證簽名。

雖然數學涉及到關鍵角色被顛倒時是有意義的(這就是簽名的工作方式),但當解密密鑰是眾所周知和公開時,加密隱私並沒有多大意義。

你可以兩個都做; 使用public進行私有和decypt加密,OR,使用public進行加密,使用private進行解密。 您不能加密,然后只用私鑰解密,也不能單獨使用公鑰。

雷木思釘了它; 當解密密鑰是公知的並且公開時,用私鑰加密沒有多大意義。

此外,您可以從私鑰派生公鑰,但反之亦然。

您可以使用PrivateKey進行加密和解密。 PrivateKey infact包含Private和PublicKey。

從理論上講,至少你可以用PublicKey加密並用PrivateKey解密,反之亦然。 在VB.net中,我看到第一個案例工作,第二個案例拋出BadKey錯誤

這就是我理解的RSA簽名。

偽代碼:

第一個愛麗絲簽名:

alice_signature = encrypt(alice_message, alice_private_key)

然后Bob Eve ......(任何擁有alice_public_key )驗證簽名:

decrypted_message = decrypt(alice_signature, alice_public_key)

確認:

if(received_message_from_alice == decrypted_message)
  the signature proved the message is from alice

不,這不是任何公鑰/私鑰加密的工作方式。 您只能使用公鑰進行加密,並且只能使用私鑰進行解密。

如果要將私鑰應用於郵件,也許您正在尋找簽名而不是加密? 這是一種不同的加密方案,也可以使用RSA密鑰。

公鑰密碼系統的安全性取決於sign()/ encrypt()函數是單向函數的事實,因為在沒有公鑰“陷阱門”的情況下解密它需要不可行的時間。

此外,通常生成的密鑰長度不同,盡管它們可能是。 關於RSA的非對稱密鑰長度有很多論文。

暫無
暫無

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

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