前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Shamir密钥分享算法简析

Shamir密钥分享算法简析

作者头像
mythsman
发布2022-11-14 14:49:23
1.2K0
发布2022-11-14 14:49:23
举报
文章被收录于专栏:mythsman的个人博客

简述

秘密共享技术是密码学和信息安全的一个重要研究内容,Shamir密钥分享算法最早是由ShamirBlackly在1970年基于Lagrange插值和矢量方法提出的,其基本思想是分发者通过秘密多项式,将秘密s分解为n个秘密分发个持有者,其中任意不少于k个秘密均能恢复密文,而任意少于k个秘密均无法得到密文的任何信息。

实际应用

比如在门限体系中,为了保证信息安全性,一个秘密通常不能由单个持有者保存。比如一些重要场所的通行,比如遗嘱的生效等,必须将秘密分由多人保管并且只有当多人同时在场时秘密才能得以恢复。在这些场合,就需要这样一套的密钥分享技术。

算法思路

表示

Shamir密钥共享算法由一个二元数(k,n)表示,其中n表示将明文s加密为nShadowk表示必须至少同时拥有kShadow才能解密获得成明文。

加密

对于待加密的明文s∈Zp(p为大素数),在有限群GF(p)任取k−1个随机数a1,a2,...,ak−1,并令a0=s,从而构造如下的多项式:

f(x)=a_0+a_1x+a_2x^2+a_3x^3+...+a_{k-1}x^{k-1}mod(p)

对于这个多项式,任取n个数x1,x2,x3,...,xn分别带入多项式得到n个密钥对:

(x_1,f(x_1)),(x_2,f(x_2)),(x_3,f(x_3)),...,(x_n,f(x_n))

分发给n个持有者。

解密

假设得到了k个密钥对{x1,y1}{x2,y2}...{xk,yk},我们可以得到如下方程(运算均在GF(p)):

\begin{matrix}a_0+a_1 x_1+a_2 x_1^2+...+a_{k-1}x_1^{k-1}=y_1\\a_0+a_1x_2+a_2x_2^2+...+a_{k-1}x_2^{k-1}=y_2\\...................\\a_0+a_1x_k+a_2x_k^2+...+a_{k-1}x_k^{k-1}=y_k\end{matrix}

由矩阵乘法或者Lagrange插值法均可求的a0即为明文s

安全性

由伽罗华域以及矩阵运算的性质可知该算法的安全性是显然的。

补充

k=n的时候,Shamir算法还有一种用异或运算的实现:任取n−1个随机数(r1,r2,r3,...,rn−1),对于明文s计算

r_n=r_1 \oplus r_2 \oplus r_3 ...\oplus r_{n-1}

这样就可以通过将这n个数全部进行异或来得到明文,同时,任意一个Shadow都不会泄露有关秘密的任何信息。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简述
  • 实际应用
  • 算法思路
    • 表示
      • 加密
        • 解密
          • 安全性
          • 补充
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档