前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >分片重加密实现区块链可分享型隐私

分片重加密实现区块链可分享型隐私

原创
作者头像
用户7358413
修改2020-05-25 10:43:46
8780
修改2020-05-25 10:43:46
举报

1. 现状

我们习惯把数据都存储在各种云服务器上,带来方便的同时也存在很多数据隐私泄露的隐患,绝大多数的云服务供应商并不完全值得信任,他们完全可以在未经用户允许的情况下擅自泄露用户的数据,用户甚至毫不知情。

解决这个问题最直接的方法是存储之前将隐私数据加密,只要保管好加密密钥不泄露,就不会存在问题。然而这种情况下,数据也只能由用户自己通过私钥解密,如果需要共享数据给其他用户的话,就只能在可信的环境将密钥也共享,这就给数据分享带来了很大的风险。所以还需要一个更好的解决方案,在不暴露私钥的同时能将加密数据共享给特定用户,且该用户在没有密钥的情况也能解密。代理重加密就解决了这个问题。

2. 基本概念

代理重加密(Proxy Re-Encryption, PRE)是一种密钥转换算法,可以将数据所有人(owner)公钥加密的密文可以被转换为另一种密文,被转换后的密文可以由被授权人(recipient)的私钥进行解密。密文转换过程由一个半可信的代理服务器(proxy)执行,在执行该过程前,代理节点需要持有一个由授权人到被授权人的转换密钥,一般授权人提前生成并发送给代理节点。通过转换密钥无法直接解析密文,最终还需要被授权人的私钥才能解密,所以代理节点没办法获取到明文信息。

3. 算法流程

假设Alice要通过代理重加密节点给Bob共享数据,Alice作为sender,Bob作为Receiver

3.1数据加密

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1
640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1
  • Alice生成一个随机数dek,作为对称加密密钥:dek = random()
  • 使用对称加密密钥dek加密待分享的数据d:c = encryptSym(dek, d)
  • 使用Alice的非对称公钥加密对称加密密钥dek:edek = encryptPke(pkA, dek)
  • 加密数据c+加密的密钥edek上传到云服务器

3.2 重加密密钥

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1
640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1
  • Alice使用自己的私钥和Bob的公钥为Bob生成对应的重加密密钥:re = reKey(skA, pkB)
  • 将重加密密钥分发到重加密节点

3.3 数据解密

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1
640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1
  • Bob在云服务器下载加密数据c+加密的密钥edek
  • 向重加密节点申请重加密
  • 重加密节点密钥转换:edek'=reEncrypt(reS->R, edek)
  • 使用Bob私钥解密对称密钥:dek=decryptPke(skB, edek') 
  • 使用对称加密密钥解密数据:d=decryptSym(dek, c)

4. 密钥分片

代理重加密节点虽然无法通过转换密钥解析密文,但也可能会出现由于故障,宕机,网络连接等问题导致被授权人解密失败,或者可能出现代理节点作恶,不转换或者错误转换,同样会导致被授权人解密失败。Shamir门限密钥共享方案正好解决这个问题。

Shamir门限密钥共享方案也称为(k,n)门限密钥共享方案,假设有n个成员,算法把密钥拆分成n个密钥分片,只有收集大于等于k个分片才能将原始的密钥重构,k就是门限值(k < n)。

数据所有人将转换密钥使用Shamir门限密钥共享方案拆分成n个密钥分片,分别发送给n个代理重加密节点。被授权人需要向至少k个节点申请密钥转换,然后再使用Shamir门限密钥共享方案重构转换密钥。

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1
640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

被授权人只需要申请k个密钥分片就可以解密,降低了单个节点异常的风险,也降低了节点作恶的成功率。

5. 代理重加密和传统DH加密的区别

区别一

传统的DH加密原理是发送方和接受方选择独自的随机数,经过一定计算之后交换计算结果,然后双方生成同样的数作为对称加密共享密钥。

DH加密结合云服务器存储也能解决隐私数据上链的问题,在共享用户数量,加密文件和密钥稳定性不变的时候,两者区别不大,重加密甚至复杂度会相对高一点。

在共享用户数量不定,加密文件数量不定,或者对称密钥频繁更新的场景,DH加密会增加客户端的加密工作量,而代理重加密则把这部分工作转化为重加密转移到云服务器完成。

区别二

传统加密方式没有密钥管理,一次分享之后除非更换对称加密密钥,否则被分享人一直具有解密权限

代理重加密有密钥管理机制,分享者可以通过重加密节点可以对分享用户的访问时限和权限做控制

6. 代理重加密和区块链

代理重加密节点相对比较中心化,如果使用在不信任的去中心化的场景中,就需要考虑到节点作恶的风险,即使使用密钥分片到多个节点也只能降低节点作恶的可能性,节点还是有可能会联合作恶。使用区块链智能合约来管理节点,可以使用相应的奖惩措施来惩罚作恶的节点。同时,区块链也可以存储隐私数据的哈希,以确保云端存储的数据的一致性。

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1
640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1
  • 节点成为代理节点之前需要在区块链质押一定的代币,才能注册成为节点;代币在节点取消注册后解冻,在节点作恶时会被扣除一定的代币
  • 节点通过正常的密钥转换赚取一定的酬劳
  • 被委托人如果通过节点申请重加密之后解密失败,可以通过智能合约校验是否为节点作恶,如果是则对作恶节点扣除一定的代币作为惩罚

7. 总结

  • 代理重加密解决了隐私数据的加密和无交互共享,以及共享权限管理
  • 密钥分片降低了代理节点作恶和宕机导致的解密失败的风险
  • 代理重加密结合区块链智能合约可以使用在不信任的去中心化网络中

8. 应用案例

现实生活中的医疗健康数据针对于个人来说属于隐私数据,比如病例信息,体检结果等,这些信息一般存储在医疗机构的数据库中,用户并没有自身医疗健康数据的所有权,机构可以将数据共享给一些其他的研究机构,医药公司等等,完全泄露了用户的个人隐私。

结合区块链+代理重加密,用户的个人健康数据可以加密存储在区块链或者是云服务器上,也可以是医疗机构的服务器上,密钥由用户自己保管。如果有其他研究机构或者医药公司需要收集用户的健康数据,用户可以通过评估之后,使用代理重加密共享给对应的机构和公司,并获取一定的酬劳。通过区块链+代理重加密的解决方案,用户自己的医疗健康数据的所有权在自己手中,且由于是加密存储,也无需担心泄露个人隐私,并且区块链不可篡改的特性,同时也能保证数据的真实性。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档