2010-07-27 3 views

답변

3

직접 누승 잉여 다음

직접 멱승 잉여에있어서, 상기 확장 된 유클리드 알고리즘의 대안으로된다 같이

자료 : http://en.wikipedia.org/wiki/Modular_multiplicative_inverse

+1

이 방법을 사용하려면 역순으로 그룹을 정렬해야합니다. RSA의 경우에는 대개 이것을 모른다. – abc

+0

모듈러스가 소수라면 P-1입니다. 키 생성시 RSA 키의 경우 (P-1) * (Q-1)도 알 수 있습니다. 키 쌍이 작성되면 그룹의 순서가 개인 키를 찾는 것과 동일하므로 키 쌍을 생성하면 계수의 인수 분해가 취소됩니다. – phkahler

+0

RSA에서 'e (mod φ (n))'의 역함을 발견 할 필요가있는 개인 키를 찾으려면이 방법을 사용하여 'φ (φ (n))'를 계산해야합니다. 'φ (n)'. 그래서 @abc가 옳다.이 방법은 사용할 수 없다. 나는 이것에 대해서조차 생각조차하지 않았다. –

3

실제로 직접 모듈화 지수보다 훨씬 빠른 Extended Euclidean Algorithm을 사용하십시오. 당신은 DSA의 alghoritm에 대한 w을 계산해야하는 경우

0

def privateExponent(p,q,e): 
    totient=(p-1)*(q-1) 
    for k in range(1,e): 
     if (totient*k+1) % e==0: 
      return (totient*k+1)/e 
    return -1 # shouldnt get here 

방정식 d * e = 1 (mod totient)은 d * e = 1 + k * totient (k의 일부 값)로 재 작성 될 수 있으며 프로그램은 e로 나눌 수있는 방정식을 만드는 k의 첫 번째 값을 검색합니다 (공개 지수). e가 작은 경우 (보통 권장 됨) 작동합니다.

성능 향상을 위해 모든 bignum 연산을 루프 밖으로 이동할 수 있습니다.

def privateExponent(p,q,e): 
    totient=(p-1)*(q-1) 
    t_mod_e=totient % e 
    k=0 
    total=1 
    while total!=0: 
     k+=1 
     total=(total+t_mod_e) % e 
    return (k*totient+1)/e 

그것은 전자 = 3, 우리가 정말 답으로 검색하지 않아도 밝혀 항상 2 * ((P-1) * (Q-1) +1)/3

입니다
관련 문제