首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Google KMS:使用非对称公钥加密的明文大小限制

Google KMS:使用非对称公钥加密的明文大小限制
EN

Stack Overflow用户
提问于 2020-03-14 19:14:05
回答 1查看 1.1K关注 0票数 1

嗨,Google团队,是否有任何Google 明文大小限制来加密非对称和对称密钥类型?

因为我们希望加密/解密前端(浏览器)和后端( REST微服务)之间的REST流,并且希望使用非对称方法(而不是混合):

  1. 生成前端密钥-对数据加密公钥/私钥(使用javascript库)-数据加密公钥不被KEK加密
  2. 生成后端密钥-对数据加密公钥/私钥(使用带有Google的路障)-数据加密公钥不经KEK加密
  3. 在前端和后端之间交换数据加密公钥,以便能够封装从前端到后端的请求和从后端到后端的响应

我们希望在某些调用会话期间(在浏览器中)存储前端生成的非对称公钥/私钥,后端非对称公钥/私钥将由google KMS生成。

那么,对于非对称密钥,Google明文大小是否存在加密密钥类型的限制?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-14 19:52:39

除了讨论适合您的最佳协议设计之外,还要回答具体问题: RSA解密的最大有效负载大小取决于密钥大小和填充算法。所有目前支持的RSA加密格式都使用RFC 2437中标准化的OAEP。你会在那里看到这样的信息:

长度最多为k-2-2 hLen的八位串,其中k是模n的八进制长度,hLen是EME-OAEP的散列函数输出的八进制长度。

这导致m的最大长度如下:

RSA_DECRYPT_OAEP_2048_SHA256:K= 256;hLen = 32;maxMLen = 190

RSA_DECRYPT_OAEP_3072_SHA256:K= 384;hLen = 32;maxMLen = 318

RSA_DECRYPT_OAEP_4096_SHA256:K= 512;hLen = 32;maxMLen = 446

RSA_DECRYPT_OAEP_4096_SHA512:K= 512;hLen = 64;maxMLen = 382

如果您试图加密大于此限制的消息,您的客户端将失败,因为您无法加密,因此毫无疑问,KMS对消息的处理时间太长了。

下面是我的测试,以验证Cloud可以将消息解密为2048位RSA密钥的完整长度:

代码语言:javascript
复制
# create an rsa2048-256 encryption key

tdierks@cloudshell:~ (kms-test-1367)$ gcloud kms keyrings create --location global so-60686427
tdierks@cloudshell:~ (kms-test-1367)$ gcloud kms keys create rsa-2048-256 --keyring so-60686427 --location global --purpose asymmetric-encryption --default-algorithm rsa-decrypt-oaep-2048-sha256
tdierks@cloudshell:~ (kms-test-1367)$ gcloud kms keys versions list --key rsa-2048-256 --keyring so-60686427 --location global
NAME                                                                                                      STATE
projects/kms-test-1367/locations/global/keyRings/so-60686427/cryptoKeys/rsa-2048-256/cryptoKeyVersions/1  ENABLED

# get the public key

tdierks@cloudshell:~ (kms-test-1367)$ gcloud kms keys versions get-public-key 1 --key rsa-2048-256 --keyring so-60686427 --location global > /tmp/rsa-2048-256.pub
tdierks@cloudshell:~ (kms-test-1367)$ cat /tmp/rsa-2048-256.pub
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyvN5iBbV7daXKocL0CuB
bM+gaPMEigS6N8Jl9g7AY7ocrvNDONBa5JZzJTuMkNqgq21PZ1CUBD76jJlUOBgY
Nmj+sMNKw1c+slx47fvyK2uVMcmEEAfCcnUt2fK86v7v8UddbH/BNK+SobarkOQC
1kM74qdhKSvFFz+F9kAzrby4VjCxfWsDYCeFhS9Jrkxl6l/Z2WANy34y9ztbgJdi
eSugA7b/VfrlsxYz7xu498UWDbVbOPKs7UGB14icK4SVoF0irk7dWxNvAQD21mJU
YPAFmJ/MTQ+v3l+uEOrdicb9FcM6WNmyTwkN6DYcuD7eJYVwwz1sU8Y631swbjlS
wQIDAQAB
-----END PUBLIC KEY-----

# test it by encrypting a test message and decrypting it

tdierks@cloudshell:~ (kms-test-1367)$ echo "squeamish ossifrage" | openssl pkeyutl -encrypt -pubin -inkey /tmp/rsa-2048-256.pub -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256 -pkeyopt rsa_mgf1_md:sha256 > /tmp/rsa-2048-256.enc
tdierks@cloudshell:~ (kms-test-1367)$ gcloud kms asymmetric-decrypt --location global --keyring so-60686427 --key rsa-2048-256 --version 1 --ciphertext-file /tmp/rsa-2048-256.enc --plaintext-file /dev/stdout
squeamish ossifrage

# generate a 190 byte message, encrypt it, and decrypt it, verify by comparing md5sum

tdierks@cloudshell:~ (kms-test-1367)$ dd ibs=190 count=1 < /dev/urandom > /tmp/message-190
1+0 records in
0+1 records out
190 bytes copied, 0.0002066 s, 920 kB/s
tdierks@cloudshell:~ (kms-test-1367)$ ls -l /tmp/message-190
-rw-r--r-- 1 tdierks tdierks 190 Mar 15 14:54 /tmp/message-190
tdierks@cloudshell:~ (kms-test-1367)$ openssl pkeyutl -in /tmp/message-190 -encrypt -pubin -inkey /tmp/rsa-2048-256.pub -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256 -pkeyopt rsa_mgf1_md:sha256 > /tmp/rsa-2048-256-m190.enc
tdierks@cloudshell:~ (kms-test-1367)$ gcloud kms asymmetric-decrypt --location global --keyring so-60686427 --key rsa-2048-256 --version 1 --ciphertext-file /tmp/rsa-2048-256-m190.enc --plaintext-file /dev/stdout | md5sum
4932e23fb11c094c1dd703ba34afc565  -
tdierks@cloudshell:~ (kms-test-1367)$ md5sum /tmp/message-190
4932e23fb11c094c1dd703ba34afc565  /tmp/message-190

# try again with 191 bytes

tdierks@cloudshell:~ (kms-test-1367)$ dd ibs=191 count=1 < /dev/urandom > /tmp/message-191
1+0 records in
0+1 records out
191 bytes copied, 7.2545e-05 s, 2.6 MB/s
tdierks@cloudshell:~ (kms-test-1367)$ ls -l /tmp/message-191
-rw-r--r-- 1 tdierks tdierks 191 Mar 15 14:59 /tmp/message-191
tdierks@cloudshell:~ (kms-test-1367)$ openssl pkeyutl -in /tmp/message-191 -encrypt -pubin -inkey /tmp/rsa-2048-256.pub -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256 -pkeyopt rsa_mgf1_md:sha256 > /tmp/rsa-2048-256-m191.enc
Public Key operation error
140191432818944:error:2406F079:random number generator:RAND_load_file:Cannot open file:../crypto/rand/randfile.c:98:Filename=/home/tdierks/.rnd
140191432818944:error:0409A06E:rsa routines:RSA_padding_add_PKCS1_OAEP_mgf1:data too large for key size:../crypto/rsa/rsa_oaep.c:62:

如您所见,OpenSSL在加密191个字节输入文件时失败了。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60686427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档