27个版本 (5个稳定版)

2.0.0 2022年9月1日
1.1.2 2022年8月24日
1.1.1 2022年7月18日
0.8.0 2022年6月27日
0.1.1 2021年11月25日

#904 in 加密学

Download history 4/week @ 2024-03-09 8/week @ 2024-03-30 1/week @ 2024-04-06

每月94次下载

MIT/Apache

585KB
5.5K SLoC

abe_gpsw — 构建状态 最新版本

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

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

快速开始

请参阅示例代码,其中包含API的完整使用示例,并附有详细注释。

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

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

构建和测试

crate分为2个主要模块

  • core:包含GPSW的加密代码。主要入口点是engine,其使用在示例代码中有演示。
  • interfaces:包含对Cosmian有用的接口,以及用于与其他语言集成的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/libabe_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的对偶,在这种意义上,访问策略被编码到用户的密钥中,例如(A∧C)∨D,并且使用一组属性计算密文,例如{A,B}。在这个例子中,用户无法解密密文,但例如可以解密{A,C}相关的密文。例如,请参见[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 crate,这是一个来自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–14MB
~167K SLoC