求解线性同余系统的等分解的算法

时间:2011-12-14 10:36:55

标签: math random cryptography discrete-mathematics

我在加密应用程序中遇到以下问题:我给出了一组线性同余

a[1]*x[1]+a[2]*x[2]+a[3]*x[3] == d[1] (mod p)
b[1]*x[1]+b[2]*x[2]+b[3]*x[3] == d[2] (mod p)
c[1]*x[1]+c[2]*x[2]+c[3]*x[3] == d[3] (mod p)

这里,x未知a,b,c,d给出

系统很可能是不确定的,所以我有一个很大的解决方案空间。我需要一种算法,使用伪随机数生成器(或失败)找到等分解的解决方案(这意味着在解决方案空间中等分布)。

我从线性代数课程中了解到的线性方程组的大多数标准算法并不直接适用于同余,据我所知......

我当前的“安全”算法的工作方式如下:查找仅出现在一个方程中的所有变量,并指定一个随机值。现在,如果在每一行中只有一个变量未分配,则根据同余分配值。否则失败。

任何人都可以给我一个如何解决这个问题的线索吗?

1 个答案:

答案 0 :(得分:2)

您可以使用高斯消元法和类似算法,就像您在线性代数课程中学到的那样,但所有算术都是执行mod p(p是素数)。一个重要的区别在于“除法”的定义:计算a / b而不是计算*(1 / b)(在单词中,“a b b inverse”)。请考虑对通常使用的数学运算进行以下更改

  • 另外:a + b变成a + b mod p
  • 减法:a-b变为a-b mod p
  • 乘法:a * b变为a * b mod p
  • 除法:a / b成为:如果p除b,则“错误:除以零”,否则a *(1 / b)mod p

要计算b mod p的倒数,您可以使用扩展的欧几里德算法,或者计算b **(p-2)mod p。

不要试图自己滚动,而是寻找现有的库或包。我想也许Sage可以做到这一点,当然Mathematica,Maple和类似的商业数学工具都可以。