Пример шифрования C # для использования с GCP KMS asymmetric-decrypt - PullRequest
1 голос
/ 14 июня 2019

Мы используем функциональность KMS GCP для управления ключами.У нас есть агент C #, который извлекает последний открытый ключ из набора ключей, шифрует некоторые данные и отправляет их в бэкэнд-сервис, который будет использовать asymmetric-decrypt и набор ключей / ключ для его расшифровки.

У меня естьТрудно заставить C # создать зашифрованную полезную нагрузку, которая работает с GCP KMS, возможно, где-то неверные настройки заполнения?KMS просто отвечает «Ошибка расшифровки».

Я пробовал использовать оба параметра System.Security.Cryptography и BouncyCastle.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

Мы ожидаем получить расшифрованный файл, но просто получим ошибку РасшифровкаОшибка .

...