Skip to content

基于属性加密

基于身份IBE

  • 特点: 和CA相比,没有配置证书链的繁琐
  • 缺点: 私钥生成中心KGC掌握所有私钥

Boneh-Franklin IBE

  1. Setup

    • 选择双线性映射的两个群和映射、随机数、哈希函数:
    • pp:(G,GT,e,H)
    • 主私钥: msk=a
  2. KeyGen(ID,msk)skID

    • skID=H(ID)a 为了简化表达,视作 skID=gab,这里假设 H(ID)=gb
  3. Encrypt(m,ID,pp)C

    • 选择随机数 cZp
    • 计算 C=(C1,C2)=(gc,me(H(ID),g)c)
  4. Decrypt(C,skID)m

    • 计算 m=C2/e(skID,C1)
    • e(skID,C1)=e(gab,gc)=e(g,g)abc=e(H(ID),g)c
  5. 方案流程

IBE-多对私钥 (BF-IBE2)

  1. Setup

    • 选择双线性映射的两个群和映射、随机数、哈希函数:
    • pp:(G,GT,e,H)
    • 主私钥: msk=a
  2. KeyGen(ID,msk)skID

    • 选择随机数 rZp
    • skID=(d1,d2)=(gaH(ID)r,gr)=e(ga+br,gr)
  3. Encrypt(m,ID,pp)C

    • 选择随机数 cZp
    • 计算 C=(C0,C1,C2)=(e(g,g)acm,gc,H(ID)c)
  4. Decrypt(C,skID)m

    • m=C0/e(d1,c1)ed2,c2
    • e(d1,c1)=e(ga+br,gc)=e(g,g)ac+bcr
    • e(d2,c2)=e(gr,H(ID)c)=e(g,g)bcr
    • e(d1,c1)ed2,c2=e(g,g)ac
    • m=C0/e(g,g)ac
  5. 这个方案不满足不可区分性

    • 假设有 ID1,ID2,以及对应密文 C1,C2
    • 由于密文 C? 中存在 c2=gb?c, c1=gc 已知
    • 同时可根据 H(ID)?=gb? 导出 gb?
    • 故而可以构造:e(g,gb?c)==e(gb?,gc) 来判断密文是发送给哪个 ID

FIBE(Fuzzy IBE)

Fuzzy IBE 是基于属性的加密的一种特殊形式,用户的私钥和密文都与一组属性相关联。只有当用户的属性集合与密文的属性集合满足一定的重叠条件时,用户才能成功解密密文。

以下是基于 Sahai-Waters 方案的构造(阈值 d,表示至少需要 d 个匹配属性才能解密):

  1. Setup(λ,d)

    • 选择双线性映射群 G,GT 阶为素数 q,生成元 gG
    • 随机选择主密钥 yZq
    • 对于属性全集 U 中的每个属性 i,选择随机数 tiZq,计算 Ti=gti
    • 公开参数: pp=(g,Y=e(g,g)y,{Ti}iU)
    • 主私钥: msk=(y,{ti}iU)
  2. KeyGen(ω,msk)skω

    • 输入用户属性集合 ω (|ω|d),可以简单理解为一个 vector<string>
    • 构造一个 d1 次多项式 q(x),使得常数项 q(0)=y,其余系数随机
    • 对于每个属性 iω,计算私钥组件:Di=gq(H(i))ti其中 H(i) 将属性映射为 Zq 中的元素
    • 私钥: skω={Di}iω
  3. Encrypt(ω,m,pp)C

    • 输入目标属性集合 ω
    • 选择随机数 sZq
    • 计算密文组件(对于每个 iω):Ci=Tis=gtis
    • 计算加密密钥 K=Ys=e(g,g)ys
    • 使用 K 加密消息 m(例如 C=mKDF(K)
    • 密文: C=(ω,{Ci}iω,C)
  4. Decrypt(C,skω)m

    • 计算属性交集 S=ωω
    • 如果 |S|<d,解密失败
    • 选择 S 的一个子集 IS,使得 |I|=d
    • 对于 iI,计算配对:e(Ci,Di)=e(gtis,gq(H(i))ti)=e(g,g)sq(H(i))
    • 利用拉格朗日插值系数 Δi,I(x)x=0 处恢复 e(g,g)syiIe(Ci,Di)Δi,I(0)=e(g,g)siIq(H(i))Δi,I(0)=e(g,g)sq(0)=e(g,g)sy
    • 使用恢复的密钥 K 解密消息