求解一个线性同余系统 mod p,其中 p 不是素数,系统有 2+ 个变量

计算科学 线性代数 matlab
2021-12-07 20:29:22

我正在编写一些 MATLAB 代码来对给定的密码系统执行称为 Index Calculus 攻击的操作(这涉及计算离散的对数值),除了一件小事之外,我已经完成了所有工作。我不知道(在 MATLAB 中)如何求解同余模 p 的线性系统,其中 p不是素数。此外,这个系统有超过 1 个变量,所以,除非我遗漏了什么,否则中国剩余定理将不起作用。我正在尝试解决以下系统(mod8). 最终目标是我解决它 mod 10930888 的每个因子,然后使用中国剩余定理构造每个Li价值:

(05411702810210510)*(L1L2L3L4)=(29463215851213256361710670279) (mod10930888)

我在这里问了一个关于数学 stackexchange 的问题,其中包含更多详细信息/格式化的mathjax我在那个链接的问题中解决了这个问题,现在我正在尝试找到一个实用程序,它可以让我解决以非素数为模的同余系统。我确实找到了一个包含支持模运算的求解器的套件,但模数必须是素数(此处)。我还尝试逐步修改它以使用非素数,但无论使用哪种方法都不起作用,因为它要求系统的所有元素都具有逆模 p。

我已经研究过使用 MATLAB 中调用 MuPAD 函数的能力,但从我的测试来看,MuPAD 函数 linsolve(这似乎是最好的候选者)也不支持非素数模值。此外,我已经用 Maple 验证了这个系统是可解的,以我感兴趣的整数 (8) 为模,所以它可以完成。

任何帮助将不胜感激 - 我觉得我在这里已经没有选择了!

1个回答

您可以在忽略模数的情况下求解四个未知数的四个方程。如果任何中间步骤导致的数字大于模数,您可以根据需要减少或不减少。这将使您得到以下形式的四个方程aiLi=bi(mod10930888) 现在它们是否可以溶解,取决于是否ai互质于10930888 如果它是互质的,就会有一个独特的解决方案。如果没有,将没有或gcd(ai,10930888)