前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >人脸核身“手机号三要素核验”中的KMS加密服务应用

人脸核身“手机号三要素核验”中的KMS加密服务应用

原创
作者头像
周朋伟
发布2021-01-31 21:18:36
2.7K0
发布2021-01-31 21:18:36
举报

导语

客户在使用人脸核身服务接口时,出于安全考虑,需要对传输的敏感数据进行加密,此场景需求可以使用腾讯云密钥管理系统KMS完成安全保护。

目前,人脸核身的手机号三要素核验接口已经完成数据加密传输的需求。本篇将详细阐述如何完成接口中涉及的姓名、联系方式、身份证号字段的数据加密,保证客户数据的安全性与可靠性。另外,数据都是采用高效的本地对称加密处理,对业务的访问体验影响很小,客户可以放心使用。

加解密流程框架

人脸核身使用信封加密(Envelope Encryption)应对海量数据的高性能加解密方案。使用 GenerateDataKey 接口生成数据加密密钥 DEK 明文和密文,使用 DEK 明文对数据进行加密,并只需要传输数据加密密钥 DEK 密文到 KMS 服务端(通过 CMK 进行加解密)。

加解密流程框架
加解密流程框架

详细操作步骤

数据加密服务开通

按照数据加密文档,首先完成数据加密服务的开通,最终在人脸核身控制台的“数据加密服务”中,生成“密钥ID/密钥名称”,如下:

开通“数据加密服务”
开通“数据加密服务”

GenerateDataKey接口调用

调用GenerateDataKey接口,KeyID传入“密钥ID/密钥名称”,KeySpec传入AES_256,如下:

GenerateDataKey接口调用
GenerateDataKey接口调用

结果返回如下:(已做脱敏处理)

代码语言: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加密体系,完成数据加密,敬请大家关注。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 导语
  • 加解密流程框架
  • 详细操作步骤
    • 数据加密服务开通
      • GenerateDataKey接口调用
        • 加密“手机号三要素核验”中的数据
          • “手机号三要素核验”接口传入加密后数据
          • 总结
          相关产品与服务
          人脸核身
          腾讯云慧眼人脸核身是一组对用户身份信息真实性进行验证审核的服务套件,提供人脸核身、身份信息核验、银行卡要素核验和运营商类要素核验等各类实名信息认证能力,以解决行业内大量对用户身份信息核实的需求,广泛应用于金融、运营商、共享出行等领域。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档