Các phương pháp sinh số nguyên tố

Một phần của tài liệu Hệ tiêu chuẩn tham số an toàn cho hệ mật RSA và ứng dụng (Trang 29 - 34)

1.3.2.1. Sử dụng các phép kiểm tra tính nguyên tố xác suất

Cho T là một phép kiểm tra tính nguyên tố xác suất nào đó. Xác suất sai của thuật toán phụ thuộc vào số lần thực hiện các phép kiểm tra.

Phương pháp lựa chọn ngẫu nhiên các ứng cử viên

Giả sử phép kiểm tra tính nguyên tố xác suất T được chọn để sinh các số nguyên tố p có độ dài là k bít, khi đó thuật toán được thực hiện như sau:

Thuật toán 1.11 (Thuật toán lựa chọn ngẫu nhiên các ứng cử viên)

Bước 2: Nếu p qua được phép kiểm tra T thì dừng. Còn không quay lại bước 1.

Chú ý:

 Để ước lượng xác suất thuật toán này cho đầu ra là một hợp số, cần phải phân tích phép kiểm tra T xử lý như thế nào với các đầu vào được lựa chọn ngẫu nhiên. Xác suất này có thể không như xác suất cực đại mà phép thử T chấp nhận hợp số.

 Thuật toán được đảm bảo cho đầu ra các số nguyên tố được lựa chọn đồng đều k bít và bởi vậy thoả mãn yêu cầu chung về phân bố đầu ra.

Phương pháp tìm kiếm tăng dần

Cho là tham số giới hạn số lượng tăng dần khi thực hiện tìm kiếm một số nguyên tố p có độ dài k bít sử dụng phép kiểm tra tính nguyên tố T. Thủ tục dựa trên một cách khác trong việc lựa chọn các ứng cử viên nguyên tố và có những thuận lợi nhất định trong thực hành so với phương pháp lựa chọn ngẫu nhiên các ứng cử viên.

Thuật toán 1.12 (Thuật toán tìm kiếm tăng dần)

Bước 1: Chọn ngẫu nhiên số lẻ n0 sao cho 2k-1 < n0 < 2k. Lấy p = n0 và pmax = min(2k, n0 + 2). Thực hiện thủ tục dưới đây:

Bước 2: Nếu p qua được phép kiểm tra T, cho đầu ra là p và dừng Bước 3: Lấy p = p + 2. Nếu p > pmax quay lại bước 1, ngược lại quay

về bước 2.

Thuật toán này chọn ngẫu nhiên n0 và kiểm tra tính nguyên tố của n0, n0

+ 2, ..., n0 + 2. Nếu không tìm thấy số nguyên tố, thì lựa chọn lại giá trị ngẫu nhiên n0 mới và thủ tục được lặp lại.

Chú ý:

 Xác suất sai của thuật toán trên có thể được ước lượng sử dụng các phương pháp tương tự như đối với thuật toán lựa chọn ngẫu nhiên ứng

cử viên. Các định lượng sẽ không đồng nhất, chúng phụ thuộc vào việc chọn T. Có một gợi ý rằng sử dụng tham số = 10ln(2k). Kết quả này cho xác suất cao trong việc tìm thấy một số nguyên tố trong khoảng đầu tiên.

 Thuật toán này không lựa chọn các số nguyên tố với phân bố đồng đều một cách chính xác trong các số k bít. Điều này xuất phát từ thực tế, các số nguyên tố không phân bố một cách bình thường; xác suất để chọn được một số số nguyên tố sẽ lớn hơn đối với một số số nguyên tố khác. Tuy nhiên, phân bố đầu ra hầu như là đồng đều đối với tham số được chọn một cách thích hợp.

1.3.2.2. Các thuật toán sinh số nguyên tố tất định.

Trong phần này sẽ giới thiệu hai thuật toán sinh số nguyên tố tất định được đưa ra trong [18]: thuật toán sinh số nguyên tố của Shawe-Taylor và thuật toán sinh số nguyên tố của Maurer.

Thuật toán của Shawe-Taylor

Thuật toán của Shawe-Taylor sinh một số nguyên tố ngẫu nhiên từ một điểm bắt đầu. Thuật toán lấy đầu vào là số nguyên k, độ dài theo bít của số nguyên tố cần sinh. Thuật toán trả về một số p. Thuật toán sử dụng duy nhất một tham số: L, giới hạn sử dụng phép chia thử để kiểm tra sơ bộ về tính nguyên tố.

Thuật toán thực hiện như sau:

Thuật toán 1.13 (Thuật toán sinh số nguyên tố của Shawe-Taylor)

Bước 1: Nếu 2k < L thì sinh ngẫu nhiên một số nguyên lẻ k bít, p, và kiểm tra tính nguyên tố bằng cách chia thử. Lặp lại cho đến khi p là một số nguyên tố. Cho đầu ra p và dừng.

Bước 2: Nếu k lẻ, lấy k1 = (k + 3)/2. Nếu k chẵn lấy k1 = k/2 + 1. Gọi đệ qui thuật toán này với đầu vào là k1, để tìm một số nguyên tố q có độ

dài k1 bít.

Bước 3: Chọn ngẫu nhiên số nguyên x, 2k-1  x < 2k (adsbygoogle = window.adsbygoogle || []).push({});

Bước 4: Lấy t là số nguyên nhỏ nhất lớn hơn x/(2q)

Bước 5: Nếu 2tq + 1  2k, thì lấy t là số nguyên nhỏ nhất lớn hơn (2k – 1)/(2q)

Bước 6: Lấy p = 2qt + 1

Bước 7: Lựa chọn ngẫu nhiên một số nguyên a sao cho 1 < a < p – 1 và lấy x = a2t mod p. Nếu:

x  1

gcd(x – 1, p) = 1

xq  1 mod p thì cho đầu ra là p

Bước 8: Ngược lại lấy t = t + 1 và lặp lại các bước từ 5 đến 8.

Thuật toán sinh số nguyên tố của Maurer

Cũng như thuật toán sinh số nguyên tố của Shawe-Taylor, thuật toán của Maurer dựa trên một thực tế như sau:

Cho p = 1 + 2Rq, với q là một số nguyên tố lẻ và q > R. Nếu tồn tại

một số nguyên a thỏa mãn ap11(mod )p và gcd(a2R-1, p) = 1 thì p là nguyên tố.

Thuật toán của Maurer sinh ra một số nguyên tố ngẫu nhiên p từ một điểm xuất phát cùng với một chứng nhận về tính nguyên tố của số p.

Một chứng nhận tính nguyên tố chứa đựng thông tin có thể kiểm tra hiệu quả rằng một số cho trước có phải là nguyên tố không. Đối với các số

nhỏ (nhỏ hơn hoặc bằng một giới hạn L cho trước nào đó) việc kiểm tra tính nguyên tố hiệu quả nhất là thông qua phép chia thử. C0 được ký hiệu là chứng nhận tính nguyên tố rỗng. Trong trường hợp ngược lại, đối với các số p lớn hơn L, chứng nhận nguyên tố của chúng được ký hiệu là C(p).

Chứng nhận về tính nguyên tố của một số nguyên pL có cấu trúc như sau:

Proof(p) = (p, q, a)

Bộ ba này là một bằng chứng về tính nguyên tố nếu các điều kiện dưới đây được thỏa mãn:

q là một số nguyên tố lẻ sao cho:  q là ước của p – 1

 2

( 1) / 2

qp

a là một số nguyên sao cho 1 < a < p và  ( 1) (mod ) 1 p ap   ( -1) / gcd(a p q-1, ) 1p

Chứng nhận tính nguyên tố C(p) cho số nguyên p như sau:

 Nếu pL thì C(p) = C0(p)

 Nếu p > L thì C(p) = “Proof(p), C(q)” với Proof(p) = (p, q, a)

Thuật toán sinh số nguyên tố của Maurer lấy đầu vào là một số nguyên

k là độ dài theo bít của số nguyên tố cần sinh. Thuật toán trả về một số p, và một chứng nhận tính nguyên tố của nó, C(p). Thuật toán sử dụng hai tham số:

L giới hạn phép chia thử.

M là giá trị đảm bảo thuật toán cho kết quả đầu ra. Giá trị M = 20 được khuyến cáo. (adsbygoogle = window.adsbygoogle || []).push({});

Thuật toán 1.14 (Thuật toán sinh số nguyên tố của Maurer)

Bước 1: Nếu 2k < L thì sinh ngẫu nhiên một số nguyên lẻ k bít, p, và kiểm

tra tính nguyên tố bằng cách chia thử. Lặp lại cho đến khi p là một số

nguyên tố. Cho đầu ra p và chứng nhận C0(p).

Bước 2: Nếu k  2M, lấy r = 1/2. Ngược lại, thực hiện lặp lại điều dưới đây cho đến khi k - rk > M.

Lựa chọn ngẫu nhiên một số thực s, 0  s  1, và lấy r = 2s-1

Bước 3: Lấy k1 =rk + 1. Gọi đệ qui thuật toán này với đầu vào là k1, để xác định một số nguyên tố k1 bít q và một chứng nhận C(q).

Bước 4: Lấy t = 2k-1/(2q)

Bước 5: Chọn ngẫu nhiên số nguyên R sao cho t < R  2t và lấy p = 2Rq +

1

Bước 6: Chọn một số nguyên a với 1 < a < p – 1. Nếu

 ( 1) (mod ) 1 p ap   2 gcd(a R1, ) 1p

thì cho đầu ra p và chứng nhận (p, q, a), C(q) Bước 7: Ngược lại, lặp lại các bước từ 5 đến 7.

Một phần của tài liệu Hệ tiêu chuẩn tham số an toàn cho hệ mật RSA và ứng dụng (Trang 29 - 34)