与GCP KMS非对称解密

时间:2019-06-14 13:30:14

标签: c# google-cloud-platform google-cloud-kms

我们将GCP的KMS功能用于密钥管理。我们有一个C#代理,它将从密钥环中获取最新的公共密钥,对一些数据进行加密,然后将其发送到后端服务,该服务将使用asymmetric-decrypt和密钥环/密钥对其进行解密。

我很难让C#生成可与GCP KMS一起使用的加密有效负载,可能某处的填充设置不正确? KMS只会以“解密失败”作为响应。

我尝试同时使用System.Security.CryptographyBouncyCastle.NetCore,但无济于事。每次都有相同的错误。

创建的KMS密钥如下:

gcloud kms keys create OUR_KEY --purpose=asymmetric-encryption --location=global --keyring=OUR_KEYRING --default-algorithm=rsa-decrypt-oaep-2048-sha256

然后我抓住公钥:

gcloud alpha kms keys versions get-public-key 1 --location=global --keyring=OUR_KEYRING --key=OUR_KEY

C#看起来像这样:

var pemReader = new PemReader(File.OpenText(args[0]));
var keys = (RsaKeyParameters)pemReader.ReadObject();
var digest = new Sha256Digest();
var eng = new OaepEncoding(new RsaEngine(), digest, digest, null);
eng.Init(true, keys);

var plainTextBytes = File.ReadAllBytes(args[1]);
var destinationPath = Path.Combine(Path.GetDirectoryName(args[1]), $"{Path.GetFileNameWithoutExtension(args[1])}.enc{Path.GetExtension(args[1])}");

int length = plainTextBytes.Length;
int blockSize = eng.GetInputBlockSize();
var cipherTextBytes = new List<byte>();
for (int chunkPosition = 0;
     chunkPosition < length;
     chunkPosition += blockSize)
     {
         int chunkSize = Math.Min(blockSize, length - chunkPosition);
         cipherTextBytes.AddRange(eng.ProcessBlock(
             plainTextBytes, chunkPosition, chunkSize
         ));
     }

File.WriteAllBytes(destinationPath, cipherTextBytes.ToArray());

然后尝试解密文件(这就是失败的地方):

gcloud kms asymmetric-decrypt --plaintext-file=output.dec.txt --ciphertext-file=input.enc.txt --keyring=OUR_KEYRING --key=OUR_KEY --location=global --version=1

我们希望获取解密的文件,但只会收到错误解密失败

0 个答案:

没有答案