zoukankan      html  css  js  c++  java
  • 多重加密里,用M个秘钥加密的信息只需要N个秘钥就可以解密(M>N),这里面的原理是什么?

    Threshold ElGamal Cryptosystem 门限EIGamal 加密详解

    以下第三部分Shamir's (k,n)-threshold scheme是核心


    1.EIGamal 加密
    详解ElGamal加密算法 | 夏冰加密软件技术博客
    2.拉格朗日插值公式
    详细解释和证明链接:

    http://www.cnblogs.com/ECJTUACM-873284962/p/6833391.html​www.cnblogs.com图标

    对于k+1个点 (x_{0},y_{0})...(x_{k},y_{k}) ,通过所有点的次数不超过k的多项式可表示为:
    L(x):=sum_{j=0}^{k}{y_{j}l_{j}(x)}
    其中: l_{j}(x):=prod_{i=0,i
e j}^{k}frac{x-x_{i}}{x_{j}-x_{i}}

    3. Shamir's (k,n)-threshold scheme
    1)假设s是需要k个节点共同解密的信息, sin Z_{p} p为素数。
    2)随机选择一个多项式 f(x)=f_{0}+f_{1}x+f_{2}x^{2}+...+f_{k-1}x^{k-1}
    此多项式满足 f(0)=s
    即:

    • 随机选择 f_{1},...,f_{k-1}in Z_{p}
    • f_{0}leftarrow s

    3)对于 i in [1,n] , 第i个参与节点的密钥为 s_{i}=(i,f(i))这个密钥相当于拉格朗日差值公式中的取值点 (x_{i},y_{i})
    4)消息s可以被任意的k个节点共同解密,解密方法如下:
    f(x)=sum_{i=1}^{k}{f(i)}prod_{j=1,j
e i}^{k}frac{x-j}{i -j} (mod  p)
    s=f(0)=sum_{i=1}^{k}{f(i)}prod_{j=1,j
e i}^{k}frac{j}{j-i} (mod  p)

    4.Threshold EIGamal Cryptosystem
    1)参数设置:
    GZ_{p}^{*} 的循环子群,阶数为 qpq 均为大素数,并且 p=2q+1 , gG 生成元,共有 omega 个节点 P_{1},P_{2},...,P_{omega} 来合作管理门限 ELGamal 密文。
    2)如通常EIGamal加密一样,每个节点 P_{i} 都有一个私钥 x_{i} in Z_{q} , 公布 P_{i} 公钥 y_{i}=g^{x_{i}}  mod  p , EIGamal门限加密系统的加密公钥为 y=prod_{i=1}^{omega}y_{i}  mod  p ,私钥 s=x_{1}+x_{2}...+x_omega
    3)使用公钥y加密消息m, 得到的EIGamal 密文对为 (g^r,my^{r}) ,想要解密就需要知道私钥s,也就是需要知道每一个节点的私钥 x_{i} 然后求和,但这就需要所有节点全部参与,为了达到 omega 个节点中 t 个节点在一起就可以实现解密”,每个节点 P_{i} 都需要通过 Shamir's threshold scheme 向其他向其它节点分享自己的私钥 x_{i} , 当 omega 个节点中t个节点“凑”在一起时,就能解密得到每一个 x_{i} 的值,从而恢复出私钥 s

    • P_{i} 首先构造一个多项式(步骤如同 Shamir's threshold scheme) F_i(x)=sum_{k=0}^{t-1}{f_{i,k}x^{k}}  mod  q

    其中 f_{i,0}=x_{i}

    • 节点P_{i} 向其它节点 j , j=1,2,...,i-1,i+1,i+2,...omega 发放他们的密钥d_{i,j}=(j,F_{i}(j))此消息使用 P_{j} 的公钥加密。
    • omega 个节点中t个节点“凑”在一起时,就可以解密 x_{i}

    x_{i}=F_{i}(0)=sum_{j=1}^{t}{F_{i}(j)}prod_{k=1,k
e j}^{t}frac{k}{k-j} (mod  p)
    因此
    s=sum_{i=1}^{w}{x_i}=sum_{i=1}^{w}F_{i}(0)=sum_{i=1}^{w}sum_{j=1}^{t}{F_{i}(j)}prod_{k=1,k
e i}^{t}frac{k}{k-j} (mod  p)
    把公式稍微变换一下
    s=sum_{i=1}^{w}{x_i}=sum_{i=1}^{w}F_{i}(0)=sum_{j=1}^{t}sum_{i=1}^{w}{F_{i}(j)}prod_{k=1,j
e i}^{t}frac{k}{k-j} (mod  p)

    d_{j}=sum_{i=1}^{w}{F_{i}(j)}  (mod  q)u_{j}=prod_{k=1,j
e i}^{t}frac{k}{k-j}
    可得 s=sum_{j=1}^{t}d_{j}cdot u_{j}  ( mod  q)


    d_{j} 可理解为节点 P_{j} 收到的“私钥分享总和”, P_{j} 解密部分为 s_{j}=g^{rd_{j}}  mod  p
    m=frac{my^r}{g^{rs}}=frac{my^r}{g^{rsum_{j=1}^{t}d_{j}cdot u_{j}}}=frac{my^r}{prod_{j=1}^{t}g^{rd_{j}cdot u_{j}}}=frac{my^r}{prod_{j=1}^{t}s_{j}^{u_{j}}}  (mod  p)

  • 相关阅读:
    自解压命令学习
    浅谈JAVA中的final修饰符
    clearfix清除浮动进化史
    HTML5本地存储Localstorage
    Log4j详细使用教程
    AutoCompleteTextView与MultiAutoCompleteTextView应用
    冒泡排序
    方法的递归
    枚举类型
    ThinkJs笔记琐碎
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13312742.html
Copyright © 2011-2022 走看看