第十九个知识点:Shamir密钥交换场景

Shamir密钥交换场景是一个被Adi Shamir提出的算法.算法允许多方分割一个密码,例如一个密钥.当足够多的秘密结合起来,整个密钥就被计算出来了.

正式的说,如果我们有秘密\(S\)和\(n\)方,我们能把\(S\)划分成\(n\)方.然后把它们分发给不同的组织.通过这样发送的密钥有一个限定值\(k\),如果密钥\(S\)的\(k\)数量的部分被收集到,那么就可以计算出\(S\).如果\(k-1\)或者更少的密钥被收集,那么\(S\)将无法被计算.这个场景就叫做(\(k,n\))限定场景.

解释为什么场景能够被这样构造的最好方式就是通过一个例子.假设我们想要把分割秘密\(S = 1425\).分割成5部分(\(n = 5\)).同时需要3方才能允许密钥(\(S\))被计算出来.首先我们构造一个多项式\(f(x)\).它的阶为(\(k-1 = 2\)).系数是随机的.假如说是\(a_1 = 64, a_2 = 112\).和一个常数\(S\).

\[f(x) = S + a_1x + a_2x^2 = 1425 + 64x + 112x^2
\]

从这个多项式中我们可以看到,我们可以构造5个点.这些点分发给不同的组织.

\[P_0=(1,1601),P_1=(2,2001),P_2=(3,2625),P_3=(4,3473),P_4=(5,4545)
\]

如果我们假设我们知道5个点中的3个点.我们能够计算出这个多项式的系数.通过3个三元一次多项式.

就上面的例子来看,这个方法工作的很好.但是,窃听者也能够收集更多关于秘密的信息.因为上面我们已经工作在一个有理数的算数.然而,如果我们在有限域内工作(因此秘密和多项式是在q大小的域上定义的),那么如果任何两个或更少的参与方走到一起,他们对秘密一无所知。

这是因为这样的两方假如说组织一和组织二,然后密钥的值S来源于这个域.那么就有一个总有一个在这个多项式域中定义的值:(0,S'), (2,2001 mod q) and (3,2625 mod q).

[1] - http://en.wikipedia.org/wiki/Polynomial

[2] - http://en.wikipedia.org/wiki/Lagrange_polynomial

[3] - http://en.wikipedia.org/wiki/Shamir%27s_Secret_Sharing

最新文章

  1. Leetcode 345 Reverse Vowels of a String 字符串处理
  2. [php]php数组函数的相关
  3. 【PHP】解决html网页乱码问题
  4. REST和SOAP Web Service的比较
  5. java中关于窗体居中显示问题
  6. android设置eclipse中的自动提示功能
  7. Steps UVA 846
  8. ActiveMQ消息队列用法
  9. 【转】fread函数详解
  10. bzoj 2038 小z的袜子 莫队
  11. Web前端-Vue.js必备框架(四)
  12. JS数据交换的三种方式
  13. python多线程、多进程相关知识
  14. php 变量定义方法
  15. 关于<button> 没写 type='button' 导致点击时提交以及<button>和<input type="button">的区别
  16. 创建自己的区块链游戏SLOT——以太坊代币(三)
  17. [leetcode-748-Largest Number At Least Twice of Others]
  18. hadoop07---synchronized,lock
  19. python与桶排序
  20. Nuske vs Phantom Thnook

热门文章

  1. ssm框架整合 — 更新完毕
  2. tensoboard [Errno 22] Invalid argument 以及 Invalid format string问题解决
  3. Redis - 1 - linux中使用docker-compose安装Redis - 更新完毕
  4. Hadoop RPC通信
  5. 100个Shell脚本——【脚本9】统计ip
  6. 利用unordered_map维护关联数据
  7. javaAPI2
  8. Spring的事务传播机制(通俗易懂)
  9. Linux学习 - 关机重启退出命令
  10. Vue.js 学习