簡體   English   中英

RSA:如何基於密碼(.net)生成RSA公鑰和私鑰

[英]RSA: how to generate RSA public and private keys based on a passphrase (.net)

我在.net環境(所有版本)和使用vb.net工作。 我想基於密碼生成RSA公鑰和私鑰。

我對RSA算法的理解僅限於使用.net提供的類,即System.Security.Cryptography.RSACryptoServiceProvider類。 我知道如何生成隨機RSA公鑰/私鑰並執行加密/解密。

但是.net類不​​允許我們根據密碼創建RSA公鑰/私鑰。

雖然我正在使用vb.net,但歡迎任何使用c#,c,c ++或任何.net兼容語言的解決方案做出貢獻,因為我可以通過p / invoke或dll引用訪問該解決方案。

提前致謝!

也許您應該考慮像AES這樣的對稱密鑰加密,其中密碼短語可以從中導出密鑰。 你提到這是供內部使用的,你真的需要RSA嗎? 如果是這樣,或許您想要做的是保護RSA私鑰文件,您可以通過AES加密該文件並使用密鑰的密碼來實現。 您應始終使用旨在執行此操作的軟件生成RSA公鑰/私鑰對。

考慮到你需要大約2048位的隨機性才能開始你的素性測試(每個勢素數為1024位),並且你的潛在素數可能會失敗他們的素數測試,你的密碼需要很長才能提供足夠的熵生成好的密鑰。

讓我們假設鍵盤上大約有94個鍵生成字符,並進一步假設用戶實際上會隨機點擊它們。 (不是一個好的假設,但請耐心等待。)

這是每個字符的log(94)/log(2) == 6.55位熵。 要獲得2048位的熵,您需要要求一個長度為313個字符的密碼: 2048 / 6.55... == 312.45

您如何看待您的用戶會被要求提供300多個字符的密碼? 請記住,這是樂觀的假設,用戶將隨機點擊94個符號中的每一個; 這對我來說似乎不太可能。 我覺得40多字符將是人的創造力的真正的限制:26個字母,10個數字,並且不需要移標點符號鍵。 你的密碼短語中大約有384個字符。

請堅持隨機生成的密鑰,其中有人非常聰明地負責收集熵以種子偽隨機數生成器。

據我所知,Rsa密鑰永遠不會基於密碼。 您只能使用密碼來保護rsa密鑰。

如果您不需要公鑰加密,則不需要RSA。

使用基於密碼的密鑰派生功能的對稱加密(例如,帶有PBKDF2的 AES )。 它會更快,更安全。

暫無
暫無

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

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