2009-11-21 66 views
53

RSA私鑰可能會被分配一個「密碼」,據我所知,這個密碼旨在提供一些輔助安全性,以防有人用私鑰文件冒充。RSA私鑰密碼短語如何工作?

安全性的密碼層如何實現?

+4

RSA本身沒有這樣的事情。這聽起來像是在談論某個使用RSA的特定程序 - 在這種情況下,如果您要告訴我們您正在討論的是什麼程序(例如PGP或GPG),這將非常有幫助。 – 2009-11-21 04:11:17

+1

有趣的 - 我主要關心unix-y系統上運行「ssh-keygen -t rsa」所要求的密碼。 – qfinder 2009-11-21 04:25:00

+0

這個問題似乎是脫離主題,因爲它不是關於編程。請參閱幫助中心的[我可以詢問哪些主題](http://stackoverflow.com/help/on-topic)。也許[信息安全協議棧](http://security.stackexchange.com/)會是一個更好的地方。 – jww 2014-07-14 07:25:15

回答

42

ssh-keygen使用OpenSSL生成RSA密鑰並將其存儲爲PEM格式。您正在討論的加密特定於PEM。如果你看一下你的密鑰文件,

-----BEGIN RSA PRIVATE KEY----- 
Proc-Type: 4,ENCRYPTED 
DEK-Info: DES-EDE3-CBC,5B01E932988DC66B 

EPESt4ZVIrxnQXxxWWVa7cCR+vgNZ/4vTu4mdq6pjaW7jMZoB8HV+mA745mQkQw7 
i+YtdVs/JqOeyGiw/3McxYYKZTlhyh7MvfIr1n8ZdZmcjQz+oFqMxChFU3r8BGgA 

「DEK-信息」頭部有你需要的,只要你知道密碼來解密密鑰的所有信息。 「DES-EDE3-CBC」表示三重DES(在EDE模式下)。 CBC是鏈式模式。十六進制數是CBC所需的初始向量。

PEM是一個非常古老的格式,所以它只支持DES/TripleDES。後來增加了AES和Blowfish,但所有實現都不支持。我的ssh(OpenSSH 5.2)只支持DES和TripleDES。

+0

是否有任何知道如何讀取這種格式的JRE類? – Phaedrus 2013-03-05 22:24:24

+0

@Phaedrus見https://github.com/bcgit/bc-java/blob/c0d5ac5e62a6531f640bdfb4897a9fe95a0c9fdb/pkix/src/test/java/org/bouncycastle/openssl/test/ParserTest.java#L412 – 2015-02-18 00:43:53

+3

這個答案似乎缺少關於如何將密碼轉換爲密碼接受的解密密鑰。 – 2015-12-16 23:30:23

27

密碼短語只是一個用於使用對稱密碼(通常是DES或3DES)加密包含RSA密鑰的文件的密鑰。爲了將密鑰用於公鑰加密,您首先需要使用解密密鑰對其文件進行解密。 ssh通過詢問您的密碼來自動執行此操作。

如果有人拿到了密鑰文件,除非他們知道用於加密文件的密碼短語,否則他們將無法使用它。

+0

非常感謝您的回覆!幾個後續問題:RSA標準的密碼部分還是其他內容(根據上面的評論者)? ssh-keygen程序是使用DES還是3DES /我該怎麼說?什麼等級?爲什麼不AES? – qfinder 2009-11-21 05:13:58

8

如果不受保護,存儲在通用文件系統上的私鑰(與防篡改,專用硬件令牌相對)很容易被盜。文件系統權限可能看起來足夠了,但它們通常可以被繞過,特別是如果攻擊者能夠物理訪問機器。

一個強對稱密碼,用一個好的密碼鍵入,有助於防止這種情況發生。一個好的RSA私鑰記得太長(對我來說),但是小得多的對稱密鑰可以提供相同的安全級別。存儲在人腦中的相對較短的對稱密鑰用於保護存儲在磁盤上的大型私鑰。

+0

絕對有意義 - 關於它究竟如何實現的更多細節? (這是完全對稱的,是否是所有impls的標準,等等?) – qfinder 2009-11-21 05:16:35