我有一个使用 C 语言中 OpenSSL 的 BIGNUM 库的通用加密实现。标准解密工作正常,但我也想实现 Shamir 的秘密共享 (SSS)。
我遇到的问题是 BIGNUM 只支持整数,作为 SSS 的拉格朗日插值的一部分,我需要乘以负值。
有没有办法做到这一点?否则:我可以用另一种语言(python?)做我的 SSS,只要它能够与 OpenSSL 产生的 BIGNUM 交互。
有什么建议么?蒂亚!
我有一个使用 C 语言中 OpenSSL 的 BIGNUM 库的通用加密实现。标准解密工作正常,但我也想实现 Shamir 的秘密共享 (SSS)。
我遇到的问题是 BIGNUM 只支持整数,作为 SSS 的拉格朗日插值的一部分,我需要乘以负值。
有没有办法做到这一点?否则:我可以用另一种语言(python?)做我的 SSS,只要它能够与 OpenSSL 产生的 BIGNUM 交互。
有什么建议么?蒂亚!
当您查看 OpenSSL 中的 BIGNUM 结构时,您会发现一个名为neg
. 如果 BIGNUM 对象表示负数,neg
则将设置为 1。此外,该bn_mul()
函数正确处理负数的乘法。所以你可以用 OpenSSL 实现 SSS,没问题!
模运算(使用组)只提供积极的结果,所以我想你想使用非模运算?在这种情况下,您可以简单地保留一个单独的变量来指示该值是否为负。除了符号位之外,正乘的结果是相同的。
它不是尽可能干净的设计,但对于一些方法来说,它可能没那么重要。您可以创建单独的方法来模仿这些BN
方法,但保存符号值的整数 (-1
或0
)1
除外。