由国家互联网信息办公室、国家发展和改革委员会、工业和信息化部、公安部、国家安全部、财政部、商务部、中国人民银行、国家市场监督管理总局、国家广播电视总局、国家保密局、国家密码管理局联合制定的《网络安全审查办法》(以下简称“办法”)于今日起开始实施。本文介绍了《办法》的全文与答记者问,你想了解的都在这里。

0.jpg

《网络安全审查办法》全文

第一条为了确保关键信息基础设施供应链安全,维护国家安全,依据《中华人民共和国国家安全法》《中华人民共和国网络安全法》,制定本办法。

第二条关键信息基础设施运营者(以下简称运营者)采购网络产品和服务,影响或可能影响国家安全的,应当按照本办法进行网络安全审查。

第三条网络安全审查坚持防范网络安全风险与促进先进技术应用相结合、过程公正透明与知识产权保护相结合、事前审查与持续监管相结合、企业承诺与社会监督相结合,从产品和服务安全性、可能带来的国家安全风险等方面进行审查。

第四条在中央网络安全和信息化委员会领导下,国家互联网信息办公室会同中华人民共和国国家发展和改革委员会、中华人民共和国工业和信息化部、中华人民共和国公安部、中华人民共和国国家安全部、中华人民共和国财政部、中华人民共和国商务部、中国人民银行、国家市场监督管理总局、国家广播电视总局、国家保密局、国家密码管理局建立国家网络安全审查工作机制。

网络安全审查办公室设在国家互联网信息办公室,负责制定网络安全审查相关制度规范,组织网络安全审查。

第五条运营者采购网络产品和服务的,应当预判该产品和服务投入使用后可能带来的国家安全风险。影响或者可能影响国家安全的,应当向网络安全审查办公室申报网络安全审查。

关键信息基础设施保护工作部门可以制定本行业、本领域预判指南。

第六条对于申报网络安全审查的采购活动,运营者应通过采购文件、协议等要求产品和服务提供者配合网络安全审查,包括承诺不利用提供产品和服务的便利条件非法获取用户数据、非法控制和操纵用户设备,无正当理由不中断产品供应或必要的技术支持服务等。

第七条运营者申报网络安全审查,应当提交以下材料:

(一)申报书;

(二)关于影响或可能影响国家安全的分析报告;

(三)采购文件、协议、拟签订的合同等;

(四)网络安全审查工作需要的其他材料。

第八条网络安全审查办公室应当自收到审查申报材料起,10个工作日内确定是否需要审查并书面通知运营者。

第九条网络安全审查重点评估采购网络产品和服务可能带来的国家安全风险,主要考虑以下因素:

(一)产品和服务使用后带来的关键信息基础设施被非法控制、遭受干扰或破坏,以及重要数据被窃取、泄露、毁损的风险;

(二)产品和服务供应中断对关键信息基础设施业务连续性的危害;

(三)产品和服务的安全性、开放性、透明性、来源的多样性,供应渠道的可靠性以及因为政治、外交、贸易等因素导致供应中断的风险;

(四)产品和服务提供者遵守中国法律、行政法规、部门规章情况;

(五)其他可能危害关键信息基础设施安全和国家安全的因素。

第十条网络安全审查办公室认为需要开展网络安全审查的,应当自向运营者发出书面通知之日起30个工作日内完成初步审查,包括形成审查结论建议和将审查结论建议发送网络安全审查工作机制成员单位、相关关键信息基础设施保护工作部门征求意见;情况复杂的,可以延长15个工作日。

第十一条网络安全审查工作机制成员单位和相关关键信息基础设施保护工作部门应当自收到审查结论建议之日起15个工作日内书面回复意见。

网络安全审查工作机制成员单位、相关关键信息基础设施保护工作部门意见一致的,网络安全审查办公室以书面形式将审查结论通知运营者;意见不一致的,按照特别审查程序处理,并通知运营者。

第十二条按照特别审查程序处理的,网络安全审查办公室应当听取相关部门和单位意见,进行深入分析评估,再次形成审查结论建议,并征求网络安全审查工作机制成员单位和相关关键信息基础设施保护工作部门意见,按程序报中央网络安全和信息化委员会批准后,形成审查结论并书面通知运营者。

第十三条特别审查程序一般应当在45个工作日内完成,情况复杂的可以适当延长。

第十四条网络安全审查办公室要求提供补充材料的,运营者、产品和服务提供者应当予以配合。提交补充材料的时间不计入审查时间。

第十五条网络安全审查工作机制成员单位认为影响或可能影响国家安全的网络产品和服务,由网络安全审查办公室按程序报中央网络安全和信息化委员会批准后,依照本办法的规定进行审查。

第十六条参与网络安全审查的相关机构和人员应严格保护企业商业秘密和知识产权,对运营者、产品和服务提供者提交的未公开材料,以及审查工作中获悉的其他未公开信息承担保密义务;未经信息提供方同意,不得向无关方披露或用于审查以外的目的。

第十七条运营者或网络产品和服务提供者认为审查人员有失客观公正,或未能对审查工作中获悉的信息承担保密义务的,可以向网络安全审查办公室或者有关部门举报。

第十八条运营者应当督促产品和服务提供者履行网络安全审查中作出的承诺。

网络安全审查办公室通过接受举报等形式加强事前事中事后监督。

第十九条运营者违反本办法规定的,依照《中华人民共和国网络安全法》第六十五条的规定处理。

第二十条本办法中关键信息基础设施运营者是指经关键信息基础设施保护工作部门认定的运营者。

本办法所称网络产品和服务主要指核心网络设备、高性能计算机和服务器、大容量存储设备、大型数据库和应用软件、网络安全设备、云计算服务,以及其他对关键信息基础设施安全有重要影响的网络产品和服务。

第二十一条涉及国家秘密信息的,依照国家有关保密规定执行。

第二十二条本办法自2020年6月1日起实施,《网络产品和服务安全审查办法(试行)》同时废止。

v2-4f32984a150c6988ea0ed9d500a4635f_1200x500.jpg

《网络安全审查办法》答记者问

近日,国家互联网信息办公室、国家发改委等12个部门联合发布了《网络安全审查办法》(以下简称《办法》)。国家互联网信息办公室有关负责人就《办法》相关问题回答了记者的提问。

问:请您介绍一下《办法》出台的背景?

答:关键信息基础设施对国家安全、经济安全、社会稳定、公众健康和安全至关重要。我国建立网络安全审查制度,目的是通过网络安全审查这一举措,及早发现并避免采购产品和服务给关键信息基础设施运行带来风险和危害,保障关键信息基础设施供应链安全,维护国家安全。《办法》的出台,为我国开展网络安全审查工作提供了重要的制度保障。

问:网络安全审查的法律依据是什么?

答:网络安全审查是依据《国家安全法》《网络安全法》开展的一项工作。《国家安全法》第五十九条规定,国家建立国家安全审查和监管的制度和机制,对影响或者可能影响国家安全的网络信息技术产品和服务,以及其他重大事项和活动,进行国家安全审查。《网络安全法》第三十五条规定,“关键信息基础设施的运营者采购网络产品和服务,可能影响国家安全的,应当通过国家网信部门会同国务院有关部门组织的国家安全审查”。

问:网络安全审查主要审查哪些内容?

答:网络安全审查重点评估关键信息基础设施运营者采购网络产品和服务可能带来的国家安全风险,包括:产品和服务使用后带来的关键信息基础设施被非法控制、遭受干扰或破坏,以及重要数据被窃取、泄露、毁损的风险;产品和服务供应中断对关键信息基础设施业务连续性的危害;产品和服务的安全性、开放性、透明性、来源的多样性,供应渠道的可靠性以及因为政治、外交、贸易等因素导致供应中断的风险;产品和服务提供者遵守中国法律、行政法规、部门规章情况;其他可能危害关键信息基础设施安全和国家安全的因素。

问:哪些网络运营者采购产品和服务需要考虑申报网络安全审查?

答:关键信息基础设施运营者采购网络产品和服务,影响或可能影响国家安全的,应当按照《办法》进行网络安全审查。

根据中央网络安全和信息化委员会《关于关键信息基础设施安全保护工作有关事项的通知》精神,电信、广播电视、能源、金融、公路水路运输、铁路、民航、邮政、水利、应急管理、卫生健康、社会保障、国防科技工业等行业领域的重要网络和信息系统运营者在采购网络产品和服务时,应当按照《办法》要求考虑申报网络安全审查。

问:何时申报网络安全审查?

答:通常情况下,关键信息基础设施运营者应当在与产品和服务提供方正式签署合同前申报网络安全审查。如果在签署合同后申报网络安全审查,建议在合同中注明此合同须在产品和服务采购通过网络安全审查后方可生效,以避免因为没有通过网络安全审查而造成损失。

问:网络安全审查有无时限要求?

答:通常情况下,网络安全审查在45个工作日内完成,情况复杂的会延长15个工作日。

进入特别审查程序的审查项目,可能还需要45个工作日或者更长。

根据《办法》要求,补充提供材料的时间不计入审查时限。

问:审查过程中如何保证关键信息基础设施运营者及产品和服务提供者的商业秘密和知识产权?

答:网络安全审查充分尊重和严格保护企业的知识产权。《办法》规定,参与网络安全审查的相关机构和人员应严格保护企业商业秘密和知识产权,对关键信息基础设施运营者、产品和服务提供者提交的未公开材料,以及审查工作中获悉的其他未公开信息承担保密义务;未经信息提供方同意,不得向无关方披露或用于审查以外的目的。关键信息基础设施运营者或产品和服务提供者认为审查人员有失客观公正,或未能对审查工作中获悉的信息承担保密义务的,可以向网络安全审查办公室或有关部门举报。

问:网络安全审查是否会限制或歧视国外产品和服务?

答:《办法》明确规定了要审查的内容,从中可以看出,网络安全审查的目的是维护国家网络安全,不是要限制或歧视国外产品和服务。

对外开放是我们的基本国策,我们欢迎国外产品和服务进入中国市场的政策没有改变。

问:违反《办法》规定应承担哪些法律责任?

答:根据《网络安全法》第六十五条规定,应当申报网络安全审查而没有申报的,或者使用网络安全审查未通过的产品和服务,由有关主管部门责令停止使用,处采购金额一倍以上十倍以下罚款;对直接负责的主管人员和其他直接责任人员处一万元以上十万元以下罚款。

问:网络安全审查向谁申报?

答:根据《办法》,网络安全审查办公室设在国家互联网信息办公室。具体工作委托中国网络安全审查技术与认证中心承担。

中国网络安全审查技术与认证中心在网络安全审查办公室的指导下,承担接收申报材料、对申报材料进行形式审查、具体组织审查工作等任务。

*本文来源:互联网安全内参,转载请注明原出处。

Apple公司近日通过漏洞奖励计划向印度漏洞研究人员Bhavuk Jain发放了10万美元的漏洞奖励,感谢其发现的影响'Sign in with Apple'系统的严重0 day漏洞。远程攻击者利用该漏洞可以绕过认证,接管目标用户通过'Sign in with Apple'功能注册的第三方服务和app上的账户。

'Sign in with Apple'特征是2019年苹果WWDC大会上引入的一个新的保留隐私的登陆机制,允许用户在不泄露其真实邮箱地址(Apple ID)的情况下通过第三方app登入账户。

Bhavuk Jain称,该漏洞产生的原因是苹果在初始化来自苹果认证服务器的请求前,在客户端验证用户的方式存在问题。在通过'Sign in with Apple'认证用户时,服务器会生成一个含有第三方应用用来确认登陆用户身份的机密信息的JSON Web Token (JWT)。

Bhavuk发现虽然苹果要求用户在初始化请求之前要登入苹果账户,但在下一步并不会验证是不是相同的人在请求JSON Web Token (JWT)。因此,现有机制缺乏一个验证的步骤,会导致攻击者提供了一个属于受害者的额外的Apple ID,诱使苹果服务器生成用受害者身份登入第三方服务的JWT payload。

Bhavuk称,可以请求注册了苹果ID的Email的JSW,当这些token的签名经过苹果的公钥验证后,就是有效的。也就是说攻击者可以通过链接任意邮箱Email ID和获取受害者账户的访问权限来伪造一个JWT。

研究人员向Hacker News确认即时用户选择向第三方服务隐藏邮箱地址,攻击者仍然可以利用该漏洞来用受害者的Apple ID来注册新的账户。

该漏洞的影响非常严重,可以用来完全接管账户。因为许多开发者都使用了Sign in with Apple功能,比如Dropbox、Spotify、Airbnb、Giphy等。虽然该漏洞位于apple侧的代码中,但研究人员称一些提供'Sign in with Apple'的服务和应用可以使用双因子认证的方式来缓解这一漏洞带来的影响。

Bhavuk已于4月将该漏洞提交给了apple公司,苹果也发布了该漏洞的补丁。除了发布漏洞补丁外,苹果公司称还分析了服务器日志,并没有发现任何apple账户被利用的期情况。

更多技术细节参见:https://bhavukjain.com/blog/2020/05/30/zeroday-signin-with-apple/

Apple公司近日通过漏洞奖励计划向印度漏洞研究人员Bhavuk Jain发放了10万美元的漏洞奖励,感谢其发现的影响'Sign in with Apple'系统的严重0 day漏洞。远程攻击者利用该漏洞可以绕过认证,接管目标用户通过'Sign in with Apple'功能注册的第三方服务和app上的账户。

'Sign in with Apple'特征是2019年苹果WWDC大会上引入的一个新的保留隐私的登陆机制,允许用户在不泄露其真实邮箱地址(Apple ID)的情况下通过第三方app登入账户。

Bhavuk Jain称,该漏洞产生的原因是苹果在初始化来自苹果认证服务器的请求前,在客户端验证用户的方式存在问题。在通过'Sign in with Apple'认证用户时,服务器会生成一个含有第三方应用用来确认登陆用户身份的机密信息的JSON Web Token (JWT)。

Bhavuk发现虽然苹果要求用户在初始化请求之前要登入苹果账户,但在下一步并不会验证是不是相同的人在请求JSON Web Token (JWT)。因此,现有机制缺乏一个验证的步骤,会导致攻击者提供了一个属于受害者的额外的Apple ID,诱使苹果服务器生成用受害者身份登入第三方服务的JWT payload。

Bhavuk称,可以请求注册了苹果ID的Email的JSW,当这些token的签名经过苹果的公钥验证后,就是有效的。也就是说攻击者可以通过链接任意邮箱Email ID和获取受害者账户的访问权限来伪造一个JWT。

研究人员向Hacker News确认即时用户选择向第三方服务隐藏邮箱地址,攻击者仍然可以利用该漏洞来用受害者的Apple ID来注册新的账户。

该漏洞的影响非常严重,可以用来完全接管账户。因为许多开发者都使用了Sign in with Apple功能,比如Dropbox、Spotify、Airbnb、Giphy等。虽然该漏洞位于apple侧的代码中,但研究人员称一些提供'Sign in with Apple'的服务和应用可以使用双因子认证的方式来缓解这一漏洞带来的影响。

Bhavuk已于4月将该漏洞提交给了apple公司,苹果也发布了该漏洞的补丁。除了发布漏洞补丁外,苹果公司称还分析了服务器日志,并没有发现任何apple账户被利用的期情况。

更多技术细节参见:https://bhavukjain.com/blog/2020/05/30/zeroday-signin-with-apple/

扫描器设计

漏洞扫描器大家都不陌生,几乎是每家公司必备的安全产品。几乎早在快10年前,作为安全乙方,就需要扛着一台极光扫描器,到全国各地去做各种安服。在当时极光扫描器就是一款非常成熟的商业产品了,那么到现在为什么没有出现一款能够通杀的产品,大家还都要一直重复的造轮子呢。我想问题出在两个方面,一是扫描场景复杂,没有一款扫描器能否覆盖所有的场景,而是各有侧重。二是扫描器自身的保密需求,把防御能力完全暴露在外不是一个好主意,最多做到开源扫描框架,poc是万万不能全部开源的。

滴滴建设扫描器也已经好多年,并且去年作为滴滴云安全解决方案,实现了首次商业化输出。如何做扫描器,我比较推崇实用主义的理念,比较看重有利用价值的漏洞,有的扫描器扫完一看,一堆高危全是ssh版本漏洞,报告是好看,但实际利用价值不大(当然,版本漏洞也是有其价值的,我们也有购买商业扫描器,主要用于迎接各种合规检查,自家扫描器人家可能不认)。受限于场景,滴滴自研的扫描器PoC数量至今也才不到500个。商业化扫描器则不同,没有几千个poc都不好意思说自己是做扫描器的。有时候大而全并不一定好,我在某云光一台vm,就给我推了80多个漏洞,客户要么无法处理,要么形成漏洞免疫,反而容易漏过真正的风险。

自研扫描器架构如下图:

1、 采用C-S架构,服务端分为3部分,WEB界面、交互API、调度控制等。数据存储采用mysql,队列服务redis 。

2、WEB界面主要负责与人的交互,包括资产管理、任务管理、Agent管理、插件管理、漏洞管理等模块。

3、交互API 主要负责与Agent的交互,Agent主动拉取任务并推送扫描结果。 生产网、办公网、测试网等公司内部属于不同的安全域,是有网络隔离的,但只要Agent与服务端WEB端口做到单向通信,就能解决一个服务端打通多个扫描安全域的问题。

4、控制调度模块负责 任务调度、维护redis队列、轮询更新任务状态。

5、客户端主要分为指纹识别、spider、WEB扫描、主机扫描四部分。Agent 架构很方便做到横向扩容。

6、web扫描分为两类,一种是基于spider的扫描,Web扫描依赖于spider 爬取的结果,瓶颈在spider,注定效果有限。第二是基于url的扫描。大公司可建设URL库,汇聚来自访问日志,流量镜像、测试人员agent 三者所采集到的url。

7、主机扫描是基于指纹的扫描,扫描效果就要看插件的质量和数量了。所有基于特征性的扫描都可以放到这里,例如对于discus扫描插件,虽然属于web服务,但应该放到主机扫描这里,因为它的明确的指纹特征,而WEB扫描主要基于URL,大多是针对参数的。

指纹识别的实现

今天先谈谈指纹识别吧,最简单的指纹识别方法就是Nmap,它的服务指纹真的很强大,但不适用于大规模的扫描任务,你会发现扫描1-65535个端口实在太慢了。于是拆分成两部分的任务,端口扫描和服务识别,nmap加 -sV选项只负责识别开放端口是什么具体服务。

端口扫描首选要确认是否探活以及扫描范围,例如内网等不大会禁icmp的场景,建议进行ping探活,对于有资产完备且安全性要求较高的场景如外网边界建议不探活直接进行1-65535全端口扫描。

其实最纠结的是扫描方法的选择,我们尝试过nmap、masscan、python、go开发tcp扫描、tcp-syn扫描等,最后的结论是go语言实现的扫描效率最佳。过程就不多说了, 有兴趣的朋友可以参考小伙伴的博客(https://thief.one/2018/05/17/1/

再说服务识别,世间服务千万种,但大致可以分为web服务和其他服务。非web服务识别主要依赖于nmap,对于少量未识别的,也支持自定义扩展指纹。而对于WEB指纹,主要依赖于自建指纹库,web服务非常规范,http header、title、body、robots.txt等都可以很方便的自定义指纹规则。自建指纹是个逐步积累的过程,在未完善之前,可以依赖于开源的服务如whatsweb,cms规则非常丰富,完善后再逐步淘汰。

指纹识别的功能

1、指纹联动扫描插件

标题为基于指纹识别的漏洞扫描,主要是说扫描条件是由指纹决定的。扫描插件只对匹配到指纹条件的目标进行扫描,编写扫描插件时就要同步check下指纹规则,两者联动更新,这样就可以做到精准扫描。扫描poc未能很好的匹配指纹规则,这样就会存在一定的gap,  有时候使用简单的默认端口会造成漏扫,有时候又扩大了扫描范围,例如一个wordpress漏洞插件需要对所有http服务进行扫描。有了精准指纹识别,则可以发起针对性扫描。

2、指纹识别漏洞

指纹即漏洞:部分漏洞不需要经过漏洞扫描,直接在指纹识别阶段就筛选出来了。对于公司外网扫描,有安全规范的公司一般会要求禁止高危端口开放外网,禁止使用高危框架,后台要有双因素等。这些都可以通过指纹识别来探测到。另外常规的主页信息泄露漏洞也可以探测到,如列目录,报错,敏感信息泄露等。

指纹无漏洞: 即指纹白名单的概念,以外网为例,我们已知SSO是安全的,那么一旦指纹探测到后台接入了SSO,就可以打个标签。其他白名单也类似,我们若是已知某个服务是安全的,就不用去反复扫描了。

3、0day应急响应

有了完备的指纹库,当发生0day漏洞的时候,就能够迅速排查到可能受影响的资产,进而进行快速响应。 当然公司可以有两个指纹库,扫描器探测属于黑盒指纹库,还有主机agent采集上来的“白盒”指纹库。

*本文作者:滴滴安全蓝军,转载请注明来自FreeBuf.COM

零知识证明是一种可在多方交互验证需求中实现隐私保护的密码学方案,用于在不泄露具体数据的情况下对数据知识的掌握或相关计算的正确性进行证明,经过密码学学术界和金融科技等产业界多年的理论研究与实践检验,目前已在区块链等与数据隐私相关的创新业务场景实现了落地应用。

本文介绍了零知识证明的基本概念、研究进展、实现原理等情况,并对zk-SNARK等典型的通用零知识证明算法进行了分析,最后对零知识证明技术在区块链与数字货币、安全多方计算等领域的应用进行了梳理总结。

一、零知识证明概述

零知识证明(Zero-Knowledge Proof, ZKP)是现代密码学中的一类经典协议,用于在不泄露关于某个命题任何信息的情况下证明该命题的正确性。近年来,随着区块链等新兴技术的发展以及隐私计算需求的兴起,零知识证明技术再次成为包括金融科技、大数据等相关行业关注的焦点。

如图1所示为零知识证明的一个经典模型——洞穴模型[1],该模型不涉及具体算法实现,仅用于初步说明零知识证明的原理和效果。

图1:洞穴模型

在图中,C点和D点之间存在一道密门,只有知道秘密口令的人才能打开。证明者(Prover)P知道秘密口令,并希望向验证者(Verifier)V证明,但又不希望泄露秘密口令,可通过以下证明过程实现:

①首先,验证者V站在A点,证明者P站在B点;

②证明者P随机选择走到C点或D点,验证者V在A点无法看到证明者P选择的方向;

③验证者V走到B点,并要求证明者P从左通道/右通道的方向出来;

④证明者P根据验证者V的要求从指定方向出来,如有必要需要用秘密口令打开密门。

如果证明者P知道秘密口令,就一定能正确地从验证者V要求的方向出来;如果证明者P不知道秘密口令,则每次有1/2的概率能从验证者V要求的方向出来。该证明过程可重复进行多次,直到验证者V相信证明者P拥有打开密门的秘密口令。

通过以上证明过程,证明者P就向验证者V完成了关于秘密口令的零知识证明,即证明过程不会泄露任何关于秘密口令的知识。

1、概念起源与发展

零知识证明的概念最早在20世纪80年代由美国麻省理工学院的Shafi Goldwasser、Silvio Micali和Charles Rackoff在论文《The Knowledge Complexity of Interactive Proof Systems(交互式证明系统中的知识复杂性)》(以下简记为GMR85)中提出[2],该论文对交互式证明系统的零知识性进行了数学定义,并提出了一种关于二次剩余(Quadratic Residue)判定问题的零知识证明协议。二次剩余问题是数论中的经典问题,其内容是给定互素的整数a和n,判断a是否是模n的二次剩余。由于当n为合数时,不存在多项式时间的算法能够判定该问题,因此二次剩余问题是一个等价于整数分解问题的NP问题。GMR85论文提出的二次剩余问题证明协议可实现证明者向验证者证明a是模n的二次剩余,而验证者在相信该论断的同时无法获知x的具体值等除“a是模n的二次剩余”以外的任何信息。

GMR85等早期论文提出的方案大多数是专用的交互式零知识证明协议,仅能证明某一类特定的问题,且需要证明者和验证者进行多轮交互才能完成,其功能和实际应用效果难以满足现实应用场景的要求。为了能够实现针对任意问题的通用证明协议,同时避免多次交互给实际应用带来的局限性,非交互式通用证明协议的研究成为了零知识证明自概念诞生以来的重要发展方向。

目前,数据安全与隐私保护成为了区块链等应用中的重要需求,零知识证明这一经典的密码学算法有了新的应用前景。在区块链应用场景中,实现多参与方的频繁交互是不现实的,且复杂多样的业务模式催生了通用证明协议的应用需求。因此,zk-SNARK等非交互式通用零知识证明协议在区块链与数字货币等场景中得到了广泛的应用。

2、经典示例

为了能够更加清楚地说明零知识证明的概念,本小节用数独问题[3]和三色图问题[4]两个简单的示例进行具体阐述。

(1)数独问题

如图2所示的数独游戏盘面为由九个3×3区域(宫)组成的9×9九宫格,要求玩家在这个已经填有若干1~9数字(谜面)的9×9九宫格内继续填满数字(谜底),使得每一行、每一列、每一宫(3×3)内都包含不重复的1~9数字。

图2:数独游戏

证明者P希望向验证者V证明其知道某个数独游戏的解,但又不希望向验证者V泄露解的具体内容,可通过以下过程实现证明:

①证明者P将9组1~9数字写在81张卡片上,并在验证者V回避的情况下按照解的排列摆放好,谜面数字朝上,谜底数字朝下;

②验证者V随机选择按照每一行、每一列或每一宫进行验证;

③证明者P在验证者V的见证下,按照验证者V的要求将81张卡片以每一行/列/宫为一组放在9个不透明的袋子中,并打乱每个袋子中的卡片顺序,交给验证者V;

④验证者V打开9个袋子,如果每个袋子中均为9个1~9不重复的数字,则本次验证通过。

证明者P通过预先猜测验证者V会选择哪种验证方式(行/列/宫)进而成功欺骗验证者V的概率是1/3。因此,验证者V可以每次随机选择不同的验证方式将以上证明过程重复多次,直到验证者V相信证明者P知道该数独游戏的解,且验证者V在整个过程中并不能获知任何关于解的具体信息。

(2)三色图问题

三色图问题即用三种颜色对一个地图进行着色,使得任意两个相邻区域的颜色均不相同。三色图问题是一个NP完全问题,不存在多项式时间内的求解算法。根据图论原理,地图的着色问题可以等价于连通图的顶点着色问题。为了便于表示,以下用连通图的顶点着色进行问题说明,其证明过程如图3所示。

图3:三色问题证明过程

证明者P希望向验证者V证明其知道某个连通图的着色方案,但并不希望让验证者V获知这一方案的内容,其证明过程如下:

①证明者P根据其掌握的着色方案随机选择三种颜色对连通图的所有顶点进行对应着色,并将图中的每个顶点用纸片进行覆盖,展示给验证者V;

②验证者V可随机挑选连通图中的一条边进行验证;

③证明者P将这条边连接的两个顶点上覆盖的纸片揭开,展示给验证者V,如果这两个顶点颜色不同,则本次验证通过。

以上证明过程同样需要重复进行足够多次才能使验证者V相信证明者P掌握着色方案,且证明者P每次需要重新随机选择三种颜色对原有着色进行替换,否则验证者V可能根据验证结果还原出着色方案的部分内容。经过足够大的n次重复之后,证明者P在不掌握着色方案的情况下成功欺骗验证者V的概率是可忽略的,即验证者有足够的理由相信证明者P真正掌握了对应图的着色方案。

与本文最开始的零知识证明洞穴模型相比,以上两个零知识证明概念演示示例虽然更具有现实性,但仍然不是实用的零知识证明协议,也都需要证明者与验证者反复进行多次证明过程才能以较大的概率使得验证者信服。而在真实的零知识证明协议中,通过引入数学与密码学手段对方案进行约束,使得证明者每次都无法伪造证明,也就无需进行反复的证明和验证。

二、零知识证明技术原理

本章将对零知识证明的技术原理进行进一步分析,包括零知识证明在密码学上需要满足的基本属性,以及以经典的Schnorr协议为例说明交互式零知识证明协议到非交互零知识证明协议的转化。

1、基本属性

零知识证明涉及的密码学与数学理论较多,包括计算/统计不可区分性(Computationally/Statistically Indistinguishiable)、模拟器(Simulator)、随机预言机(Random Oracle)模型等计算复杂性理论内容。为了便于理解,我们将零知识证明协议的三个基本属性用较为通俗的语言描述如下:

①完备性(Completeness):只要证明者P拥有相应正确知识,就能够通过验证者V的验证,即P有足够大的概率使V确信。

②可靠性(Soundness):如果证明者P没有相应正确知识,则无法通过验证者V的验证,即P成功欺骗V的概率可忽略。

③零知识性(Zero-Knowledge):证明者P在交互的过程中仅向验证者V揭露其是否拥有相应正确知识,而不会泄露任何关于知识的额外信息。

2、交互式零知识证明

零知识证明起源于交互式证明协议,本小节以Schnorr协议[5]为例分析交互式零知识证明的原理和特点。Schnorr协议是一种身份认证协议,也是如今许多数字签名方案(例如DSA算法和ECDSA算法)的基础,其简化的协议流程如图4所示。

图4:简化Schnorr协议流程

在Schnorr协议中,证明者A通过和验证者B进行三次交互的方式证明了其拥有公钥pk对应的私钥sk,而验证者B无法在整个过程中获取私钥sk的信息。

3、非交互式零知识证明

交互式零知识证明协议依赖于验证者的随机尝试,需要证明者和验证者进行多次交互才能完成。非交互式零知识证明(Non-Interactive Zero-Knowledge, NIZK)[6]将交互次数减少到一次,可实现离线证明和公开验证。例如,在区块链等零知识证明应用场景中,通常需要将证明进行直接发布,而非依赖于交互实现,且需要支持多方的公开离线验证。因此,在实际应用中需要考虑如何实现交互式零知识证明协议的非交互化。

对于Schnorr这一具体协议而言,可通过基于随机预言机模型的Fiat-Shamir变换[7]将其转化为非交互式零知识证明,即Schnorr签名。Fiat-Shamir变换将交互式协议中验证者的每次随机数挑战行为用证明者执行随机预言机代替,随机预言机的输入应包含之前的所有上下文信息。随机预言机可以看作是一个理想化的哈希函数,能够将输入转化为具有真随机性(满足一致性分布)的结果。在实际应用中,由于不存在理想化的随机预言机,可以使用SHA-256等常用的密码学哈希算法进行实现。

即在基于Fiat-Shamir变换的非交互式Schnorr协议证明过程中,随机挑战数c不再由B生成并发送给A,而是由A自己通过c=H(x||M)计算挑战数c,其中H()是哈希函数(随机预言机),M是任意消息串。最后A将(c, y)作为证明值进行发布,同时发布消息M。任何获知证明值(c, y)、消息M和公钥pk的验证者均可在与交互式协议相同的验证方式基础上进一步验证c=H(x||M)是否成立。

证明者A在没有交互的情况下得到了随机挑战数c,因此省去了交互式协议中验证者B随机选择c并发送给证明者A的交互过程。这一非交互式的Schnorr协议也被称为Schnorr签名机制,即证明者A使用自己的私钥sk=a对消息M进行了签名,其他人可通过A的公钥pk验证这一签名。

除了通过随机预言机模型将交互式协议转化为非交互式协议外,在后来的zk-SNARK等具有通用功能的零知识证明构造中,还可采用公共参考串(Common Reference String, CRS)的形式实现协议的非交互性,即在进行非交互式证明前由可信第三方生成一个可信的随机串,用于替代交互式证明过程中的随机挑战数。在Zcash等采用零知识证明技术的数字货币中,为了保证过程和结果的可信性,通常会基于一种称为可信设置(Trusted Setup)的仪式用于产生公共参考串。

三、零知识证明典型算法分析

为了能够使零知识证明在更多业务场景中应用,可实现通用功能的非交互式零知识证明算法具有更强的应用普适性。因此,本章选取zk-SNARK等在区块链等场景中应用较多的通用非交互式零知识证明算法进行分析。

1、zk-SNARK

zk-SNARK(Zero-Knowledge Succinct Non-interactive Arguments of Knowledge,零知识简明非交互式知识论证)是一类应用广泛的通用零知识证明方案,通过将任意的计算过程转化为若干门电路的形式,并利用多项式的一系列数学性质将门电路转化为多项式,进而生成非交互式的证明,可实现各类复杂的业务场景的应用。目前,zk-SNARK已在数字货币、区块链金融等区块链领域实际落地,是目前最为成熟的通用零知识证明方案之一。

(1)基本框架

从整体上而言,zk-SNARK零知识证明协议可大致分解为以下步骤:

①将计算转化为电路

首先,为了将待证明的计算式进行统一处理,需要将其转化为若干个门电路的组合形式。例如,证明者A希望向验证者B证明其知道使得计算式(c1×c2)×(c1+c3)=7成立的c1、c2、c3值,而不泄露c1、c2、c3的具体值。根据zk-SNARK协议,首先需要将计算式(c1×c2)×(c1+c3)=7转化成如图5所示的电路。

图5:电路示例

在进行程序表达时,还需要引入一些中间变量,即:

c_1 * c_2 = sym_1

(c_1 + c_3) * 1 = sym_2

sym_1 * sym_2 = out

其中,sym1和sym2为中间变量,out为公开的输出值,即7。

②将电路转化为R1CS

第二步是将表示计算式的电路转化为向量点积(内积)的形式,即一阶约束系统(Rank-1 Constraint System, R1CS)。对于每个门电路,需要定义一组向量(l, r, o),通过向量内积运算使得s∙l×s∙r-s∙o=0,其中s代表全部输入组成的向量,即s=[one, c1, c2, c3, sym1, sym2, out](元素排列没有固定顺序),one表示值为1的虚拟变量,用于将加法门电路c1+c3=sym2统一表达为(c1+c3)×1-sym2=0的形式。向量s在zk-SNARK中又被成为证据(Witness),作为证明者生成证明的输入参数。

对于乘法门电路c1×c2=sym1,对应的三个向量(l, r, o)分别为:

l=[0,1,0,0,0,0,0]

r=[0,0,1,0,0,0,0]

o=[0,0,0,0,1,0,0]

将s、l、r、o代入s∙l×s∙r-s∙o=0即得c1×c2-sym1=0,与门电路c1×c2=sym1等价。同理可得加法门电路c1+c3=sym2对应的向量为:

l=[1,0,0,0,0,0,0]

r=[0,1,0,1,0,0,0]

o=[0,0,0,0,0,1,0]

即1×(c1+c3)-sym1=0。最后一个乘法门sym1×sym2=out对应的向量为:

l=[0,0,0,0,1,0,0]

r=[0,0,0,0,0,1,0]

o=[0,0,0,0,0,0,1]

即sym1×sym2-out=0。通过以上过程,就将待证明计算式对应的电路编码成了R1CS向量的形式。

③QAP

第三步是将R1CS向量表达式转化为多项式的形式,即QAP(Quadratic Arithmetic Programs)。通过这一重要步骤,即可实现待证明计算式验证和多项式验证之间的等价转换。

具体而言,首先在有限域上选择三个不同的值,假设为1、2、3(在实际应用中需要随机选择),然后通过拉格朗日插值公式,构造三组多项式l(x)、r(x)、o(x),使得在x的取值分别为之前选择的1、2、3时,多项式向量组(l(x), r(x), o(x))的三种取值分别对应第二步中三个门电路的向量组(l, r, o)的三种不同取值。取多项式P(x)=s∙l(x)×s∙r(x)-s∙o(x),当x取值为1、2、3时,P(x)=0,即1、2、3为多项式P(x)的三个根,因此多项式P(x)能够被T(x)=(x-1)(x-2)(x-3)整除,即存在多项式H(x)使得P(x)=T(x)×H(x)。

上述QAP过程将证明原计算式转化成了证明存在多项式H(x)使得P(x)=T(x)×H(x)。通过拉格朗日插值公式引入了大量与原计算式无关的值将向量取值转化为多项式约束,因此多项式与原计算式在本质上并不完全等价,但根据多项式的Schwatz-Zippel定理,验证了转化后的多项式即相当于验证了原计算式。

④引入约束

以上步骤完成了计算式证明到多项式证明的转化。为了构造完整的零知识证明方案,需要再引入一系列约束方法构造完备的零知识证明协议。具体包括:

引入指数知识假设(Knowledge-of-Exponent Assumption, KEA)或椭圆曲线密码体系下的系数知识假设(Knowledge-of-Coefficient Assumption, KCA)约束证明者在生成证明过程中的参数使用,防止证明者通过选择不符合限制条件的多项式进行欺骗。

防止暴力破解:为了保证证明的零知识性,防止验证者在有限范围的多项式系数组合中对证明结果进行穷举破解,进而反推出证明者的原始多项式,需要生成一个秘密的随机数来对证明结果进一步的加密。

使用双线性配对实现验证过程中需要使用到的乘法同态。

为了实现非交互式零知识证明,需要事先由第三方生成一些秘密随机数,并进一步生成证明密钥(Proving Key)pk和验证密钥(Verification Key)vk,pk和vk将作为公共参考串CRS分别赋予证明者和验证者,而原始的随机数则作为“有害废料”(Toxic Waste)进行销毁。

(2)方案选择

zk-SNARK的概念最早于2011年提出[8],其方案基于2010年提出的Gro10论文[9]。目前,zk-SNARK已有多类不同的优化方案,主流论文包括Pinocchio协议[10]、BCTV14a[11]、Groth16[12]等等。Pinocchio协议是首个完整的zk-SNARK实用方案,后续论文方案大多基于经典的Pinocchio协议进行优化,因此具有一定的代表性。在Pinocchio协议中,初始化过程、证明过程、验证过程分别由可信第三方、证明者、验证者执行。在业务模式(待证明计算式形式)确定后,可通过可信第三方或多方公开生成的可信方式产生公共参考串CRS,供后续的证明和验证使用。

由于存在着许多基于Pinocchio协议的不同优化方案,且相关学术论文仍在不断地更新之中,因此zk-SNARK的方案选择是一个值得考虑的问题。目前,现有的算法工具大多支持Groth16或BCTV14a方案。与BCTV14a方案相比,Groth16方案支持可证明安全,且在Zcash等数字货币应用中多以Groth16作为默认方案。因此,在进行实际应用时,可优先选择应用最为普遍的Groth16方案作为工程实现的基础。

(3)功能实现

除上述的(c1×c2)×(c1+c3)=7这类简单的计算式证明外,还可通过不同的电路构造方法,将更为复杂的证明需求转化为门电路的组合形式。libsnark算法库中的gadget工具库包含布尔值、位组合、析取关系(或)、合取关系(与)、大小关系、向量内积、线性组合等基本约束的实现,通过包括但不限于以上基本功能的组合,可实现更为复杂计算式的证明。除基本功能外,zk-SNARK还可实现Merkle树、SHA256哈希、模指数运算、双线性配对等复杂计算的验证。在实际场景中,只要存在对隐私数据计算的可验证性需求,理论上都可考虑尝试采用零知识证明技术解决的可行性,但在应用的必要性方面还需考虑实际可操作性和引入的效率问题。

(4)开发工具

目前,为了解决零知识证明技术的广泛应用需求,产生了多个用于实现zk-SNARK零知识证明协议工程化的开源算法库,包括libsnark、bellman、ZoKrates等等。

①libsnark

libsnark是一个基于C++语言的zk-SNARK工程开发算法库,由SCIPR Lab开发和维护,开发者中包含参与多篇zk-SNARK学术论文的共同作者。libsnark实现了近年来多个主流的zk-SNARK论文方案,其中最为常用的包括BCTV14a和Groth16方案。

libsnark实现了zk-SNARK算法的黑盒化,提供高度抽象的编程接口,使开发者无需掌握算法细节即可直接进行工程开发。此外,libsnark还提供了实际应用中的常见基础功能库,可辅助开发者进行复杂证明的组合实现。以在匿名数字货币Zcash中的应用为开端,libsnark奠定了零知识证明技术从理论研究到大规模工程应用的基础。

②bellman

在Zcash项目中,最初采用libsnark算法库实现zk-SNARK零知识证明。在2018年升级到Sapling版本时,由于之前采用的libsnark版本较老,其中关于椭圆曲线和zk-SNARK方案的选择都已不是当时的最优选项,Zcash改为使用自研的bellman算法库。bellman是Zcash团队基于Rust语言实现的zk-SNARK算法库,支持Groth16论文方案,目前主要在Zcash项目中应用。

③ZoKrates

ZoKrates是一个部分基于libsnark、部分采用Rust语言重写的zk-SNARK实现工具,默认支持Groth16方案,开发者需要使用一种自建的脚本语言进行代码编写,目前在实际工程中仅用于在以太坊智能合约上部署支持零知识证明的应用。

2、其他算法

(1)zk-STARK

zk-STARK(Zero-Knowledge Scalable Transparent Arguments of Knowledge,零知识可扩展透明知识论证)[13]是2018年提出的一种通用非交互式零知识证明算法,通过多项式插值等方法将证明计算式转化为证明多项式小于某个度的问题,实现对问题的零知识证明。

zk-SNARK算法主要可分为算术化(Arithmetization)和低度测试(Low Degree Testing, LDT)两部分。算术化过程将待证明问题转化为多项式的形式,具体内容包括生成与R1CS类似的执行轨迹(Execute Trace)并构造多项式约束,然后对执行轨迹进行多项式插值,并与多项式约束进行组合变换,得到确定性的验证多项式;而LDT过程则通过二分法验证证明组合多项式和轨迹多项式小于某个固定的度,确保证明者给出的满足多项式的值是基于有效的多项式计算的,用于防止证明者伪造证明,具体基于FRI(Fast Reed-Solomen Interactive Oracle Proofs of Proximity)协议实现。

zk-STARK与zk-SNARK相比主要有以下异同点:

①相同点

zk-STARK和zk-SNARK均实现了对隐私输入的隐藏;

zk-STARK和zk-SNARK均为基于知识的论证,即在不知道隐私输入的情况下无法生成有效证明;

zk-STARK和zk-SNARK均可实现非交互式协议;

zk-STARK和zk-SNARK均通过将计算式转化为多项式实现零知识证明。

②不同点

zk-STARK具有透明性,即不需要通过由可信第三方完成的可信设置过程生成CRS;

zk-STARK具有可扩展性,即证明过程的耗时与输入大小呈线性关系,但验证过程的耗时仅与输入大小呈对数关系;

zk-STARK生成的证明大小比zk-SNARK大很多。

总的来说,与zk-SNARK相比,zk-STARK不需要通过可信第三方生成CRS,且验证耗时仅与输入大小呈对数关系,但其生成的证明更大。面对区块链等应用场景宝贵的存储资源,zk-SNARK在证明的简洁性方面更胜一筹。

(2)BulletProof

BulletProof[14]零知识证明算法同样于2018年提出,主要用于实现范围证明(Range Proof),目前已在Monero匿名数字货币中应用。

在BulletProof范围证明中,证明者可向验证者证明其拥有的秘密值v在一个确定的范围,而不会泄露关于v的任何信息。此外,通过对范围证明进行组合变换,还可进一步实现大小关系的证明。BulletProof算法具有生成证明小的优点,且同样不需要通过可信设置仪式生成CRS,但其主要功能优势在于范围证明,因此在普遍适用性方面还有待进一步验证。

除以上介绍的算法外,在目前的实际应用中还存在着PLONK、AZTEC等其他可用的新型零知识证明算法。作为通用非交互式零知识证明的应用先驱,zk-SNARK算法的功能更为全面,学术与技术资源更为丰富,实际的工程应用场景也更加广泛。

四、零知识证明应用场景

作为一类经典的密码学原语,零知识证明至今已有三十多年的历史。但是,直至近年来基于区块链的匿名数字货币的诞生,零知识证明技术才开始有了较大规模的应用。目前,零知识证明在工程应用上仍处于起步阶段,且在可信设置、运算效率等方面存在着一些瓶颈,依然还是一项尚未真正成熟的密码学技术。

本章对目前零知识证明技术在区块链、数字货币、安全多方计算等领域的应用场景进行举例分析。

1、在区块链数字货币中的应用

(1)Zcash

Zcash是一种基于区块链的匿名数字货币,起源于Zerocoin协议。2014年,经过效率和匿名性等方面的改进,Zerocoin协议发展为Zerocash协议[15]。2016年,基于Zerocash协议的Zcash数字货币应用项目正式向公众开放。

Zcash采用zk-SNARK零知识证明协议实现了隐蔽交易的功能。在比特币中,需要通过公开在区块链上的交易发送方地址、交易接收方地址以及输入和输出金额来验证交易。而在Zcash中,通过zk-SNARK来证明交易满足有效条件,而不会公开任何有关地址或金额的关键信息。隐蔽交易的发送方通过构建一个证明,从而以足够高的概率来证明交易满足以下条件:

①交易的输入总金额和输出总金额相等;

②交易发送方拥有支配交易金额的私钥;

③支配交易金额的私钥与交易的签名绑定,交易无法被不知道私钥的人篡改。

在Zcash中,隐蔽交易的UTXO(Unspent Transaction Output)被称为Commitment(承诺),而支出一个Commitment对应的金额需要公布一个相应的Nullifier。Zcash节点会保存包含所有已创建的Commitment组成的Merkle树以及所有已公布的Nullifier列表。Commitment和Nullifier通过哈希值存储,防止泄露Commitment的信息以及Commitment和Nullfier的对应关系。

对于输入金额的来源,每次隐蔽交易都会产生一份未使用的金额,以一个Commitment的形式进行公布,其值为接收方地址、交易金额、秘密的交易唯一标识和一个随机串(Random Nounce)的哈希值。

对于输出金额的去向,当隐蔽交易发起时,交易发送方使用支配交易金额的私钥发布一个Nullifier,其值是现有未使用Commitment中交易唯一标识的哈希值,并生成证明其有权使用相应金额的零知识证明。交易发送方需要将私钥对应的公钥和交易唯一标识通过秘密信道发送给交易接收方以完成交易。为了防止双花,Zcash区块链节点会验证该Nullifier不在已经公布的列表中。

进而,隐蔽交易的零知识证明还可以验证以下论断的真实性:

①对于每一份输入金额,都存在一个已公布的Commitment;

②Nullifier和Commitment是被正确计算的;

③不同输出交易的Nullifier不会发生哈希碰撞。

对于每个隐蔽交易,交易发送方通过证明密钥生成输入金额有效性证明,区块链节点通过验证密钥来验证交易发送方的证明。

Zcash通过Trusted Setup公共参数仪式生成零知识证明的证明密钥和验证密钥,并与Zcash网络中的所有参与者共享。2016年10月22日至23日,Zcash举行了可信设置仪式生成zk-SNARK的公共参考串CRS,通过由具有竞争关系的六个参与者参与的多方计算协议,保证CRS的安全生成,除非参与参数生成的所有人共谋,否则被销毁的随机参数无法得到恢复。

(2)Monero

Monero(门罗币)也是一种支持交易隐私保护的数字货币,创始于2014年,其通过密码学技术手段实现了以下两个属性:

①不可链接性(Unlinkability):无法判断两个交易的接收方是否是同一个人,即保证了交易接收方的匿名性;

②不可追踪性(Untraceability):无法知道交易的发送方是谁,即保证了交易发送方的匿名性。

Monero主要依赖于以下三种密码学机制:

①一次性密钥(One-Time Key):每次交易生成不同密钥以隐藏真实的交易接收方;

②环签名(Ring Signature):将交易发送方的输入与其他人的输入进行混淆签名,外界无法将不同交易进行关联;

③环签名保密交易(Ring Confidential Transaction, RingCT):隐藏交易金额。

RingCT[16]采用零知识证明技术——Pedersen承诺,可在隐藏交易金额的同时实现区块链的验证,即对交易的输入总金额与输出总金额(包含交易费用)之差是否为0进行零知识证明承诺。

然而,由于基于群代数的密码学存在模运算,无法将小负数与对应模数的大正数进行区分,可能导致伪造币的产生。因此,为了在保护交易金额机密性的同时保证交易金额不为负数,且金额不能过大至与小负数在对应模数上同余,需要对交易的输出金额进行范围证明。最初的范围证明协议基于Borromean环签名技术,其证明大小与范围区间的上限成线性关系,成为了交易的主要负担,影响了区块链的整体效率。

2018年,Monero进行了一次硬分叉升级,引入了BulletProof零知识证明算法以提升交易效率。BulletProof用于取代之前基于环签名的范围证明协议,其产生的证明大小仅与范围区间上限成对数关系,同时可将多个证明进行合并以实现进一步优化,最终将区块链的大小以及交易费用减少70%~80%。

2、在区块链其他场景中的应用——以太坊扩容

以太坊(Ethereum)是一个知名的公有区块链平台,通过在去中心化网络节点上的以太坊虚拟机(Ethereum Virtual Machine, EVM)中运行以图灵完备语言编写的智能合约(Smart Contract),进而承载去中心化应用(Decentrialized Application, DApp)的部署。随着越来越多DApp的部署,以太坊遇到了几乎所有公有链平台所共有的性能瓶颈问题,由此产生了各类针对以太坊的扩容方案。

以太坊扩容方案一般分为第一层(Layer-1)扩容方案和第二层(Layer-2)扩容方案。Layer-1扩容方案是指直接增加链上的交易处理能力,即链上扩容,常见的技术方案有分片(Sharding)和有向无环图(Directed Acyclic Graph, DAG)等;Layer-2扩容方案是指将链上的相当一部分工作量转移到链下完成,常见的技术方案包括状态通道、Plasma、Truebit等。

ZK-Rollup是一类基于zk-SNARK零知识证明的以太坊Layer-2扩容方案,其实现案例为ZK-Sync去信任化扩容及隐私解决方案。ZK-Rollup将链上的账户状态(包含公钥、Nonce和余额)压缩存储在一棵Merkle树中,并将账户状态变更的处理转移到链下,同时通过zk-SNARK零知识证明生成每个交易的有效性证明,保证链下账户状态变更的正确性,具体包括交易的Nonce、金额、费用以及签名等内容的正确性,并将证明结果提交到链上的智能合约中。由于在链上直接处理账户状态变更的成本较高,而仅通过链上的智能合约验证零知识证明结果的成本相对低很多,因此零知识证明的应用可大大提高以太坊的交易处理效率,真正实现扩容的目的。零知识证明技术的引入预计可将以太坊的每秒交易吞吐量从目前的约15TPS提升至主流支付转接清算网络级别的数千TPS。

值得一提的是,以太坊的创始人Vitalik Buterin本人就是一个零知识证明技术的支持者,曾多次在不同场合公开支持zk-SNARK等零知识证明技术在以太坊等区块链平台中进行应用。

3、在安全多方计算中的应用

隐私计算是密码学技术的另一个重要应用领域。基于密码学的安全多方计算(Multi-Party Computation, MPC)方案通常采用混淆电路(Garbled Circuit)、不经意传输(Oblivious Transfer)、同态加密(Homomorphic Encryption)、同态承诺(Homomorphic Commitment)、秘密共享(Secret Sharing)以及零知识证明等技术手段,实现多个参与方之间数据共享计算过程中的隐私保护。从密码学的本质上来说,安全多方计算的定义是在无可信第三方的情况下,若干个互相不信任的参与方使用各自的私有数据安全地计算一个约定函数而不泄露各自原始数据的问题。

在典型的安全多方计算方案中,参与方之间通常会事先约定一个计算框架,并要求双方按照既定的框架执行计算。但是,参与方可能怀疑对方是否使用其私有数据真正进行了计算,因此可引入零知识证明技术用于解决这一计算结果的可信验证问题。具体而言,参与方中的一方在通过混淆电路或同态加密等方法完成安全计算后,除了将计算结果提供给其他参与方外,还可将计算过程转化为零知识证明电路,并采用零知识证明算法生成计算过程的证明结果供其他参与方验证。根据零知识证明协议满足的完备性、可靠性和零知识性三个基本属性,通过这一过程即可在不泄露具体计算数据的情况下,使其他参与方相信计算是按照正确步骤进行的。

五、总结

得益于近年来区块链、数字货币、隐私计算等新兴技术应用的发展,零知识证明这一具有30多年历史的经典密码学技术在最近5到10年又产生了极为丰富的理论与应用成果。在区块链应用中,对于不同参与方的数据交互验证可采用零知识证明技术实现,避免敏感信息的相互泄露;在安全多方计算应用中,参与双方可在通过同态加密等方法保护的隐私计算完成后要求互相提供计算过程的零知识证明结果进行验证,防止虚假计算,同时又不会泄露计算过程中的敏感信息。

总的来说,零知识证明这一“新瓶装旧酒”的密码技术,在目前十分热门的区块链、数字货币、安全多方计算等场景中都有着一定的应用潜力。

参考文献

[1] Quisquater J J, Quisquater M, Quisquater M, et al. How to explain zero-knowledge protocols to your children[C]//Conference on the Theory and Application of Cryptology. Springer, New York, NY, 1989: 628-631.

[2] Goldwasser S, Micali S, Rackoff C. The knowledge complexity of interactive proof systems[J]. SIAM Journal on computing, 1989, 18(1): 186-208.

[3] Gradwohl R, Naor M, Pinkas B, et al. Cryptographic and physical zero-knowledge proof systems for solutions of sudoku puzzles[J]. Theory of Computing Systems, 2009,44(2): 245-268.

[4] Goldreich O, Micali S, Wigderson A. Proofs that yield nothing but their validity or all languages in NP have zero-knowledge proof systems[J]. Journal of the ACM (JACM), 1991, 38(3): 690-728.

[5] Schnorr C P. Efficient signature generation by smart cards[J]. Journal of cryptology,1991, 4(3): 161-174.

[6] BlumM, Feldman P, Micali S. Non-interactive zero-knowledge and its applications[C]//Proceedings of the twentieth annual ACM symposium on Theory of computing. 1988: 103-112.

[7] Fiat A, Shamir A. How to prove yourself: Practical solutions to identification andsignature problems[C]//Conference on the theory and application of cryptographic techniques. Springer, Berlin, Heidelberg, 1986: 186-194.

[8] Bitansky N, Canetti R, Chiesa A, et al. From extractable collision resistance tosuccinct non-interactive arguments of knowledge, and back again[C]//Proceedings of the 3rd Innovations in Theoretical Computer Science Conference. 2012: 326-349.

[9] Groth J. Short pairing-based non-interactive zero-knowledge arguments[C]//International Conference on the Theory and Application of Cryptology and Information Security. Springer, Berlin, Heidelberg, 2010: 321-340.

[10] Parno B, Howell J, Gentry C, et al. Pinocchio: Nearly practical verifiable computation[C]//2013 IEEE Symposium on Security and Privacy. IEEE, 2013: 238-252.

[11] Ben-Sasson E, Chiesa A, Tromer E, et al. Succinct non-interactive zero knowledge for a von Neumann architecture[C]//23rd USENIX Security Symposium (USENIX Security 14). 2014: 781-796.

[12] Groth J. On the size of pairing-basednon-interactive arguments[C]//Annual international conference on the theory andapplications of cryptographic techniques. Springer, Berlin, Heidelberg, 2016: 305-326.

[13] Ben-Sasson E, Bentov I, Horesh Y, et al. Scalable, transparent, and post-quantum secure computational integrity[J]. IACR Cryptology ePrint Archive, 2018, 2018: 46.

[14] Bünz B, Bootle J, Boneh D, et al. Bulletproofs: Short proofs for confidential transactions and more[C]//2018 IEEE Symposium on Security and Privacy (SP). IEEE, 2018: 315-334.

[15] Sasson E B, Chiesa A, Garman C, et al. Zerocash: Decentralized anonymous payments from bitcoin[C]//2014 IEEE Symposiumon Security and Privacy. IEEE, 2014: 459-474.

[16] Noether S, Mackenzie A. Ring confidential transactions[J]. Ledger, 2016, 1: 1-18.

*本文作者:狴犴安全团队,转载请注明来自FreeBuf.COM

【全球动态】

1.NSA发警告:俄黑客组织Sandworm渗入MTA Exim已有数月时间

据外媒报道,上周,美国安局(NSA)警告公众,俄罗斯军方网络攻击者至少已经利用一个版本的电子邮件软件长达数月之久。据悉,这个受影响的邮件系统是用于基于Unix的系统的MTA软件–Exim mail。该软件默认安装在许多Linux发行版中。[阅读原文]

2.思科VPN服务器遭黑客入侵

思科披露六台用于提供VPN服务的服务器遭黑客入侵,攻击者利用了4月底公开的 Salt 组件漏洞。思科的Virtual Internet Routing Lab Personal Edition (VIRL-PE) 和Cisco Modeling Labs Corporate Edition都整合了Salt管理框架,而Salt在四月底披露了两个高危漏洞。[阅读原文]

3.GitHub警告开源供应链攻击Octopus Scanner

GitHub安全博客警告了针对的Apache NetBeans IDE项目的开源供应链攻击Octopus Scanner。GitHub 称它在3月9日收到了被称为 JJ 的安全研究人员发来的警告,称发现一组感染了恶意程序Octopus Scanner的开源库。[阅读原文]

4.西部数据因在NAS存储产品中混入SMR盘而遭到起诉

上个月,三大硬盘制造商西部数据、希捷和东芝都公开承认机械硬盘产品混用了SMR技术。今天流行的机械硬盘主要采用两种技术:CMR/PMR(垂直磁记录)和SMR(叠瓦式磁纪录),其中SMR技术写入性能较差,能在降低成本的同时将存储容量提升 20%。[阅读原文]

5.Clearview AI因未经授权收集人像数据而遭到起诉

鉴于伊利诺伊州率先在美启用了有关生物特征测定的隐私保护法律,ACLU已将未经授权收集人像数据的Clearview AI公司告上了法庭。据悉,Clearview AI涉及在几个月的时间里,从互联网上收集了超过 30 亿张人脸照片。[阅读原文]

6.新加坡研究人员利用量子密码技术增强网络加密

新加坡理工大学和新加坡国立大学正在寻求利用量子密码技术来构建网络加密工具。因此,这些工具将可以缓解量子计算成为主流趋势时可能出现的安全风险。[外刊-阅读原文]

7.Gartner发布云安全能力评估报告:阿里云全球第二,仅次于微软

近日,Gartner发布《Solution Comparison for the Native Security Capabilities 》报告,首次全面评估全球TOP云厂商的整体安全能力。据IT之家了解,阿里云是亚洲唯一入围厂商,其整体安全能力拿下全球第二,11项安全能力被评估为最高水平(High),超过亚马逊,仅次于微软。[阅读原文]

【安全事件】

1.研究人员发现“Apple 登录”安全漏洞:某些用户帐户可能被接管

据外媒报道,研究人员 Bhavuk Jain 在四月份发现了一个严重的「使用 Apple 登录」漏洞,该漏洞可能导致某些用户帐户被接管。值得一提的是,这个 Bug 特定于使用“通过Apple登录”功能且未实施其它安全措施的第三方应用。[阅读原文]

2.Java库fastjson被曝存“高危”远程代码执行漏洞

fastjson 当前版本为1.2.68发布于3月底,日前某安全运营中心监测到,fastjson <= 1.2.68版本存在远程代码执行漏洞,漏洞被利用可直接获取服务器权限,漏洞等级定为“高危”。[阅读原文]

3.黑客泄露了暗网托管提供商的数据库

黑客泄漏了Daniel’s Hosting(DH)的数据库,该数据库是提供暗网服务最大的免费网络托管提供商。泄漏的数据包含电子邮件地址,站点管理员密码和.onion域私钥。[外刊-阅读原文]

4.出于安全方面考虑OpenSSH宣布放弃对SHA-1认证方案的支持

OpenSSH在公告中引用了SHA-1散列算法中存在的安全问题,被业内认为是不安全的。该算法在2017年2月被谷歌密码学专家破解,可利用SHAttered技术将两个不同文件拥有相同的SHA-1文件签名。[阅读原文]

5.中国信通院启动云服务IPv6支持度评测项目

为深入贯彻落实《工业和信息化部关于开展2020年IPv6端到端贯通能力提升专项行动的通知》,大幅提升云服务平台IPv6业务承载能力,中国信息通信研究院于2020年5月25日在京组织召开“IPv6评测监测工作组暨IPv6规模部署专项协同推进工作组会议”,全面开启云服务IPv6支持度评测项目。[阅读原文]

【优质文章】

1.美国“分层网络威慑”战略的主要内容及影响分析

2020年3月,根据“2019年国防授权法案”授权成立的美国“网络空间日光浴委员会”(CSC)发布报告,提出“分层网络威慑”的新战略,核心内容包括塑造网络空间行为、拒止对手从网络行动中获益、向对手施加成本三个层次,并提出六大政策支柱以及75条政策措施。[阅读原文]

2.近期国际网络安全重大融资及并购交易

伴随疫情下的“社交隔离”,及其带来的远程办公、远程教育等模式的勃兴,网络安全问题也如影随形,并进一步凸显。在线办公平台Zoom在用户数量激增的同时所面对的网络安全危机即是其中一例。[阅读原文]

3.国家电网本年度收到攻击警报大增,需加快设备国产化

2019年3月委内瑞拉发生大面积停电事故,引起国际社会对电力网络安全的担忧。全国政协经济委员会副主任曹培玺在2020年两会发言中透露,国家电网公司收到攻击警报相对于上一年度有较大增长,未来能源电力领域关键信息基础设施遭到攻击的风险将进一步增加。[阅读原文]

*本文内容收集自全球范围内的媒体与刊物,制作者对其完整性负责,但不对其真实性和有效性负责。

*标注为【外刊】的内容主要来源为英语国家的媒体与刊物,部分内容需要注册免费账号后方可阅读。

WAF即Web应用防火墙(Web application firewall),是用于网站安全防护的。

在当下的等保2.0时代,给网站部署WAF做防护,对网站运营者来说是必不可少的,WAF也逐渐被互联网人群熟知。

一般的WAF,也就是防护网络攻击的产品而已,并没有太多新奇,并不有趣。

而本文,将实现一个黑科技:把手机做成一台硬件WAF,科幻感有没有?

先看一下,实现效果:

即:手机成了一台硬件WAF,电脑上可以访问WAF,可以访问被手机防护的网站。

原料准备:

1、硬件:手机一台

2、软件:ShareWAF、Termux、Nodejs

注:安卓系统手机、ios系统尚未测试。

Termux是linux环境模拟器;ShareWAF是个软件WAF;Nodejs是ShareWAF的运行环境。

实现步骤:

1、首先需要安装termux,用于在手机中实现虚拟机。

2、打开termux,在其中安装nodejs环境。

termux其实就是个linux环境,在linux中安装node的过程很简单,在此略过,

然后在命令行中用wget命令获取ShareWAF安装包。

ShareWAF的安装包路径如上图,也可以到ShareWAF官网查看下载地址。

3、ShareWAF下载好后,用unzip命令解压它,解压到当前目录就可以。

4、安装ShareWAF三方模块。

安装过程可以参考ShareWAF的安装说明书。

5、已经差不多了。用ifconfig看一下本机IP,准备访问。

最重要的一步:启动ShareWAF。

到电脑上发起访问:

已可正常访问,网页中显示的3D地球,是WAF的实时攻击展示系统,很绚丽的。

我们DIY的手机WAF,已经就绪

更多的防护功能设置,可以进入ShareWAF后台进行配置,可以设定保护目标网站、可以设定各种防护功能的开启等等。

虽然设备是手机,虽然很小型,但它确实是一台硬件WAF了。

以此思路,我们当然也可以制作大型的硬件WAF。

*本文作者:w2sfoot,转载请注明来自FreeBuf.COM