Thuật toán bƣớc Baby và bƣớc Giant của Shank

Một phần của tài liệu Nghiên cứu và thử nghiệm mô hình bỏ phiếu thăm dò dư luận luận văn ths công nghệ thông tin 60 48 01 04 pdf (Trang 49 - 50)

Cho p là một số nguyên tố, thuật toán bƣớc Baby bƣớc Giant của Shank là một thuật toán tính logarithm rời rạc của số nguyên h thuộc Z*p với cơ số g và theo modulo p. Thuật toán này nhanh hơn thuật toán vét cạn với số phép toán trung bình là

( log )

O p p .

Ý tƣởng của thuật toán nhƣ sau:

Giả sử m   p, khi đó nếu x là logarithm rời rạc của h ta có thể viết x = mq+r với q là số nguyên nào đó và 0 r m . Bởi vậy, ta có đẳng thức:

h = gx = gmqgr (mod p) điều này có nghĩa là :

h(g-m)q = gr (mod p). Với phân tích nhƣ vậy, chúng ta có chiến lƣợc nhƣ sau:

- Tính tất cả các lũy thừa của g theo modulo p: g0, g1, …, gm-1 (mod p), - Trƣớc hết, tính g-m

(mod p), tiếp theo, ta tính h(g-m)q (mod p) với q = 0, 1, 2, … cho đến khi xuất hiện q thỏa mãn h(g-m)q ≡ qr (mod p) với 0 r m nào đó. Khi đó, logarithm rời rạc của h trong *

p

Z theo cơ số g bằng x = mq+r.

Ví dụ: Chọn p = 31, và ta có thể kiểm tra g = 3 là phần tử nguyên thủy của * 31

Z . Giả sử ta cần tìm logarithm rời rạc của h=6.

Các bƣớc thực hiện nhƣ sau:

- Tính m p6 và tính 6 lũy thừa của g: go = 1, g1 = 3, g2 = 3, g3 = 27, g4 = 81 ≡ 19(mod31), g5 = g4 g ≡ 19*3 ≡ 26(mod31).

- Tiếp theo, chúng ta tính g-1 = 3-1 (mod31). Áp dụng thuật toán Euclide mở rộng ta có: 3-1 (mod 31) = 21. Sau đó, ta tính đƣợc 3-6 (mod 31) = 2.

Đến đây, ta tính h(g-m)q = 6.2q với các giá trị của q chạy từ 0 tăng lên: h(g-m)0 = 6.20 = 6, h(g-m)1 = 6.21 = 12, h(g-m)2 = 6.22 = 24, h(g-m)3 = 6.23 ≡ 17 (mod 31), h(g-m)4 = 6.24 ≡ 3 (mod 31),

Đến đây ta thấy h(g-m)4 = g1 (mod p). Điều nay có nghĩa là h ≡ g4m+1 ≡ g4.6+1 ≡ g25. Vậy logarithm rời rạc của h = 6 là 25.

Một phần của tài liệu Nghiên cứu và thử nghiệm mô hình bỏ phiếu thăm dò dư luận luận văn ths công nghệ thông tin 60 48 01 04 pdf (Trang 49 - 50)