导语 | 数据安全问题既是技术问题,也是管理问题。本文是对腾讯安全云鼎实验室专家姬生利老师在云+社区沙龙online的分享整理,从技术角度剖析当前国内数据安全面临的难题及密码应用现状,并带来腾讯数据安全解决方案和云密码应用最佳实践解析,帮助大家构建安全有效的数据管理策略。
点击查看完整直播回放
一、 企业数据安全风险和国内密码应用现状
随着企业上云和数字化转型升级的深化,数据正在成为企业的核心资产之一,在生产过程中发挥的价值越来越大。
近几年大规模的数据泄露事件频发,外部威胁和内部威胁左右夹击,由内部威胁带来的大规模数据泄露事件越来越多,不安全的配置、源代码泄露及硬编码都有可能造成数据泄露,企业业务数据安全面临严峻挑战。
业务安全挑战
提供数据传输、数据存储等过程中的机密性和完整性的保护;
完善的密钥生命周期管理,保证密钥产生和运算过程的安全;
保护金融支付、电子政务、身份认证等业务过程的安全。
另一方面,《密码法》、《网络安全法》、网络安全等级保护2.0,以及相关行业安全规范对数据安全保护以及数据加密做出明确规定。
安全合规要求
满足外部合规需求,如密码法应用要求、等保安全合规建设等,系统安全标准 PCI DSS、SOC、第三方支付认证等;
满足内部审计管理策略。
二、密码常用技术简介
1. 对称加密
AES、DES、3DES、SM4 等;
加密解密使用相同密钥。
2. 非对称加密
RSA、ECC、SM2 等;
公钥加密,私钥解密。
3. 杂凑/哈希/散列
SHA、MD5、SM3;
单向不可逆。
4. 数字签名
将非对称密钥反过来使用;
私钥签名,公钥验证。
三、企业数据安全面临的难题
1. 从数据安全生命周期看风险及防护关键难点
难点1:分类、治理和策略。
难点2:DaR/DiT/DiU加密技术。
难点3:密钥管理。
难点4:事件监测分析。
2. 从开发运营过程看数据泄露风险
开发:意识疏忽泄露源代码中包含的敏感凭据和密钥。
测试:暴露高风险的测试数据库访问端口和弱账号等。
部署/交付:临时环境中的数据访问端口,薄弱配置导致的安全问题。
生产/运营:账号口令泄露、破解、弱口令,缺乏保护的隐私数据和密钥。
3. 从应用服务的构成看数据泄露风险
数据从产生、传输、存储、处理,到共享展示,每一个环节都存在数据泄露的风险,涉及数据安全保障:
本地敏感数据存储安全、网络通道的安全、配置文件和硬编码敏感信息的安全、密钥的安全管理、云上数据的存储安全、金融支付等敏感应用的安全合规问题、数据的共享、展示脱敏的问题等等。
4. 云架构下数据加密及密钥管理的挑战
(1)云数据全生命周期保护
数据分级与治理,确保云上敏感数据从生产、存储、流动、使用到销毁等数据全生命周期的加密策略的应用。
(2)云产品数据加密及密钥管理
云产品,如云硬盘、云存储、云数据库等精细化数据加密保护,密钥策略集中管控、安全分发、多租户隔离等挑战。
(3)密码方案云环境适配
传统密钥管理系统方案与云平台架构难以融合,合规化硬件密码机部署困难,多租户管理、权限管控困难,接口不适配等。
(4)密钥权限租户主管控
云数据加密与密钥管理分离,密钥全生命周期由租户自主管控,包括密钥访问身份与策略管控、密钥材料、加密算法等。
四、腾讯云数据安全中台
腾讯云数据安全中台具备三大特性,全数据生命周期支持、完整的云产品生态集成、国密与 FIPS 标准的支持。腾讯云数据安全中台还能提供极简的加密 API 和 SDK 服务,让用户得以使用最小的工作量,极简地实现对云上数据的加密保护。
通过数据安全中台的解决方案,可以在各个环节解决这些数据安全风险的问题,例如客户端本地敏感数据的存储,通过 SDK 结合KMS进行数据的加解密。不同服务之间的调用, API 密钥的保管可以使用白盒密钥解决,配置文件敏感信息可以通过凭据管理系统进行很好的管理。
五、云上数据安全应用最佳实践
1. 密钥管理系统KMS
对于云上数据安全应用方案,需要保管的核心内容就是密钥,密钥存放在硬编码配置文件里面,是写在代码里面的,这种情况下配置文件泄漏或者代码泄漏,密钥也会随之泄漏,密钥的丢失导致数据的密文不再安全,因此使用加密算法需要使用密钥管理系统(KMS)来对密钥进行统一管理。
另外,密钥的强度和随机性也是安全的重要因素之一,使用软件产生的伪随机数的安全度要低于专用硬件加密机生成的真随机数,这也是我们数据加密密钥需要使用KMS的原因之一。
KMS是云平台和产品合规的基础安全组件,海外用户需要满足FIPS-140-2标准,国内用户需要支持国密。一般的密钥管理系统提供以下特性:
基于硬件加密机的真随机数;
密钥的权限细粒度管控;
密钥的自动轮换;
密钥生命周期的管理(创建、开启、禁用、计划删除、销毁等);
自有密钥的导入;
多级密钥管理。
用户根密钥的创建、管理等操作都将在合规的 HSM 硬件中进行,腾讯云在内的任何人都无法获取到您的明文主密钥。
(1)安全合规的密钥保障
KMS 控制台操作简单,用户可自动创建密钥的类型,密钥轮换的启停、密钥的启用、计划删除等等。
密钥有自己的生命周期,从状态上可以看到,创建一个密钥后,开启的状态就是可用的状态,如果发现一个密钥出现了泄漏的问题,管理员可以立即关掉,让所有的数据都不能进行解密。
最小粒度进行授权,KMS与腾讯云访问管理集成可进行资源级别的授权,通过CAM身份管理和策略管理控制哪些账户、哪些角色可以访问或管理敏感密钥。首先管理员在 KMS 创建一个子账号,不同子账号分配给不同的应用,根据不同应用的特点可以进行授权。
(2)敏感数据加密
敏感信息加密是密钥管理服务(KMS)核心的能力,实际应用中主要用来保护服务器硬盘上敏感数据的安全(小于4KB),如密钥、证书、配置文件等。
通过直接调用KMS接口选择采用对称密钥或非对称密钥进行数据加解密,默认海外节点是 AES 算法,国内是国密的算法,解决传统用户本地加解密的痛点,权限是无法管控的。
另外加密算法库的依赖,目前国密算法 SDK 相对比较少,通过 KMS 只需要KMS SDK 避免对各种算法的依赖。这是数据量不大、并发性能要求不高的场景,可以直接调用 SDK 。
(3)高性能本地数据加密
对于较大的文件或者对性能敏感的数据加密,推荐使用信封加密。
这里说一下多层密钥管理,因为 KMS 考虑安全性通讯链路是HTTPS ,每一个请求都经过远程调用,性能满足不了要求,这种情况下可通过多级密钥管理的方式来解决,多级密钥存在用户缓存中,只要主密钥保证足够的安全,数据密钥就可以保证安全,数据密钥保证安全,数据也就能够保证安全性。这就是我们说的信封加密。
KMS产生两级密钥(主密钥CMK和数据加密密钥DEK),海量的业务数据采用DEK进行本地高效加密,而DEK通过CMK进行加密保护。通过DEK加密后的密文数据及DEK密文传输并存储至服务端业务系统。解密时,先用CMK解密DEK密文,获得DEK明文后再本地解密业务数据。
数据加解密可以在本地进行操作,避免每次发起 SDK 的请求。第一次数据加解密时触发一次网络调用,其他的所有时间都是本地进行数据加解密,目前服务器算力加密算法对业务性能的影响基本上还是在可接受的范围内。
(4) BYOK(Bring Your Own Key)
KMS 支持 BYOK(Bring Your Own Key),允许用户在腾讯云架构上使用自有的密钥材料进行敏感数据加解密服务。通过 KMS 服务生成一个密钥材料为空的用户根密钥,用户可将自己的密钥材料导入到该密钥中,形成一个外部密钥,再由 KMS 服务进行该外部密钥的分发管理。
(5)无缝集成云产品,实现云上数据透明加密
企业上云非常在意的一点是数据的存储安全性,通过 KMS 如何如何实现简单数据的安全存储?KMS集成了多款云产品,通过授权的方式实现特别数据加解密的功能。
以CBS加密为例:
用户启动 CBS 加密特性时,KMS将自动通过系统默认生成CMK以信封加密的方式对业务数据进行加密。用户挂载CBS时,由CBS在用户授权情况下为用户创建CMK和数据密钥,当数据需要写入时,由CBS触发加密操作,密文存储,当用户需要读取数据时,由CBS自动为用户解密返回明文,整个流程对用户来说是完全透明的
(6)白盒密钥管理
在访问API接口服务时,需要API鉴权的密钥或者Token,例如云API访问时需要 SecretId 和 SecretKey,对于这类特殊数据的保护场景,推荐使用白盒加密的方式来保护API 密钥的安全。
白盒算法是将算法和密钥进行混淆,整个加密过程中都不需要明文密钥,从而解决了标准密码算法中明文密钥的问题。使用过程中用户作为管理员角色,创建白盒密钥对API Key进行加密,并把白盒解密密钥和API Key密文分发给相应的开发或运维人员部署,使用白盒解密密钥和白盒SDK解密API Key密文至内存中使用,通过这样的方式有效对 API Key的安全进行加固。
另外,白盒密钥管理支持指定设备绑定,限定白盒密钥解密的环境,即使密钥全部丢失情况下,脱离环境也无法进行解密,进一步加固保护API Key的安全性。
2. 凭据管理系统
像帐号密码、敏感 IP 端口、数据库连接信息等我们可以统称为凭据,传统的使用方式是把信息配置在配置文件或者配置中心。现状是大部分敏感凭据并没有进行加密保护,一旦配置文件丢失,容易造成敏感信息泄露。有一些有安全意识开发的同学会对敏凭据进行一次简单的加密,但是加密凭据的密钥放在哪里就成了关键问题。
这种情况,推荐使用凭据管理系统(SecretsManager,SSM)对敏感凭据进行统一管理。
安全的凭据托管以及权限控制,数据使用KMS加密
凭据的版本管理
凭据的自动轮换
凭据的生命周期管理
以一个源代码为例,通常的方式会在配置文件中配置 DB 连接方式,代码初始化会加载初始文件,建立数据库连接池,配置文件里面是敏感信息。通过接入凭据管理系统,从源代码中删除硬编码凭据,将程序中对敏感信息硬编码或配置文件中敏感信息替换为通过API的方式查询,以编程方式动态检索凭据,代码中不会出现敏感信息,业务只需关心一个接口,这有助于避免代码泄露时或者查看代码的人获取敏感信息。
凭据轮换是通过版本管理的方式,借助凭据管理系统,按周期更新敏感凭据内容,依赖该凭据的所有应用点将自动完成同步,实现安全的凭据轮换管理,同时确保依赖该凭据的业务连续性。
3. 云加密机
金融、支付、政务等敏感应用有比较高的合规审计需求,云加密机可以很好地满足这类特殊需求。
传统的方式需要使用硬件加密机,但传统硬件加密机的问题是部署周期长、部署复杂、部署成本高。
利用虚拟化技术,提供可扩展,高可用,高性能的虚拟硬件密码机VSM服务,可以降低用户自行部署物理加密机的风险和成本。
云加密机可以自身实现安全可靠的密钥管理,支持国际、国密算法,支持选择不同使用类型的VSM满足不同的应用需求。
(1)金融数据密码机EVSM
主要应用于金融支付领域保障金融数据的安全,符合各种金融行业的规范,符合金融磁条卡、IC卡业务等特点。
(2)通用服务器密码机GVSM
提供国际和国内通用的密码服务接口,能独立或并行为多个应用实体提供密码服务和密钥管理服务的云加密实例。
(3)签名验证服务器SVSM
提供基于PKI体系和数字证书的数字签名、验证签名等运算功能,可以保证关键业务信息的真实性、完整性和不可否认性。
4. 数据库加密
企业数据上云会用到多种关系型数据库、非关系型数据库,业务重要数据在落盘存储时需要使用密码技术对敏感数据进行加密处理。可采用应用层加密或数据库层加密的方式:
业务自己在应用层进行数据的加解密,结合 SDK 应用内对数据解密后进行明文的展示,这种方式用户实现的成本相对比较高,需要自己去实现各种各样的逻辑。
数据库层加密有几种方式:
(1)数据库插件
通过插件的方式来截获用户的请求,关联用户加解密的策略,进行数据的加解密。这样的方式优点是性价比高、性能比较高、实施成本也比较低。
(2)数据库加密网关
云上实施比较容易,自动为用户分配数据库加密网关,用户在业务敏感的前提下可以通过加密网关的方式实现字段级数据库加解密。
(3)TDE 表空间级加密
腾讯云数据库服务对接KMS为用户提供透明加解密的方案,实现的机制是通过 KMS 提供主密钥,通过数据库的TDE特性进行表空间数据加解密,对业务上层透明,缺点是目前不能做到字段级的数据加解密的功能。
(4)云访问安全代理CASB
对于期望对数据库进行字段级的加解密,防止被脱库后敏感信息的泄露,除了应用侧自行实现加解密逻辑,云数据安全中台提供了云访问安全代理CASB方案组件。借助CASB,用户可以轻松实现基于商用密码算法的应用免改造、字段级加密,以及基于密码应用的防黑客攻击的数据安全保护方案。
Q&A
Q:一般加解密的耗时是在什么范围?
A:通过KMS进行加解密是通过硬件加密机,基本上在10毫秒以内,整体耗时也需要看用户的网络环境,通常情况下是30-50毫秒以内,如果对性能比较敏感的,可以通过多级密钥的方式在本地进行高性能加解密,本地进行数据加解密主要取决于服务器的配置。目前来看,使用AES128对整个性能的影响是可接受的。
Q:加密数据如何传送给另一个云服务供应商或传回给企业?
A:不同的服务商间传递可以通过信封加密的方式,在传递密文的同时也传递数据加密密钥的密文,腾讯云帐号体系是支持通过角色来进行跨帐号的授权,授权第三方绑用户KMS的资源,接收方就可以解密密钥的密文,拿到明文后对数据进行解密,就可以拿到传递数据真实的信息。
Q:硬件加密相对一般软加密有什么优势、其底层原理是什么?
A:一是它是基于硬件设备来产生的真随机数,比如会采集周边的光噪声、热噪声,通过专用的硬件生成真随机数,软件生成的随机数是伪随机数,真随机数保障整个密钥的安全性。硬件密码机是经过国家密码局安全认证的,可以将密钥安全地托管在密码机内,任何人都无法获取它的明文,通过这样托管的方式保障整个密钥的安全性。
Q:内部分析人员会接触到原始客户的数据,对于内部数据有什么加密方案?
A:内部的分析人员如果需要对原始数据进行分析的话,建议还是在分析过程中对数据进行解密后再进行分析。用户的明文数据一定不是明文进行落盘。可以通过KMS对数据进行加解密。
Q:如果用AES 256加密算法是否会影响很大?这样加密方式、数量类型、数据量相关吗?
A:和数据量是相关的,AES256对性能有一定的影响,要看服务器的配置、有没有硬件加速卡进行加速等条件,AES128也有足够的安全性,有特别的需求可以用AES256。
Q:白盒加密的加密流程是怎样的?
A:实际上操作分两部分,第一部分是KMS管理员通过控制台创建一个白盒密钥,第二步通过白盒密钥对用户的敏感数据进行加密,这一步也是通过控制台生成的,过程已经将密钥和算法进行混合,管理员再将混合后的密钥分发给研发或者是运维同学使用,管理员通过控制台进行加密过程中实现了算法和密钥的混合,保证其安全性。
Q:通过白盒加密的内容,如何解密?
A:首先提供解密的SDK,会有白盒密钥,以及经过混淆后的密文,本地集成SDK方式进行解密。
Q:客户端需要从云端获取密钥,怎么防止客户端冒充及怎么自证客户端的身份?
A:腾讯云有一套健全的身份认证体系,会分主帐号、子帐号多级认证,通过腾讯云统一身份认证鉴别用户身份防止客户端冒充,通过授权使用API key,也是通过帐号管理体系分配权限的。
Q:管理员分配给客户端是存储在客户端本地吗,如果被别人拿到是不是可以冒充客户端?
A:对帐号的身份鉴权是根密钥APIKey,不同服务间进行API调用需要身份认证,安全性是需要进行保障的,传统的方式是放到本地的某一个目录下的文件中进行权限控制,或者放在环境变量中,白盒密钥是专门用来对这类APIKey进行混淆加密实现安全加固的。
Q:国密算法和一般国外的算法有什么不同呢?
A:国密算法是国家出台的一系列的算法,像非对称加密也是利用了椭圆曲线算法的特性,大体思路上是相同的。
直播预告
今晚8点,腾讯云数据库产品专家黄稚禹做客云加社区沙龙直播间,为大家解读
腾讯云数据库 MySQL 8.0 新的特性和功能,扫描海报二维码或者点击文末「阅读原文」,即可预约观看本场直播~