0


安全多方计算 - Shamir秘密分享方案

安全多方计算 - Shamir秘密分享方案

概述

秘密共享 (Secret Sharing) 是一种用于保护敏感数据(如加密密钥)的技术。它将一个秘密分成多个部分,并将这些部分分发给多个参与者。只有当各个部分组合到一起时,才能恢复原始的秘密。它将风险在多方之间分散,从而提高了系统的安全性。

早在秦朝就有秦阳陵虎符:“甲兵之符,右在皇帝,左在阳陵”。只有"合符"无间才可调拨军队。这可谓古人的一大智慧,也可以看作是一种秘密共享的实践。

但这里的秘密共享要求所有参与者合作才能恢复原始的秘密(虎符),如果任意一个参与方将自己的秘密份额丢失或损坏,就再也无法恢复原始秘密。

门限秘密共享

什么是门限秘密共享

门限秘密共享是一种密码学技术,将秘密

  1. S
  2. S
  3. S 分割为
  4. n
  5. n
  6. n 个部分,并将这些部分分发给
  7. n
  8. n
  9. n 个参与者。所谓门限,是在分割这些秘密的时候,设置一个大小位于 1
  10. n
  11. n
  12. n 之间的
  13. k
  14. k
  15. k 值,使得给定任意
  16. k
  17. 1
  18. k - 1
  19. k1 个或更少的秘密份额,都不能够计算得到秘密
  20. S
  21. S
  22. S 的任何信息;当给定任意
  23. k
  24. k
  25. k 个或更多的秘密份额的时候,就能够计算得到秘密
  26. S
  27. S
  28. S。这被称为
  29. (
  30. k
  31. ,
  32. n
  33. )
  34. (k, n)
  35. (k,n) 门限秘密共享方案。这意味着这
  36. n
  37. n
  38. n 个参与者中最多
  39. k
  40. 1
  41. k - 1
  42. k1 个参与者泄露了他们的秘密份额,秘密
  43. S
  44. S
  45. S 仍然是安全的。

secret share

直观理解

想象一下,秘密

  1. S
  2. S
  3. S 是一个藏宝箱的密码。我们不希望单个参与者独自打开藏宝箱,因此我们可以构造方案将密码分成多个部分分给参与方,只有当至少 2 个参与者合作时,他们才能拼凑出完整的密码并打开藏宝箱。同时即便有个别秘密份额丢失或被盗,剩下的参与方依然可以重构秘密。

为了更具体地说明这一点,我们来看一个例子:

假设我们有一个秘密值

  1. S
  2. =
  3. 2
  4. S = 2
  5. S=2,我希望将这个秘密值分享给 4 个参与者,并且要求至少 2 个参与者才能恢复出秘密值。现在将这个秘密值作为y轴上的一个点的纵坐标,绘制一条穿过点(02)的随机直线。然后随机取4 x 坐标值 3567 作为4名参与者的 id,并计算这些 id 对应的直线上点的纵坐标值,分配给 4 名参与者。例如,参与者 3 得到的秘密份额 s3。每个参与者只知道自己的 id 和对应的秘密份额。

secret-share-line-theory1

4 个参与者有了秘密份额,接下来就应该考虑使用秘密份额恢复秘密了。任意一个参与者单独都无法恢复出来秘密值,因为单独一份秘密份额相当于只有坐标系上的一个点,无法确定秘密份额生成的时候选择了哪条线。这也意味着不知道这条线与 y 轴相交的位置。

secret-share-line-theory2

当有两个或更多参与者提供秘密份额时,相当于坐标系中有多个点存在,就能够绘制出这条直线。这条直线与 y 轴的交点,就是原来的秘密值。

以上是对门限秘密共享的基本概念和直观理解的展示。接下来我们会详细讨论 Shamir 秘密共享方法,它是最经典和广泛使用的门限秘密共享技术之一。

Shamir秘密共享

Shamir秘密共享是一种门限秘密共享方案。

秘密分享

Shamir秘密共享方案基于拉格朗日多项式插值原理。它将秘密

  1. S
  2. S
  3. S 分成
  4. n
  5. n
  6. n 个部分,每个参与者得到的部分都是秘密
  7. S
  8. S
  9. S 的一个多项式的值。只有当至少
  10. k
  11. k
  12. k 个参与者合作时,才能恢复原始的秘密
  13. S
  14. S
  15. S

具体来说,多项式上的

  1. k
  2. k
  3. k 个点能够唯一确定小于或等于
  4. k
  5. 1
  6. k-1
  7. k1 次的多项式。2 个点足以定义一条线,3 个点足以定义一条抛物线,4 个点足以定义一条立方曲线,依此类推。

假设秘密数据

  1. S
  2. S
  3. S 是一个数字,为了把它分成不同份额
  4. S
  5. i
  6. S_i
  7. Si​,选择一个随机
  8. k
  9. 1
  10. k-1
  11. k1 次多项式。多项式的一般形式为
  12. f
  13. (
  14. x
  15. )
  16. =
  17. a
  18. 0
  19. +
  20. a
  21. 1
  22. x
  23. +
  24. a
  25. 2
  26. x
  27. 2
  28. +
  29. +
  30. a
  31. k
  32. 1
  33. x
  34. k
  35. 1
  36. f(x) = a_0 + a_1x + a_2x^2 + ··· + a_{k-1}x^{k-1}
  37. f(x)=a0​+a1x+a2x2+⋅⋅⋅+ak1xk1,其中
  38. a
  39. 0
  40. =
  41. S
  42. a_0 = S
  43. a0​=S 是要保护的秘密。

秘密拥有者随机生成

  1. k
  2. 1
  3. k-1
  4. k1 个随机数
  5. a
  6. 1
  7. ,
  8. a
  9. 2
  10. ,
  11. .
  12. .
  13. .
  14. ,
  15. a
  16. k
  17. 1
  18. a_1, a_2, ...,a_{k-1}
  19. a1​,a2​,...,ak1​,作为多项式的系数以确定多项式
  20. f
  21. (
  22. x
  23. )
  24. f(x)
  25. f(x)。然后选取
  26. n
  27. n
  28. n 个互不相同的整数
  29. x
  30. 1
  31. ,
  32. x
  33. 2
  34. ,
  35. .
  36. .
  37. .
  38. ,
  39. x
  40. n
  41. x_1, x_2, ...,x_n
  42. x1​,x2​,...,xn 作为参与方 id,将这些整数带入到
  43. f
  44. (
  45. x
  46. )
  47. f(x)
  48. f(x) 进行计算,得到
  49. s
  50. 1
  51. =
  52. f
  53. (
  54. x
  55. 1
  56. )
  57. ,
  58. s
  59. 2
  60. =
  61. f
  62. (
  63. x
  64. 2
  65. )
  66. ,
  67. .
  68. .
  69. .
  70. ,
  71. s
  72. n
  73. =
  74. f
  75. (
  76. x
  77. n
  78. )
  79. s_1 = f(x_1), s_2 = f(x_2), ..., s_n = f(x_n)
  80. s1​=f(x1​),s2​=f(x2​),...,sn​=f(xn​)。将计算得到的
  81. n
  82. n
  83. n 个值分别分配给
  84. n
  85. n
  86. n 个参与方,每个参与方掌握的秘密份额就是
  87. (
  88. x
  89. i
  90. ,
  91. f
  92. (
  93. x
  94. i
  95. )
  96. )
  97. (x_i, f(x_i))
  98. (xi​,f(xi​))。

例如,假定一个秘密值

  1. S
  2. =
  3. 45
  4. S=45
  5. S=45,要求将其分给 10 个参与方,至少 3 方参与计算才能够恢复出原始秘密,即
  6. n
  7. =
  8. 10
  9. ,
  10. k
  11. =
  12. 3
  13. n = 10, k = 3
  14. n=10,k=3。构造对应的多项式
  15. f
  16. (
  17. x
  18. )
  19. =
  20. 45
  21. +
  22. 19
  23. x
  24. +
  25. 13
  26. x
  27. 2
  28. f(x) = 45 + 19x + 13x^2
  29. f(x)=45+19x+13x2。在此多项式上选取连续的整数点作为各个子秘密:
  30. D
  31. 0
  32. =
  33. (
  34. 1
  35. ,
  36. 77
  37. )
  38. ;
  39. D
  40. 1
  41. =
  42. (
  43. 2
  44. ,
  45. 135
  46. )
  47. ;
  48. D
  49. 2
  50. =
  51. (
  52. 3
  53. ,
  54. 219
  55. )
  56. ;
  57. D
  58. 3
  59. =
  60. (
  61. 4
  62. ,
  63. 329
  64. )
  65. ;
  66. D
  67. 4
  68. =
  69. (
  70. 5
  71. ,
  72. 465
  73. )
  74. ;
  75. D
  76. 5
  77. =
  78. (
  79. 6
  80. ,
  81. 627
  82. )
  83. ;
  84. D
  85. 6
  86. =
  87. (
  88. 7
  89. ,
  90. 815
  91. )
  92. ;
  93. D
  94. 7
  95. =
  96. (
  97. 8
  98. ,
  99. 1029
  100. )
  101. ;
  102. D
  103. 8
  104. =
  105. (
  106. 9
  107. ,
  108. 1269
  109. )
  110. ;
  111. D
  112. 9
  113. =
  114. (
  115. 10
  116. ,
  117. 1535
  118. )
  119. D_0 = (1, 77); D_1 = (2, 135); D_2 = (3, 219); D_3 = (4, 329); D_4 = (5, 465); D_5 = (6, 627); D_6 = (7, 815); D_7 = (8, 1029); D_8 = (9, 1269); D_9 = (10, 1535)
  120. D0​=(1,77);D1​=(2,135);D2​=(3,219);D3​=(4,329);D4​=(5,465);D5​=(6,627);D6​=(7,815);D7​=(8,1029);D8​=(9,1269);D9​=(10,1535)。

秘密重建

对于

  1. S
  2. i
  3. S_i
  4. Si 值的任意
  5. k
  6. k
  7. k 个子集,我们可以通过插值找到
  8. f
  9. (
  10. x
  11. )
  12. f(x)
  13. f(x) 的多项式系数,然后计算
  14. S
  15. =
  16. f
  17. (
  18. 0
  19. )
  20. S = f(0)
  21. S=f(0)。另一方面,仅知道子集中的
  22. k
  23. 1
  24. k - 1
  25. k1 个并不足以计算出
  26. S
  27. S
  28. S

在生成秘密份额的时候,已经确定需要

  1. k
  2. k
  3. k 个秘密份额来恢复原始秘密。即根据
  4. (
  5. x
  6. 1
  7. ,
  8. s
  9. 1
  10. )
  11. ,
  12. (
  13. x
  14. 2
  15. ,
  16. s
  17. 2
  18. )
  19. ,
  20. .
  21. .
  22. .
  23. ,
  24. (
  25. x
  26. k
  27. ,
  28. s
  29. k
  30. )
  31. (x_1, s_1), (x_2, s_2), ..., (x_k, s_k)
  32. (x1​,s1​),(x2​,s2​),...,(xk​,sk​) 等一系列点构造出原始的多项式
  33. f
  34. (
  35. x
  36. )
  37. f(x)
  38. f(x),进而求解得到秘密值
  39. S
  40. =
  41. f
  42. (
  43. 0
  44. )
  45. =
  46. a
  47. 0
  48. S = f(0) = a_0
  49. S=f(0)=a0​。

Shamir秘密共享的方案使用拉格朗日插值法求解多项式。

  1. f
  2. (
  3. x
  4. )
  5. =
  6. i
  7. =
  8. 0
  9. n
  10. y
  11. i
  12. l
  13. i
  14. (
  15. x
  16. )
  17. f(x) = \sum_{i=0}^{n}y_il_i(x)
  18. f(x)=i=0nyili​(x)

其中

  1. l
  2. i
  3. (
  4. x
  5. )
  6. =
  7. (
  8. x
  9. x
  10. 1
  11. )
  12. (
  13. x
  14. x
  15. 2
  16. )
  17. .
  18. .
  19. .
  20. (
  21. x
  22. x
  23. n
  24. )
  25. (
  26. x
  27. i
  28. x
  29. 1
  30. )
  31. (
  32. x
  33. i
  34. x
  35. 2
  36. )
  37. .
  38. .
  39. .
  40. (
  41. x
  42. i
  43. x
  44. n
  45. )
  46. l_i(x) = \frac{(x-x_1)(x-x_2)...(x-x_n)}{(x_i-x_1)(x_i-x_2)...(x_i-x_n)}
  47. li​(x)=(xi​−x1​)(xi​−x2​)...(xi​−xn​)(xx1​)(xx2​)...(xxn​)​ 为拉格朗日插值基函数。在求解
  48. y
  49. i
  50. l
  51. i
  52. (
  53. x
  54. )
  55. y_il_i(x)
  56. yili​(x) 的求解之后,对其求和,就能够获得目标多项式。

为了重建秘密,任意选取3个参与方的秘密份额作为输入。这里选择 id 为

  1. 2
  2. 3
  3. 6
  4. 2 3 6
  5. 236 的参与方进行秘密重建。
  6. (
  7. x
  8. 0
  9. ,
  10. y
  11. 0
  12. )
  13. =
  14. (
  15. 2
  16. ,
  17. 135
  18. )
  19. ;
  20. (
  21. x
  22. 1
  23. ,
  24. y
  25. 1
  26. )
  27. =
  28. (
  29. 3
  30. ,
  31. 219
  32. )
  33. ;
  34. (
  35. x
  36. 2
  37. ,
  38. y
  39. 2
  40. )
  41. =
  42. (
  43. 6
  44. ,
  45. 627
  46. )
  47. (x_0, y_0) = (2, 135); (x_1, y_1) = (3, 219); (x_2, y_2) = (6, 627)
  48. (x0​,y0​)=(2,135);(x1​,y1​)=(3,219);(x2​,y2​)=(6,627)。
  49. l
  50. 0
  51. (
  52. x
  53. )
  54. =
  55. x
  56. x
  57. 1
  58. x
  59. 0
  60. x
  61. 1
  62. x
  63. x
  64. 2
  65. x
  66. 0
  67. x
  68. 2
  69. =
  70. x
  71. 3
  72. 2
  73. 3
  74. x
  75. 6
  76. 2
  77. 6
  78. =
  79. 1
  80. 4
  81. x
  82. 2
  83. 9
  84. 4
  85. x
  86. +
  87. 9
  88. 2
  89. l_0(x) = \frac{x-x_1}{x_0-x_1}*\frac{x-x_2}{x_0-x_2} = \frac{x-3}{2-3}* \frac{x-6}{2-6} = \frac{1}{4}x^2-\frac{9}{4}x+\frac{9}{2}
  90. l0​(x)=x0​−x1xx1​​∗x0​−x2xx2​​=23x3​∗26x6​=41x249x+29
  91. l
  92. 1
  93. (
  94. x
  95. )
  96. =
  97. x
  98. x
  99. 0
  100. x
  101. 1
  102. x
  103. 0
  104. x
  105. x
  106. 2
  107. x
  108. 1
  109. x
  110. 2
  111. =
  112. x
  113. 2
  114. 3
  115. 2
  116. x
  117. 6
  118. 3
  119. 6
  120. =
  121. 1
  122. 3
  123. x
  124. 2
  125. +
  126. 8
  127. 3
  128. x
  129. 4
  130. l_1(x) = \frac{x-x_0}{x_1-x_0}*\frac{x-x_2}{x_1-x_2} = \frac{x-2}{3-2}* \frac{x-6}{3-6} = -\frac{1}{3}x^2+\frac{8}{3}x - 4
  131. l1​(x)=x1​−x0xx0​​∗x1​−x2xx2​​=32x2​∗36x6​=−31x2+38x4
  132. l
  133. 2
  134. (
  135. x
  136. )
  137. =
  138. x
  139. x
  140. 0
  141. x
  142. 2
  143. x
  144. 0
  145. x
  146. x
  147. 1
  148. x
  149. 2
  150. x
  151. 1
  152. =
  153. x
  154. 2
  155. 6
  156. 2
  157. x
  158. 3
  159. 6
  160. 3
  161. =
  162. 1
  163. 12
  164. x
  165. 2
  166. 5
  167. 12
  168. x
  169. +
  170. 1
  171. 2
  172. l_2(x) = \frac{x-x_0}{x_2-x_0}*\frac{x-x_1}{x_2-x_1} = \frac{x-2}{6-2}* \frac{x-3}{6-3} = \frac{1}{12}x^2-\frac{5}{12}x+\frac{1}{2}
  173. l2​(x)=x2​−x0xx0​​∗x2​−x1xx1​​=62x2​∗63x3​=121x2125x+21
  174. f
  175. (
  176. x
  177. )
  178. =
  179. i
  180. =
  181. 0
  182. 2
  183. y
  184. i
  185. l
  186. i
  187. (
  188. x
  189. )
  190. =
  191. y
  192. 0
  193. l
  194. 0
  195. (
  196. x
  197. )
  198. +
  199. y
  200. 1
  201. l
  202. 1
  203. (
  204. x
  205. )
  206. +
  207. y
  208. 2
  209. l
  210. 2
  211. (
  212. x
  213. )
  214. =
  215. 135
  216. (
  217. 1
  218. 4
  219. x
  220. 2
  221. 9
  222. 4
  223. x
  224. +
  225. 9
  226. 2
  227. )
  228. +
  229. 219
  230. (
  231. 1
  232. 3
  233. x
  234. 2
  235. +
  236. 8
  237. 3
  238. x
  239. 4
  240. )
  241. +
  242. 627
  243. (
  244. 1
  245. 12
  246. x
  247. 2
  248. 5
  249. 12
  250. x
  251. +
  252. 1
  253. 2
  254. )
  255. =
  256. 13
  257. x
  258. 2
  259. +
  260. 19
  261. x
  262. +
  263. 45
  264. f(x) = \sum_{i=0}^{2}y_il_i(x) = y_0l_0(x) + y_1l_1(x) + y_2l_2(x) \\ = 135(\frac{1}{4}x^2-\frac{9}{4}x+\frac{9}{2}) + \\ 219(-\frac{1}{3}x^2+\frac{8}{3}x - 4) + \\ 627(\frac{1}{12}x^2-\frac{5}{12}x+\frac{1}{2}) \\ = 13x^2 + 19x + 45
  265. f(x)=i=02yili​(x)=y0l0​(x)+y1l1​(x)+y2l2​(x)=135(41x249x+29​)+219(−31x2+38x4)+627(121x2125x+21​)=13x2+19x+45

至此,这个用于秘密分享的多项式重构完成,而秘密是自由系数,也就是45。

用图形化展示就是以下过程:

  1. 绘制份额

secret-share-point

  1. 绘制相应抛物线

secret-share-share

  1. 秘密就是与y轴交点

secret-share-point

Shamir秘密共享的特点

前面提到的Shamir秘密共享方案使用的实数进行操作,虽然这种方法在数值上比较简单,但其安全性并不高。即使两个点不足以完美描述抛物线,它们仍然能够泄露有关秘密的部分信息。为了解决这一问题,Shamir秘密共享方案是在有限域上定义的,这样可以有效地提高安全性。在有限域上,多项式的图形变得不连贯和分散,这使得攻击者无法基于观察到的点对底层函数做出有根据的猜测。有限域的引入有效地防止了从简单点恢复多项式的秘密值。

以下是Shamir秘密共享的一些主要特点:

  1. 秘密份额的大小与原始数据大小无关:每个秘密份额的大小不会超过原始秘密的大小,这确保了秘密份额在存储和传输过程中的高效性。
  2. 动态调整秘密份额:当 k k k 值固定,秘密份额 s i s_i si​ 是可以动态增加或删除的,比如有参与方加入或离开不会影响其他的秘密份额;
  3. 秘密份额的修改:可以通过生成新的多项式来轻松修改秘密份额,同时保持原始秘密数据不变。这种修改可以提升安全性,因为暴露的秘密份额在更新后变得无效。
  4. 分级方案的实现:通过多项式的值的组合,可以实现分级方案。例如,可以根据参与方的重要性分配不同数量的秘密份额。比如,给公司的CEO分配3个秘密份额,给两位副总分配2个秘密份额,每位高管分配1个秘密份额。这样,对于 ( 3 , n ) (3, n) (3,n) 门限秘密共享方案,执行与原始秘密相关的活动需要至少3位高管共同参与,或者2位高管(其中包括至少一位副总)参与,或者仅由CEO独自进行操作。

这些特点使得Shamir秘密共享不仅在保密性和灵活性方面表现出色,还在多种实际应用场景中展现了其独特的优势。然而,秘密共享的真正潜力还包括其在加法和乘法操作中的支持。Shamir秘密共享不仅可以用于分割和恢复秘密,还可以在分裂态下进行加法和乘法运算。这意味着在多个参与方合作的情况下,可以对秘密进行复杂的操作,而最终的结果却不会暴露原始(秘密)数据。

接下来的部分将详细介绍Shamir秘密共享如何支持加法和乘法操作,以及这些特性如何提升其在实际应用中的价值。

对加法和乘法运算的支持

对加法运算的支持

在Shamir秘密共享方案中,加法运算支持意味着,在不恢复原始秘密的情况下,通过参与方之间的计算,就可以直接得到秘密值之和。这一特性使得在处理多个秘密时,我们能够利用其分享的份额进行加法操作。

示例说明

假设我们有两个秘密值:

  1. S
  2. 1
  3. =
  4. 45
  5. S_1 = 45
  6. S1​=45
  7. S
  8. 2
  9. =
  10. 33
  11. S_2 = 33
  12. S2​=33。对应的多项式为:

对于

  1. S
  2. 1
  3. S_1
  4. S1​,多项式为
  5. f
  6. 1
  7. (
  8. x
  9. )
  10. =
  11. 45
  12. +
  13. 19
  14. x
  15. +
  16. 13
  17. x
  18. 2
  19. f_1(x) = 45 + 19x + 13x^2
  20. f1​(x)=45+19x+13x2;对于
  21. S
  22. 2
  23. S_2
  24. S2​,多项式为
  25. f
  26. 2
  27. (
  28. x
  29. )
  30. =
  31. 33
  32. +
  33. 21
  34. x
  35. +
  36. 10
  37. x
  38. 2
  39. f_2(x) = 33 + 21x + 10x^2
  40. f2​(x)=33+21x+10x2

仍采用前文中

  1. x
  2. =
  3. {
  4. 2
  5. ,
  6. 3
  7. ,
  8. 6
  9. }
  10. x = \{2, 3, 6\}
  11. x={2,3,6} 作为甲乙丙三方的
  12. i
  13. d
  14. id
  15. id。以其在多项式上的值
  16. f
  17. 1
  18. (
  19. {
  20. 2
  21. ,
  22. 3
  23. ,
  24. 6
  25. }
  26. )
  27. f_1(\{2, 3, 6\})
  28. f1​({2,3,6})
  29. f
  30. 2
  31. (
  32. {
  33. 2
  34. ,
  35. 3
  36. ,
  37. 6
  38. }
  39. )
  40. f_2(\{2, 3, 6\})
  41. f2​({2,3,6}) 作为分配给各方的秘密份额。

三方参与者甲、乙、丙分别持有秘密的拆分份额,表格如下:
参与方idS1份额 (

  1. S
  2. 1
  3. i
  4. d
  5. S1_{id}
  6. S1id​)S2份额 (
  7. S
  8. 2
  9. i
  10. d
  11. S2_{id}
  12. S2id​)
  13. S
  14. 1
  15. i
  16. d
  17. S1_{id}
  18. S1id +
  19. S
  20. 2
  21. i
  22. d
  23. S2_{id}
  24. S2id​甲2135115250321918640566275191146

如何在不恢复原始秘密的情况加,计算出来

  1. S
  2. 1
  3. +
  4. S
  5. 2
  6. S_1 + S_2
  7. S1​+S2 的结果呢?只需要甲乙丙分别计算各自本地秘密份额的和
  8. S
  9. 1
  10. i
  11. d
  12. +
  13. S
  14. 2
  15. i
  16. d
  17. S1_{id} + S2_{id}
  18. S1id​+S2id​,然后对其进行插值计算。
  19. l
  20. 0
  21. (
  22. x
  23. )
  24. =
  25. x
  26. x
  27. 1
  28. x
  29. 0
  30. x
  31. 1
  32. x
  33. x
  34. 2
  35. x
  36. 0
  37. x
  38. 2
  39. =
  40. x
  41. 3
  42. 2
  43. 3
  44. x
  45. 6
  46. 2
  47. 6
  48. =
  49. 1
  50. 4
  51. x
  52. 2
  53. 9
  54. 4
  55. x
  56. +
  57. 9
  58. 2
  59. l_0(x) = \frac{x-x_1}{x_0-x_1}*\frac{x-x_2}{x_0-x_2} = \frac{x-3}{2-3}* \frac{x-6}{2-6} = \frac{1}{4}x^2-\frac{9}{4}x+\frac{9}{2}
  60. l0​(x)=x0​−x1xx1​​∗x0​−x2xx2​​=23x3​∗26x6​=41x249x+29
  61. l
  62. 1
  63. (
  64. x
  65. )
  66. =
  67. x
  68. x
  69. 0
  70. x
  71. 1
  72. x
  73. 0
  74. x
  75. x
  76. 2
  77. x
  78. 1
  79. x
  80. 2
  81. =
  82. x
  83. 2
  84. 3
  85. 2
  86. x
  87. 6
  88. 3
  89. 6
  90. =
  91. 1
  92. 3
  93. x
  94. 2
  95. +
  96. 8
  97. 3
  98. x
  99. 4
  100. l_1(x) = \frac{x-x_0}{x_1-x_0}*\frac{x-x_2}{x_1-x_2} = \frac{x-2}{3-2}* \frac{x-6}{3-6} = -\frac{1}{3}x^2+\frac{8}{3}x - 4
  101. l1​(x)=x1​−x0xx0​​∗x1​−x2xx2​​=32x2​∗36x6​=−31x2+38x4
  102. l
  103. 2
  104. (
  105. x
  106. )
  107. =
  108. x
  109. x
  110. 0
  111. x
  112. 2
  113. x
  114. 0
  115. x
  116. x
  117. 1
  118. x
  119. 2
  120. x
  121. 1
  122. =
  123. x
  124. 2
  125. 6
  126. 2
  127. x
  128. 3
  129. 6
  130. 3
  131. =
  132. 1
  133. 12
  134. x
  135. 2
  136. 5
  137. 12
  138. x
  139. +
  140. 1
  141. 2
  142. l_2(x) = \frac{x-x_0}{x_2-x_0}*\frac{x-x_1}{x_2-x_1} = \frac{x-2}{6-2}* \frac{x-3}{6-3} = \frac{1}{12}x^2-\frac{5}{12}x+\frac{1}{2}
  143. l2​(x)=x2​−x0xx0​​∗x2​−x1xx1​​=62x2​∗63x3​=121x2125x+21

通过计算:

  1. f
  2. (
  3. x
  4. )
  5. =
  6. i
  7. =
  8. 0
  9. 2
  10. y
  11. i
  12. l
  13. i
  14. (
  15. x
  16. )
  17. =
  18. 250
  19. (
  20. 1
  21. 4
  22. x
  23. 2
  24. 9
  25. 4
  26. x
  27. +
  28. 9
  29. 2
  30. )
  31. +
  32. 405
  33. (
  34. 1
  35. 3
  36. x
  37. 2
  38. +
  39. 8
  40. 3
  41. x
  42. 4
  43. )
  44. +
  45. 1146
  46. (
  47. 1
  48. 12
  49. x
  50. 2
  51. 5
  52. 12
  53. x
  54. +
  55. 1
  56. 2
  57. )
  58. =
  59. 78
  60. +
  61. a
  62. x
  63. +
  64. b
  65. x
  66. 2
  67. f(x) = \sum_{i=0}^{2}y_il_i(x) = 250(\frac{1}{4}x^2-\frac{9}{4}x+\frac{9}{2}) \\ \\+ 405(-\frac{1}{3}x^2+\frac{8}{3}x - 4) \\ \\+ 1146(\frac{1}{12}x^2-\frac{5}{12}x+\frac{1}{2}) \\ \\= 78 + ax + bx^2
  68. f(x)=i=02yili​(x)=250(41x249x+29​)+405(−31x2+38x4)+1146(121x2125x+21​)=78+ax+bx2

直接计算常数项就好了,从计算结果可见,这个多项式的常数项为 78,即原始秘密

  1. S
  2. 1
  3. S_1
  4. S1​的值加上
  5. S
  6. 2
  7. S_2
  8. S2​的值,验证了Shamir秘密共享方案的同态加法支持。

通过这种方式,我们可以在不恢复原始秘密的情况下,通过参与方持有的份额计算出秘密的和。这证明了Shamir秘密共享对加法计算天然支持。

对乘法运算的支持

在Shamir秘密共享中,为了分享两个秘密

  1. s
  2. 1
  3. s_1
  4. s1
  5. s
  6. 2
  7. s_2
  8. s2​,分别选取两个多项
  9. p
  10. p
  11. p
  12. q
  13. q
  14. q,满足
  15. y
  16. i
  17. =
  18. p
  19. (
  20. i
  21. )
  22. y_i = p(i)
  23. yi​=p(i)
  24. z
  25. i
  26. =
  27. q
  28. (
  29. i
  30. )
  31. z_i = q(i)
  32. zi​=q(i),且
  33. p
  34. (
  35. 0
  36. )
  37. =
  38. s
  39. 1
  40. p(0) = s_1
  41. p(0)=s1​,
  42. q
  43. (
  44. 0
  45. )
  46. =
  47. s
  48. 2
  49. q(0) = s_2
  50. q(0)=s2​。如果各参与方持有
  51. s
  52. 1
  53. s_1
  54. s1 的份额
  55. (
  56. x
  57. i
  58. ,
  59. y
  60. i
  61. )
  62. (x_i, y_i)
  63. (xi​,yi​)
  64. s
  65. 2
  66. s_2
  67. s2 的份额
  68. (
  69. x
  70. i
  71. ,
  72. z
  73. i
  74. )
  75. (x_i, z_i)
  76. (xi​,zi​),他们可以在本地将他们的份额相乘得到秘密份额的乘积
  77. s
  78. 1
  79. s
  80. 2
  81. s_1*s_2
  82. s1​∗s2​。通过这些新的份额
  83. (
  84. x
  85. i
  86. ,
  87. y
  88. i
  89. z
  90. i
  91. )
  92. (x_i, y_i​*z_i)
  93. (xi​,yi​​∗zi​) 可以计算两个原始秘密的乘积,即
  94. y
  95. i
  96. z
  97. i
  98. =
  99. (
  100. p
  101. q
  102. )
  103. (
  104. i
  105. )
  106. y_iz_i = (p * q)(i)
  107. yizi​=(pq)(i) 并且满足
  108. (
  109. p
  110. q
  111. )
  112. (
  113. 0
  114. )
  115. =
  116. s
  117. 1
  118. s
  119. 2
  120. (p * q)(0) = s_1s_2
  121. (pq)(0)=s1s2​。

但这里存在两个问题:

  1. 多项式 ( p ∗ q ) (p * q) (p∗q) 的系数不是随机值,而是要依赖于各方共同计算;
  2. 多项式的次数发生了变化。如果 p p p 和 q q q 的次数都是 k − 1 k - 1 k−1 次,也就是各自需要 k k k 个秘密份额来重建秘密,那么 ( p ∗ q ) (p * q) (p∗q) 多项式的次数就变成了 2 k − 2 2k-2 2k−2 次,也就是它将会需要 2 k − 1 2k-1 2k−1 个份额来重建 s 1 s 2 s_1s_2 s1​s2​。

这些问题在安全多方计算中带来了以下挑战:

性能问题:多项式次数的增加导致计算复杂度显著增加。需要更多的计算资源来处理更高次数的多项式,并且需要更多的参与方来重建秘密,这会影响整个计算过程的效率。

通信开销:为了计算和共享新生成的份额,需要在参与方之间进行更多的通信。这不仅增加了通信的负担,还可能导致更高的延迟,特别是在参与方分布广泛的情况下。

安全性问题:多项式系数不是随机的,可能会导致秘密的部分信息泄露。在实际应用中,需要额外的步骤来确保系数的随机性和保密性,从而增强整体安全性。

为了解决这些问题,后续研究开发了多种基于 Shamir 秘密共享的改进算法协议来更好的支持在秘密之间进行的运算,尤其是乘法运算。

总结

本文从秘密共享和门限秘密共享出发,介绍了Shamir秘密共享方案的原理、计算过程以及其对于多方参与计算的支持,主要贡献如下:

Shamir秘密共享方案的全面介绍:详细描述了Shamir秘密共享方案的基本概念,包括如何将一个秘密分割成多个份额,并介绍了如何使用拉格朗日插值法恢复原始秘密。

图形化直观展示:通过具体的示例和图示,展示了Shamir秘密共享方案的工作原理,包括秘密的分割、秘密份额的分配及其重构过程。

多方参与计算的支持:探讨了Shamir秘密共享方案对多方计算的支持,特别是其在支持加法和乘法运算方面的能力。通过示例详细说明了如何在不恢复原始秘密的情况下进行加法运算,并探讨了其在乘法运算中的挑战。

接下来仍需要研究的内容:

乘法运算的改进:由于Shamir秘密共享在乘法运算上的限制,多项式的系数不是随机的,且多项式次数增加导致计算复杂度提高。因此,后续需要探究新的协议是如何来解决这些问题,以更高效、安全地支持秘密之间的乘法运算。

应用拓展:Shamir秘密共享方案在多方安全计算和机器学习中的应用潜力巨大,后续会探究如何利用Shamir秘密共享方案处理加密数据的机器学习训练和推断任务。

参考

  1. How to Share a Secret

本文转载自: https://blog.csdn.net/tieqiaoshaonian/article/details/140672561
版权归原作者 铁锹少年@神州网信 所有, 如有侵权,请联系我们删除。

“安全多方计算 - Shamir秘密分享方案”的评论:

还没有评论