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

Một phần của tài liệu luận văn: nghiên cứu sự an toàn của một số hệ mật mã hiện đại (Trang 26)

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 *

p

Z 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(modp) điều này có nghĩa là :

h(g-m)q=gr(modp).

- Tính tất cả các lũy thừa của g theo modulo p: g0, g1, …, gm-1(modp),

- Trước hết, tính g-m(modp), tiếp theo, ta tính h(g-m)q(modp) với q=0, 1, 2, … cho đến khi xuất hiện q thỏa mãn h(g-m)q≡qr(modp) 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

(mod31)=21. Sau đó, ta tính được 3-6(mod31)=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(mod31), h(g-m)4=6.24≡3(mod31),

Đến đây ta thấy h(g-m)4=g1(modp). Đ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 luận văn: nghiên cứu sự an toàn của một số hệ mật mã hiện đại (Trang 26)

Tải bản đầy đủ (PDF)

(84 trang)