2016-03-10 174 views
3

我有一個JKS密鑰庫,它在我的應用程序中保留了幾個私鑰/公鑰對。這已經使用密鑰庫的密碼進行了保護。我正在添加用於與Bouncy Castle一起完成OpenPGP的密鑰,並且我需要生成幾個與Bouncy Castle PGP配合使用的密鑰。我知道我可以將這些密鑰存儲爲單獨的文件,但這些文件需要單獨使用密碼進行保護,從而爲用戶造成頭痛。我想簡單地將PGP密鑰存儲在現有密鑰庫中。我已經閱讀了幾個關於Stackoverflow的迴應,暗示它可能,但沒有明確的答案。那麼我可以將PGP密鑰存儲在現有的密鑰庫中嗎?如何在Java密鑰庫中存儲Bouncy Castle PGP密鑰?

這是我在想什麼。 Bouncy Castle的PGP課程沒有實施密鑰或證書。它的確有JcaPGPKeyPair可以包裝一個PrivateKey/PublicKey實例。因此,我可以在JCE中創建密鑰,然後使用JcaPGPKeyPair將JCE密鑰「導入」BC PGP基礎架構。一旦完成,我將扔掉所有BC PGP實例,並在我再次需要時重新創建它們。可能使用JcaPGPKeyConverter來完成JCE密鑰和PGP密鑰之間的轉換?

我可以使用2個JCE RSA或DSA密鑰對簽名和加密密鑰PGP想要使用?將這些密鑰存儲在Keystore中,並在需要使用這些密鑰時按需重新構建PGP基礎結構?

回答

3

我想簡單地將PGP密鑰存儲在現有密鑰庫中。我已經閱讀了幾個關於Stackoverflow的迴應,暗示它可能,但沒有明確的答案。那麼我可以將PGP密鑰存儲在現有的密鑰庫中嗎?

Java密鑰存儲區不支持OpenPGP密鑰。 OpenPGP是與X.509不兼容的另一個標準。

Bouncy Castle的PGP類沒有實現密鑰或證書。它的確有JcaPGPKeyPair可以包裝一個PrivateKey/PublicKey實例。因此,我可以在JCE中創建密鑰,然後使用JcaPGPKeyPair將JCE密鑰「導入」BC PGP基礎架構。一旦完成,我將扔掉所有BC PGP實例,並在我再次需要時重新創建它們。可能使用JcaPGPKeyConverter來完成JCE密鑰和PGP密鑰之間的轉換?

我可以使用2個JCE RSA或DSA密鑰對簽名和加密密鑰PGP想要使用?將這些密鑰存儲在Keystore中,並在需要使用這些密鑰時按需重新構建PGP基礎結構?

您可能可以提取構成公鑰和私鑰的普通數字,但正在丟失用戶ID,時間戳......的所有信息,您必須每次都重構該信息。我不會去做這樣一個脆弱和容易出錯的路徑。沒有OpenPGP和X.509關鍵屬性的真實映射,並且對於證書(關鍵字上的簽名)它變得更糟。

+0

那麼存儲PGP密鑰的最佳方式是什麼,像一個密鑰庫?我知道有很多其他格式PKCS11,PKCS12可以存儲多個密鑰。在API中,PGPSecretKeyRingCollection有一個編碼(OutputStream)方法,但是細節卻缺少它的實際功能。或者如何保護你寫出來的密鑰。 – chubbsondubs

+0

OpenPGP知道「鑰匙扣」的概念,這些鑰匙基本上是一個接一個列出的多個鑰匙。如果您安裝了GnuPG並使用它,可以通過查看'〜/ .gnupg/pubring.gpg'文件輕鬆觀察到這一點,例如使用'gpg --list-packets'或'pgpdump'來列出實際的密鑰數據包(以及連接到它們的所有東西)。私鑰默認使用密碼進行對稱加密,密碼也在OpenPGP中標準化。 –

+0

嗯,我想在Bouncy Castle API中這樣做,因爲這是我的產品的一部分,所以使用GnuPG不是一種選擇。所以我想我會繼續尋找。 – chubbsondubs

相關問題