在nodejs上实现GKE + P组密钥协议协议

时间:2018-12-28 14:09:58

标签: node.js key libsodium

我尝试实现由Michel Abdalla,CélineChevalier,Mark Manulis和David Pointcheval发表的论文具有子组密钥按需计算的灵活组密钥交换中提出的GKE + P协议(在{ {3}}(在2010年)上。

协议所说的是:

假设我们有一个参与者参加一个 $ n $ 大小的循环 $ U =(U_1,U_2,.. .U_n)$

  1. 每个参与者 $ U_i $ 选择一个 $ x_i $ 并计算 $ y_i = g ^ x_i $ 并广播 $(U_i,x_i)$
  2. 接收后,将计算以下内容:
    1. $ \ text {sid} _i =(U_1 | y_1,\ ldots,U_n | y_n)$
    2. $ k'_ {i-1} = y_ {i-1} ^ {x_i} $ $ k'_ {i + 1} = y_ {i + 1} ^ {x_i} $
    3. $ z'_ {i,i-1} = H(k'_ {i-1},\ text {sid} _i)$ 和< span class =“ math-container”> $ z'_ {i + 1,i} = H(k'_ {i + 1},\ text {sid} _i)$
    4. $ z_i = XOR(z'_ {i-1},z'_ {i + 1})$
    5. $ \ sigma_i =符号(\ text {SIGN_KEY} _i,(U_i,z_i,sid_i))$
    6. 广播: $ U_i,z_i,sid_i $
  3. 组密钥计算

    如果 $ XOR(z_1,z_2,...,z_n)=== 0 $ && $ \ text {is_valid}(\ sigma_i)$ 然后

    对于[i,i-n + 1]中的j:

     $z'_{j,j+1} = XOR(z'_{j_j-1},z'_{j})$
    

    endfor

    fi

    最后一个键为: $ k_i = H_g(z'_ {1,2},\ ldots,z'_ {n,1},sid_i)$ < / span>

还提到了P2P阶段:

  1. $ k'_ {i,j} = y_i ^ {x_i} $
  2. $ k'_ {i,j} = H p(k_ {i,j},U_i | y_i,U_j | y_j)。$

因此,当涉及在我的node.js XMPP客户端代码上进行实际开发时,一些问题已经解决:

  1. 我可以在每个客户端上使sid为动态生成的字符串吗?
  2. 存储每个 $ z'$ 以便进行良好遍历的最佳方法是什么?
  3. 建议使用libsodium库中的crypto_scalarmult_base函数代替正常的DH(提高功率)?

0 个答案:

没有答案