区块链中的密码学,使用ABE结合区块链

ABE 密码学,以及与区块链结合的价值

背景

  • 区块链技术具备篡改难度高、使用成本低、分布式的优点,本应成为各行各业的重要助力。但是由于链上参与方担心自己的核心数据外泄,不愿将自己的核心数据上链,这个原因成为阻止区块链落地的主要难题。
  • 使用 ABE密码学,就可以使得区块链中数据所有权得到有效保护,链上数据归属权为参与者本人所有,外人无法访问。

ABE 密码学是什么

  • ABE 是基于属性的加密,即(Attribute-Based Encryption)。与 RSA、IBE (基于身份加密)等加密方式相比,其最大的不同点是实现了一对多的加解密。也就是说,ABE 不需要像其他加密方式那样,每次加密都必须知道接受者的身份信息,只要用户拥有的属性符合加密者所描述的策略时,用户就可以解密。

例子

  • 一个数据拥有者需要将一份明文文件,加密发送给N个不同的用户,倘若使用传统公钥加密算法,数据拥有者需要首先保存这N个用户的公钥(不考虑公钥证书的情况下),利用这N个不同公钥,使用该份明文文件,加密N次,形成N份不同的密文,分别发送给这个N个用户。

 

  • 若使用ABE来完成这项任务则会轻松很多。此时,数据拥有者只需要制定一条仅有这N个用户才能满足的访问策略,接着输入公共参数PP、该条策略以及明文文件至ABE加密算法,进行加密一次,形成唯一一份密文。得到密文后,数据拥有者将该份密文分别发送给这N个不同用户。

 

  • 从加密计算开销与存储开销的角度来看,ABE在该场景下(数据加密共享场景)相较于传统公钥加密算法,有着肉眼可见的性能优势,此处便不再赘述。

属性指的是什么

  • 属性可以理解为一个对象具有的某些特征。举个例子,Jacky Li 是 A 大学信息安全学院的教授,那么「A 大学」,「信息安全学院」以及「教授」就是 ABE 中刻画 Jacky Li 这个人的多个属性,多个不同的属性,可以构成不同的属性集合。在此基础上,策略实际即是由属性及它们间关系所组成的一个逻辑表达式
  • 倘若抛开严谨的定义,用一句话说明 ABE 公钥加密算法,其实就是看属性集合策略是否匹配密码要求的过程。
  • 在 ABE 中,需要弱化公钥这一概念,称之为公共参数(public parameter)。属性集合则被嵌入到私钥中,如果用户拥有的属性可以与密码要求的策略匹配成功,就可以成功解密。

具体的例子

  • 假设现有一条密文策略规定:参与 X 课题 or (信息安全学院 and A 大学 and 教授)
  • 这条策略表达的含义是,唯有 X 课题组的成员或 A 大学信息安全学院的教授才能满足要求进行解密。现在有三个用户,分别是 A 大学信息安全学院的 Alan 教授,A 大学经济管理学院的 Black 教授,B 大学参与 X 课题的 Charles 教授。
  • 三个用户中,Alan 的属性集合{计算机学院,A 大学,教授}满足要求,Charles 的属性{参与 X 课题}也满足要求,但是 Black 的属性不能满足要求。所以 Alan 和 Charles 解密成功,而 Black 解密失败。

两种不同的方案

  • 目前,实现 ABE 的方案主要有 CP-ABE (密文策略 ABE)和 KP-ABE (秘钥策略 ABE)。二者最大的分别在于策略和属性的匹配方式上。
  • CP-ABE,指的是策略嵌入在密文中,属性集合嵌入到密钥中,当且仅当属性能够满足策略时可以解密。
  • KP-ABE 是指,策略嵌入到密钥中,属性集合嵌入到密文中。
  • 虽然在结构上,二者具有明显的对偶关系,但在实际使用中,二者的应用场景却有着明显的不同。
  • CP-ABE 由于策略嵌入密文中,这就意味着,数据拥有者可以通过设定策略去决定拥有哪些属性的人能够访问这份密文,也就相当于对这份数据做了一个加密访问控制。CP-ABE 的应用场景一般是公有云上的数据加密存储与共享。
  • KP-ABE 的应用场景则更加偏向于付费视频网站、日志加密管理等等。

5 分钟了解 ABE 密码学,以及与区块链结合的价值

CP-ABE 

简介

  • CP-ABE(ciphertext policy attribute based encryption,密文策略属性基加密系统):所谓密文政策加密系统是指,密文对应于一个访问结构而密钥对应于属性集合,解密当且仅当属性集合中的属性能够满足此访问结构。这种设计比较接近于现实中的应用场景,可以假象每个用户根据自身条件或者属性从属性机构得到密钥,然后加密者来制定对消息的访问控制。

流程​

  • 设置:使用随机算法,输入隐藏的安全参数,输出公开参数PK和一个主密钥MK。
  • 加密:使用随机算法,输入一个消息m、一个访问结构A、公开参数PK,输出密文E。​
  • 密钥生成:使用随机算法,输入一组属性Y、主密钥MK、公开参数PK,输出一个解密密钥D。
  • 解密算法输入:​基于访问结构A加密的密文E,对应属性组Y的解密密钥D,公开参数PK。如果Y∈A,输出X消息m。

KP-ABE 

简介

  • KP-ABE​(key policy attribute based encryption,密钥策略属性基加密系统):所谓密钥政策加密系统是指,密钥对应于一个访问控制而密文对应于一个属性集合,解密当且仅当属性集合中的属性能够满足此访问结构。这种设计比较接近静态场景,此时密文用与其相关的属性加密存放在服务器上,当允许用户得到某些消息时,就分配一个特定的访问结构给用户。

流程

  • 设置:使用随机算法,输入隐藏的安全参数,输出公开参数PK和一个主密钥MK。
  • 加密:使用随机算法,输入一个消息m、一组属性Y、公开参数PK,输出密文E。​
  • 密钥生成:使用随机算法,输入访问结构A、主密钥MK、公开参数PK,输出一个解密密钥D。
  • 解密算法输入:​基于属性组Y加密的密文E,对应访问结构A的解密密钥D,公开参数PK。如果Y∈A,输出X消息m。

与区块链怎么结合   隐私

  • 区块链的一大特点在于数据共享,这本是区块链的一大优点。然而,在实际应用中,很多参与者的数据很涉及机密,数据所有者并不乐意把自己的数据公开出来。
  • 比如在金融领域。数据上链可以提高数据本身的安全性,也有利于监管机构从区块链中调取数据进行监管,这些我们都知道了。但是为什么金融领域的区块链应用迟迟推进不下去呢?一个亟待解决的重要问题是,金融公司本身不愿意将数据存在链上。因为这些数据都是相当敏感且重要的,一旦数据外泄,会带来不小的损失。
  • 通过 ABE,金融公司可以将自己的数据加密后传到区块链上。由于数据全程都是密文,链上其他人只能看到加密之后的乱码,没有使用价值,拿到了也没有用。与之相对,金融公司自身可以控制谁能对数据进行访问,只需要把数据访问的权限交给监管机构和与之有数据合作的伙伴即可。
  • 传统的加密方式是将数据加密后,将秘钥发送给各个需要访问数据的机构,这种方式效率虽然比较高,但是一旦秘钥外泄,无法断定是哪一个机构作为。相比起传统的加密,ABE 的好处很明显,因为每一个机构的属性不尽相同,其秘钥也不尽相同,一旦我把秘钥泄露给外界,很容易就被追查得到。
  • CP-ABE不需要像其它加密方式那样,如非对称加密,每次加密都必须知道接收者的身份信息且发送给多个用户时必须加密多次,CP-ABE只需要设置访问策略仅执行一次加密,当用户拥有的属性符合加密者所描述的策略时,数据使用者就可以解密。
  • 可解决对称加密密钥传输带来的密钥泄露的问题,保护了数据拥有者信息,也保护了数据使用者信息。

支持用户属性可撤销和恢复的CP-ABE算法实现步骤

  • CP-ABE主要由7个步骤组成,前两步均在证书颁发中心(CA)执行,并存储PK\MK\UK:
  1. 初始化:初始化算法为随机化算法,初始化仅生成系统公钥PK、系统主秘钥MSK。
  2. 撤销机构初始化:输入参数为PK,生成一个素数域P,为每个属性att计算list=1。算法输出初始化的P,map<userGID,prime>及map<att,list>,list并不是我们常见的list,而是一个大数,且为素数,用来记录是否被撤销。
  3. 秘钥生成KeyGen:可信授权中心根据PK、MK和数据请求者提交的属性集合S,为数据请求者生成与属性集合关联的用户秘钥UK。在素数域中为用户申请一个素数prime,从P中删除这个prime,保证不同用户获取的prime不一样,然后素数存入映射表map<userGID,prime>中。
  4. 加密Encrypt:加密算法(随机化算法)输入参数为PK、待加密消息M、访问策略关联的访问控制结构,输出基于属性加密的密文。
  5. 解密Decrypt:解密为确定化算法,由数据请求者执行。解密分为两个步骤,第一步:访问策略树的叶子节点,令i=att(x),x表示密文策略访问树的叶子节点,(函数att(x)返回节点x所对应的属性),如果i∈S,算法获取该属性对应的撤销列表list并取模list%prime。若值不为0,表明该用户未被撤销,若为0,表示已被撤销,解密结束;第二步:当第一步验证通过后,算法输入UK、密文M,如果属性集合满足访问策略,算法可成功解密密文M。
  6. 用户属性撤销:算法输入参数为属性att,属性对应的撤销列表list、用户user及用户对应的素数prime。当用户user被撤销属性att时,DO分别从映射表map<user,prime>和map<att,list>取出用户对应的素数prime及属性对应的撤销列表list,并计算list'=list×prime。属性att对应的撤销列表更新为list'。
  7. 用户属性恢复:算法输入参数为属性att,属性对应的撤销列表list、用户user及用户对应的素数prime。用户被撤销可能是暂时的,当用户user重新拥有属性att时,DO分别从映射表map<user,prime>和map<att,list>取出用户对应的素数prime及属性对应的撤销列表list,并计算list'=list÷prime。属性att对应的撤销列表更新为list'。

用户和秘钥管理

用户管理

  • 用户拥有的基本信息(最小数据集合):GID(CA提供或业务方提供,但要保证全局唯一性)、CP-ABE用户属性(业务方提供)、唯一素数(CA用户注册单元提供)、私钥(CA用户私钥生成单元产生)。
  • 用户提交信息(GID、CP-ABE用户属性、唯一素数)到CA,申请注册和生成用户私钥,用户私钥存在CA中,CA提供接口查询用户和用户私钥获取。

策略更改

  • 在实际工程应用中,撤销方案尽量选择复杂度低、计算开销小、实现简单的方案。因此,本设计中采用的策略撤销方案:通过固定长度的撤销列表记录撤销用户,撤销过程不必更新系统及相关用户的秘钥,可大大降低撤销所引起的计算开销。

撤销

  • 用户属性撤销:算法输入参数为属性att,属性对应的撤销列表list、用户user及用户对应的素数prime。当用户user被撤销属性att时,DO分别从映射表map<user,prime>和map<att,list>取出用户对应的素数prime及属性对应的撤销列表list,并计算list'=list×prime。属性att对应的撤销列表更新为list'。

恢复

  • 用户属性恢复:算法输入参数为属性att,属性对应的撤销列表list、用户user及用户对应的素数prime。用户被撤销可能是暂时的,当用户user重新拥有属性att时,DO分别从映射表map<user,prime>和map<att,list>取出用户对应的素数prime及属性对应的撤销列表list,并计算list'=list÷prime。属性att对应的撤销列表更新为list'。

CP-ABE算法实现

可参考以下两个开源项目实现,但是不包括访问策略更改,这一点需要自己实现。

  1. https://github.com/stefano81/dcpabe
  2. https://github.com/TU-Berlin-SNET/jTR-ABE
  3. java平台
  4. charm平台
  5. CP-ABE_JNI

参考链接

  • 参考链接
  • CP-ABE和KP-ABE
  • 基于ABE算法的访问控制研究
  • 基于属性的加密概述
  • 基于属性加密方案(CP-ABE,KP-ABE)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/447128.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VMware虚拟机安装Ubuntu系统教程

所使用的文件如下&#xff1a; VMware Workstation 17 Pro ubuntu-22.04.3-desktop-amd64.iso 一、ubuntu 命名规则及各版本一览表 1.ubuntu 命名规则&#xff1a; 例如&#xff1a;ubuntu 16.04 LTS 是长期维护版本&#xff1b;ubuntu 17.04 是新特性版本 前两位数字为发…

C++静态类型成员变量的初始化顺序(单例模式)

对编译器来说&#xff0c;静态成员变量的初始化顺序和析构顺序是一个未定义的行为 #include <string> #include <iostream> using namespace std; class Base{ public:static int b;static int a;}; int Base::b 2; int Base::a b 1;int main() {Base base;cou…

区块链中密码学与安全技术

区块链的定义 区块链的定义&#xff0c;应当是&#xff1a;区块链是一种按照时间顺序将数据进行分布式存储的块链式数据结构&#xff0c;它利用共识机制进行数据验证&#xff0c;利用密码学进行数据保护和用户安全访问&#xff0c;利用智能合约来操作数据&#xff0c;从而成为…

面经:单例模式

侯捷单例 和剑指不同 &#xfffc; 饿汉式 饿汉式的特点是一开始就加载了&#xff0c;如果说懒汉式是“时间换空间”&#xff0c;那么饿汉式就是“空间换时间”&#xff0c;因为一开始就创建了实例&#xff0c;所以每次用到的之后直接返回就好了。饿汉式有两种常见的写法&…

属性加密技术及基于属性的ABE算法的访问控制技术介绍

属性加密技术 基于身份的加密体制简介 基于身份的加密体制可以看作一种特殊的公钥加密&#xff0c;它有如下特点:系统中用户的公钥可以由任意的字符串组成。这些字符串可以是用户在现实中的身份信息&#xff0c;如:身份证号码、用户姓名、电话号码、Email地址等&#xff0c;因…

基于属性加密的ABE算法的应用场景思考展望

ABE算法先前使用在云计算场景中&#xff0c;和区块链存在交叉应用场景&#xff0c;具体问题体现在 数据的异地存储、云服务器提供商的不可信、管理员能否对自身数据拥有足够的控制能力以及如何保证数据的安全有效共享都是亟需解决的问题。 研究背景&#xff1a; 云计算越来越…

面经:设计模式

什么是接口隔离原则&#xff08;Interface Segregation Principle&#xff09; 定义&#xff1a;客户端不应该依赖它不需要的接口&#xff1b;一个类对另一个类的依赖应该建立在最小的接口上。概括的说就是&#xff1a;建立单一接口&#xff0c;不要建立臃肿庞大的接口。&…

区块链、密码和银行之间的衍生关系

银行场景中密码服务 设置密码 用户在注册的时候&#xff0c;如果使用弱密码&#xff0c;系统会检测出来。我的猜测是将弱密码的hash运算和用户输入的密码hash比对&#xff0c;如果一致&#xff0c;禁止用户注册。 1、不要设置简单密码&#xff0c;您设置的密码必须符合中信银…

AIgorand区块链中VRF随机函数的应用

VRF&#xff08;Verifiable Random Function&#xff09; 可验证随机函数可以看作是一个随机预言机&#xff0c;即可以通过任意的一个输入&#xff0c;获得一个随机数输出&#xff1a;输出的结果&#xff08;Output&#xff09;是一个随机数&#xff0c;其数值会均匀分布在值域…

C++学习笔记 简单部分

C 数据类型 使用变量来存储各种信息&#xff0c;变量保留的是它所存储的值的内存位置。这意味着&#xff0c;当创建一个变量时&#xff0c;就会在内存中保留一些空间。这段内存空间可以用于存储各种数据类型&#xff08;比如字符型、宽字符型、整型、浮点型、双浮点型、布尔型…

terminate called after throwing an instance of ‘std::logic_error‘ what(): basic_string::_M_constr

terminate called after throwing an instance of ‘std::logic_error’ what(): basic_string::_M_construct null not valid 用0初始化字符串 编译不报错

密钥协商(密钥交换)机制的讲解

国标文件涉及密钥协商算法的函数 生成密钥协商参数并输出计算会话密钥产生协商数据并且计算会话密钥 密钥协商&#xff08;交换&#xff09;算法及其原理 密钥交换/协商目的 “密钥协商机制”是&#xff1a;&#xff08;在身份认证的前提下&#xff09;规避【偷窥】的风险。…

基于ECC算法的秘钥协商

基于ECC算法的衍生算法 ECDH(ECCDH)RSAECDHE(ECCDHE) ECDH密钥协商&#xff08;ECCDH&#xff09; 椭圆曲线密码学是属于非对称密码学的&#xff0c;其私钥的计算公式如下&#xff1a; 私钥是一个随机数d&#xff0c;取值范围在1……n-1,其中n是子群的阶公钥是点HdG&#xff…

C++11 多线程相关知识的学习

C多线程类Thread&#xff08;C11&#xff09; C11中std命名空间将Boost库中的Thread加入&#xff0c;Boost的多线程从准标准变为标准&#xff0c;这里将其用法整理复习&#xff0c;以demo的形式复习&#xff0c;还是喜欢看我自己写的东西&#xff0c;符合我的个人逻辑头文件为…

C++11 explicit关键字的作用

explicit 在C中&#xff0c;explicit关键字用来修饰类的构造函数&#xff0c;被修饰的构造函数的类&#xff0c;不能发生相应的隐式类型转换&#xff0c;只能以显示的方式进行类型转换。因为无参构造函数和多参构造函数本身就是显示调用的。再加上explicit关键字也没有什么意义…

C++11学习 virtual(虚函数)的用法

Virtual虚函数 在面向对象的C语言中&#xff0c;虚函数&#xff08;virtual function&#xff09;是一个非常重要的概念。因为它充分体现了面向对象思想中的继承和多态性这两大特性&#xff0c;在C语言里应用极广。多态性&#xff1a;其含义就是多种形式&#xff1b;将具有继承…

c++ const

函数名称不单单是函数名 const 补充内容 还有 const 参数类型 函数后头const 只能在成员函数如果const对象 但是我没通过const成员函数 就会报错

手撕源码 alloc

怎么有效的手撕代码呢&#xff1f; gnu gcc 2.9 的 内存池 把代码跑起来把代码一个片段拿出来使用画出代码运行的流程图一行一行的搬运在看源码的情况下写出类似的demo 第三步&#xff1a; 第五步: // 这个头文件包含一个模板类 allocator&#xff0c;用于管理内存的分配、…

针对Algorand所使用的密码相关技术细节进行介绍

关键概念 VRF: 可验证随机函数。简单来说是&#xff1a;vrf,Proof VRF(sk,seed)&#xff0c;sk为私钥&#xff0c;seed为随机种子&#xff1b;通过Verify(proof,pk,seed)验证vrf的合法性。cryptographic sorition: 根据用户本轮的VRF值&#xff0c;自身的权重以及公开的区块链…