MPC--秘密分享(Secret-Sharing)算法及使用Demo
·
记录下秘密分享算法,主要是Shamir’s Secret Sharing
秘密分享
秘密分享通过把秘密进行分割,并把秘密在n个参与者中分享,使得只有多于特定t个参与者合作才可以计算出或是恢复秘密,而少于t个参与者则不可以得到有关秘密。
对于sharmir(t,w)方案,就是指准备w把钥匙,至少要t把钥匙才能开启。
使用Demo
package main
import (
"fmt"
"github.com/SSSaaS/sssa-golang"
"os"
)
// sharmir(t,w):准备w把钥匙,至少要t把钥匙才能开启
func main() {
secret := "0y10VAfmyH7GLQY6QccCSLKJi8iFgpcSBTLyYOGbiYPqOpStAf1OYuzEBzZR"
w := 5
t := 3
// 分割秘密
secretShares, err := sssa.Create(t, w, secret)
if err != nil {
fmt.Printf("Create err: %v\n", err)
os.Exit(-1)
}
fmt.Printf("secretShares: %v\n", secretShares)
// 选择其中的3份
testShares := []string{
secretShares[0],
secretShares[1],
secretShares[2],
}
// 恢复秘密
combined, err := sssa.Combine(testShares)
if err != nil {
fmt.Printf("Combine err: %v\n", err)
os.Exit(-1)
}
if combined != secret {
fmt.Printf("Fatal: combining returned invalid data\n")
os.Exit(-1)
}
}
详见:https://github.com/hello2mao/go-crypto-samples/blob/master/Secret-Sharing/main.go
Ref
更多推荐
已为社区贡献3条内容
所有评论(0)