[UTCTF2020]Curveball(Shamir‘s Secret Sharing)

(C81E728D9D4C2F636F067F89CC14862C, 31E96A93BF1A7CE1872A3CCDA6E07F86)
(ECCBC87E4B5CE2FE28308FD9F2A7BAF3, ADF6E4F1052BDE978344743CCDCF5771)
(E4DA3B7FBBCE2345D7772B0674A318D5, 0668FBCFE4098FEA0218163AC21E6531)

shamir密钥分享,已知三组数据,md5解密后:

(2,5398141)
(3,5398288)
(5,5398756)

顺便理解一下加密吧

假设我们的secret是1234

我们打算把密钥分为6部分(n=6),共3组(k-3),任取(k-1=2)个随机数:166和94

a0=1234

a1=166

a2=94

构造函数f(x)=1234+166*x+94*x^2

根据多项式构造六个点:

我们完成了加密阶段

任意3个点可以完成解密:

 根据上式变换,最终我们还原了多项式,得到1234

我们回到上题

(2,5398141)
(3,5398288)
(5,5398756)

直接套用公式

x0,y0=(2,5398141)
x1,y1=(3,5398288)
x2,y2=(5,5398756)

R.<x>=QQ[]
l0=(x-x1)/(x0-x1)*((x-x2)/(x0-x2))
l1=(x-x0)/(x1-x0)*((x-x2)/(x1-x2))
l2=(x-x0)/(x2-x0)*((x-x1)/(x2-x1))

fx=y0*l0+y1*l1+y2*l2
print(fx)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Paintrain

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值