导语
客户在使用人脸核身服务接口时,出于安全考虑,需要对传输的敏感数据进行加密,此场景需求可以使用腾讯云密钥管理系统KMS完成安全保护。
目前,人脸核身的手机号三要素核验接口已经完成数据加密传输的需求。本篇将详细阐述如何完成接口中涉及的姓名、联系方式、身份证号字段的数据加密,保证客户数据的安全性与可靠性。另外,数据都是采用高效的本地对称加密处理,对业务的访问体验影响很小,客户可以放心使用。
加解密流程框架
人脸核身使用信封加密(Envelope Encryption)应对海量数据的高性能加解密方案。使用 GenerateDataKey 接口生成数据加密密钥 DEK 明文和密文,使用 DEK 明文对数据进行加密,并只需要传输数据加密密钥 DEK 密文到 KMS 服务端(通过 CMK 进行加解密)。
详细操作步骤
数据加密服务开通
按照数据加密文档,首先完成数据加密服务的开通,最终在人脸核身控制台的“数据加密服务”中,生成“密钥ID/密钥名称”,如下:
GenerateDataKey接口调用
调用GenerateDataKey接口,KeyID传入“密钥ID/密钥名称”,KeySpec传入AES_256,如下:
结果返回如下:(已做脱敏处理)
代码语言:javascript复制{
"Response": {
"RequestId": "934416e3-1d4e-4622-92f2-a389df3f9f53",
"KeyId": "8xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx9",
"Plaintext": "7vhA13JTJIXqHLdEwPm8wNtc23I5xxxxxxxxxxxxxx",
"CiphertextBlob": "08okx7UOUmOFDxERN6zEBVyqIGso1 NR3b58lSHjCebKJRx3nWL Db00SPVZF D6KZo0AC/g3N0coZ9/oBWGoQ==-k-fKVP3WIlGpg8m9LMW4jEkQ==-k-yWxkK2jRnF0uOSV 3Esp6gR1FT7EmhhQGo fEZSr/H/3hEU E/sj4ATCtz4EoP2 r4ZElRNQaWTzxxxxxxxxxxxxxxxx"
}
}
其中,Plaintext为明文密钥,CiphertextBlob为密文密钥,这两个返回为重点字段。
加密“手机号三要素核验”中的数据
“手机号三要素核验”接口中的IdCard(身份证号)、Name(姓名)、Phone(手机号)可以作为加密数据进行传输,下面以加密“张三”为例,展示具体的NodeJS加密代码:
代码语言:javascript复制const crypto = require('crypto');
function encryptAes256CBCPKCS7(data, Plaintext) {
try {
let iv = "aabbccddeeffgghh";//任意16位长度的字符串,一定要保存
var clearEncoding = 'utf8';
var cipherEncoding = 'base64';
var cipherChunks = [];
Plaintext = Buffer.from(Plaintext,'base64');//一定要对Plaintext进行base64解码后作为数据密钥本地使用
var cipher = crypto.createCipheriv('aes-256-cbc', Plaintext, iv);
cipher.setAutoPadding(true);
cipherChunks.push(cipher.update(data, clearEncoding, cipherEncoding));
cipherChunks.push(cipher.final(cipherEncoding));
return cipherChunks.join('');
} catch (e) {
console.error(e);
return "";
}
}
//下面出入待验证的姓名、手机号、身份证号;以及Plaintext,完成数据加密
console.log(encryptAes256CBCPKCS7("张三", "7vhA13JTJIXqHLdEwPm8wNtc23I5xxxxxxxxxxxxxxx"))
console.log(encryptAes256CBCPKCS7("13999999999", "7vhA13JTJIXqHLdEwPm8wNtc23I5xxxxxxxxxxxxxxx"))
console.log(encryptAes256CBCPKCS7("210111111111111111", "7vhA13JTJIXqHLdEwPm8wNtc23I5xxxxxxxxxxxxxxx"))
上述代码中要注意iv值的设置,会在接下来的接口调用中用到。数据加密后的示例结果如下:
代码语言:javascript复制张三: nlScl5H2Ds myWdN8dJN6w==
13999999999: NSuL5oIx10D SdqICQVGmw==
210111111111111111: /4YJymAZtvJTXgHdZk7XnIuYEHQSPVn0jLx0UprASR4=
“手机号三要素核验”接口传入加密后数据
在云API 3.0 Explorer中,传入如下三方面数据,完成加密数据的传输,获得验证结果:
1. 加密后的姓名、手机号、身份证号;
2. 密文密钥CiphertextBlob;
3. 加密项
4.iv值
总结
现在只有“手机号三要素核验”接口实现了数据加密传输,其他接口也会逐步接入KMS加密体系,完成数据加密,敬请大家关注。