循环群和RSA累加器

累加器的成员证明

成员证明

给定一个集合 s = { x 1 , x 2 , x 3 , . . . , x n } s=\{x_1,x_2,x_3,...,x_n\} s={x1,x2,x3,...,xn},该集合的累加值为 a = g δ a=g^{\delta} a=gδ δ = H ( x 1 ) H ( x 2 ) H ( x 3 ) ⋅ ⋅ ⋅ H ( x n ) \delta=H(x_1)H(x_2)H(x_3)\cdot\cdot\cdot H(x_n) δ=H(x1)H(x2)H(x3)H(xn),我们要证明一个值 x x x 是包含在集合 s s s 中,只需要提供两个元素:一个是目标元素 x x x 本身,另一个是 a ′ = g δ ′ a'=g^{\delta'} a=gδ, δ ′ \delta' δ 是集合中所有非 x x x 元素的 hash value 的累乘法。那么这里的 proof 即为 ( { a ′ , x } ) (\{a',x\}) ({a,x}),验证过程为: a ′ H ( x ) = ? a a'^{H(x)}\overset{?}{=}a aH(x)=?a

非成员证明

我们怎么证明元素 x x x 并不在集合 s = { x 1 , x 2 , x 3 , . . . , x n } s=\{x_1,x_2,x_3,...,x_n\} s={x1,x2,x3,...,xn} 中呢? H ( x ) H(x) H(x) 是将 x x x 元素映射到唯一对应的素数,那么我只需要证明 H ( x ) H(x) H(x) 与集合内的所有元素互素(素数与除自己以外的所有其他素数互素,那么就可以进一步转化到问题:证明 x x x 不属于集合 s s s 中的元素,只需要证明 x x x 与所有 δ = H ( x 1 ) H ( x 2 ) H ( x 3 ) ⋅ ⋅ ⋅ H ( x n ) \delta=H(x_1)H(x_2)H(x_3)\cdot\cdot\cdot H(x_n) δ=H(x1)H(x2)H(x3)H(xn) 互素。

在数论中,有一个很重要的定理,整数 a a a b b b 互素的充要条件是存在整数 s s s t t t 使得 s a + t b = 1 sa+tb=1 sa+tb=1,计算 ( s , t ) (s,t) (s,t) 这两个元素可以通过扩展欧几里得除法高效地算出来。那么利用这一定理,我们可以将不在成员证明通过这个式子验证: h H ( x ) a t = ? g h^{H(x)}a^t\overset{?}{=}g hH(x)at=?g,其中 h = g s , a = g δ h=g^s, a=g^\delta h=gs,a=gδ

基于循环群的成员证明和非成员证明的计算复杂度都是 O ( 1 ) O(1) O(1)

隐藏群的阶

基于循环群的累加器需要隐藏群的阶数,如果群的阶是公开的,那么累加器将变得不安全

如果一个集合 s s s 的累加值是 h h h,那么我们想伪造一个不属于集合的元素 x x x 的成员证明,我们只需要找到一个 f f f,使得 f x = h f^x=h fx=h f f f 值可以通过如下计算: f = h x − 1 f=h^{x^{-1}} f=hx1,由于 x ⋅ x − 1 m o d    q = 1 x\cdot x^{-1} \mathrm{mod\; q} =1 xx1modq=1。那么问题就落在如何求得 x x x 的逆元 x − 1 m o d    q x^{-1} \mathrm{mod\; q} x1modq
( f x ) x − 1 m o d    q = h x − 1 m o d    q ({f^{x}})^{x^{-1}} \mathrm{mod \;q} =h^{x^{-1}} \mathrm{mod\;q} (fx)x1modq=hx1modq
在数论中,我们需要使用扩展欧几里得除法,找到 a a a b b b,使得 a ⋅ x + b ⋅ q = 1 a⋅x+b⋅q=1 ax+bq=1,那么这个 a a a 就是 x x x 的逆元。

那么我们在使用基于循环群的累加器时,就必须要隐藏群的阶,那么如何生成隐藏群阶的循环群呢?

RSA累加器

我们生成一个基于 RSA 构造的循环群(真子群),给定私钥两个大素数 ( p , q ) (p,q) (p,q),计算公钥 n = p ∗ q n=p*q n=pq,素数生成元 g g g ( p , q , g ) (p,q,g) (p,q,g) 三个数两两互素,则 { g i m o d    n } , i ∈ Z \{g^i \mathrm{mod\; n}\}, i \in Z {gimodn},iZ 构成一个循环群,在仅公开 n n n 的情况下,我们并不知道这个循环群的阶是多少,这就可以隐藏群的阶。但是基于 RSA 的循环群的生成,需要 trusted setup,也就是参数 n n n 必须要一个可信第三方生成,如果私钥 p p p q q q 遭到了泄露,累加器将不再安全。

我们凝练上述的伪造成员证明方法:给定一个群元素 h h h,只要找到一个群元素 f f f 和一个素数 x x x 是的 f x = h f^x=h fx=h

这里我们需要使用到欧拉函数 ϕ ( n ) = ( p − 1 ) ( q − 1 ) \phi(n)=(p-1)(q-1) ϕ(n)=(p1)(q1) ϕ ( n ) \phi(n) ϕ(n) 是值小于或等于 n n n 的正整数与 n n n 互素的个数。且,如果正整数 a a a 和正整数 m m m 互素,那么 a ϕ ( m ) ≡ 1 m o d    m a^{\phi(m)}\equiv 1\mathrm{mod \; m} aϕ(m)1modm

我们可以找到一个三元组 ( k , x , z ) (k,x,z) (k,x,z) 使得 k ϕ ( n ) + 1 = x z k\phi(n)+1=xz kϕ(n)+1=xz,我们可以得到伪造非成员 x x x 的证明: ( f = h z , x ) (f=h^z,x) (f=hz,x),那么我们有 f x = h x z = h ϕ ( n ) + 1 = h    m o d    n f^x=h^{xz}=h^{\phi(n)+1}=h\mathrm{\;mod \;n} fx=hxz=hϕ(n)+1=hmodn

strong RSA assumption
Cryptographic Accumulator 密码学累加器 – 区块链中的成员证明与非成员证明

  • 21
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值