Google Cloud HSM作为加密提供程序

时间:2018-11-20 14:08:03

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

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

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

但是,在GKE的样本中,我们似乎只有充气城堡作为提供者。参见here

Security.addProvider(new BouncyCastleProvider());

也许我缺少一些基本知识。

想按照以下JCA API进行initsign

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

1 个答案:

答案 0 :(得分:0)

我不确定确切的问题是什么,但是看起来您想编写使用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和提供程序库用过的。这超出了这个问题的范围,或者至少是我要解释的问题的范围,所以我将在此处停止。希望有帮助。