精华内容
下载资源
问答
  • 属性基加密技术
    2020-12-28 10:49:51

    1.背景
    区块链典型的一个应用场景是资源共享,而在实际应用中,很多参与者的数据很涉及机密,数据所有者并不乐意把自己的数据公开出来。数据明文在链上存证后,虽然共享给其他人,但是数据被所有的人都能查看,不存在一点私密性。如果数据所有者将数据使用自己的秘钥加密后在链上存证后,能实现数据的隐私保护,但是不能安全的共享给他人。

    比如在金融领域,数据上链可以提高数据本身的安全性,也有利于监管机构从区块链中调取数据进行监管,但是为什么金融领域的区块链应用迟迟推进不下去呢?一个亟待解决的重要问题是,金融公司本身不愿意将数据存在链上。因为这些数据都是相当敏感且重要的,一旦数据外泄,会带来不小的损失。

    2.基于属性的加密技术

    2.1相关概念

    2.1.1属性

    在ABE中,属性也有着相似的作用。举个例子,JackyLi是A大学信息安全学院的教授,那么“A大学”,“信息安全学院”以及“教授”就是ABE中刻画JackyLi这个人的多个属性,这些属性可以构成一个属性集合,我们可以把它记为集合C_Jacky_Li。

    2.1.2策略

    一种简单的理解是策略实际即是由属性及它们间关系所组成的一个逻辑表达式。例如下式Policy:

    参与X课题or(信息安全学院andA大学and教授)

    这是一条简单的策略,其表达的含义是唯有X课题组的成员或是A大学信息安全学院的教授才能满足其要求。

    2.1.3属性集合与策略匹配

    使用C_Jacky_Li与Policy1进行说明。C_Jacky_Li集合中没有“参与X课题”这一属性,故其无法满足策略的前半部分;而策略的后半部分,要求“信息安全学院”、“A大学”、“教授”这三个属性同时出现,而C_Jacky_Li同时包含了这三个属性,所以属性集合匹配策略后半部分,由于策略前后两部分是or的关系,故属性集合C_Jacky_Li能够满足策略Policy1,我们称之为属性集合与策略匹配成功。

    倘若此时另一个用户Johnson,他的属性集合是C_Johnson={计算机学院,A大学,教授},显然C_Johnson无法满足Policy1,此时属性集合与策略匹配失败。

    2.4 ABE

    一种基于属性加密技术(Attribute-Based Encryption,ABE),通过合理的配置共享策略,即可解决上述私密数据共享问题。根据嵌入的对象不同,ABE可划分为KP-ABE、CP-ABE。

    以CP-ABE为例,举一个简单的例子说明ABE相较传统公钥加密算法的优势。

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

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

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

    2.4.1 KP-ABE

    KP-ABE(基于密钥策略的属性加密,Key-Policy ABE,KP-ABE)是将策略嵌入到用户密钥中,属性嵌入到密文中。密钥对应于一个访问结构而密文对应于一个属性集合,解密当且仅当属性集合中的属性能够满足此访问策略。这种设计比较接近静态场景,此时密文用与其相关的属性加密存放在服务器上,当允许用户得到某些消息时,就分配一个特定的访问策略给用户,其应用场景则更加偏向于付费视频网站、日志加密管理等等。如果用户想解密多个文件,那么他必须拥有多个可以满足匹配的秘钥,否则不能解密多个文件。

    2.4.2 CP-ABE

    CP-ABE(基于密文策略的属性加密,Ciphertext-Policy ABE,CP-ABE)是将策略嵌入到密文中,属性嵌入到用户密钥中。密文对应于一个访问结构而密钥对应于一个属性集合,解密当且仅当属性集合中的属性能够满足此访问结构。

    CP-ABE基于属性的加密运用密码机制保护数据,由数据拥有者规定访问密文的策略,将属性集合与访问资源相关联,数据使用者可以根据自己的授权属性的访问密文信息,该技术适合隐私数据共享等访问类应用。

    CP-ABE由于策略嵌入密文中,这就意味着数据拥有者可以通过设定策略去决定拥有哪些属性的人能够访问这份密文,也就相当于对这份数据做了一个粒度可以细化到属性级别的加密访问控制,CP-ABE的应用场景一般是公有云上的数据加密存储与细粒度共享。

    2.3 KP-ABE与CP-ABE比较

    在这里插入图片描述

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

    CP-ABE主要由7个步骤组成,前两步均在证书颁发中心(CA)执行,并存储PK\MK\UK:

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

    2.1用户和秘钥管理

    2.1.1用户管理

    用户拥有的基本信息(最小数据集合):GID(CA提供或业务方提供,但要保证全局唯一性)、CP-ABE用户属性(业务方提供)、唯一素数(CA用户注册单元提供)、私钥(CA用户私钥生成单元产生)。

    用户提交信息(GID、CP-ABE用户属性、唯一素数)到CA,申请注册和生成用户私钥,用户私钥存在CA中,CA提供接口查询用户和用户私钥获取。

    2.1.2策略更改

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

    2.1.3撤销

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

    2.1.4恢复

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

    3.安全性分析

    已有大量学者对其研究证明是安全的,此处安全分析略。

    4.方案优势

    实现了加密数据的细粒度访问控制,即数据拥有者可以指定谁可以访问加密的数据,数据拥有者对数据具有完全的控制权。例如,金融公司自身可以控制谁能对数据进行访问,只需要把数据访问的权限交给监管机构和与之有数据合作的伙伴即可。
    CP-ABE不需要像其它加密方式那样,如非对称加密,每次加密都必须知道接收者的身份信息且发送给多个用户时必须加密多次,CP-ABE只需要设置访问策略仅执行一次加密,当用户拥有的属性符合加密者所描述的策略时,数据使用者就可以解密。
    可解决对称加密密钥传输带来的密钥泄露的问题,保护了数据拥有者信息,也保护了数据使用者信息。

    5.潜在的应用场景

    区块链技术与开放银行的构建

    6.CP-ABE算法Java实现

    可参考以下两个开源项目实现,但是不包括访问策略更改,这一点需要自己实现。
    https://github.com/stefano81/dcpabe
    https://github.com/TU-Berlin-SNET/jTR-ABE

    更多相关内容
  • 针对传统方法在对云存储的加密数据进行检索时效率不高的问题,提出了一种利用属性基加密(ABE)技术的安全数据检索方案。利用ABE提供丰富的索引词表达能力,从而确保数据安全性,通过平衡云服务提供商运行开销和其他...
  • 针对一对多搜索模型下共享解密密钥缺乏细粒度访问控制且搜索结果缺乏正确性验证的问题,提出了一种基于区块链且支持验证的属性基搜索加密方案。通过对共享密钥采用密文策略属性加密机制,实现细粒度访问控制。结合...
  • 传统的属性基加密方案中存在着访问策略所包含的属性会泄露用户的敏感信息以及恶意用户泄露私钥获取非法利益而不会被追责的问题。同时私钥长度、密文长度和解密运算量均会随属性数量增加而带来较大的通信开销和计算...
  • 在综合分析现有密文策略属性基加密方案的基础上,针对现有密文策略属性基加密方案较少考虑属性重要性的现状,将权重的概念引入到密文策略属性基加密方案中。授权机构依据属性在系统中的重要程度为其分配不同的权值,...
  • 密钥策略属性基加密(KP-ABE)的出现弥补了这一缺陷,在KP-ABE系统中,密文与一组描述性属性相关联,用户的私钥与一个访问结构相关联,当密文中的属性集满足用户私钥中的访问策略时,密文才能够被解密

    目录

    KP-ABE的基本知识

    KP-ABE过程

    KP-ABE的说明

    参考文献


    KP-ABE的基本知识

    基本的属性基加密将密文和密钥都与一组属性关联起来,当密文与密钥之间至少有d个属性重合时,用户就可以解密密文。虽然这个策略对于生物识别的容错加密有一定的作用,但访问控制缺乏灵活性限制了它的应用。密钥策略属性基加密(KP-ABE)的出现弥补了这一缺陷,在KP-ABE系统中,密文与一组描述性属性相关联,用户的私钥与一个访问结构相关联,当密文中的属性集满足用户私钥中的访问策略时,密文才能够被解密。这使得属性基加密能够细粒度共享加密数据,KP-ABE的构造适用于审计日志信息和广播加密。

            在KP-ABE中,与用户私钥相关联的访问结构被构造为访问树。其中树的内部节点都是一个阈值门,由其子节点和阈值描述。如果num_{x}是其子节点的个数,k_{x}是其阈值,则0<k_{x}\leq num_{x}。与门和或门都可以被构造成阈值门,当k_{x}=1时,就是或门,当k_{x}=num_{x}时就是与门。叶子节点与属性相关联,由属性值和阈值k_{x}=1描述。为了便于使用访问数,还定义了一些函数。parent(x)表示树中节点的父节点。att(x)表示与树中叶节点相关联的属性,只有x节点是叶节点时才定义该函数。对于节点的子节点来说,需要对子节点进行编号,index(x)返回子节点的索引值。

            用T_{x}表示以节点x为根的树,则根为r的访问树表示为T_{r},当节点被满足时令T_{x}=1,我们递归计算所有节点,当根节点满足时,我们就可以进行解密操作。否则解密失败。

    KP-ABE过程

    G1是素数阶p的双线性群,g是G1的生成元。此外e:gif.latex?G1%5Ctimes%20G1%5Crightarrow%20G2表示双线性映射。安全参数k将确定群的大小。同时为gif.latex?i%5Cin%20Zpgif.latex?Zp中元素的集合gif.latex?s定义拉格朗日系数gif.latex?%5CDelta%20_%7Bi%2Cs%7D:

                                                           gif.latex?%5CDelta%20_%7Bi%2Cs%7D%28x%29%3D%5Cprod_%7Bj%5Cin%20s%2Cj%5Cneq%20i%7D%5E%7B%7D%5Cfrac%7Bx-j%7D%7Bi-j%7D.

    我们将每个属性与Z_{p}^{*}中的一个唯一的元素关联起来,构造如下:

    Setup:定义一个属性域U={1,2,……,n}。对于每个属性i\in U,在Zp中随机选取t_{i},最后,从Zp中随机选取y。

    公布公共参数PK为:gif.latex?T_%7B1%7D%3Dg%5E%7Bt_%7B1%7D%7D%2C...%2CT_%7B%7Cu%7C%7D%3Dg%5E%7Bt_%7B%7Cu%7C%7D%7D%2CY%3De%28g%2Cg%29%5E%7By%7D

    主密钥MK为:gif.latex?t_%7B1%7D%2C...t_%7B%7Cu%7C%7D%2Cy

    Encryption(M,\gamma,PK):在一组属性集合\gamma下加密消息M\inG2,选择一个随机值s\inZ_{p},公布密文如下:

                                      E=(\gamma ,E{}'=MY^{s},\left \{ E_{i} =T_{i}^{s}\right \}_{i\in \gamma })

    Key Generation(\tau,MK):这个算法输出一个密钥能够使用户与解密在一组属性\gamma下加密的信息,当且仅当\tau (\gamma )=1。算法过程如下:首先为树中的每个节点x选择一个多项式q_{x}(包括叶子节点),这些多项式从根节点r开始以一种自顶向下的方式选择。

            对于树中的每个节点x,设置多项式q_{x}的次数比节点阈值少一,也就是d_{x}=k_{x}-1。首先,对于根节点r,设置q_{r}(0)=y,然后d_{r}次多项式q_{r}的其他点完全随机的选取。对于任意的其他节点x,设置q_{x}(0)=q_{parent(x)}(index(x)),其他点随机选择来定义q_{x}。多项式被定义好之后,对于叶子节点x,我们将以下的秘密值给用户:

                                                           D_{x}=g^{\frac{q_{x}(0)}{t_{i}}},当i=att(x)时。

    以上一组秘密值就是解密密钥D。

    Decryption(E,D):解密过程为递归过程。首先定义一个递归算法DecryptNode(E,D,x),将密文E=(\gamma ,E{}',\left \{ E_{i} \right \}_{i\in \gamma }),私钥D,树中的一个节点x作为输入,输出一个G2中的元素或者\perp

            令i=att(x)。当节点是叶子节点时DecryptNode(E,D,x)=\left\{\begin{matrix} e(D_{x},E_{i}) =e(g^{\frac{q_{x}(0)}{t_{i}}},g^{s\cdot t_{i}})=e(g,g)^{s\cdot q_{x}(0)},if i\in \gamma & & \\ &\perp otherwise & \end{matrix}\right.

           当x不是一个叶子节点时,算法DecryptNode(E,D,x)过程如下:对于x的所有子节点z,调用DecryptNode(E,D,z)并保存输出为F_{z},令S_{x}为任意k_{x}大小的子节点z的集合,使得F_{z}\neq \perp,如果这样的集合不存在,则节点不满足,函数返回\perp。否则,计算如下:

                                          F_{x}=\prod_{z\in S_{x}}^{}F_{z}^{\Delta _{i},s{}'_{x}(0)}, i=index(z),s{}'_{x}=\left \{ index(z):z\in S_{x} \right \}

                                               =\prod_{z\in S_{x}}^{}(e(g,g)^{s\cdot q_{z}(0)})^{\Delta _{i,s{_{x}}'}(0)}

                                               =\prod_{z\in S_{x}}^{}(e(g,g)^{s\cdot q_{parent(z)}(index(z))})^{\Delta _{i,s{}'_{x}}(0)}

                                               =\prod_{z\in S_{x}}^{}e(g,g)^{s\cdot q_{x}(i)\cdot \Delta _{i,s{}'_{x}}(0)}

                                               =e(g,g)^{s\cdot q_{x}(0)}

    最后返回结果。我们发现当访问树被满足时DecryptNode(E,D,r)=e(g,g)^{ys}=Y^{s}。因为E{}'=MY^{s},所以E{}'/Y^{s}就是我们解密出来的明文M。

    KP-ABE的说明

            KP-ABE的Setup和Encryption过程和基本ABE一致,主要区别在于密钥生成和解密阶段,将基本ABE中的门限值替换成了细粒度的访问树控制结构,只有当密文中的属性满足密钥中嵌入的访问树时,用户才能解密该密文。根据密文中的属性和访问树的叶子节点开始匹配,层层递进直到根节点,若满足则可以恢复出根节点的秘密值y,从而计算出Y^{s}的值,最终解出明文M。

    参考文献

    GOYAL V, PANDEY O, SAHAI A, et al. Attribute-based encryption for fine-grained access control of encrypted data

    展开全文
  • 云计算-面向云计算的属性基加密和入侵检测技术研究.pdf
  • #资源达人分享计划#
  • 属性基加密(ABE,attribute-based encryption)用于提供细粒度访问控制及一对多加密,现已被广泛应用于分布式环境下数据共享方案以提供隐私保护。然而,现有的属性基加密数据共享方案均允许数据拥有者任意修改数据,...
  • #资源达人分享计划#
  • 理想格上的加密方案具有密钥尺寸小、加密效率高的优势,利用理想格环上带误差学习(R-LWE,ring learning with error)问题,构造一种可以保护用户属性隐私的属性基加密方案,支持灵活的访问策略,提供用户隐私保护,...
  • 针对可追踪属性基加密方案利用追踪功能解决密钥委托滥用问题的不完备性,提出了一种抗密钥委托滥用的可追踪属性基加密方案。将秘密参数分享给用户私钥中关联属性的全部组件,使解密过程必须由全部组件共同参与完成,...
  • 属性基加密方案中,加密者通常把访问策略与密文一起发送给用户,但有时访问策略本身就是敏感信息,需要保密。提出一种新的较高效的匿名访问属性基加密方案,在加密过程中通过隐藏部分子集值以使授权用户有效密文和...
  • 基于授权的多服务器可搜索密文策略属性基加密方案.pdf
  • #资源达人分享计划#
  • 在密文策略属性基加密(CP-ABE)中正好与之相反,私钥与属性相关联,密文与访问结构相关联,能够决定拥有哪些属性的用户可以解密密文,这样设置,加密者就能够控制谁有权访问他加密的数据。这与传统的访问控制方法,...

       

    目录

       

    密文策略属性基加密(CP-ABE)

    CP-ABE过程

     参考文献

    密文策略属性基加密(CP-ABE)

        在之前的(KP-ABE)中,密文和属性相关联,私钥与访问策略相关联,可以决定能解密的密文,加密者无法控制谁能够访问他加密的数据。在密文策略属性基加密(CP-ABE)中正好与之相反,私钥与属性相关联,密文与访问结构相关联,能够决定拥有哪些属性的用户可以解密密文,这样设置,加密者就能够控制谁有权访问他加密的数据。这与传统的访问控制方法,基于角色的访问控制(RBAC)类似。在CP-ABE中,使用了一种新颖的私钥随机化技术来保证抗共谋性。使用新的两级随机掩蔽的技术。

            在CP-ABE中,与密文相关联的访问结构也被构造为访问树。其中树的内部节点都是一个阈值门,由其子节点和阈值描述。如果num_{x}是其子节点的个数,k_{x}是其阈值,则0< k_{x}\leq num_{x}。与门和或门都可以被构造成阈值门,当k_{x}=1时,就是或门,当k_{x}=num_{x}时就是与门。叶子节点与属性相关联,由属性值和阈值k_{x}=1描述。为了便于使用访问数,还定义了一些函数。parent(x)表示树中节点的父节点。att(x)表示与树中叶节点相关联的属性,只有x节点是叶节点时才定义该函数。对于节点的子节点来说,需要对子节点进行编号,index(x)返回子节点的索引值。

            满足访问树。令\tau为根为r的访问树,用\tau _{x}表示以节点x为根的\tau的子树,因此\tau\tau _{r}是一样的,如果一组属性\gamma满足访问树\tau _{x},我们将其表示为\tau_{x} (\gamma )=1,递归计算\tau _{x}(\gamma )。如果x是非叶子节点,则计算节点x的子节点x{}'的值\tau _{x{}'}(\gamma ),当至少k_{x}个子节点返回1时\tau _{x}(\gamma )返回1。如果x是叶子节点,当且仅当att(x)\in \gamma\tau _{x}(\gamma )返回1。

    CP-ABE过程

            G0是素数阶p的双线性群,g是G0的生成元。此外e:G0\times G0\rightarrow G1表示双线性映射。安全参数k将确定群的大小。同时为i\in Z_{p}Z_{p}中元素的集合S定义拉格朗日系数:

                                                         \Delta _{i,S}(x)=\prod_{j\in S,j\neq i}^{}\frac{x-j}{i-j}  

            另外使用一个哈希函数H:\left \{ 0,1 \right \}^{*}\rightarrow G0,将其建模为随机预言机,功能会将任意描述为二进制字符串的属性映射到随机群元素。构造如下:

    Setup:选择一个具有生成元g的素数阶p的双线性群G0。接下来选择两个随机指数\alpha ,\beta \in Z_{p},公钥公布如下:

                                                 PK=G0,h=g^{\beta },f=g^{\frac{1}{\beta }},e(g,g)^{\alpha }

    主密钥MK为:(\beta ,g^{\alpha }),这里的f仅仅用来委托。

    Encrypt(PK,M,\tau):加密算法将在访问结构\tau下加密消息M。首先为树\tau中的每个节点选择一个多项式q_{x}。(包括叶子节点),这些多项式从根节点R开始以一种自顶向下的方式选择。

            对于树中的每个节点x,设置多项式q_{x}的次数比节点阈值少一,也就是d_{x}=k_{x}-1。首先,从根节点R开始,随机选择一个s\in Z_{p}并且设置q_{R}(0)=s,然后d_{R}次多项式q_{R}的其他点完全随机的选取。对于任意的其他节点x,设置q_{x}(0)=q_{parent(x)}(index(x)),其他点随机选择来定义q_{x}。令Y为\tau中叶子节点集合,然后通过给出的访问结构\tau构造密文如下:

    CT=(\tau ,C\widetilde{}=Me(g,g)^{\alpha s},C=h^{s},\forall y\in Y:C_{y}=g^{q_{y}(0)},C{}'_{y}=H(att(y))^{q_{y}(0)})

    KeyGen(MK,S):密钥生成算法以一组属性S作为输入,并输出以该集合表示的密钥。算法首先选择一个随机r\in Z_{p},然后为每个属性j\in S选择随机r_{j}\in Z_{p},然后计算密钥为:

    SK=(D=g^{(\alpha +r)/\beta },\forall j\in S:D_{j}=g^{r}\cdot H(j)^{r_{j}},D{}'_{j}=g^{r_{j}})

    Delegate(SK,S\widetilde{}):委托算法接受一个密钥SK,用于一组属性S和令一组属性S\widetilde{},其中S\widetilde{}\subseteq S。密钥的形式为SK=(D,\forall j\in S:D_{j},D{}'_{j}),算法选择一个随机r\widetilde{}r\widetilde{}_{k}\forall k\in S\widetilde{},然后它创造一个新的密钥:

    \widetilde{SK}=(\widetilde{D}=Df^{\widetilde{r}},\forall k\in \widetilde{S}:\widetilde{D_{k}}=D_{k}g^{\widetilde{r}}H(k)^{\widetilde{r}k},\widetilde{D{}'_{k}}=D{}'_{k}g^{\widetilde{r}k})

    得到的密钥\widetilde{SK}是集合\widetilde{S}的密钥。因为这个算法重新随机化了密钥,所以委托密钥等同于直接从权威机构得到一个。

    Decrypt(CT,SK):解密过程是一个递归过程。我们首先定义一个递归算法DecryptNode(CT,SK,x),以密文CT=(\tau ,\widetilde{C},C,\forall y\in Y:C_{y},C{}'_{y}),一个与一组属性关联的私钥SK和\tau中的一个节点为输入。如果节点x为叶子节点,令i=att(x),定义如下:如果i\in S,则

    DecryptNode(CT,SK,x) =  \frac{e(D_{i},C_{x})}{e(D{}'_{i},C{}'_{x})}

                                         =\frac{e(g^{r}\cdot H(i)^{r_{i}},h^{q_{x}(0)})}{e(g^{r_{i}},H(i)^{q_{x}(0)})}

                                         =e(g,g)^{rq_{x}(0)}

    如果i\notin S,定义DecryptNode(CT,SK,x) =\perp

            当x不是叶子节点时,DecryptNode(CT,SK,x) 算法过程如下:对于x的所有子节点z,调用DecryptNode(E,D,z)并保存输出为F_{z},令S_{x}为任意k_{x}大小的子节点z的集合,使得F_{z}\neq \perp,如果这样的集合不存在,则节点不满足,函数返回\perp。否则,计算如下:

                                   F_{x}=\prod_{z\in S_{x}}^{}F_{z}^{\Delta _{i,S{}'_{x}}(0)},where i=index(z),S{}'_{x}=\left \{ index(z):z\in S_{x} \right \}

                                        =\prod_{z\in S_{x}}^{}(e(g,g)^{r\cdot q_{z}(0)})^{\Delta _{i,S{}'_{x}}(0)}

                                        =\prod_{z\in S_{x}}^{}(e(g,g)^{r\cdot q_{parent(z)}(index(z))})^{\Delta _{i,S{}'_{x}}(0)}

                                        =\prod_{z\in S_{x}}^{}e(g,g)^{r\cdot q_{x}(i)\cdot \Delta _{i,S{}'_{x}}(0)}

                                        =e(g,g)^{r\cdot q_{x}(0)}

    返回结果,如果这个树被集合S满足,设置A=DecryptNode(CT,SK,r)=e(g,g)^{rq_{R}(0)}=e(g,g)^{rs}。这个算法通过计算\widetilde{C}/(e(C,D)/A)=\widetilde{C}/(e(h^{s},g^{(\alpha +r)/\beta })/e(g,g)^{rs})=M,这样就得到了明文信息。

     参考文献

    BETHENCOURT J, SAHAI A, WATERS B. Ciphertext-policy attribute-based encryption[C]

     

    展开全文
  • 云计算-多机构层次化属性基加密算法在云计算中的研究和应用.pdf
  • 因为关于policytree的分析资料比较少,所以以下是我们对charm源码中policytree和属性基加密的粗浅理解。为了表达更加清晰,通过实例进行分析,并进行实验验证。

    因为关于policytree的分析资料比较少,所以以下是我对charm源码中policytree和属性基加密的粗浅理解。有任何问题欢迎指正。

    属性基加密

    如下是维基关于属性基加密的定义。

    Attribute-based encryption is a type of public-key encryption in which the secret key of a user and the ciphertext are dependent upon attributes (e.g. the country in which they live, or the kind of subscription they have). In such a system, the decryption of a ciphertext is possible only if the set of attributes of the user key matches the attributes of the ciphertext.

    Attribute-based encryption - Wikipedia

    但这样可能仍然不够清晰,我们以paper “Ciphertext-Policy Attribute-Based Encryption” 中提出的CP-ABE方案为例。在论文摘要中,作者提出CP-ABE技术是类似于角色访问控制。

    Previous Attribute-Based Encryption systems used attributes to describe the encrypted data and built policies into user’s keys; while in our system attributes are used to describe a user’s credentials, and a party encrypting data determines a policy for who can decrypt. Thus, our methods are conceptually closer to traditional access control methods such as Role-Based Access Control (RBAC).

    根据论文,CP-ABE大致可以分为如下几个部分(详细请阅读上述论文)该算法的实现在charm的schemes的属性基加密模块。

    • S e t u p Setup Setup. The setup algorithm takes no input other than the implicit security parameter. It outputs the public parameters P K PK PK and a master
      key MK.
    • E n c r y p t ( P K , M , A ) Encrypt(PK, M, \mathbb{A}) Encrypt(PK,M,A). The encryption algorithm takes as input the public parameters PK, a message M, and an access structure A \mathbb{A} A over the universe of attributes. The algorithm will encrypt M and produce a ciphertext CT such that only a user that possesses a set of attributes that satisfies the access structure will be able to decrypt the message. We will assume that the ciphertext implicitly contains A \mathbb{A} A.
    • K e y G e n e r a t i o n ( M K , S ) Key Generation(MK, S) KeyGeneration(MK,S). The key generation algorithm takes as input the master key MK and a set of attributes S that describe the key. It outputs a private key SK.
    • D e c r y p t ( P K , C T , S K ) Decrypt(PK, CT, SK) Decrypt(PK,CT,SK). The decryption algorithm takes as input the public parameters PK, a ciphertext CT, which contains an access policy A \mathbb{A} A, and a private key SK, which is a private key for a set S of attributes. If the set S of attributes satisfies the access structure A \mathbb{A} A then the algorithm will decrypt the ciphertext and return a message M.
    • D e l e g a t e ( S K , S ~ ) Delegate(SK, \widetilde{S}) Delegate(SK,S ). The delegate algorithm takes as input a secret key SK for some set of attributes S and a set S ~ ⊆ S \widetilde{S} \subseteq S S S. It output a secret key SK for the set of attributes S ~ \widetilde{S} S .

    在加密过程中, E n c r y p t ( P K , M , A ) Encrypt(PK, M, \mathbb{A}) Encrypt(PK,M,A) 需要输入访问结构 A \mathbb{A} A(policy tree T \mathcal{T} T 便是其中一种结构),并在产生的 C T CT CT 密文中包含。而 K e y G e n e r a t i o n ( M K , S ) KeyGeneration(MK, S) KeyGeneration(MK,S) 则需要根据属性生成。解密过程 D e c r y p t ( P K , C T , S K ) Decrypt(PK, CT, SK) Decrypt(PK,CT,SK) 利用密文和私钥解开。

    例子

    为了更好地阐释如何通过这样的方式实现字段级的访问控制,我们通过一个简单的例子进行分析。考虑这样的情况,在教务系统中(education),对于数学成绩(math),老师(teacher)可以查看完整的表格如下表所示。

    number	name	score
    1		bob		99
    2		charles	98
    3		david	96
    4		emily	100
    

    而学生(student)则只能查看number字段和score字段,无法看到name字段,查看效果如下表所示,***表示密文。

    number	name	score
    1		***		99
    2		***		98
    3		***		96
    4		***		100
    

    为了实现上述的访问控制,我们的方案是,两个数据密钥dk,一个针对name字段,名为 d k n a m e dk_{name} dkname,一个针对score,为 d k s c o r e dk_{score} dkscore。而数据密钥 dk 的加密则通过属性基加密。假设 alice 是老师,我们就可以认为 alice 具有属性 teacher,而 bob 是学生,即具有student 属性。

    对于 d k n a m e dk_{name} dkname ,我们的策略(访问控制结构)应该是 “具有属性teacher 或者 既具有属性teacher 又具有属性student”,这里我们假设存在既是老师又是学生的情况(目的是为了使接下来介绍policy tree的policy更复杂些);而对于 d k s c o r e dk_{score} dkscore ,我们的策略是“具有属性teacher 或者 student”。

    结合CP-ABE方案的特点,在密文中添加访问控制结构(policy tree),用户的 SK 通过属性集 S 制定。以字段 name 为例,密文中的 policy tree 是 “具有属性teacher 或者 既具有属性teacher 又具有属性student” 。对于 alice ,SK 中包含的属性是 teacher,因此它可以通过访问控制,解开密文,而对于 bob ,SK 中包含的属性是 student,因此它不能通过访问控制,无法解开密文。

    这就是整个访问控制的过程,关于为啥用这样的形式进行访问控制,我们考虑这样的情况。假定,信息(name字段)需要传递给 n 个老师,如果采用传统的公钥算法,那么就需要用所有老师的公钥加密生成密文,也就会产生 n 份密文。这就是 CP-ABE 解决的问题。

    Bethencourt J, Sahai A, Waters B. Ciphertext-policy attribute-based encryption[C]//2007 IEEE symposium on security and privacy (SP’07). IEEE, 2007: 321-334.

    policy tree的分析

    JHUISI/charm: Charm: A Framework for Rapidly Prototyping Cryptosystems

    对于上述论文的代码实现,主要参考的是charm的schemes中的实现。在charm中 policytree 是二叉树。为了理解属性集加密的policy设置,我们把 policytree.py 从charm中单独提取出来,位置是charm/charm/toolbox/

    我们发现在prune函数中,主要调用的函数是 requiredAttributes,如下。它是一个递归的函数。主要有三种情况,一种是 AND 一种是 OR 一种是 ATTR。先从叶子节点,ATTR情况出发。当叶子节点的属性位于属性列表中时,返回 true 和树。

    OR和AND都需要得到sendthis和result。但它们得到两者的计算方式不同,参考代码即可。

    def requiredAttributes(self, tree, attrList):
        """ determines the required attributes to satisfy policy tree and returns a list of BinNode
        objects."""
        if tree == None: return 0
        Left = tree.getLeft()
        Right = tree.getRight()
        if Left: resultLeft, leftAttr = self.requiredAttributes(Left, attrList)
        if Right: resultRight, rightAttr = self.requiredAttributes(Right, attrList)
    
        if(tree.getNodeType() == OpType.OR):
            # never return both attributes, basically the first one that matches from left to right
            if resultLeft: sendThis = leftAttr
            elif resultRight: sendThis = rightAttr
            else: sendThis = None
    
            result = (resultLeft or resultRight)
            if result == False: return (False, sendThis)            
            return (True, sendThis)
        if(tree.getNodeType() == OpType.AND):
            if resultLeft and resultRight: sendThis = leftAttr + rightAttr
            elif resultLeft: sendThis = leftAttr
            elif resultRight: sendThis = rightAttr
            else: sendThis = None
    
            result = (resultLeft and resultRight)
            if result == False: return (False, sendThis)
            return (True, sendThis)
    
        elif(tree.getNodeType() == OpType.ATTR):
            if(tree.getAttribute() in attrList):
                return (True, [tree])
            else:
                return (False, None)
    
        return
    

    运行其中的测试函数,结果如下。

    Attrs in user set:  ['1', '3']
    case 1:  ((1 or 2) and (2 and 3)) , pruned:  False
    case 2:  (1 or (2 and 3)) , pruned:  [1]
    case 3:  ((1 or 2) and (4 or 3)) , pruned:  [1, 3]
    

    形成的二叉树如下。

    分析case 1,从左至右:
    (1 OR 2),1属于attrList[1, 3](即意味sendThis=1,result=1),因此sendThis=1,result=1(True);
    (2 AND 3),2不属于(即意味着sendThis=None,result=0),3属于,故sendThis=3,result=0;
    ((1 or 2) and (2 and 3)),因此sendThis=1,result=0。故返回False无法通过。

    分析case 2,从左至右:
    (2 and 3),2不属于,3属于,故sendThis=3,result=0;
    (1 or (2 and 3)),1属于,故sendThis=1,result=1。故返回 [1]。

    分析case 3,从左至右:
    (1 or 2),1属于,2不属于,故sendThis=1,result=1;
    (4 or 3),4不属于,3属于,故sendThis=3,result=1;
    ((1 or 2) and (4 or 3)),sendThis=[1,3],result=1。故返回[1,3]

    实验验证

    回到刚才那个例子,根据policytree的性质,我们对于 d k n a m e dk_{name} dkname d k s c o r e dk_{score} dkscore 的策略分别如下:
    d k n a m e dk_{name} dkname ((STUDENT and TEACHER) or TEACHER)
    d k s c o r e dk_{score} dkscore (STUDENT or TEACHER)

    通过如下代码进行实验验证,如果前面所述均正确,那么预测结果(代码注释部分)相符。

    parser = PolicyParser()
    attrs1 = ['TEACHER']
    attrs2 = ['STUDENT']
    
    tree1 = parser.parse("((STUDENT and TEACHER) or TEACHER)") # for name 
    tree2 = parser.parse("(STUDENT or TEACHER)") # for score
    
    # for teacher
    print("alice with attributes 'TEACHER':")
    print(tree1, ", pruned: ", parser.prune(tree1, attrs1)) # True
    print(tree2, ", pruned: ", parser.prune(tree2, attrs1)) # True
    
    # for student
    print("\n")
    print("bob with attributes 'STUDENT':")
    print(tree1, ", pruned: ", parser.prune(tree1, attrs2)) # False
    print(tree2, ", pruned: ", parser.prune(tree2, attrs2)) # True
    

    运行结果如下:alice的两个均通过。

    bob的则第一个无法通过。符合实验预测。

    到此就基本完成,然后最后看下,最终访问控制的效果图。对于alice而言,可以看到所有的信息。

    对于bob而言,中间的name信息则是加密的。

    展开全文
  • 属性加密技术及基于属性的访问控制技术

    千次阅读 多人点赞 2020-04-07 13:37:10
    一、属性加密技术... 1 1.1基于身份的加密体制简介... 1 1.2基于属性的加密体制的研究背景和意义... 1 1.3基于属性加密的研究现状... 2 二、基于属性的访问控制技术... 5 2.1基于属性的访问控制介绍... 5 2.2...
  • cpabe JAVA代码,Java Pairing Based Cryptography Library(jPBC) 1.2.1
  • 针对当前云计算环境下基于属性加密访问控制机制中密文存储开销随属性个数成线性增长的问题,提出了一种基于常数级密文CP-ABE(CCP-ABE)算法的访问控制机制。先用一个对称密钥加密源数据,然后用一个与门访问策略...
  • 抗密钥委托滥用的可追踪属性基加密方案.docx
  • 属性基加密和区块链结合的可信数据访问控制方案.docx
  • 针对边信道攻击引起密码系统秘密信息泄漏问题,提出抗密钥泄漏且支持属性撤销的密文策略的属性基加密方案。提出的方案具有完全安全性。基于双系统加密技术,给出的方案在标准模型下是可证安全的。该方案不仅可以抵抗...
  • 属性基加密】Ubuntu下CP-ABE库安装及调用教程详解

    千次阅读 多人点赞 2020-04-16 18:34:58
    一、前言 继续填坑。 如果想看其他有关于OpenCV学习方法介绍、学习教程、代码实战、常见报错及解决方案等...如果你想了解更多有关于计算机视觉、OpenCV、机器学习、深度学习等相关技术的内容,想与更多大佬一起沟...
  • #资源达人分享计划#
  • 基于区块链且支持验证的属性基搜索加密方案.docx
  • 通过引入属性基加密运算分割和双重加密机制,并结合多秘密共享技术进行改进,实现了移动用户数据发布和权限管理开销的大幅优化。理论和实验分析表明,所提方案在安全性、计算和网络开销等方面均能够满足移动云中的...
  • 1.公钥加密体制: 与对称密码体制相比,公钥密码体制加密密钥(公钥)和解密密钥(私钥)是不一样的,加密密钥是可以公开的,并且不会危及密码算法的安全性。其过程可以简单的表示如下图所示: 如上图所示,其...
  • 由于云存储用户数量大,成分复杂,云存储中数据的安全防护...引入代理重加密技术,针对以上问题提出一种可撤销的密文属性基加密方案,在缩短密文长度的同时实现属性撤销操作,并证明该方案在DBDH假设下CPA是安全的。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,829
精华内容 2,731
关键字:

属性基加密技术