#shamir #split #shares #recovery #set #decoding #banana-split

no-std banana-recovery

Banana split 解码实现,用 Rust 编写

1 个不稳定版本

0.1.0 2022 年 12 月 5 日

#7#shares

GPL-3.0-or-later

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