操作指南

最近更新时间:2020-03-13 16:29:31

操作流程

当您需要进行传递敏感信息时(例如密钥的交换),需要对敏感数据进行加密,使用非对称密钥加解密的方案从信息接收者的角度来说,您需要进行以下操作:

  1. 在密钥管理系统 KMS 中创建非对称加密密钥,详情参考 CreateKey API 文档。
  2. 在密钥管理系统 KMS 中获取公钥,详情参考 GetPublicKey API 文档。
  3. 信息接收者将公钥分发给信息发送者。
  4. 信息发送者用得到的公钥对敏感数据进行本地加密后,将密文发送给信息接收者。
  5. 信息接收者拿到密文后,调用 KMS 的解密功能对密文解密。API 详情请参见 AsymmetricSm2DecryptAsymmetricRsaDecrypt 文档,TCCLI 方式请参见 非对称密钥解密 文档。

在整个敏感数据的传输的过程中,使用密文进行传输,而唯一能解密该密文的密钥托管在密钥管理系统 KMS 中保护,包括腾讯云在内的任何人都无法获取到您的密钥,极大程度上提高了敏感数据加密传输安全性。

操作步骤

RSA 示例

  1. 创建非对称加密密钥
    tccli kms CreateKey --Alias test --KeyUsage ASYMMETRIC_DECRYPT_RSA_2048
    返回结果:
    {
    "Response": {
      "KeyId": "22d79428-61d9-11ea-a3c8-525400******",
      "Alias": "test",
      "CreateTime": 1583739580,
      "Description": "",
      "KeyState": "Enabled",
      "KeyUsage": "ASYMMETRIC_DECRYPT_RSA_2048",
      "RequestId": "0e3c62db-a408-406a-af27-dd5ced******"
    }
    }
  2. 下载公钥
    请求:
    tccli kms GetPublicKey  --KeyId 22d79428-61d9-11ea-a3c8-525400******
    返回结果:
    {
    "Response": {
      "RequestId": "408fa858-cd6d-4011-b8a0-653805******",
      "KeyId": "22d79428-61d9-11ea-a3c8-525400******",
      "PublicKey": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzQk7x7ladgVFEEGYDbeUc5aO9TfiDplIO4WovBOVpIFoDS31n46YiCGiqj67qmYslZ2KMGCd3Nt+a+jdzwFiTx3O87wdKWcF2vHL9Ja+95VuCmKYeK1uhPyqqj4t9Ch/cyvxb0xaLBzztTQ9dXCxDhwj08b24T+/FYB9a4icuqQypCvjY1X9j8ivAsPEdHZoc9Di7JXBTZdVeZC1igCVgl6mwzdHTJCRydE2976zyjC7l6QsRT6pRsMF3696N07WnaKgGv3K/Zr/6RbxebLqtmNypNERIR7jTCt9L+fgYOX7anmuF5v7z0GfFsen9Tqb1LsZuQR0vgqCauOj************",
      "PublicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzQk7x7ladgVFEEGYDbeU\nc5aO9TfiDplIO4WovBOVpIFoDS31n46YiCGiqj67qmYslZ2KMGCd3Nt+a+jdzwFi\nTx3O87wdKWcF2vHL9Ja+95VuCmKYeK1uhPyqqj4t9Ch/cyvxb0xaLBzztTQ9dXCx\nDhwj08b24T+/FYB9a4icuqQypCvjY1X9j8ivAsPEdHZoc9Di7JXBTZdVeZC1igCV\ngl6mwzdHTJCRydE2976zyjC7l6QsRT6pRsMF3696N07WnaKgGv3K/Zr/6RbxebLq\ntmNypNERIR7jTCt9L+fgYOX7anmuF5v7z0GfFsen9Tqb1LsZuQR0************\n1QIDAQAB\n-----END PUBLIC KEY-----\n"
    }
    }
  3. 使用公钥加密
    1. 将公钥 PublicKey 存入文件 public_key.base64,并进行 base64 解码。
      存入文件:
      echo "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzQk7x7ladgVFEEGYDbeUc5aO9TfiDplIO4WovBOVpIFoDS31n46YiCGiqj67qmYslZ2KMGCd3Nt+a+jdzwFiTx3O87wdKWcF2vHL9Ja+95VuCmKYeK1uhPyqqj4t9Ch/cyvxb0xaLBzztTQ9dXCxDhwj08b24T+/FYB9a4icuqQypCvjY1X9j8ivAsPEdHZoc9Di7JXBTZdVeZC1igCVgl6mwzdHTJCRydE2976zyjC7l6QsRT6pRsMF3696N07WnaKgGv3K/Zr/6RbxebLqtmNypNERIR7jTCt9L+fgYOX7anmuF5v7z0GfFsen9Tqb1LsZuQR0vgqCauOj************" > public_key.base64
      base64 解码获取公钥实际内容:
      openssl enc -d -base64 -A -in public_key.base64 -out public_key.bin
    2. 创建测试明文文件:
      echo "test" > test_rsa.txt
    3. 使用 OPENSSL 进行公钥加密 test_rsa.txt 文件内容。
      openssl pkeyutl -in test_rsa.txt -out encrypted.bin -inkey public_key.bin -keyform DER -pubin -encrypt -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256
    4. 将公钥加密后的数据进行 base64 编码,方便传输。
      openssl enc -e -base64 -A -in encrypted.bin -out encrypted.base64
  4. 通过 KMS 使用私钥解密
    将上述 encrypted.base64 base64 编码之后的密文作为 AsymmetricRsaDecrypt 的 Ciphertext 参数,进行私钥的解密。
    请求:
    tccli kms AsymmetricRsaDecrypt --KeyId 22d79428-61d9-11ea-a3c8-525400****** --Algorithm RSAES_OAEP_SHA_256 --Ciphertext "DEb/JBmuhVkYS34r0pR7Gv1WTc4khkxqf7S1WIr7/GXsAs/tfP/v/2+1SwsIG7BqW7kUZqr38/FGkaIEqYeewot37t3+Jx0t5w7/yXkUnyUfyfPpXlHXf94g3wFOjijEWWsjWWzaXTkTr8uWOfRBenq+bcaY783FIy03XjJW/Y0wKWjD3tULvKndCJO/3bkb65kn1Fbsfm20xrUUwqV/p2DVLXBdG1ymr0DjsbG7R0tb3ytc2LmH33YPAQE32eP27ciKzSml+w2tdUM3dw3nEZcTGMs1wFDGk0O1WB052jZ7TitUD9zCftFv2dKlZD3LRx1+vHqpNVgPhLmL******=="
    返回结果:
    {
    "Response": {
      "RequestId": "6758cbf5-5e21-4c37-a2cf-8d47f5******",
      "KeyId": "22d79428-61d9-11ea-a3c8-525400******",
      "Plaintext": "dGVzdAo="
    }
    }
说明:

使用 SM2 非对称密钥加解密流程类似,私钥解密接口文档请参见 AsymmetricSm2Decrypt

目录