1. 门限秘钥共享技术简介
门限密钥共享技术(Threshold Key SharingScheme)解决的是密钥安全管理问题。
现代密码学体制的设计是使得密码体制的安全性取决于密钥安全,密钥的泄露就意味着体制失去了安全性,因此密钥管理在密码体制的安全性研究和设计中占有重要的地位。特别是多方利益体共同管理一个账户时,账户的密钥如何可信安全的分配给多方参与者就变得非常棘手。
针对这一问题,以色列密码学家Shamir和Blakely在1879年提出了
Shamir(k,n)门限密钥共享方案。方案中,密钥被分为
n份分配给
n个参与者,每个参与者掌握一个密钥份额(key share),只有集齐超过
k个密钥份额,才能够将密钥恢复。因此,账户的任何操作都至少需要
n位参与者中的
k位参与才能够实施,这样便保证了账户的安全可信。
2. 拉格朗日插值算法介绍
选定一个素数
p,Zp上
k−1个元素组成的集合
x1,x2,...xk,域
GF(p)上元素集合
a1,a2,...ak,由此可以定义一个k次域上多项式
f(x),使得
f(xi)=ai,则多项式的新式即为
f(x)=i=i∑kai1≤i≤k,i=j∏xi−xjx−xj
拉格朗日插值法理论见我的博文“拉格朗日插值法”。
在获知一系列的输入和输出的前提下,可以通过拉格朗日定理,获取多项式表达式。小伙伴可以通过在线工具计算多项式:
http://skisickness.com/2010/04/28/
3. 门限秘钥共享算法理论实现
在各种秘密共享方案中,最简单、最实用的是门限秘密共享方案,其基本模型可以描述如下:将密钥
k按下述方式分解成
n 个影子
k1,k2,...,kn ;这个方案称为
(t,n)门限秘钥共享方案,简称门限方案,
t称为门限值。
- (1)任意
t个
ki值易于计算出
k;
- (2)已知任意
t−1个或更少个
ki,则由于信息不足而不能决定出
k。
假入Alice希望想
n个参与者分享一个秘密值
s,s∈Zp,p是一个大素数,参与者集合
P={p1,p2,...,pn},任意
t个参与方可以利用他们的分片恢复出秘密值,但少于
t个参与方无法得到与
s有关的任何信息。上述的
t被称为门限值。一个包含
n个参与方且门限值为
t的秘密分享可以被表示为
(t−n)秘密分享。
3.1 多项式构造
为了实现上述的
(t,n)−Shamir秘钥分发算法,Alice在有限群
GF(p),p>n任取(
p是一个大素数)上随机选取一个
t−1次多项式
f(x)。f(x)如下:
f(x)=at−1xt−1+at−2xt−2+....+a1x+s
其中
s为秘密值,
a1,....,at−1∈GF(p),且
at−1=0。
3.2 秘钥分割
Alice作为秘密分发者,她选择随机多项式
f(x),这个多项式满足条件
f(0)=s,然后将
si=f(i)分发给成员
pi,
i=1,2,...,n。
3.3 秘钥恢复
根据每一对
Si=(i,si),
Si可以看做是曲线
f(x)上的一个点。因为
t个点能唯一的确定
t−1次多项式,所以秘钥
s可以从
t个点共享重构出来。但是从
t1,其中
t1满足
(t1<t)个点共享无法确定一个
t−1次多项式出来,即无法重构出秘钥
s。
实际上,解决这个重构一个
t−1次的多项式
f(x)问题,可以利用拉格朗日插值法重构
f(x):
f(x)=i=i∑ksi1≤i≤k,i=j∏xi−xjx−xj
一旦知道
f(x),通过
s=f(0)便可计算出秘钥
s。