代理重加密和大火的NuCypher

近来,很多人问起我知不知道代理重加密,或知不知道NuCypher(音:妞塞福呃),在朋友圈也看到有朋友分享或评论相关内容。彭博社的一篇文章把NuCypher和PolkaDot、Cosmos以及Nervos并列,称为四大区块链技术,这可能是引起广泛关注的原因。作为密码学研究人员和从业者,我非常开心,但也发现许多人对这项技术一知半解,错误解读,故发此文解释代理重加密以及我对NuCypher的理解。

注:我于2011年初次学习代理重加密,2017年参与了某金融场景的基于代理重加密的方案设计,2018年关注NuCypher,并在Ethereum Devcon 4上和其团队成员进行了沟通。

基本概念

密码学中有个概念叫原语(primitives),这个词不太好解释,但可以试着把它看作最基础、最不可分的基础操作,例如对称加密、非对称加密、数字签名就是原语。理解了原语,才能明白密码学所要解决的问题。“代理重加密(Proxy Re-encryption)”是密码学届一个非常新的原语,于1998年的欧密会上被提出,距今才20年的历史(不过要知道,公钥密码学也不过仅仅40年!)。代理重加密是什么意思呢,其实从字面上就可以看出来:重加密意味着数据已经被加密过,是对密文的再次加密,而代理则意味着这次“重加密”并非数据的拥有者执行的,而是由一个第三方做的。为什么要提出这样看上去很绕的方案呢?这和我们目前数据的存储和运算结构有关,慢慢道来。

开放的数据场景

个人终端已经很难肩负起新时代大量数据的存储,数据的云端存储成为主流,而对应的隐私问题也逐渐凸显。个人隐私数据存储在云端会带来许多不可控的风险,iCloud、百度网盘都发生过较大规模的数据泄露事件。值得一提的是,这些泄露并非因为云端被黑客攻破造成的,而是用户密码被黑客撞库或破解,或产品逻辑混乱导致用户错误操作造成的。请注意,这还没有考虑到云服务提供商的道德风险,百度公司是知道每个用户在网盘中的数据内容的,用户完全没有隐私。对隐私比较在意的用户会使用WinZip等软件对文件进行加密后,再传送到网盘上,但这样当用户需要使用时,只能将文件完整下载后,在本地解密才能使用。

数据场景日趋多样,用户对云端存储的数据有了更多处理的需求。例如需要将文件分发给其它用户(可能收取费用,典型的应用是文档分享/音乐分享)。如果文件以加密形式存储在云端,意味着用户在分享文件时,还需要私下将加密密钥或口令传输给数据的接收方。用户并不具备随时响应的能力,和数据接收方也不一定有通信的渠道。所以问题来了,如何在保证文件内容保密的情况下,又能及时处理并分发给接收者,且接收者可以解出原始的数据呢?

代理重加密

不严谨地描述代理重加密:代理重加密算法是一种可以将密文转换的算法,它通过特定的重加密密钥,将可解开密文的对象由A(发送者)转化为B(接收者),重加密过程可由任意第三方执行,在此过程中,数据明文不会泄露。其中,重加密密钥由A的私钥和B的公钥计算而得。

用官方白皮书中的图来更直观地展现这一过程,Alice是发送人,Bob是接收人,Proxy是代理机构。(ska, pka)、(skb, pkb)分别是Alice和Bob的私钥、公钥,rka→b是代理重加密密钥,cA是只有Alice可以解开的密文,cB是只有Bob可以解开的密文。目前,代理重加密已经有了比较成熟的算法,NuCypher选择了ECIES,并考虑引入AFGH和NTRU方案,解决信任拆分和抗量子的问题。

 

代理重加密和大火的NuCypher_第1张图片

 

 

NuCypher介绍

NuCypher究竟想做什么呢?白皮书里的说明相当精炼,体现出团队的水平。
 

NuCypher KMS 是一个分布式密钥管理系统 (KMS),提供加密和权限控制服务。它能够在公共网络上在任意数量的参与者之间共享私有数据,使用代理重加密技术来代理解密权限,这是传统对称加密和公钥加密方案不能实现的。内生代币用来激励网络参与者执行密钥管理和权限代理/回收的操作。”

让我们逐句分析:

“NuCypher KMS 是一个分布式密钥管理系统 (KMS)”:NuCypher是分布式的,这意味着这个系统无需信任(trustless);此外它的主要作用是一个密钥管理系统,而非文件管理系统,这是由现有的数据加密模式决定的。代理重加密可以对密文实现转换,但是由于数据量巨大,考虑到运算效率,一般来说,这个密文实际上是用来加密真正数据的”对称密钥“。接收方获取对称密钥后,再独立地在本地进行数据解密。这样做的另一好处是,密文文件也可以不出现在区块链上。

“提供加密和权限控制服务。”:加密指的是Proxy使用重加密密钥对数据进行重加密的过程,权限控制服务则指的是当Alice提供授权时,Proxy可以根据规则来允许Bob访问不同的文件。

“它能够在公共网络上在任意数量的参与者之间共享私有数据”:数据是绝对保密的,参与者数量不限,点对点。

“使用代理重加密技术来代理解密权限”:核心技术是代理重加密,代理所做的是权限的管理(即对密钥的重加密)。

“这是传统对称加密和公钥加密方案不能实现的”:我们没有在重新造轮子或炒冷饭,这是最基础的密码研究。

“内生代币用来激励网络参与者执行密钥管理和权限代理/回收的操作。”:解释了为何要发币,trustless的系统既要防止参与方作恶,还要防止参与方不作为。代币激励让劳者有所得,作恶者受惩。

综上所述,NuCypher KMS 使用分布式网络移除对中心化服务提供商的信任,使用代理重加密提供密码访问控制,使用代币激励机制保证可靠性,可用性和正确性。由于使用代理重新加密,未加密的对称密钥(能够解密私有数据)绝不会暴露在服务器端,并且没有单点安全失败。即使被攻破,黑客也只能得到重新加密的密钥,并且对文件的访问仍然受到保护。

关于技术实现的细节,代理重加密能达到的密码学安全等级等问题,本文不再详述。仅对数据层面可能的风险及NuCypher的应对措施进行简述。

风险1:节点和数据读者的共谋,节点有可能避开条件约束,向读者提供数据。解决方案主要是(a)重加密密钥的伪匿名、(b)分割密钥代理重加密和(c)挑战协议。
风险2:节点故障,节点有可能返回假数据,而不是正确地执行了重加密。这需要通过(c)挑战协议来解决。
风险3:节点相互勾结,影响网络共识。但这并不会造成致命风险,因为数据本身是安全的,就像即使有人掌握了比特币网络的大多数算力,它也只能通过双花来牟利,而不能花费它本来不掌握的资产(伪造签名)。
 

解决方案:(a)伪匿名方案的核心就是公钥和身份无法一一对应,不让Proxy知道自己在重加密什么数据,这可以避免它们共谋。(b)分割密钥的核心就是不让一个Proxy说了算,把代理重加密密钥做秘密共享,需要足够数量的Proxy才能共同执行。(c)挑战协议的核心是在重加密数据中撒草莓,掺杂一些错误数据或可公开数据,如果Proxy没有对数据进行执行正确的处理,发送方可以迅速发现并进行惩罚。

不会对NuCypher的经济模型进行更详细的描述,但可以明确的几点是,Proxy需要Stake,Proxy通过执行重加密和存储数据获得收益,如果他们不作为或作弊,则会受到罚没。

NuCypher适用场景

白皮书中列出了10种场景,包括

(1) 共享加密文件(“分布式Dropbox”)
(2) 端到端加密群聊(“加密Slack”)
(3) 患者控制的电子健康记录(EHR)
(4) 分布式数字版权管理(DDRM)
(5) 盲身份管理
(6) 脚本和后端应用程序的秘密凭证管理
(7) 共享凭证和企业密码管理
(8) 强制访问日志
(9) 移动设备管理(MDM)和撤销
(10) NuCypher KMS 的私有使用

第二个例子是比较容易理解的场景。部分聊天工具(Telegram、Whatsapp等)可以通过密钥交换协议来实现端到端的隐私通信,但是在群聊中,这个过程非常复杂。如果群聊的人数为n,则用户A发送一条消息,需要与其它n-1人进行密钥交换(无论是直接交换消息,还是交换消息的对称加密密钥)。使用代理重加密方案,用户只需要进行一次加密,并由通信服务提供商维护重加密密钥表即可,避免了多次加密和发送消息的开销,同时可以方便地增加/删除成员,以及配置消息的访问策略。

代理重加密优势

有朋友在朋友圈和我对代理重加密进行了讨论,认为结合传统的非对称和对称密码学方案,就能实现代理重加密所做的事情。由于在朋友圈讨论较为琐碎,且不具有传播效应,我在此对代理重加密的优势进行归纳总结(这也是本文的创作动机)。

(1)数据或数据的对称加密密钥在云端永远不会出现。

(2)消息的发送者只需要对数据/加密密钥进行一次加密,并针对消息接收者生成对应的重加密密钥(非交互式,重加密密钥可重用),重加密密钥甚至可以无需指定消息接收者(交互式)。

(3)数据的重加密都由proxy于云端完成,是trustless的服务,无需担心单点故障,也减轻了客户端的运算负担。

(4)接收者获取加密数据无需和发送者直接建立联系,而只需要proxy持有对应的重加密密钥即可,降低了通信成本,也即可以在发送者离线的状态下获得数据内容。

综上,这些特性决定了“这是传统对称加密和公钥加密方案不能实现的。”当然,代理重加密仍然有许多的风险点,这在NuCypher的白皮书中有详细讨论,本文不再展开。另外,需要指出的是,NuCypher并不只是基于代理重加密设计了KMS方案,他们甚至还要挑战”密码学的圣杯“——全同态加密(FHE),以后有时间再说吧。

文章花絮

去年11月在布拉格的以太坊Devcon4上,我参加了NuCypher的meetup,见到了非常硬核/文艺的工程师Justin Myles Holmes,听他用吟唱的方式讲述了代理重加密的故事,络腮胡+头巾+代码演示,有威士忌配雪茄的味道。我问了他交互模式下的节点作弊问题如何解决,他很实诚地说这可能没法根本解决,但是我们的信任以及权限都是可以分散开的,代理重加密只是解决一部分问题。这个回答让我对这个团队好感颇增。最后晒出一张我在meetup上拍的照片。

对NuCypher感兴趣的人,推荐去官网https://www.nucypher.com查看信息,也可在YouTube上搜索Justin Myles Holmes,看他声情并茂的演绎。https://www.youtube.com/results?search_query=Justin+Myles+Holmes

 

你可能感兴趣的:(密码学,密码学)