OpenSSL提供了生成隨機公鑰/私鑰對的工具。是否有任何機制來確定性地基於一些初始值生成一對?基於輸入生成公鑰/私鑰對
例如,給定字符串'abcd'
,生成一個公鑰/私鑰對,以便可以使用相同的字符串再次生成相同的公鑰/私鑰對。
OpenSSL提供了生成隨機公鑰/私鑰對的工具。是否有任何機制來確定性地基於一些初始值生成一對?基於輸入生成公鑰/私鑰對
例如,給定字符串'abcd'
,生成一個公鑰/私鑰對,以便可以使用相同的字符串再次生成相同的公鑰/私鑰對。
當然,只需在PBKDF中使用您的密碼來生成像字節數組(需要隨機鹽和高迭代次數)的密鑰即可。然後使用這個字節數組作爲PRNG的種子。確保你總是使用相同的PRNG!然後使用該PRNG作爲RSA_generate_key的輸入。確保生成密鑰實現沒有改變。
請在crypto.stackexchange.com上閱讀關於Initialize a PRNG with a password的回答。請注意,通常私鑰是加密的,例如,使用PKCS#12容器。請注意,PKCS#12容器和上述方法都容易受到強力攻擊。大多數密碼確實提供了非常有限的熵,使得這些暴力攻擊更加可行。 PKCS#12容器的優點是您不必將其與密文一起存儲,只有在簽名生成或解密時才需要。使用128位十六進制值作爲密碼可以緩解暴力強制的問題,但您可能無法記住它。
請注意,RSA密鑰對的生成需要很長時間(並且發現一個較大的素數具有非確定性的運行時間,因此對於特定的密鑰對可能需要很長的時間)。 EC F(p)鍵將不太麻煩。
可行嗎?當然。有用?有可能。充滿危險?當然。
如果你必須問如何做到這一點,那麼你可能不應該這樣做:P –
不知何故,我覺得對於與密碼學有關的任何事情都是如此。 – ntoskrnl
@ntoskrnl是的,但是這是從磨損很嚴重的路徑移動過來的。如果你鬆散的路徑,你可能會遇到蜘蛛 - 而且意味着精靈。 –
我真心希望不會。這將使所有安全失效。 – EJP
@EJP取決於密碼的質量。但對於加密容器也是如此。加密容器的優點是你需要訪問加密容器(例如PKCS#12文件)來破解私鑰。使用密碼,您可以嘗試直到找到解密文件或生成簽名的內容。 –
@owlstead當然。理想情況下,密碼長度與密鑰長度相同,那麼熵不會丟失。但那你就不需要密碼了,對吧? – EJP