簡體   English   中英

如何在不使用Java的物理密鑰環的情況下使用公共密鑰OpenPGP(GPG)

[英]How to use public key OpenPGP(GPG) without access to physical key ring in Java

設定:

  • 具有GnuPG的Linux或具有GPG4Win(OpenPGP)的Windows
  • 有權訪問密鑰環的特權用戶已經創建了2048個RSA密鑰對
  • 已經創建了第二個較低特權用戶,以使Java應用程序在
  • 已授予該用戶運行GPG命令的權限,但無法訪問物理鑰匙圈文件
  • 密鑰ID是Java應用程序已知的,提取私有密鑰的密碼也是如此
  • Java應用程序已導入Bouncycastle庫
  • Java程序需要使用密鑰對執行加密和解密

問題:

我已經使用Bouncycastle成功地執行了加密和解密。 但是,這涉及嘗試從發布和secsec文件中讀取公鑰和私鑰。 為了安全起見,我寧願不讓Java應用程序直接訪問密鑰集文件。

我有什么選擇。 在Bouncycastle中,是否有任何選項可以執行此操作而無需讀取密鑰環或將密鑰導出到單獨的文件中

注意:不需要使用Bouncy城​​堡。

您的Java應用程序可以使用執行該應用程序的用戶當前擁有的特權來調用gnupg。 幸運的是,gnupg支持大量命令行選項 ,這些選項可讓您提供所有必要的參數並讀取/收集回狀態和結果,例如-batch-options-status-fd 您可以使用Java的ProcessBuilder或更高級別的庫(例如Plexus Utils)從Java調用程序並讀取其結果。

另一方面,至少有一個基於Java的包裝器庫 ,可直接與GnuPG可執行文件通信。 盡管依賴於平台,但與為每個事務生成一個流程相比,這可能具有速度優勢。 並且可能會節省您大量的執行工作,以找出命令行選項。

請注意,以這種方式使用GnuPG會完全繞過BouncyCastle -您將自動執行對GnuPG的調用,有效地將其用作“庫”。

BouncyCastle需要直接訪問密鑰文件,包括公鑰和私鑰。

不使用BouncyCastle

如果要阻止Java應用程序訪問密鑰文件,但仍將其用於加密和解密,則可以成功使用GnuPG 2.1,該協議將所有需要訪問私鑰環的操作分擔給gpg-agent 可能有效的設置如下所示:

  • 啟動gpg-agent
  • 限制對Java應用程序的訪問,因此它可以訪問gpg-agent套接字,但不能訪問私鑰文件

在Linux中,您可能考慮對套接字和密鑰環文件使用chroot或適當的權限。 在Windows中,可能會有類似沙盒解決方案的東西。

構建自己的BouncyCastle守護程序

類似於小巧的gpg-agent ,您可以編寫自己的守護程序來處理所有秘密密鑰操作,而不必同時公開密鑰(因此,您有一個小的守護程序,發生重大錯誤的可能性要低得多;而大型的,可能不安全且公開的主應用程序可以將加密/解密請求發送到“代理”應用程序。

暫無
暫無

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

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