免责声明:本文旨在传递更多市场信息,不构成任何投资建议。文章仅代表作者观点,不代表火星财经官方立场。

小编:记得关注哦

来源:微众银行区块链

隐私数据在密文形式下是否依旧可以加减乘除?其背后的同态性原理具体指什么?半同态性和全同态性有什么区别?单密钥和多密钥同态加密有哪些奇妙的应用场景?

隐私保护方案设计,往往需要在密文状态下,对隐私数据进行特定的业务操作,以此保障数据的机密性。

沿用上一论的电子支付例子,客户目前拥有一张面额1000元的电子支票,电子支票以密文凭证形式存储,流转过程中不会轻易泄露金额。客户使用这张支票时,消费额可能低于1000元,需要将支票进行拆分找零。假定消费额为200元,这一支票需要被拆分成两份密文凭证,面额200元的给商户,面额800元的留给客户自己作为找零。

这个过程中,存在三个隐私保护相关的主要功能点:

  • 客户不希望其他人(包括商户)获知找零的金额为800元,相当于在消费时能保护客户自身财产总额相关信息不泄露。
  • 商户需要验证密文支票在本次消费前的余额不小于200元,但无需知道具体的余额。
  • 签发密文支票的银行需要验证,客户和商户在交易后,没有凭空造出更多的钱,即消费额与找零额相加等于拆分前的电子支票中的余额。

以上功能点涉及如何在不解密的限制下,对隐私数据的密文形式进行计算和验证。而解决问题的关键,就在于密文同态性的使用。

在数据业务中,密文同态性在需要隐私保护的相关场景方案中应用十分广泛,可以实现隐私数据可信跨域协作、联合数据发掘等高价值需求,在多方数据协作、机器学习、云计算等热门领域皆有用武之地。密码学同态究竟有何奇妙之处?且随本文一探究竟。

同态性

同态(Homomorphism)的概念起源于抽象代数,具体是指两个代数结构(例如群、环、向量空间等)之间保持结构不变的映射。

对应地,密码学意义中的同态,多指一类代数结构能够满足在指定运算下结构不变的性质。例如,函数f(x)=3x对应的代数结构满足加法同态性,函数f(x)=x^3对应的代数结构满足乘法同态性。

同态性在密码学中最常见的应用之一,就是用来构造同态加密算法。

同态加密允许在不解密的条件下,直接对密文形式下的隐私数据进行特定形式的代数运算,运算效果等同于将隐私数据明文直接计算后再加密所获的效果。

这项技术试图实现隐私数据协同计算中的数据密文可计算,但明文不可见的效果。

同态加密一直是密码学研究领域的一个重要课题,经典的算法有RSA、ElGamal、Paillier加密算法。2009年9月,Craig Gentry从理论上取得了重大突破,提出了全同态加密的构造方法,即可以在不解密的条件下,对隐私数据的密文形式进行任意形式的运算,并使得运算之后的结果密文满足同态性。

除了同态加密外,其他密码学原语,如上一论中提及的密码学承诺,也可能具有同态性。

同态加密与具有同态性的密码学承诺在功能上的区别在于:

  • 同态加密重在计算,即对多方提供的隐私数据的密文形式进行一定计算后,对结果密文解密后得到的值,等同于对明文数据进行对应运算得到的结果。这个过程不会泄露隐私数据明文,但解密之前无法获知结果。
  • 具有同态性的密码学承诺重在验证,即通过密码学承诺密文形式的同态性,对于已知的结果,构造相应的零知识证明,用以证明多个承诺满足一定的约束条件。密码学承诺难以支持计算结果未知、且需要从多方收集隐私数据的密文计算过程。

同态性在不同的密码学原语中会有不同的功能和限制,本文以同态加密算法为例,对同态性的特性和应用进行分享,其他相关密码学原语会在后续专题中展开。

半同态vs全同态

同态加密根据支持的运算类型的限制,可分为半同态加密(SWHE,Somewhat Homomorphic Encryption或PHE,Partially Homomorphic Encryption)和全同态加密(FHE,Fully Homomorphic Encryption)。

对于一个半同态加密算法,其密文形式仅仅对部分运算方式满足同态性,有代表性的密码学算法体系如下:

  • 加法运算同态性:Unpadded RSA,ElGamal,Benaloh,Paillier
  • 逻辑运算同态性:Goldwasser-Micali

半同态加密算法的优点在于构造相对简单,工程实现效率高,目前已经可以达到商用的性能要求。

对于引言中密文支票电子支付的例子,使用一个具备加法运算同态性算法便可以构造出满足相关的隐私保护需求的密码学协议。除了支付之外,对于日常业务中的大多数场景,如投票、选举、竞拍等,半同态加密算法一般都可以满足对应的隐私保护需求。

对于一个全同态加密算法,其密文形式在理论上对任意运算方式都满足同态性。对于数据密文计算相关同态加密算法设计,这一要求通常体现为密文对应的代数结构对加法和乘法同时满足同态性。

对于任意的隐私数据x,y,全同态加密算法提供了一对加密算法E和解密算法D,满足如下关系:

相比半同态加密算法,全同态加密算法功能更强大、设计更复杂,整体性能远不及半同态加密算法。例如可能面临密文数据膨胀困扰。相关研究报告显示,在一次使用全同态加密开源库为敏感医疗数据构建密文线性回顾模型的尝试中,需要将隐私数据进行编码转换,映射到密文的向量空间中。

此过程,1M的明文数据编码后可能膨胀至约10G密文数据;同时,针对值域范围为512位的明文数据,单次密文乘法运算,在普通个人计算机实测耗时约5秒左右,通常一个需要全同态计算的场景涉及的密文乘法次数很多,总体耗时较高。

由此可见,全同态加密算法的愿景虽美,但目前还处于理论探索层面,离工程实用化、支持高频次和大数据量的业务需求尚有一定距离。

单密钥vs多密钥

同态加密根据数据控制方的数量,可分为单密钥同态加密(Single Key Homomorphic Encryption)和多密钥同态加密(Multi-key Homomorphic Encryption)。

早期的同态加密算法都是单密钥算法,主要应用于外包计算(Outsourced Computation)场景。数据控制方对自身的数据进行加密,然后发送到云计算服务平台,在密文的形式下完成一系列运算,最后下载结果密文,本地解密之后获得最后的计算结果。

上一节提到的ElGamal、Paillier等加密算法都是单密钥同态加密,即对于隐私数据只能使用同一对的密钥进行加解密。

单密钥同态加密优点在于构造相对简单、性能高,可用于有一定信任基础或强监管环境下的联合计算场景。

由于涉及到可信初始化和密钥选用的问题,单密钥同态加密在多方参与的协作场景中,会遇到不少挑战,例如:

  • 如何决定使用哪一方提供的密钥?数据由谁来解密?
  • 如何平衡单密钥所代表的单一数据控制权?如何确保数据提供方的敏感数据输入不被解密?如何防范数据控制方恶意提前终止协议?
  • 如何让所有参与方都能验证最终结果正确性?

实际业务流程中,隐私数据可以由多方提供,在可信初始化之后使用同一个公钥加密数据,并汇总密文数据进行计算,计算结束之后,需要委托可信方或者使用分布式解密协议,对最终结果进行解密。

相比单密钥同态加密算法,多密钥同态加密较好地解决了信任相关的问题。

一个多密钥同态加密算法,允许不同参与方使用各自不同的密钥对加密,加密后的密文可以通过各个参与方的公钥进行密文扩展,扩展后的密文对于指定的运算方式依旧满足同态性。解密过程可以通过分布式解密协议,在不泄露各自数据私钥的前提下,对约定的结果密文进行解密。

典型的多密钥同态加密算法可以参考Clear and McGoldrick (CRYPTO 2015)、Mukherjee and Wichs (EUROCRYPT 2016)相关的论文。

目前多密钥同态加密方案,随着参与方个数的增加,系统性能会急剧降低。对于一些需求比较明确的多方协作场景,相较于多密钥同态加密方案,定制构造的安全多方计算协议或许更有效。

总体而言,密文同态性可以为业务场景中,常见的隐私数据的计算和验证需求,提供有效解决方案,根据具体的业务需求,基本技术选型可以参考下图:

正是:隐私数据密文亦无妨,计算验证同态两相宜!

具有同态性的密码学原语提供了一系列直观、便捷的密钥学协议构造利器,在保障隐私数据机密性的同时,允许多个协作方对隐私数据的密文形式进行直接运算和验证操作,以此适配多样化的隐私保护需求。

除计算和验证需求外,多方授权也是常见的业务需求之一,如对多方共有的业务数据进行授权使用,此时需要用到门限密码学相关技术,欲知详情,敬请关注下文分解

jsencrypt加密同一值返回不同密文_密码学原语如何应用?解析密文同态性的妙用...相关推荐

  1. fread读结构体返回值是0无错误_嵌入式C编程之错误处理(附代码例子)!

    原标题:嵌入式C编程之错误处理(附代码例子)! 作者: clover-toeic 前言 本文主要总结嵌入式系统C语言编程中,主要的错误处理方式.文中涉及的代码运行环境如下: 一.错误概念 错误分类 从 ...

  2. java函数返回多个值_深入理解被调函数与主调函数之间的传值、传址、值返回、址返回...

    函数的英文是function,有功能的意思,函数的作用在于合理分配功能,增强程序的可读性.合理分解功能,降低程序的复杂性.隐藏函数内部的数据和实现,尽可能将问题局限于函数本身. 函数可以理解为一种功能 ...

  3. python 字典 通过值返回键_怎么使用python字典根据值返回键

    怎么使用python字典根据值返回键 发布时间:2020-07-13 13:47:36 来源:亿速云 阅读:75 作者:Leah 本篇文章给大家分享的是有关怎么使用python字典根据值返回键,小编觉 ...

  4. Go 学习笔记(26)— Go 习惯用法(多值赋值,短变量声明和赋值,简写模式、多值返回函数、comma,ok 表达式、传值规则)

    1. 多值赋值 可以一次性声明多个变量,并可以在声明时赋值,而且可以省略类型,但必须遵守一定的规则要求. package main import "fmt"func main() ...

  5. Go 学习笔记(15)— 函数(01)[函数定义、函数特点、多值返回、实参形参、变长参数,函数作为参数调用]

    1. 函数定义 Go 语言最少有个 main() 函数.函数声明告诉了编译器函数的名称,返回类型和参数. func funcName(parameter_list)(result_list) {fun ...

  6. python read函数返回值_python read()方法定义及使用(实例解析)

    今天这篇文章我们来了解一下pythonread方法,不知道没什么关系.因为今天讲的就是python之中的read()方法,以及知晓read是什么意思,所以今天我们在今天的文章之中来了解一下吧. 概述 ...

  7. php 挂马 密码123456,admin密码-常用密码加密md5值,123456,admin,admin888

    一 : 常用密码加密md5值,123456,admin,admin888 123456这个经md5算法加密之后是多少? 16位:49ba59abbe56e057 32位:e10adc3949ba59a ...

  8. python 返回函数对象_返回函数

    函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回. 我们来实现一个可变参数的求和.通常情况下,求和的函数是这样定义的: def calc_sum(*args): ax = ...

  9. golang函数多值返回示例

    多值返回 函数可以返回任意数量的返回值. swap 函数返回了两个字符串. package mainimport "fmt"func swap(x, y string) (stri ...

最新文章

  1. 和12岁小同志搞创客开发:手撕代码,做一款火焰报警器
  2. Oracle 11g 新特性 -- 只读表(read-only table)说明
  3. 数据结构(严蔚敏)之一——顺序表之c语言实现
  4. php trim用法,php trim函数怎么用?
  5. python中pop(),popitem()的整理
  6. linux系统的运行级别
  7. CSS Framework 960 Grid System (收)
  8. SFTP 命令用法介绍
  9. 谈谈遵守公司作战纪律
  10. 20161212xlVBA文本文件多列合并
  11. Parallels Desktop 17 for Mac(pd虚拟机)支持Intel 和 Apple M1
  12. java 类的继承 例题_Java_接口与类之间继承例题
  13. cuda 各个版本下载
  14. UEFI模式下安装ubuntu以及重装ubuntu教程
  15. Notepad++ 替代品开源了,好用 !!!
  16. UE4学习之VR(三)
  17. 关于钓鱼网站的实现原理与技术
  18. pictureselector 压缩_PictureSelector
  19. 基于opencv库对图像进行平移,旋转以及翻转
  20. oracle 命令 操作

热门文章

  1. 工作73:获取id值
  2. 工作总结13:vue官网封装组件
  3. 前端学习(1798):前端调试之css伪元素练习
  4. Oracle从小白到大牛的刷题之路(建议收藏学习)
  5. 前端学习(726):如何交换变量值
  6. 前端学习(359):svn服务器配置金和客户端安装
  7. 单实例数据库和多实例数据库
  8. c++,c.c#区别
  9. matlab 按钮组设置,MATLAB中的单选按钮和按钮组
  10. Vue之前端页面使用json编辑框