我是密码学和模块化算术的新手。所以,我确定这是一个愚蠢的问题,但我无法帮助它。
如何从中计算 a
pow( a , q )= 1(mod p ),
哪里有 p 和 q ?我没有得到“1(mod p )”部分,它等于1,不是吗?如果是这样,那么“mod p ”是什么?
这和
是一样的吗
pow( a , -q )(mod p )= 1?
答案 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的工作原理是选择大p
和q
p
。一个(说q
)成为您的私钥,另一个(p
)是您的公钥。如果攻击者猜测a
,给定q
q
(加密邮件)和a
(您的公钥),则加密“已损坏”
所以,回答你的问题:
q
p
= 1 moda
这意味着q
p
是一个除以a
时余数为1的数字。我们不关心商的整数部分,所以我们可以写:
q
p
/n
=p
+ 1 /n
任何整数值p
。如果我们将等式的两边乘以a
,我们就得到:
q
np
=a
+ 1
解决a
我们:
np
=(q
+ 1) 1 /n
最后一步是找到生成a
原始值的{{1}}值。除了反复试验之外,我不知道有什么方法可以做到这一点 - 这相当于“蛮力”试图打破加密。