【发布时间】:2013-12-01 20:43:55
【问题描述】:
我正在编写一些 Matlab 代码来对给定的密码系统执行称为索引微积分攻击的操作(这涉及计算离散的对数值),除了一件小事之外,我已经完成了所有工作。我不知道(在 Matlab 中)如何解决同余 mod p 的线性系统,其中 p 是 not 素数。另外,这个系统有不止一个变量,所以,除非我遗漏了什么,否则中国剩余定理是行不通的。
我问了一个关于数学 stackexchange 的问题,其中包含更多详细信息/格式化的 mathjax here。我在那个链接的问题中解决了这个问题,现在我正在尝试找到一个实用程序,它可以让我解决以非素数为模的同余系统。我确实找到了一个包含支持模运算的求解器的套件,但模数必须是素数(here)。我也尝试逐步修改它以使用非素数,但无论使用哪种方法都不起作用,因为它要求系统的所有元素都具有逆模 p。
我已经研究过使用 Matlab 中调用 MuPAD 函数的功能,但根据我的测试,MuPAD 函数 linsolve(这似乎是最佳候选者)也不支持非素模值。此外,我已经用 Maple 验证了这个系统可以以我感兴趣的整数 (8) 为模求解,因此可以完成。
更具体地说,这是我试图在 MuPAD 中运行的确切命令:
linsolve([0*x + 5*y + 4*z + q = 2946321, x + 7*y + 2*q = 5851213, 8*x + y + 2*q = 2563617, 10*x + 5*y + z = 10670279],[x,y,z,q], Domain = Dom::IntegerMod(8))
Error: expecting 'Domain=R', where R is a domain of category 'Cat::Field' [linsolve]
如果我将域更改为 IntegerMod(23) 和 IntegerMod(59407),相同的命令会返回正确的值,所以我认为 8 不合适,因为它不是素数。这是我尝试上述命令时的输出,其中每个 23 和 59407 作为我的域:
[x = 1 mod 23, y = 1 mod 23, z = 12 mod 23, q = 14 mod 23]
[x = 14087 mod 59407, y = 1 mod 59407, z = 14365 mod 59407, q = 37320 mod 59407]
这些答案是正确的 - x、y、z 和 q 对应于位于我的同余系统中的 L1、L2、L3 和 L4上面的 Math.StackExchange 链接。
【问题讨论】:
-
我想知道您是否可以通过Computational Science Stack Exchange 获得更多帮助(并且更深入地了解此类问题)?
-
当然,我也会在那里问,谢谢你的提示!有什么特别的原因可以让我在这里跑题吗?
-
这是一个编程站点,因此显示一些代码和预期的输出总是有帮助的。例如,您在 Math.StackExchange 链接中显示的 4×4 示例中使用的 Matlab 代码。我不清楚您所说的
linsolve不工作是什么意思(甚至您的意思是三个linsolve函数中的哪一个)。您是否期望不止一种解决方案,但求解器是returning just one?有没有实现这个的C代码? – 你也许可以创建一个 mex 函数。 -
感谢您的回复-抱歉,我事先没有任何代码。我已经添加了我看到的确切问题。如果还有什么我可以提供的,请告诉我。抱歉,我是 StackOverflow 和 StackExchange 的新手
-
我非常无知,但你不能用其他数值方法(例如
nlinfit)“暴力破解”线性系统的近似解吗?
标签: matlab cryptography linear-algebra symbolic-math mupad