记录下秘密分享算法,主要是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

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐