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