Tạo số nguyên tố p và q bằng việc sử dụng hàm băm

Một phần của tài liệu Báo cáo tóm tắt Chuẩn Chữ ký số và ứng dụng (Trang 26 - 28)

Phương pháp này sử dụng một hàm băm phải có độ an toàn bằng hoặc lớn hơn độ

an toàn của cặp (L, N). Tuy nhiên người ta khuyến cáo rằng độ an toàn của hàm băm và

của cặp (L, N) sẽ là như nhau trừ khi có một sự thỏa thuận giữa các bên tham gia nhằm

sử dụng một hàm băm mạnh. Tham số gốc domain_parameter_seed có độ dài là

seedlen bit, trong đó seedlenN.

Qui trình này sẽ trả về cặp 2 số nguyên pq có xác suất là nguyên tố rất cao. Để giúp cho người xác nhận có thể xác nhận được chính xác chúng thì giá trị của tham số domain_parameter_seedcounter sử dụng trong quá trình tạo p, q sẽ được trả về

trong đó domain_parameter_seedcounter không cần thiết phải giữ bí mật. Đặt

Hash() là hàm băm được lựa chọn phù hợp với cặp (L, N) và outlen là chiều dài đầu ra của hàm băm trong đó outlenN.

Qui trình tạo p, q như sau: Đầu vào:

1. L Chiều dài mong muốn của số nguyên tố p.

2. N Chiều dài mong muốn của số nguyên tố q.

3. seedlen Chiều dài mong muốn của tham số gốc trong đó seedlenN. Đầu ra:

1. status Trạng thái trả về của hàm tạo, trong đó status có thể là VALID

hoặc INVALID. Nếu status = INVALID được trả về thì có nghĩa

là không có giá trị nào của các tham số đầu ra được trả về hoặc là giá trị của chúng không hợp lệ.

2. p,q Các số nguyên tố tạo được p, q.

3. domain_parameter_seed (tùy chọn).

Là một giá trị khởi tạo được sử dụng để tạo ra pq

4. counter Bộ đếm(tùy chọn). Là giá trị đếm được tạo ra trong quá trình tạo

p, q. Qui trình:

1. Kiểm tra cặp (L, N) có thuộc danh sách các cặp (L, N) được chấp nhận (nêu

Báo cáo tóm tắt Chuẩn Chữ ký số và ứng dụng

2. If (seedlen < N), then return INVALID. 3. n = L / outlen - 1.

4. b = L - 1 - (n * outlen).

5. Gán một chuỗi bất kì có độ dài seedlen bít cho tham số gốc. 6. U = Hash (domain_parameter_seed) mod 2N.

7. q = U ∨ 2N-1∨1.

/* Mục đích của bước này là gán bít đầu tiên (bít thứ N) và bít cuối cùng (bít 0) của U thành 1 */

8. p is prime?

/* Kiểm tra xem p có là nguyên tố không bằng cách sử dụng thuật toán kiểm tra

tính nguyên tố mạnh nêu trong mục c. */ 9. If q is not a prime, then go to step 5.

/* Nếu q không là nguyên tố thì quay lại bước 5 để gán cho tham số gốc một giá (adsbygoogle = window.adsbygoogle || []).push({});

trị mới nhằm thu được một số q mới có thể là nguyên tố */ 10. offset = 1.

/*tạo được q là nguyên tố rồi, bắt đầu tạo p*/

11. For counter = 0 to 4095 do /*thử tối đa 4095 lần*/

11.1 For j = 0 to n do

Vj = Hash ((domain_parameter_seed + offset + j) mod 2seedlen). 11.2 W = V0 + (V1 * 2outlen) + ... + (Vn-1 * 2(n-1) * outlen) + ((Vn mod 2b)

* 2n * outlen).

/* Mục đích của bước này là tạo ra một số W gồm đúng L bít. W có dạng

như sau: W =VnVn-1 Vn-2…V1V0 trong đó Vn’ = Vn mod 2b có độ dài là b

bít, Vn-1, …, V0 đều có độ dài là outlen bít.

Có thể hiểu là ta ghép liên tiếp các chuỗi V0,…, Vn-1, Vn’ để tạo ra W */

11.3 X = W + 2L-1.

/* Vì W được tạo như trên nên chắc chắn W có độ dài là L bít, do đó số W

sẽ thỏa mãn 0 ≤ W < 2 L-1 nên ta có 2L-1 ≤ X < 2L

Mục đích của bước này là bước đầu tạo ra số L bít thỏa mãn điều kiện nằm

trong khoảng [2L-1 ,2L -1] giống như p */

11.4 c = X mod 2q.

11.5 p = X - (c - 1).

/* Cách tạo cp như trên dẫn tới p ≡1 (mod 2q). Tức là ta có p-1 chia hết cho 2q hay p-1 chia hết cho q. Đây chính là một mối quan hệ giữa hai số nguyên tố pq. */

/*nếu p không thỏa điều kiện ràng buộc là p ≥ 2L-1 thì phải quay lại bước 11.9 để thay đổi giá trị của offset nhằm tạo ra một giá trị W mới ở bước lặp

tiếp theo nhằm mong muốn tạo ra được số một số p mới là nguyên tố thỏa

mãn các điều kiện ràng buộc */

11.7 Sử dụng thuật toán kiểm tra tính nguyên tố mạnh để kiểm tra q.

11.8 Nếu p là nguyên tố thì trả về giá trị VALID và giá trị của p, q,

domain_parameter_seedcounter.

11.9 offset = offset + n + 1.

/* Khi p không là nguyên tố hoặc p không thỏa mãn điều kiện ràng buộc

của nó thì thay đổi offset và bắt đầu vòng lặp mới từ 11.1 đến 11.8 nếu bộ

đếm vẫn còn nhỏ hơn 4096 */ 12. Go to step 5.

/* Sau 4096 bước thử mà vẫn không tìm được p nào thì quay lại bước 5 để tạo

lại từ đầu một số q nguyên tố mới và sau đó là tạo p */ (adsbygoogle = window.adsbygoogle || []).push({});

Một phần của tài liệu Báo cáo tóm tắt Chuẩn Chữ ký số và ứng dụng (Trang 26 - 28)