2010-03-10 19 views
6

Ters bir polinomu hesaplamama yardımcı olacak bir algoritma (veya kod) arıyorum NTRUEncrypt'i uygulamak için ona ihtiyacım var. Kolay anlaşılır bir algoritma tercih ettiğim şeydir, bunu yapmak için sözde kodlar vardır, ancak bunlar kafa karıştırıcı ve uygulanması zor, ayrıca prosedürü sadece sahte koddan anlayamıyorum.Bir polinomun tersini hesaplamak için algoritma

Bir polinomun tersini ring of truncated polynomials'a göre hesaplamak için herhangi bir algoritma var mı?

+2

Hangi tersi? Ters fonksiyon, polinomları çözmek (ya da çarpanlara ayırmak) ister misiniz, ya da onların çoğaltıcı terslerini, bazı taban alanı üzerindeki polinomların bölümü olarak oluşturulan alanda ve indirgenemez bir polinomla mı bulmak istiyorsunuz? NTRU, "Sayı Teorisyenleri R Us", IIRC'nin kısaltmasıdır, bu yüzden matematiğin gerek duyduğu şeyleri belirlemek zordur. http://en.wikipedia.org/wiki/NTRUEncrypt "hem şifreleme hem de şifre çözme sadece basit polinom çarpmalarını kullanır" diyor, böylece makale ne demek istediğini bana söylemedi. Her ne gerekiyorsa, bu bir MathOverflow sorusu olabilir. –

+0

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

+0

Gotcha. Daha önce söylediğim ikinci şey gibi, aslında tarif ettiğim alan değil ama biraz farklı bir halka (tüm ters çevrimler mevcut değil). NTRU teknik notunu 14 okursanız, sonunda "neden çalışır" ın sözde kodundan sonra bir açıklama vardır. Bir matrisin satır küçültmesiyle tersine çevrilmesi gibi, 1'e ulaşıncaya kadar bir dizi dönüşüm uygulayacağınız anlamında, tersi, bu dönüşümlerin tüm tersleri ile çarpılır. Sözde kodun yaptığı şey bu. Ama tamamen sindirilmiş 14 nota sahip olduğumu iddia etmiyorum, sadece kaydım. –

cevap

11

NTRU'nun sahibi olan Security Innovation için çalışıyorum, bu ilgiyi görmekten memnuniyet duyuyorum.

IEEE standardı 1363.1-2008, NTRUEncrypt öğesinin en güncel parametre kümeleriyle nasıl uygulanacağını belirtir. Bu polinomları ters çevirmek için, aşağıdaki özellikleri yer almaktadır:

Bölümü:

giriş b derecesi N-1 olan a ve b, iki polinomlar, ve b_N b lider katsayısıdır. Çıkışlar q ve r'dir, öyle ki = q * b + r ve deg (r) < derece (b). r_d, r'nin d katsayısını, yani r'nin lider katsayısını gösterir.

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 

Burada r_d, r'nin d katsayısıdır.

Genişletilmiş Öklid Algoritma:

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 ınvers, ana 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 

Ters), pa asal, M (X), uygun bir polinom gibi 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. 

Eğer b için kurum alabilirsiniz eğer görmelisiniz devresine farksal güç analizi tam bir uygulaması yapıyorsanız 1363.1, ham NTRU şifreleme aktif bir saldırgan karşı güvenli değildir ve 1363.1 bunu düzeltmek için mesaj işleme tekniklerini açıklar.

(Güncelleştir 2013-04-18: Önceki sürümdeki bazı hataları tespit etmek için Sonel Sharam'a teşekkürler)

+0

Eğer bu soruyu diriltebilirsem, eğer uygulamam başarısız oluyorsa verebileceğin herhangi bir tavsiyem var mı, çünkü 'b_N^-1 mod p' var değil mi? Özellikle, 2044^-1 mod 2048 gibi bir şey ortaya çıkacak ve bu da algoritmanın başarısız olmasına neden olacaktır. Sadece yeni bir 'f' ile yeniden başlıyorum ama süresiz olarak başarısız oluyor. – Logan

+0

Bunun ne olduğunu biliyorsunuz, pod e kodu yerine "mod p^e" modunu hesaplamak ve bunu düzeltmek için kullanılan son psuedo-kod bölümü idi. Yine de Gunna biraz zaman alsın. – Logan

+0

Z_p^e/(M (X)) içindeki tersini hesaplamak için kullanılan algoritmada c) 2) yanlış görünüyor. Bu, n = p * n' yerine 'n = n + 1 'olmalıdır, çünkü' n' 'p''nin üssüdür. Bunu sadece [Wikipedia'da verilen örnek] ile test ettim (https://en.wikipedia.org/wiki/NTRUEncrypt#Public_key_generation) ve n = n + 1 ile çalışıyor ancak n = p * n' ile değil . – AbcAeffchen