1 个不稳定版本
0.1.0 | 2022 年 12 月 5 日 |
---|
#7 在 #shares
39KB
522 行
包 banana_recovery
概述
这是一个用于从使用 banana split 协议生成的份额中恢复秘密的库。
目标是仅用于 恢复 秘密,这里没有秘密生成部分。
代码遵循从 https://github.com/paritytech/banana_split 发布的 banana split 恢复的 JavaScript 代码。将份额组合为加密秘密的部分已用 Rust 重新编写,并且通常遵循从 https://npmjs.net.cn/package/secrets.js-grempe 发布的 Shamir 秘密共享的 JavaScript 代码。
注释
原则上,从 https://npmjs.net.cn/package/secrets.js-grempe 发布的 Shamir 秘密共享支持 bits
值(即定义伽罗瓦域 GF(2^n)
大小和可能份额数量的值 n)在范围 3..20
内。这些位在 init
(此处:https://github.com/grempe/secrets.js/blob/master/secrets.js#L472)期间设置,默认为 8
。banana split 中的 V1
使用默认值。此包支持范围 3..20
,在其他 banana split 版本出现时可能很有用。
当在 GF(2^n)
中预计算对数和指数值时,所有指数都是按照收集向量的顺序生成的,因此自然都是存在的。由于 GF 的特性,所有对数最终也会被填充,除了 log[0]
之外,它仍然是未确定的。
在拉格朗日多项式计算过程中,某些 log[i]
的值被累加,得到的 product
用于计算指数 exp[product]
,并将其与最终收集的值进行异或操作。累加日志和从总和计算指数是乘法的一个常见便捷方法。
当 log[0]
被处理时,这意味着 0 参与了乘法,总的乘法结果是 0,异或操作不会改变任何东西。因此,在这种情况下,整个周期元素将被跳过。
这是 https://github.com/paritytech/banana-recovery-rust 开发的一个延续,提交号为 fa8513f6a734c6321c91dcb7fd898ab353ce009a
。
依赖项
~2.7–3.5MB
~79K SLoC