鸣谢:VSRC感谢业界小伙伴——mcvoodoo,投稿精品原创类文章。

最近这些年,大家一直在用加密技术对数据、用户进行加密、签名和认证。但云计算出现后,企业从传统的封闭式架构变成开放共享、外部管理的架构,攻击面进一步扩大,另外安全和隐私的法律合规要求也逐渐增强。而加密的核心基础就是对密钥的安全存储和管理,一旦暴露则整个加密方案都形同虚设。在这种不断变化的环境中,加密技术越发重要。

01 挑战

1、大数据挑战

大量的数据被创建、存储、处理和交互,安全和隐私问题更突出。同时IT基础设施也更加开放和互联,数据更容易被访问,被攻击的几率也更大。为了解决数据安全需求,需要更多的密钥量和扩展性、灵活性,需要处理更大范围、复杂度更高的应用,例如应用级加密、数据库加密、强身份验证、Hadoop加密、字段级加密等等。

2、边界挑战

企业上云,混合云环境的情况越来越多。有个报告提到全世界84%的组织使用了IaaS,34%的组织使用超过50个的SaaS应用。此外BYOD和物联网也大量接入使用。随着这些基础设施的多样化,在开放和不受控的情况下保护密钥是一个挑战。由此衍生一个新问题,不同平台的约束和需求不同,原来公司的安全策略可能难以覆盖到云,因此密钥保护还要具备高度分布式的能力。

3、开发交付挑战

新的开发实践和工具,比如DevOps、持续集成交付、容器、微服务在国内大型互联网公司也开始有更多的应用,这些都是用来支持更快更频繁的发布周期。把安全集成到这些实践中叫做DevSecOps,这对传统安全是个重大改变。

密码学实现必须适应这些新的开发实践,不仅要提供应用的加密和数字签名,而且需要应用安全技术,类似敏捷环境代码签名这种能力来满足安全上的需求、验证、容器保护。从技术角度来看,对敏捷和云环境来说,密钥管理和保护机制需要更灵活、更自动化。

4、新加密服务

比如加密货币钱包和交换,更需要高级加密方案实现可靠密钥保护。

02 密钥安全原则

密码学的核心其实就是:保护密钥不被暴露和未授权使用。因此有几个原则:

1、不可萃取

密钥保护的作用就是防止人和机器窃取、未授权使用密钥。由于密钥始终在原始位置上保持完整,所以很难发现攻击,通常都是在发生事件后才能发现。而对密钥的保护也无非是软件和硬件层。

攻击有以下几种:

硬件侧信道攻击:

攻击者接近密钥设备,最普遍的则是基于硬件的侧信道攻击,通过测量硬件特征(比如功耗和噪声级别变化)来推断,功耗和噪声都会随着数据处理量发生变化。

软件侧信道攻击:

利用软件的侧信道提取关键信息,例如通过软件从cpu或缓存中获取关键信息。在虚拟化环境中,同一主机的两台不同VM(其中一台存储密钥),也可能会发生这种协同定位攻击。

软件攻击:

入侵保护密钥的机器,掌握root账号或者后门,这种危害最大,因为可以长期持续。例如进程注入,在合法密钥保护软件进程中插入恶意代码,提取私钥。

就现在的情况而言,数据中心和云中心的物理安全性都比较有保障,但计算和存储是共享的,因此软件攻击比物理攻击更值得关注。

2、KEY使用控制

即使不窃取密钥,受保护环境中也可以非法使用密钥,比如破坏私钥所在机器或应用,使用被盗的客户端证书创建伪应用。例如一个颁发代码签名,用于屏蔽恶意软件的证书颁发机构被攻击,又或者加密货币被盗,敏感账户被盗。使用控制的保护包括访问控制,漏洞的快速检测快速止血。

3、敏捷性

要满足新的应用需求,需要在密钥保护实现中更灵活,例如:对新的加密算法协议的支持,比如加密货币签名的椭圆曲线。

对未来新加密算法支持,例如:后量子加密设计。

修复危及加密算法的漏洞,例如:padding oracle、攻击TLS中CBC模式加密的Lucky13,针对SSL3.0的POODLE攻击,CVE-2017-15361的ROCA等等也层出不穷。

修复密钥保护机制本身的漏洞,例如:硬件侧信道,openSSL心脏出血,PKCS#11的API攻击等。

4、信任

除了上面提到的之外,还需要考虑提升安全的信任水平。我们都知道没有百分百的安全,但信任对于用户来说是很重要的。

在这方面能做的:

已有措施的加强,例如HSM是位于全球各地且受到严格物理保护,或者在数学上能够证明的算法保证。

供应商的安全证明和实力,以及项目管理记录。

安全测试和认证。

如果是云厂商,则要考虑责任模型,服务和密钥是谁在管理;如果是外部供应商,这些公司是否值得信任,即使值得信任也有可能在将来被攻击,监测和响应能力也是有限的。法律责任和保险也是解决方案的一部分。

03 密钥管理技术

从硬件到软件,再到混合云,都有不同的解决办法,但每种都有自己的安全性和可用性,需要根据自己的情况来实施。

1、专用硬件

这是最常见的,使用特别加固的设备来创建生成和存储密钥,在设备内部进行加密操作,防止密钥被泄漏。各大云厂商都有这种HSM的机制。

  • 不可萃取性:

加密硬件提供了物理隔离的保证,物理上至少是专用加固机箱,防拆设置。逻辑上要保证密钥不能被导出,任何其他软件都不能在此系统运行。而这里则包括硬件安全模块、密钥管理系统、可信模块、智能卡令牌等等,这些密码模块都有国内外的认证标准可参考。

从历史上来看,智能卡和令牌是这里的薄弱环节,主要是低端设备容易被攻击。17年黑帽大会就展示了韩国公交卡侧信道攻击,可以成功的充值。(https://www.blackhat.com/docs/asia-17/materials/asia-17-Kim-Breaking-Korea-Transit-Card-With-Side-Channel-Attack-Unauthorized-Recharging.pdf)

  • KEY使用控制:

硬件设备一般都强壮的访问控制,比如HSM,需要突破物理安全保护,更高级别的身份验证(比如quorum验证)。HSM、可信平台、智能卡管理系统也会提供审计日志。但仍然可以通过攻击对应的系统来获取密钥,解决这类问题需要检测和响应能力,但硬件加密方案很难做到。

  • 敏捷性:

硬件方案主要问题就是缺乏灵活性,所以当硬件机制有安全漏洞的时候就比较麻烦了,而且由于硬件的更换升级困难,漏洞修复时间比较长,在替换之前,密钥是暴露的,这个影响就大了去了。

某国际大公司之前的加密芯片在17年出过ROCA漏洞,根源在RSA密钥生成算法的一个漏洞,攻击者可以从相关公钥推断出芯片生成的私钥,ROCA影响面很广,实际造成的后果是爱沙尼亚因此撤销了75万张身份证。

2015年也出现过PKCS#11 API漏洞,由于API问题,攻击者可以从HSM重提取密钥,从漏洞发现到补丁应用到现场HSM,暴露窗口至少几个星期。

  • 信任:

硬件机制全面隔离了密钥,再加上测试和认证能够提供更强的安全信心。硬件的缺点是漏洞出现后的修复期很长,从根本上动摇了信任根,但从这些年的总体情况来说,除了一些不多的失误之外,高端HSM总体上安全性还不错,所以硬件方案的信任度也很高。

  • 可用性:

现在我们看到很多云厂商把硬件加密模块改造的更适应云环境,但对一般公司来说,在敏捷性、灵活性、可伸缩性和自动化上还是不小的挑战。例如服务量突然爆发,自动化生命周期任务,都会造成成本问题,复杂性问题,导致难以实现。

而且硬件升级也是漫长和高成本过程,如果业务本身侧重于用户体验的话,这种情况下我相信大家宁可牺牲部分安全性。

安全性:四星

可用性:一星

1、具有物理/逻辑隔离的不可提取性强保证

2、安全漏洞的新需求的敏捷性较低

3、低端设备容易受到侧信道攻击

1、缺乏可扩展性、灵活性

2、安装维护升级困难,部署不能自动化

3、端点设备管理复杂

2、软token

软件密钥管理提高了可用性、敏捷性和多平台可用性,相对硬件而言简化了部署和维护,但这个安全机制并不足够强。

  • 可萃取性:

软件的挑战是:在共享环境中保护密钥和平台不受损害。保护密钥是通过白盒机制、加密、混淆实现的,这些手段混淆了代码保证不被读取,并在应用上做了增强。但白盒也会被攻击,可以通过逆向以识别源代码。

还有一个方法是同一硬件的侧信道攻击,CHES 2017 CTF挑战赛(https://whibox-contest.github.io/) 中,各方研究人员提交了白盒加密实现,邀请参赛者进行攻击。一共94个项目全部被攻破,大部分都是在第一天被攻破,最长的一个是28天。

软件密钥保护缺少明确的隔离能力,不断被攻击,从而导致不断被攻破。

  • KEY使用控制:

和硬件方法一样,软件的方法也是提供基于角色访问控制,记录日志。但不考虑高级密钥的审计和控制。硬件设备不能被克隆,但软件方法没有这个机制,代码混淆和白盒加密不能防止软件被复制,攻击者拿到了代码,破解只是迟早的事情。

  • 敏捷性:

软件方法当然敏捷,简化了bug和漏洞的修复时间,也能够容易的支持新加密算法。

  • 信任:

虽然整个业界都在大力开发,但目前来看还很弱。

  • 可用性:

灵活可伸缩,可在多平台运行。所以可以在BYOD、云环境很好的结合。

安全性:一星

可用性:五星

1、非隔离,易受克隆和软件攻击

2、生命周期保护不完整

3、高敏捷性

1、多平台,支持云、数据中心、终端设备

2、轻量级、可扩展、易维护

3、可信执行环境

可信执行环境(TEE)是近年来发展比较快的安全特性,市场上主要是INTEL的SGX和ARM的TrustZone。TEE是芯片中的一个指定空间,可以作为数据存储和执行的安全飞地,能防止外部操作系统访问TEE,飞地内的加密和代码不会被修改的一种逻辑隔离。

因此TEE可在分布式环境中放置敏感应用和数据,摆脱对底层基础设施信赖。由于他们是在芯片中实现的,因此可以是一个优雅、通用的方案。在这个方案中,密钥和管理软件驻留在信任环境。

  • 可萃取性:

理论上,TEE的任何数据都不应被提取,但TEE和其他软件一起在通用处理器运行,因此很容易通过共享资源的软件侧信道进行密钥窃取。攻击上包括基于缓存、投机性执行、定时攻击。

在密钥保护应用中的“侧信道验证”可以降低这种风险,比如不管密钥值是多少,确保加密算法的运行时间是常数,可以防止定时侧信道攻击。但这种方法需要长期对抗,因为还不知道有多少攻击方式,也不知道有多少未知侧信道。

最近出现的问题是去年的熔毁和幽灵,这两个漏洞凸显了安全面临的巨大挑战,几乎影响了过去20年所有的微处理器。幽灵利用了“推测执行”的方法,由于低权限应用和内核访问内存没有很好分开,因此获得TEE中的数据访问权。

这种修复就比较复杂,而且在有的情况下几乎不可能修复。虽然目前还没有报道过谁因此受害,但随着TEE流行,这类攻击不可避免。但最麻烦的是,如果发生泄漏很难发现,这些攻击在日志中没有任何痕迹。

漏洞不止熔毁和幽灵,还有其他,国外有篇论文提到了某厂芯片的诸多问题,为避免引起争议就不展开了。

  • KEY使用控制:

TEE的KEY管理还是个新课题,当前方法包括访问控制、审计日志和系统监视UI,但这些技术怎样发展还有待观察。在技术层面,添加高级密钥管理功能应该很简单,因为TEE是个灵活飞地,可以运行任何代码。

  • 敏捷性:

TEE更新比较容易,因此具有一定灵活性。但TEE在某些方面又不敏捷,例如某品牌天生依赖AES128和ECC,将来如果有后量子加密,要么升级固件,要么就需要替换。在不同TEE的混合云下,则要在每个平台上进行单独开发和维护,从而降低灵活性。

  • 信任:

TEE提供了很多安全特性,比如代码加密和完整性验证,但仍不能证明边信道攻击可以防御,因此信任度相对来说不是最高,尤其在一些高度敏感数据加密上。

  • 可用性:

TEE比软件密钥保护具有更高级别安全性,但这种实现受制于对处理器的支持,所以不能适用所有环境。而且当TEE被打包成现场物理设备时,就不具备虚拟化提供的弹性、可伸缩和自动化。

安全性:二星

可用性:三星

1、易受软件侧信道攻击

2、高敏捷性

3、高级保护功能难以支持(例如后量子加密)

1、需要基础设施支持

2、可伸缩性、高可用性、生命周期管理能力

4、多方计算

安全多方计算(MPC)在80年代密码学的一个子领域,重点解决:两方或多方如何能够联合计算,同时保证各自输入的保密性。

MPC在密钥管理中的应用是基于这样的想法,密钥可以分成放在不同机器上随机共享,并且这些机器可以使用MPC协议共同计算功能,而不需要任何机器获得关于其他方的任何KEY共享。

这个方法支持所有的密码算法,因此密钥可以用在各种场景,而无需在整个生命周期统一使用。MPC的密钥保护用软件实现,加密安全边界延伸到单个机器之外,可跨越云、数据中心和不同节点。MPC不是一个新领域,但在实际应用中很有场景,因此最近在这个领域开始有了更多人的研究,我注意到阿里的研究院最近在安全上的课题就是多方计算。

  • 不可萃取性:

MPC的密钥保护很强大,而且有数学保证:在不破坏密钥机器的情况下,密钥不会被破坏。只有在MPC和机器同时被破坏才会收到威胁,因此提供了更高的安全性。MPC依赖节点之间的强分离,这种分离有多种实现。    

证书隔离:每个节点有不同凭证,甚至不同的管理员。

设备隔离:节点在不同机器上,可以实现强分离。也可以在地理上分散,例如不同国家,以防止某些政治干涉。

软件堆栈隔离:每个节点使用不同的软件堆栈。节点在不同平台上,使用不同的操作系统、开发语言进行防御。

除了节点之间的隔离外,还可以使用安全措施防止关键节点共享。例如在TEE中生成加密密钥,且证明另一个节点的完整性。

  • KEY使用控制:

基于MPC方法也支持访问控制、审计日志和系统监视。但在端点加密密钥的能力是MPC独有的,因为密钥操作在端点和服务器的节点之间执行,从而能够跟踪服务器端的所有操作。MPC可以有更灵活的授权结构,包括quorum的仲裁机制。

类似的,MPC密钥管理可以用于客户端证书,从而防止他们暴露和窃取。

MPC方法的一个好处是可任意节点立即撤销密钥,只要简单的删除相关密钥共享就可以使密钥无用。 这个方法可以在响应时快速止血,或按照GDPR立刻实现个人数据遗忘权。

  • 敏捷性:

MPC是软件方法,更新可以快速实现,且无需停机。另外理论和实践上也表明,对各种加密算法(包括后量子和其他高级算法)都是一个可行方案。

  • 信任:

MPC还在早期阶段,对密钥的保护在数学上也有严格证明的安全性,再加上节点之间的强隔离,MPC是未来高可信方案。

MPC还有一个安全特点,当你对密钥完全控制时,密钥可以在任何基础设上使用,在共有云上,节点可以和服务于应用集成,另一个节点可以放在其他位置例如私有云,这个功能让信任变得不那么重要,因为公有云无法拿到完整密钥。

  • 可用性:

MPC可以在任何环境运行,包括虚拟机和容器,可以支持广泛应用场景,包括新密码学和物联网。

安全性:四星

可用性:五星

1、数学证明的安全保证:获取密钥至少要同时控制两台机器

2、高级授权

3、高敏捷性

1、支持云、终端、数据中心等

2、高度灵活性,支持多种场景

3、可扩展性好,高可用和生命周期管理

04 总结

每个方案都有不同的安全性和可用性特点,同时也要考虑实际场景。

需要考虑的点包括:

  1. IT基础设施的范围是什么,云、数据中心和终端?

  2. 要保护的对象是谁,敏感级别怎样,物理位置在哪。

  3. 合规要求有哪些?

  4. 厂商支持哪些?

  5. 未来有什么IT结构变化,比如全球化、云迁移、物联网、BYOD。

通过这些问题来选择自己的保护方法,实现最优匹配。

声明:本文来自唯品会安全应急响应中心,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。