2个稳定版本

2.0.3 2022年10月14日
2.0.2 2022年10月10日

#1872 in 加密学

MIT/Apache

595KB
5.5K SLoC

abe_gpsw   构建状态 最新版本

本软件包提供了一种基于Vipul Goyal、Omkant Pandey、Amit Sahai和 Brent Waters 编写的《基于属性的加密:用于加密数据的细粒度访问控制》的基于密钥策略的属性加密实现。

实现使用BLS12-381椭圆曲线进行配对。

快速开始

请参阅包含详细注释的API完整使用的示例代码

使用以下命令作为测试运行它

cargo test core::demo::abe -- --nocapture`

构建和测试

该软件包分为2个主要模块

  • core:包含GPSW的加密代码。主入口点是engine,其用法在示例代码中演示。
  • interfaces:包含用于与crypto_base匹配的有用的接口,以及用于与其他语言集成的Foreign Function Interface (FFI)。特别是,该模块中的代码演示了涉及ABE和AES的混合加密的使用,并将其作为FFI公开。

要仅构建核心,请运行

cargo build --release

要构建不包含FFI的Cosmian接口,请传递interfaces功能标志,即

cargo build --release --features interfaces

要构建包括FFI在内的所有内容,请传递ffi功能标志,或使用--all-features,例如:

cargo build --release --all-features

后者将构建共享库,可以使用(Linux)来验证FFI符号的存在:

objdump -T  target/release/libcosmian_abe_gpsw.so

代码包含许多测试,您可以使用以下方式运行:

cargo test --release --all-features

为不同的glibc构建库

转到构建目录,查看如何为GLIBC 2.17构建的示例

基准测试

基准测试使用Criterion库。

运行所有基准测试

cargo bench --all-features

注意:不幸的是,我们无法自动让Criterion在ffi功能激活的情况下运行基准测试,我们需要指定它。

仅运行非FFI基准测试

cargo bench --features interfaces

火焰图

要在Criterion的基准测试上生成火焰图

cargo flamegraph --bench benches --features ffi -- --bench

关于此存储库的加密学简介

在标准公钥加密方案中,每个用户都有自己的公钥和私钥,因此如果一个人想加密一个为多个接收者(例如,根据他们在公司中的工作)的消息,将需要为每个接收者的每个公钥计算密文,这会导致时间和空间的大量损失。

虽然公钥加密被广泛使用,并且在许多应用中都有很大兴趣,但在这种“一对一多”场景中存在局限性。

有人可能会认为,在所有合法接收者之间共享一个共同密钥的简单解决方案将是足够的。然而,情况并非如此,主要是因为在“一对一多”通信中的安全概念需要扩展以满足实际需求。因此,如果所有接收者之间共享一个共同密钥,那么其中任何一个接收者都可以将其交给对手。结果,一方面,整个系统的机密性被完全破坏;另一方面,我们不知道秘密泄露的源头是谁,我们无法检测和排除这个源头。

最近开发了一些新方案来解决加密数据旨在为多个用户的情况。

基于属性的加密 (ABE)

基于属性的加密(ABE)是一种相对较新的方法,旨在解决访问控制和“一对一多”通信和存储问题。ABE将身份定义为属性集,例如角色。这样,现在可以按照一组属性或策略(密钥策略密文策略)定义的子集对消息进行加密。

第一个ABE方案是在模糊身份加密中形式化的,其特点是只有持有“匹配属性”密钥的用户才能解密密文,用户密钥始终由某个受信任的实体颁发。

ABE方案的一些特定之处在于

  • 这些系统允许使用多个私钥与单个公钥一起使用(因此原始标题中的“模糊”,表示“模糊匹配”,在计算机科学领域中意味着近似匹配)。
  • 其次,私钥是由属性列表(或策略)构建的,而不是由身份构建的。任何拥有所有属性(或有效的访问策略)的人都可以阅读消息。

img

密文策略

在密文策略属性基于加密(CP-ABE)中,访问策略编码在加密消息中;密文指定了系统内定义的属性宇宙上的访问策略。用户的私钥与一组属性相关联,这对应于用户的身份:用户将能够解密密文,如果且仅当他的属性满足相应密文的策略。例如,参见BSW07

密钥策略

KP-ABE是CP-ABE的对偶,在这种意义上,访问策略被编码到用户的密钥中,例如(𝐴∧𝐶)∨𝐷,密文是根据一组属性计算的,例如{𝐴,𝐵}。在这个例子中,用户无法解密密文,但可以解密与{𝐴,𝐶}相关的密文。例如,参见[GPSW06]。

策略

GPSW中的策略使用单调访问结构。

为了使策略更易于用户使用,Cosmian在用户表达策略的方式和GPSW中实际使用的属性值之间实现了间接引用。

从用户的角度来看,整体策略被表示为一系列策略轴。每个轴可以可选地标记为分层,并包含该轴可能的值的枚举。对于分层的轴,属性必须按升序提供。

例如,策略

[
    "Security Level": {
        "hierarchical": true,
        "attributes": ["low","medium","high"]
    },
    "Department": {
        "hierarchical": false,
        "attributes": ["HR","FIN","MKG","R&D"]
    }
]

定义了2个轴 Security LevelDepartment

在这里,轴的使用可以处理编码为CNF公式的访问策略。

Department轴不同,Security Level轴是分层的:拥有具有属性Security Level::high的密钥的用户将能够访问加密了任何Security Level属性的数据的访问权限。

所有唯一的属性名称(如上例中的7个)是通过连接轴名称和该轴的可能值派生出来的,并且分配了一个唯一的属性值

属性名称
Department::HR 1
Department::FIN 2
Department::MKG 3
Department::R&D 4
Security Level::low 5
Security Level::medium 6
Security Level::high 7

从主密钥中派生出一个用于营销部门(MKG)用户且安全级别为medium的解密密钥,该密钥将持有以下布尔表达式的访问策略

"Department::MKG && ( Security Level::medium || Security Level::low )"

最后,由于属性名称映射到属性值,上述策略在GPSW中翻译为

3 & ( 6 | 5 )

BLS12-381:友好的配对椭圆曲线

此KP-ABE实现基于cosmian_bls12_381库,这是一个来自BLS系列的配对友好椭圆曲线构造,嵌入度为12。它是在381位素域GF(p)上构建的...

  • z = -0xd201000000010000
  • p = (z - 1)2(z4 - z2 + 1) / 3 + z
    • = 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab
  • q = z4 - z2 + 1
    • = 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001

...产生两个源组 G1 和 G2,每个组的阶为255位素数 q,使得一个有效的非退化双线性配对函数 e 存在于第三个目标组 GT 中。具体来说,G1 是 E(Fp) : y2 = x3 + 4 的 q阶子群,G2 是 E'(Fp2) : y2 = x3 + 4(u + 1) 的 q阶子群,其中扩展域 Fp2 定义为 Fp(u) / (u2 + 1)。

BLS12-381 被选择,使得 z 具有较小的汉明权重(以提高配对性能),并且使得 GF(q) 具有大的 232 原始单位根,以便执行基-2 快速傅里叶变换,进行高效的多点评估和插值。同时,它还被选择存在于 BLS12 曲线的特别高效和刚性的子族中。

依赖项

~6–15MB
~167K SLoC