NTRU là một trong những sơ đồ mật mã dựa trên lưới (lattice-based) sớm nhất được đề xuất để chống lại máy tính lượng tử, hoạt động trên vành đa thức Rq=Zq[x]/(xn−1).
Cho bộ tham số n,q,p, đa thức khoá công khai h=(h0,…,hn−1), đa thức ngẫu nhiên r=(r0,…,rn−1) và đa thức thông điệp m=(m0,…,mn−1) (các hệ số của r,m thường nhỏ, ví dụ ∈{−1,0,1}). Bản mã được tính theo công thức mã hoá NTRU thu gọn:
c=(p⋅r⋅h+m)modq
trong đó phép nhân đa thức là tích chập vòng (cyclic convolution) theo modulo xn−1: hệ số bậc k của tích a⋅b là ∑(i+j)modn=kaibj. Kết quả mỗi hệ số của c được đưa về đại diện không âm trong khoảng [0,q−1].
Cho n,q,p,h,r,m, hãy tính đa thức bản mã c.
Ví dụ
Input:
4 32 3
5 1 0 2
1 0 -1 0
1 0 0 -1
Output:
16 29 17 2
Dòng 1: ba số nguyên n,q,p (1≤n≤200, 2≤q). Dòng 2: n số nguyên — các hệ số h0,…,hn−1. Dòng 3: n số nguyên — các hệ số r0,…,rn−1 (có thể âm). Dòng 4: n số nguyên — các hệ số m0,…,mn−1 (có thể âm).
In ra n số nguyên c0,…,cn−1 trên một dòng, cách nhau bởi dấu cách, mỗi số nằm trong [0,q−1].
Ví dụ:
Đầu vào:
1 16 3
7
1
1
Đầu ra:
6
Đầu vào:
4 32 3
5 1 0 2
1 0 -1 0
1 0 0 -1
Đầu ra:
16 29 17 2
Đang tải editor...