Feige-Fiat-Shamir身份识别协议Java实现问题求助
排查Feige-Fiat-Shamir身份识别方案的Java代码问题
要帮你定位代码时而成功时而失败的问题,我需要你提供几个关键部分的代码细节哦:
- 参数生成逻辑:包括大素数
n的生成、私钥s_i的选取以及公钥v_i = s_i^{-2} mod n的计算过程 - 身份识别的核心流程代码:
- Prover生成随机数
r并计算承诺x = r^2 mod n的代码 - Verifier生成随机挑战向量
e(二进制向量)的代码 - Prover计算响应
y = r * product(s_i^{e_i}) mod n的代码 - Verifier验证
y^2 ≡ x * product(v_i^{e_i}) mod n的代码
- Prover生成随机数
- 失败场景的具体现象:比如失败时验证等式不成立的具体数值,或者是否有异常抛出
另外,你可以先自查以下几个高频出错点:
- 模逆运算的正确性:计算
s_i的模逆时,必须确保s_i和n互质,否则逆元不存在会直接导致后续计算错误 - 随机数生成的均匀性:如果
r或挑战向量e的生成不符合均匀分布,可能会出现验证结果不稳定的情况 - 模运算的溢出问题:Java的基础整数类型(
int/long)极易溢出,务必使用BigInteger处理所有大整数运算,且每一步乘法后都要及时做模运算 - 乘积计算的顺序:计算
product(s_i^{e_i})或product(v_i^{e_i})时,要边乘边取模,避免中间结果过大引发计算偏差
小技巧:可以在验证失败时打印出
x、y、e向量、product(v_i^{e_i})这些中间值,直接对比验证等式两边的结果,能快速定位问题所在
内容的提问来源于stack exchange,提问作者Sergey Panov
相关产品推荐
相关产品推荐

