【问题标题】:Google Cloud HSM as a provider for encryptionGoogle Cloud HSM 作为加密提供商
【发布时间】:2023-04-08 14:30:01
【问题描述】:

AWS 似乎允许我们将 AWS Cloud HSM 作为提供商,请参阅 herehere

Security.addProvider(new com.cavium.provider.CaviumProvider())

然而,在 GKE 的示例中,我们似乎只有充气城堡作为提供者。见here

Security.addProvider(new BouncyCastleProvider());

也许我错过了一些基本的东西。

希望按照 JCA API 进行初始化

https://docs.oracle.com/javase/10/docs/api/java/security/Signature.html#initSign(java.security.PrivateKey)

【问题讨论】:

  • 查看示例代码 - 它使用 BC 进行验证,并使用专有客户端获取密钥和签名。似乎没有使用 JCA,但使用了 Web API - KMS。您可以将其包装在您自己的 JCA 扩展中 :) cloud.google.com/kms/docs/reference/…
  • 丹,感谢您的调查。很酷,所以将使用 AWS 或按照建议包含在我自己的 JCA 中。我想我应该感谢在云中拥有 HSM,这将为执行早期应用程序行为测试节省大量准备时间。想知道为谷歌工作的人是否可以发表评论。 JCA 是一个标准,它会出现在 Google Cloud 当前或未来的路线图上吗?再次丹,谢谢!

标签: java amazon-web-services google-cloud-platform hsm jca


【解决方案1】:

我不确定确切的问题是什么,但看起来您想编写代码,使用来自 HSM 的私钥对数据进行签名,并在 AWS 和 Google Cloud 上运行。这样做的步骤是:

  1. 加载提供程序
  2. 打开密钥库
  3. 检索私钥
  4. 使用私钥初始化签名对象(并使用要签名的数据对其进行更新)
  5. 签名

第 1 步可以通过编程方式完成(通过 Security.addProvider,正如您在问题中所写的那样)或在 java.security 文件中静态完成。如果您希望您的代码与其运行的云平台无关,您可能需要考虑静态执行此操作(尽管也可以通过编程方式执行此操作并使事情与平台无关)。

其余步骤只需要非常标准的 JCE 代码。下面是一个例子:

KeyStore keyStore = KeyStore.getInstance("type", "provider name");
PrivateKey privKey = (PrivateKey) keyStore.getKey("alias", null);
Signature sig = Signature.getInstance("transformation", "provider name");
sig.initSign(privKey);
sig.update(dataToSign);
byte[] signature = sig.sign();

您可能希望从(安全的)配置文件中读取提供程序名称和密钥库类型,因此这些不是硬编码的。完成这项工作后,您需要查看去密钥库检索密钥对象的频率,并可能考虑缓存它们,因为密钥库检索可能很昂贵,具体取决于 HSM 和提供程序库用过的。这有点超出了这个问题的范围,或者至少我正在解释这个问题,所以我会停在那里。希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 2022-10-09
    • 1970-01-01
    • 2016-09-20
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    • 1970-01-01
    • 2017-10-14
    相关资源
    最近更新 更多