学习笔记
1、可信概念
- 可信等价于”可控”,指的是身份、数据、行为不会出现意料之外的情况,都是按照预定好的逻辑在运行
- 可信不等价于”信任”,不等于相信某组织、机构、程序、产品
2、不可信案例
- 机房入侵。自互联网诞生之日起,其基础设施就是不安全的。比如IP:Port,从设计之初就没考虑过鉴权以及准入逻辑,默认只要链路没问题,就可以互相通信。通常机房入侵就是通过某些手段找到各种边界上的薄弱点予以突破,攻占其中一台服务器、业务资源,再以此为跳板向其他数据库、业务、数据库等蔓延。该过程中很重要的手段就是网络扫描和嗅探,网络扫描和嗅探之所以能够有这些功能,很重要的一点是服务器、业务之间只要没有网络障碍就默认能够相互收发数据包,我们的基础设施之间是天然信任的,没有鉴权的。当然业务层面有一些鉴权,但是基础设施鉴权和业务层面鉴权是不一样的。
- 病毒及软件漏洞。病毒木马不管实现方式如何,最终都是要么改变正常程序的功能逻辑,要么拿到对于原本系统设计本意来说不可能拿到的数据。软件漏洞,更是”脱离设计本意“、”出现意外情况“这个不可信状态的最佳例子。
3、可信身份
概念
可信身份并不等价于”实名认证”,而是以这个身份的名义发送的数据、指令不可能是”未知的人”冒充别人发送的,这里的”未知的人”可能是真实的自然人,也可以是某个程序、某个服务器、某个业务。常见的身份冒用就是建立一个会话,然后基于这个会话生成一个业务、数据通道供后续其他逻辑使用。这种单点验证、多路复用的做法给身份冒用留下了空间,不符合可信身份的基本要求。
实现
传统技术方案下有很多不好处理的逻辑,光是KMS(密钥管理系统)就是一个很不好搞定的系统。新技术方案下,我们通常会把具体的技术方案用区块链、IPFS等去中心化技术实现。
- 身份认证去哪里认证,用以太坊的ENS或者IPFS的IPNS能达到和DNS类似的效果。不同点在于
- 不存在DNS污染这种问题,也不会有DNS劫持,解析结果一定是真实可信赖的
- 不管是以太坊的ENS还是IPFS的IPNS,都是去中心化的系统,不需要向特定的服务器发起解析请求。只要在业务可达的任何位置,甚至是业务方本地/同服务器部署一个节点程序,就能实现解析服务。
- 其可用性、安全性都要高于传统技术下的DNS服务。同时也降低了网络复杂度。比如传统网络架构下,为了向不同网络环境暴露DNS资源,这些网络间势必需要有一个专用的数据通道,这样又会引入新的安全风险,而且网络复杂度明显提高,增加了运维成本和运维风险。
- 身份认证需要有认证依据,目前比较有效的方案是公私钥认证
- 通常把公私钥分为身份公私钥和权限公私钥,也就是身份和权限分离,好处就是身份和权限可以随时调整。结合公钥验证的逻辑,身份泄露不是必然导致权限泄露。
- 公私钥仅仅用来做身份认证及协商密钥,不用来加解密,不在网络传输任何私钥相关信息(明文或密文),确保前向安全性,不推荐电子信封等用法。
- 合理使用门限加密等方案,确保私钥可用性以及验证逻辑的安全性。门限加密逻辑下,私钥被随机拆分为很多碎片由不同人持有,使用者无需取回所有密钥碎片,只需要取得一定数量的碎片就能最终解密出完整的密钥。在这个过程中,每取得一次密钥碎片就要接受一次身份验证,多次认证过程都被绕过的几率约等于不存在,所以可以应对认证系统部分节点崩溃的可用性得到提高。
- 信任根需要保证不泄露,比如手机或者PC的CPU常用的FUSE,以及白盒加密等技术。后续其他加解密、签名及认证等技术均需基于这个信任根派生出对应的密码、证书,不允许直接使用这个信任根。若可能,任何形式和级别的私钥、密码都不要离开可信环境。
- 认证过程需要有可信的数据通道,以太坊的whisper是可信通道的不错选择。通过这个方式,通信的双方一定是可信的、不可伪造的,认证双方可以对对方的情况一无所知。这个”对方”可以是任何一个运行了以太坊节点的服务器,甚至是个人PC。网络环境上,双方甚至都可以是位于某个家庭路由器的后面,没有任何特殊要求。”对方”也不一定是一个确定的服务器,可以是很多具有相同功能、位于不同的物理或者逻辑位置的节点中的一个。这一点与中心化不太一样的就是,中心化无论是做认证还是做数据通道都需要向一个确定的目标发起请求,去中心化的话其实是任意两个节点之间通信,这两个节点间的位置(包括物理位置、ip、匿名等)都可以是不确定的,这些如何寻找对方是由以太坊寻址来实现的。
注意事项
之前说了很多认证,实际上,作为去中心身份逻辑的组成部分,具体业务实践中并不建议按照之前的那种”验证-业务-结束”的逻辑来用,正确的做法应该是类似于Restful API的做法:并不需要专门有登录会话建立过程,而是在业务的全流程中带上身份信息(“一次登录,多路复用”这种只用登录一次、之后的操作都基于之前的这一次认证的这种方式很容易产生身份冒用和身份伪造的),服务提供者根据身份信息确认后续动作。而且所谓认证也未必是”登陆”这样的逻辑,一切能够证明身份的方式都可以是认证,比如签名验证机制。
4、可信网络+命名网络+软件定义网络
概念
可信网络解决的是传统IP网络环境下的无认证机制
命名网络解决的是传统网络通信对IP的依赖性
传统网络:
- IP本身是个中心化的资源,且与地理位置强依赖,传统安全攻击针对的都是这样的中心化资源,只要中心停止了服务,整个系统就失去服务能力。
- IP与地理位置的强依赖也导致了中心资源对不同位置的用户服务质量和服务能力的差异,所以产生了CDN服务,但CDN只能处理静态资源,对动态资源无能为力。
实践
- 使用以太坊的ENS或者IPFS的IPNS替代现有的DNS,实现域名寻址、内容寻址
- 利用IPFS节点以及公私钥机制实现命名网络+可信网络,对外提供socket-like接口,降低现有程序改造复杂度;同时不再依赖IP:Port通信,而是网络名称。基于IPFS提供的以公私钥隔离网络流量的机制加上以太坊智能合约提供鉴权相关逻辑,实现可信网络+软件定义网络,能够相互通信的两个端点之间一定是身份可信的,而且因为基于公私钥做网络隔离,所以可以实现里斯软件定义网络的动态组网效果。
- 出于兼容现有程序,降低改造成本考虑,可以提供一个网络代理,监听本机127.0.0.1对应端口,由这个代理实现现有程序的ip网络向可信网络的转换。监听127.0.0.1的目的是,这个IP地址不可被外部网络连接和使用,避免了IP网络环境中的扫描、爆破、嗅探等风险。
效果
- 任何端点间通信不再基于IP:Port,而是网络名称。这种环境下,传统基于IP/PORT/域名攻击的逻辑基本都失效了,这些中心化资源便不再存在,使得攻击者失去攻击目标。
- 服务器不再需要同意放到某个或者某几个机房,可以位于任何一个网络环境以及物理、逻辑位置,甚至放在家用路由器后面,无需固定公网IP,无需对外开放端口。
- 同一个通信地址可以对应不限数量的服务器且无需专门做容灾、负载均衡,得益于IPFS系统的相关算法,这个网络能够自动实现近源访问和负载均衡逻辑。
- 很容易实现软件方式的组网(SDN),组网不再依赖计方架构等硬件限制,网络间实现逻辑上的流量隔离。而且此逻辑基于公私钥身份认证,不同网络间的数据不可胡同,实现网络成员的可信。
5、可信计算
概念
区块链技术实际上解决了身份、数据、行为可信问题,缺乏执行环境可信。传统可信计算方案更多的解决了执行环境可信问题,对于其他方面并没有可靠的解决方案且成本高昂。在可信计算方面,区块链技术与传统方案刚好是强互补关系。
实践
- 身份可信
- 数据可信,区块链依赖各种不同的共识机制已经很好解决了这个问题,同时IPFS基于哈希算法的内容寻址逻辑也能实现数据可信。所以通常做法都是把数据的IPFS地址/域名存储到以太坊,把实际的数据内容存储到IPFS。终端层面来说,基于硬件技术的加密存储是常用方案,比如SFS等等。
- 行为可信,实际上说的是程序可信。基于数据可信,行为可信已经得到了解决。
- 执行环境可信,实际说的是程序在运行过程中产生的数据,除非程序主动退出,否则任何方式、任何个人,也包括执行环境的控制方(比如服务器的所有者/运营方,终端设备的持有者等等),都不可能得到这些数据、状态。实际应用层面,比如隐私计算、DRM等是常用场景。
执行环境可信
软件方面,主要是MPC,其实现方式主要是各种同态加密、零知识证明、门限加密等密码学算法以及与之配合的业务逻辑的精巧设计。
硬件方面,主要是SGX、TrustZone以及各种第三方TPM模块。这三种方案各有优缺点,并没有绝对的优劣。
- SGX可以实现很多安全实例,性能上也由于TrustZone,但是其依赖Intel等具体厂家的硬件和服务,被诟病”不够去中心化”。关于这一点,还是要看具体场景。比如对与国家层面的应用场景,可能需要在意这个问题,因为自主可控在这个场景是强需求。
- TrustZone是ARM提供的一个可信硬件环境,但是其功能和可用性依赖手机厂商的具体实现,要做广泛应用还缺乏统一的实现标准。同时TrustZone里运行的TA及TA依赖的TeeOS目前来说,多数厂商都不对普通开发者开放,核心原因就是应用起来有各种现实问题:比如,如何解决恶意普通开发者利用Tee环境躲避安全检查?如何解决恶意Tee程序对Tee环境的破坏等等。这些都需要硬件提供商和手机生产商的通力合作。目前已经试点的是部分影响力较大的厂商与手机生产商的合作,将其TA预置到手机Tee环境里。但如果是在IoT领域,因为本身就不面向最终用户,所以手机上面临的这问题基本可以忽略。
- 第三方TPM模块,目前没有成熟稳定的第三方生产商可以满足这个需求。
软硬件结合方面,目前最可行的就是使用FPGA等定制电路做软件加密方案的加速处理。MPC实现里,最大的问题在于性能问题。很多同态加密算法实现里都有大量的矩阵运算,这给GPU以及FPGA优化留下了很大的空间。
因此目前最合适的方案:
- 根据业务所在硬件条件选择合适方案。比如PC上可以选择SGX以及基于GPU加速的软件方案,服务器环境可以选择FPGA加速的软件实现,手机上可以选择WebGL加速的软件实现,也可以选择手机厂商提供的TrustZone实现。
- 根据业务场景选择不同方案以及方案的组合。比如手机作为个人隐私设备,需要直接处理的数据并不多,不管是硬件方案还是软件方案,多数时候基本都能满足需求。
- 通过业务逻辑的精巧设计满足业务需求。比如数据加密共享场景,可以在云端使用高性能设备将待共享的数据重加密成以目标用户的密钥加密的密文。而目标用户只需要在手机上做密钥的同态加密以及最终数据的对称解密。
6、可信存储
概念
可信存储并不仅是数据存进去能原封不动地取回来就可以。可信存储除了数据的可信持久化,还包括数据的流转和使用过程中的可信要求。可信存储与之前的可信身份、可信计算等都是密不可分的,事件中几乎不会单独存在。
实践
- 使用以太坊智能合约作为基本数据索引。以太坊的TPS很低,但是我们并不是简单将每个数据的索引直接写到以太坊。通常采用:
- 对于频繁读但是写很少的数据,如果数据量不是特别大,就将数据本身写进IPFS网络,只将数据地址写回以太坊智能合约;如果数据量不大,可以直接将数据写进以太坊智能合约。而以太坊智能合约的读性能只取决于单台节点的执行性能,在多节点情况下,读性能基本不可能影响到业务的正常运行。
- 对于写频繁的数据,直接将数据本身写道IPFS网络;同时使用以太坊的whisper可信通道向特定范围广播、堆积数据的IPFS地址,方便使用者获取数据;定时将最新数据的地址批量写到以太坊智能合约。
- 结合之前说过的可信身份和可信计算的相关逻辑,实现数据使用、流转的控制,保持数据生命周期全过程的可信。
- 有需要的情况下,在B的基础上,建立数据产生、使用、流转的经济模式,以及数据存储/使用环境的经济模式,实现整个可信存储的价值最大化。
比如,作为数据共享平台,可以做到允许授权的人使用自己的数据,但是看不到、拿不走数据。这既充分盘活了数据价值,又避免了数据泄露带来的安全风险,是对生产力的提高。
再比如,某些用户有数据渲染、处理的需求(比如AI模型训练),但是自身并没有数据处理能力,所以有需求的用户可以把这件事委托给任何一个有能力的平台用户代为数据处理,请求者只需要拿到最后结果就行了,不用担心数据处理者(比如云平台)看到自己的数据。
7、泛安全
传统安全问题的核心是可信问题,但不代表要用可信取代传统安全策略。传统安全做法是武术招式,而可信是内功,也是治标和治本的关系。前者成本相对低、见效快,后者成本高、见效慢。二者并不是二选一的关系,而是需要结合当前面临的实际情况,综合考虑轻重缓急,选择最合适的方案。我们应该清楚安全部门的目标是什么,不能把手段当目标。当前行业很重要的一个问题就是很多人认为挖漏洞、做应急响应就是做安全,这纯粹是把手段当目标了。
所谓泛安全,并不是安全的进化,而是整个基础设施的进化,也必将因此而带来新一轮互联网以及IT基础形态的变化。
独立思考
1. 主讲人提出”一切安全问题的根源都是“可信”问题”,为什么?
可信指的是可控,指的是身份、数据、行为不会出现意料之外的情况,都是按照预定好的逻辑运行。可信身份指的是以该身份发送的数据,不可能是未知的”人”冒名顶替。我还听人说过”一切安全问题的根源都是管理问题”,人们出于本能的想要去了解别人的隐私数据,而不想让自己的数据被人了解,可信可以解决管理问题吗?
管理问题可以通过技术将权责清晰。可信计算目前如何能把一件事务与个人联系起来,且指向的人不是被冒用的,能够直接指向责任人。
一切安全问题的根源都是“可信”问题,这句话我认为更多的是来自企业外部的攻击。
一切安全问题的根源都是管理问题,这句话我认为更多的是来自企业内部的”内鬼”。
我目前不太清楚安全的方向,到底是要通过技术认证达到信任所有数据,还是要做到零信任。
2. 为什么身份认证要采用区块链、IPFS等去中心化技术实现类似于DNS的功能?
DNS协议目前存在DNS污染和DNS劫持问题,解析的结果不一定可信。若采用区块链,域名解析不需要请求特定的DNS服务器,而是向一个节点程序请求解析,这个节点程序既可以部署在用户本地也可以部署在服务器上,能有效避免DNS劫持和DNS污染的问题存在。
至于为什么能降低网络复杂度,我还是不太清楚,主要是因为没有手动处理过向不同网络环境暴露不同DNS资源的场景,而且也没有利用该场景的经验。
3. 什么叫前向安全性?为什么数字信封不满足前向安全性?
前向安全性(Forward Secrecy)是密码学中通信协议的安全属性,指的是长期使用的主密钥泄露而不会导致过去的会话密钥泄露。前向安全能够保护过去进行的通讯不受密码或密钥在未来暴露的威胁。如果系统具有前向安全性,就可以保证主密钥泄露时历史通讯的安全。
数字信封包括被加密的内容和被加密的用于加密该内容的密钥:
- 发送方用临时产生一个一次性密钥并对邮件内容进行对称加密
- 发送方使用接收方的公钥对一次性密钥进行非对称加密
- 发送方把加密后的邮件内容和加密后的一次性密钥发给接收方
- 接收方使用自己的私钥对加密后的密钥密文进行非对称解密,得到一次性密钥
- 接收方使用一次性密钥对邮件内容进行对称解密,获得邮件原文
当接收方的私钥泄露后,接收方历史通讯的所有邮件原文将被泄露,所以数字信封不满足前向安全性。
TLS满足前向安全性是由于每次会话结束之后自动把会话密钥删除且会话密钥无法被重新计算出来,这样即使接收方的私钥被泄露,拿不到每次的会话密钥,历史通讯就无法在短时间内解密。而数字信封是把会话密钥加密后以文件发送,接收方不一定会把该文件清除,导致历史通讯被泄露,因此不满足前向安全性。
4. 什么叫信任根?我知道根证书,在burp抓包时需要信任burp的证书,这之间有什么联系吗?
信任根是可信计算的关键,实现有三种方式:可信CPU、独立TPM安全芯片、嵌入式TPM。是一种包含密钥加密模块和存储模块的小型片上系统。
根证书是CA认证中心给自己颁发的证书,是信任链的起点,按照根证书意味着对这个CA认证中心的信任。证书是一种包括了”信息、公钥、CA对该证书内容的签名”三部分,验证一个证书的真伪,需要使用上一级CA的证书,依次递归,直到根证书为止,而根证书由于我们当初下载了它信任了该证书,因此通过这个证书链验证了当前证书的真实性。因此,如果信任了一个证书,将会信任该证书下属颁发的所有证书。如果我们不信任burp的证书,burp作为中间人发来的密钥将不被我们承认,计算机将显示不安全的连接,自动停止本次通信。
可信计算近年来发展迅速,被认为最有可能从根源上解决计算机的安全问题,信任根是可信计算的根本。
- 可信计算的概念没有明确的定义
- 可信计算产业链过长
- 绝大部分可信计算机都是在主板上采用可信芯片作为信任根,这样用户无法通过改造现有的机器来实现可信计算,不利用保护用户现有资产
Trusted Computing Group(可信计算组织)定义了一个叫做可信平台模块(Trusted Platform Module)的芯片设备作为受保护活动的”信任根”,TCG任务如果从一个初始的”信任根”出发,在平台计算环境的每一次转换时,这种信任状态可以通过传递的方式保持下去不被破坏,那么平台上的计算环境始终是可信的,在可信环境下的各种操作也不会破坏平台的可信,平台本身的完整性得以保证,终端安全自然也得到了保证,这就是信任链的传递机制。
TPM实际上是一个含有密码运算部件和存储部件的小型片上系统,以TPM为基础,可信机制主要通过三个方面来体现:
- 可信的度量——任何将要获得控制权的实体,都需要先对该实体进行度量,主要是指完整性的计算,从平台加电开始,直到运行环境的建立,这个过程一直在运行。
- 度量的存储——所有度量值将形成一个序列,并保存至TPM中,同时还包括度量过程日志的存储。
- 度量的报告——对平台是否可信的询问正是通过”报告”机制来实现的,任何需要知道平台状态的实体需要让TPM报告这些度量值和相关日志信息,这个过程需要询问实体和平台之间的双向的认证。如果平台的可信环境被破坏了,询问者有权拒绝与该平台交互或向该平台提供服务。
信任根的三种实现方式:TPM与CPU结合的可信CPU、独立的系统安全芯片、嵌入式TPM
—林小茶, 李光. 基于嵌入式技术的信任根研究[J]. 计算机工程与应用, 2007(16):165-168.
5. 什么叫白盒加密?我知道白盒测试和黑盒测试,那和白盒加密有什么关系?
其实这个问题主要在于白盒、灰盒、黑盒的理解不够:
- 黑盒:假定攻击者无法获得密钥
- 灰盒:认为攻击者可以实质性地接触到部分密钥或者泄露的信息
- 白盒:认为攻击者已经完全控制了整个操作流程且对此完全可见
因此白盒加密就是指能够在白盒环境下抵御攻击的一种特殊的加密算法。百合加密的核心思想是混淆,例如加密是将信息放进保险箱,一旦有了钥匙就可以打开保险箱,而混淆是使信息以一种完全无法理解的形式存在,尽量让人无法理解其中的过程,但不影响信息本身发挥作用。
一个加密后的程序,在源码未解密之前是无法执行的。
一个混淆后的程序,却是可以正常执行的。
6. 以太坊是如何做到通信双方甚至都可以是家庭路由器后面的设备,而且通信双方的身份一定是可信的?
以太坊通信是由以太坊它的寻址方式来实现的,可以做到通信双方的物理地址、ip地址、是否匿名等方面不确定的情况下仍可以正常通信。具体的实现逻辑需要接下来去研究。
通信双方的身份一定可信,是由以太坊的工作逻辑决定的,具体的工作逻辑需要接下来去研究。
产生过的疑问
- 第二个主讲人提出”一切安全问题的根源都是“可信”问题”,为什么?
- 为什么身份认证要采用区块链、IPFS等去中心化技术实现类似于DNS的功能?
- 什么叫前向安全性?为什么电子信封不满足前向安全性?
- 什么叫信任根?我知道根证书,在burp抓包时需要信任burp的证书,这之间有什么联系吗?
- 什么叫白盒加密?我知道白盒测试和黑盒测试,那和白盒加密有什么关系?
- 以太坊是如何做到通信双方甚至都可以是家庭路由器后面的设备,而且通信双方的身份一定是可信的?
- Restful API为什么好?之前学习Spring Boot的时侯也见到了Restful风格,但是对它还是没有概念上的认识。