我需要知道发送到Google CloudKMS的plaintext
/ ciphertext
以及用于身份验证的公钥/私钥在传输过程中是安全的,但我不知道如何证明这一点。
根据KMS docs,我创建了一个服务帐户,下载了JSON密钥文件,并通过环境变量GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account-key.json
将其连接起来。
我使用的是google-api-client gem(版本为0.10.3
,发布时间为13个月,因为我在使用padrino-mailer时无法安装mime-types >= 3.0
:请参阅this commit) ,测试了Google::Apis::CloudkmsV1::CloudKMSService
方法encrypt_crypto_key
和decrypt_crypto_key
,并且它们运行良好。
我试过阅读google-api-client,googleauth和signet宝石的源代码。我所能确定的是:
private_key
值用于生成OpenSSL::PKey::RSA.new
here Signet::OAuth2::Client
在this file signing_key
的RSA密钥
醇>
如果使用JSON密钥文件加密通过调用服务器上的encrypt_crypto_key
发送的字符串,并且同样解密decrypt_crypto_key
和CloudKMS服务器收到的字符串,我会考虑安全性。在另一端表现相似。这就是我假设的库 - 端到端加密 - 但我必须看到它相信它。我试图查看Wireshark中的流量,但对它没有任何意义(也许事实证明了这一点?我不知道)
任何人都可以帮助我证明或反驳这种调用CloudKMS来加密/解密用户数据的方法 - 使用google-api-client gem下载的per the docs JSON密钥文件 - 是否安全?
相关:对于您感兴趣的人,CloudKMS API on the roadmap包含在newer google-cloud gem中。
答案 0 :(得分:3)
您的客户与Google之间的通信是通过TLS保护的。您可以在Wireshark中看到通信在端口443上,并且协商了TLS连接。
您的请求使用OAuth进行身份验证。在这种情况下(使用GCP外部的服务帐户),这是使用Using OAuth 2.0 for Server to Server Applications中记录的流程完成的:
这是安全的端到端(TLS连接是端到端的安全性,因为通信方 - 您的服务和Google - 是TLS端点)。由于您的问题似乎是“这些请求是否在传输过程中是安全的,我如何才能显示”,我认为足以证明正在协商TLS连接,Wireshark应该能够向您展示这一点。 (您的连接库还需要对所提供的证书进行适当的PKI评估;验证这是正确发生的更为复杂,但如果您调查正在使用的工具,那么信任是正确的,这是合理的。以及他们关于证书验证的断言。)
祝愿并感谢您使用GCP和Cloud KMS。如果您有任何其他问题,请告诉我们。