基于属性的加密(ABE)根据属性加密消息,无需关注接收者的身份,只有符合属性要求的用户才能解密密文,保证了数据的机密性。此外,ABE中的用户密钥与随机多项式或随机数相关,不同用户的密钥无法联合,可以防止用户合谋攻击
根据嵌入的对象不同,ABE可划分为KP-ABE、CP-ABE
与传统公钥密码相比
一个数据拥有者需要将一份明文文件,加密发送给N个不同的用户,倘若使用传统公钥加密算法,数据拥有者需要首先保存这N个用户的公钥,利用这N个不同公钥,使用该份明文文件,加密N次,形成N份不同的密文,分别发送给这个N个用户
若使用ABE来完成这项任务则会轻松很多。数据拥有者只需要制定一条仅有这N个用户才能满足的访问策略,接着输入公共参数PP、该条策略以及明文文件至ABE加密算法,进行加密一次,形成唯一一份密文。得到密文后,数据拥有者将该份密文分别发送给这N个不同用户。如果用户所拥有的属性能满足这个访问策略,那就能解开密文得到明文
CP-ABE
在基于密文策略的属性加密(CP-ABE)中,用户的私钥与一组属性相关联,并且密文指定了系统中已定义的属性范围上的访问策略。当且仅当用户的属性满足相应密文的策略时,用户才可以解密密文。可以使用与、或、(k,n)门限(至少存在n个属性中的k个)为属性定义策略。
例如,假设属性的范围定义为{A,B,C,D},并且用户1接收到属性{A,B}的密钥,而用户2接收到属性{D}的密钥。如果根据策略(A & C) | D对密文进行加密,那么用户2将能够解密,而用户1将无法解密。
访问结构
在CP-ABE中,各参与方的角色由属性决定,因此规定了一种访问结构来表达授权的属性集合。在访问结构中的集合就是授权集,相反,不在访问结构中的集合就是非授权集。
通常,可以使用树型结构来表达访问结构,树的内部结点表示与、或、(k, n)门限操作,叶子结点表示属性。我们可以把上述的树型结构称为访问树。如果使用 num(x) 表示结点 x 的孩子结点数目,k(x) 表示x的门限值,则有 0 < k(x) <= num(x)。当 k(x)=1,就是或门,当k(x)=num(x),就是与门。每一个叶子结点代表一个属性,并且门限k(x)=1。
有了访问树之后,可以使用如下方法来判断用户属性是否满足访问树。使用 T(r) 表示一棵访问树,T(x) 表示以 x 为根结点的子树。当属性集合 s 满足 T(x) 时,我们将其标记为 T(x, s)=1。通过迭代的方式对T(x, s)进行计算。如果 x 是非叶子结点,计算 x 的所有孩子结点,当 k(x)=1时,T(x, s)=1。如果 x 是叶子结点,当att(x)属于s时,T(x, s)=1
算法的基本流程
- Setup:只接受隐式的安全参数作为输入。输出公共参数 PK 和主密钥 MK 。
- Encrypt(PK, M, A):输入 PK, 消息 M 和访问结构 A, 对 M 进行加密,产生密文 CT。
- Key Generation(MK, S):输入主密钥 MK 和描述密钥的属性集合 S, 输出私钥 SK。其中,SK 由属性来确定。
- Decrypt(PK, CT, SK):输入公共参数 PK、包含访问结构 A 的密文 CT,以及私钥 SK。注意这里的私钥由属性集合 S 生成。如果 S 能够满足 A,则对 CT 进行解密并返回消息 M。
KP-ABE
在基于密钥策略的属性加密系统(KP-ABE ),密钥对应于一个访问控制,而密文对应于一个属性集合,解密当且仅当属性集合中的属性能够满足此访问结构。
这种设计比较接近静态场景,此时密文用与其相关的属性加密存放在服务器上,当允许用户得到某些消息时,就分配一个特定的访问结构给用户。
KP-ABE流程
- Setup:只接受隐式的安全参数作为输入。输出公共参数 PK 和主密钥 MK 。
- Encrypt(PK, M, A):输入 PK, 消息 M 和一组属性S, 对 M 进行加密,产生密文 CT。
- Key Generation(MK, S):输入主密钥 MK 和访问结构A, 输出私钥 SK。
- Decrypt(PK, CT, SK):输入公共参数 PK、包含属性S加密的密文 CT,以及私钥 SK。如果S能满足A,则对 CT 进行解密并返回消息 M。