模块化算术

时间:2008-11-11 00:42:04

标签: cryptography math modular

我是密码学和模块化算术的新手。所以,我确定这是一个愚蠢的问题,但我无法帮助它。

如何从中计算 a pow( a q )= 1(mod p ),
哪里有 p q ?我没有得到“1(mod p )”部分,它等于1,不是吗?如果是这样,那么“mod p ”是什么?
这和
是一样的吗 pow( a -q )(mod p )= 1?

2 个答案:

答案 0 :(得分:12)

(mod p)部分不是指右侧,而是指等号:它表示 modulo p,pow(a,q)和1相等。例如,“模10,246126和7868726相等”(并且它们也等于6模10):两个数字x和y等于模p,如果它们在除以p时具有相同的余数,或者等价地,如果p除以xy。

由于你似乎是从编程角度来看,另一种说法是pow(a,q)%p = 1,其中“%”是以多种语言实现的“余数”运算符(假设p为H. 1)

你应该阅读关于Modular arithmetic的维基百科文章,或任何基本数论理论书(甚至是加密书,因为它可能会引入模运算)。

回答你的另一个问题:一般来说,没有找到这样的 a (据我所知)的一般公式。假设p是素数,并使用Fermat's little theorem来减少q模p-1,并假设q除p-1(或者没有这样的 a 存在),你可以产生这样的 a 通过取primitive root p并将其提升到幂(p-1)/ q。 [更一般地说,当p不是素数时,你可以减少q模数φ(p),然后假设它除了φ(p)并且你知道一个原始根(比如说r)mod p,你可以将r取为r的幂φ(p)/ q,其中φ是the totient function - 这来自Euler's theorem。]

答案 1 :(得分:5)

根本不是愚蠢,因为这是公钥加密的基础。您可以在http://home.scarlet.be/~ping1339/congr.htm#The-equation-a%3Csup%3Ex.

找到一个很好的讨论

PKI的工作原理是选择大pq p。一个(说q)成为您的私钥,另一个(p)是您的公钥。如果攻击者猜测a,给定q q (加密邮件)和a(您的公钥),则加密“已损坏”

所以,回答你的问题:

  

q p = 1 mod a

这意味着q p 是一个除以a时余数为1的数字。我们不关心商的整数部分,所以我们可以写:

  

q p / n = p + 1 / n

任何整数值p 。如果我们将等式的两边乘以a,我们就得到:

  

q np = a + 1

解决a我们:

  

np =(q + 1) 1 / n

最后一步是找到生成a原始值的{{1}}值。除了反复试验之外,我不知道有什么方法可以做到这一点 - 这相当于“蛮力”试图打破加密。