Các thuật toán cho bài toán Logarit rời rạc

Một phần của tài liệu giáo trình an toàn thông tin - chương 1 an toàn dữ liệu trên mạng máy tính (Trang 38 - 41)

C i= LSi(i-1) Di = LSi(Di-1)

5.2Các thuật toán cho bài toán Logarit rời rạc

CHƯƠNG 5 MÃ HÓA KHÓA CÔNG KHA

5.2Các thuật toán cho bài toán Logarit rời rạc

Trong phần này ta xem rằng p là số nguyên tố, α là phần tử nguyên thuỷ theo mođun p. Ta thấy rằng p và α là các số cố định. Khi đó bài toán logarith rời rạc có thể được phát biểu dưới dạng sau: tìm một số mũ a duy nhất, 0 ≤ a ≤ p-2 sao cho αa ≡β

(mod p), với β∈ Zp* cho trước.

Rõ ràng là bài toán logarith rời rạc (Discrete Logarith-DL) có thể giải bằng một phép tìm kiếm vét cạn với thời gian cỡ O(p) và không gian cỡ O(1) (bỏ qua các thừa số logarith). Bằng cách tính toán tất cả các giá trị αa có thể và sắp xếp các cặp có thứ tự (a,

αa mod p) có lưu ý đến các toạ độ thứ hai của chúng, ta có thể giải bài toán DL với thời gian cỡ O(1) bằng O(p) phép tính toán trước và O(p) bộ nhớ (vẫn bỏ qua các thừa số logarith). Có một số thuật toán cho bài toán logarith rời rạc như: Shanks, Pohlig-

Đặt m = p-1

Tính mj mod p, 0 j m-1

Sắp xếp m cặp thứ tự (j,mj mod p) có lưu ý tới các toạ độ thứ hai của các cặp này, ta sẽ thu được một danh sách L1 Tính -i mod p, 0 i m-1

Sắp xếp m cặp thứ tự (i, -i mod p) có lưu ý tới các tọa độ thứ hai của các cặp được sắp này, ta sẽ thu được một danh sách L2 Tìm một cặp (j,y) L1 và một cặp (i,y) L2 (tức là một cặp có toạ độ thứ hai như nhau)

Xác định log = mj + i mod (p-1)

Thuật toán Shanks cho bài toán DL

• Nếu cần, các bước 1 và 2 có thể tính toán trước (tuy nhiên, điều này không ảnh hưởng tới thời gian chạy tiệm cận)

• Tiếp theo cần để ý là nếu (j,y) ∈ L1 và (i,y) ∈ L2 thì

αmj = y = βα-i

Bởi vậy αmj+i = β như mong muốn.

Ngược lại, đối với β bất kì ta có thể viết: logαβ = mj+i

trong đó 0 ≤ j,i ≤ m-1. Vì thế phép tìm kiếm ở bước 5 chắc chắn thành công.

Có thể áp dụng thuật toán này chạy với thời gian O(m) và với bộ nhớ cỡ O(m) (bỏ qua các thừa số logarith). Chú ý là bước 5 có thể thực hiện một cách (đồng thời) qua từng danh sách L1 và L2.

Sau đây là một ví dụ nhỏ để minh hoạ:

Giả sử p=809 và ta phải tìm log3525. Ta có α = 3, β = 525 và m = √808 = 29. Khi đó: α29 mod 809 = 99

Trước tiên tính các cặp được sắp (j, 99j mod 809) với 0 ≤ j≤28. Ta nhận được danh sách sau: (0,1) (1,99) (2,93) (3,308) (4,559) (5,329) (6,211) (7,664) (8,207) (9,268) (10,644) (11,654) (12,26) (13,147) (14,800) (15,727) (16,781) (17,464) (18,314) (19,275) (20,582) (21,496) (22,564) (23,15) (24,676) (25,586) (26,575) (27,295) (28,81)

Trường Đại học Hải Phòng Bài giảng: An toàn thông tin (5,132) (6,44) (7,554) (8,724) (9,511) (10,440) (11,686) (12,768) (13,256) (14,,355) (15,388) (16,399) (17,133) (18,314) (19,644) (20,754) (21,496) (22,564) (23,15) (24,676) (25,356) (26,658) (27,489) (28,163)

Sau khi sắp xếp danh sách này, ta có L2 . Bây giờ nếu xử lý đồng thời qua cả hai danh sách, ta sẽ tìm được (10,644) trong L1 và (19,644) trong L2.

Bây giờ ta có thể tính:

log3525 = 29×10+19 = 309

Có thể kiểm tra thấy rằng quả thực 3309≡ 525 (mod 809).

Một phần của tài liệu giáo trình an toàn thông tin - chương 1 an toàn dữ liệu trên mạng máy tính (Trang 38 - 41)