2010-03-10 2 views
6

역 다항식을 계산하는 데 도움이되는 알고리즘 (또는 코드)을 찾고 있는데, NTRUEncrypt를 구현하는 데 필요합니다. 쉽게 이해할 수있는 알고리즘은 내가 선호하는 것입니다. 이렇게하는 의사 코드가 있지만 구현하기가 어렵고 혼란스럽고 의사 코드만으로는 그 절차를 이해할 수 없습니다.다항식의 역함수를 계산하는 알고리즘

ring of truncated polynomials에 관한 다항식의 역행렬을 계산하는 알고리즘은 무엇입니까?

+2

어느 역수입니까? 당신은 다항식을 푸는 (즉, 인수 분해하는) 역함수를 원하십니까? 아니면 어떤 기본 필드에 대한 다항식의 지수와 기약 다항식으로 형성된 필드에서 곱셈 역함수를 찾고 싶습니까? NTRU는 IIRC의 "Number Theorists R Us"의 약자로 수학이 필요하다는 것을 쉽게 이해할 수 없습니다. http://en.wikipedia.org/wiki/NTRUEncrypt는 "암호화와 복호화 모두 단순한 다항식 곱셈만을 사용합니다"라고 말합니다. 필요한 모든 것이 MathOverflow 질문 일 수 있습니다. –

+0

여기 http://www.ntru.com/cryptolab/tutorial_algebra.htm#three –

+0

Gotcha. 그것은 실제로 제가 설명한 필드가 아니지만 약간 다른 링 (모든 반전이 존재하지는 않음)이긴하지만 제가 말한 두 번째 것과 더 비슷합니다. NTRU 기술 노트 14를 읽으면 결국, 의사 코드 뒤에 "왜 작동 하는가"에 대한 설명이 있습니다. 이것은 행 감소에 의해 행렬을 반전하는 것과 같습니다. 즉, 1을 얻을 때까지 여러 개의 변형을 적용한다는 의미에서 역원은 그 변환의 모든 역이 함께 곱해진 것입니다. 그것이 바로 의사 코드가하는 일입니다. 그러나 나는 14 번 소화 된 것을 완전히 소화했다고 주장하지 않고 방금 그것을 훑어 보았다. –

답변

11

저는 NTRU를 소유 한 Security Innovation에서 일하므로이 관심사를 보게되어 기쁩니다.

IEEE 표준 1363.1-2008은 최신 매개 변수 집합을 사용하여 NTRUEncrypt를 구현하는 방법을 지정합니다. 이 다항식 반전 아래 사양을 제공한다 :

등급 :

입력은 B가도 N-1이고 A와 B 두 다항식이며 b_N는 (B)의 선두 계수이다. 출력은 a = q * b + r 및 deg (r) < deg (b)가되도록 q와 r입니다. r_d는 차수 d의 r의 계수, 즉 r의 선두 계수를 나타낸다.

a) Set r := a and q := 0 
b) Set u := (b_N)^–1 mod p 
c) While deg r >= N do 
    1) Set d := deg r(X) 
    2) Set v := u × r_d × X^(d–N) 
    3) Set r := r – v × b 
    4) Set q := q + v 
d) Return q, r 

여기에서, r_d는 차수 d의 r의 계수이다.

확장 유클리드 알고리즘 :

a) If b = 0 then return (1, 0, a) 
b) Set u := 1 
c) Set d := a 
d) Set v1 := 0 
e) Set v3 := b 
f) While v3 ≠ 0 do 
    1) Use the division algorithm (6.3.3.1) to write d = v3 × q + t3 with deg t3 < deg v3 
    2) Set t1 := u – q × v1 
    3) Set u := v1 
    4) Set d := v3 
    5) Set v1 := t1 
    6) Set v3 := t3 
g) Set v := (d – a × u)/b [This division is exact, i.e., the remainder is 0] 
h) Return (u, v, d) 

Z_p에서 역 프라임 PA : Z_p^E/(M (X에

a) Run the Extended Euclidean Algorithm with input a and (X^N – 1). Let (u, v, d) be the output, such that a × u + (X^N – 1) × v = d = GCD(a, (X^N – 1)). 
b) If deg d = 0, return b = d^–1 (mod p) × u 
c) Else return FALSE 

역), PA 프라임, M (X) 적절한 다항식과 같은 X^N-1

a) Use the Inversion Algorithmto compute a polynomial b(X) ε R[X] that gives an inverse of a(X) in (R/pR)[X]/(M(X)). Return FALSE if the inverse does not exist. [The Inversion Algorithm may be applied here because R/pR is a field, and so (R/pR)[X] is a Euclidean ring.] 
b) Set n = p 
c) While n <= e do 
    1) b(X) = p × b(X) – a(X) × b(X)^2 (mod M(X)), with coefficients computed modulo p^n 
    2) Set n = p × n 
d) Return b(X) mod M(X) with coefficients computed modulo p^e. 

당신은 b에 교육 기관을 얻을 수있는 경우에 당신이 볼 수 NTRU의 전체 구현을하고 있다면 uy 1363.1, 원시 NTRU 암호화는 활성 공격자에 대해 안전하지 않으므로 1363.1에서는이를 해결하기위한 메시지 처리 기술을 설명합니다.

(업데이트 : 2013-04-18 : 이전 버전의 일부 오류를 찾아 주셔서 감사합니다.)

+0

이 질문을 부활시킬 수 있다면,'b_N^-1 mod p'가 없기 때문에 구현이 실패 할 경우 어떤 조언을 해줄 수 있습니까? 특히, 알고리즘을 실패하게하는 2044^-1 mod 2048과 같은 것이 나타납니다. 나는 새로운'f'만으로 다시 시작하지만 무한정 실패합니다. – Logan

+0

알다시피, 마지막 psuedo-code 섹션은'mod p^e' 대신'mod p'를 계산 한 다음 그것을 고치기 만하면됩니다. 그런데 Gunna는 시간을내어 그걸 깨뜨린 다. – Logan

+0

Z_p^e/(M (X))의 역함수를 계산하는 알고리즘에서, 점 c) 2)는 잘못된 것 같습니다. 'n'은'p'의 지수이므로'n = p * n' 대신'n = n + 1'이되어야합니다. 방금 위키피디아의 예제 (https://en.wikipedia.org/wiki/NTRUEncrypt#Public_key_generation)를 사용하여 이것을 테스트했으며 'n = n + 1'에서는 작동하지만 'n = p * n'에서는 작동하지 않습니다. . – AbcAeffchen