You are on page 1of 57

VIỆN KHOA HỌC - CÔNG NGHỆ MẬT MÃ

PHÂN VIỆN KHOA HỌC MẬT MÃ


—————————————-

PHẠM HOÀNG MINH

BÀI TOÁN LOGARIT RỜI RẠC VÀ


DIFFIE-HELLMAN

BÁO CÁO THỰC TẬP

Hà Nội - 2020
VIỆN KHOA HỌC - CÔNG NGHỆ MẬT MÃ
PHÂN VIỆN KHOA HỌC MẬT MÃ
—————————————-

PHẠM HOÀNG MINH

BÀI TOÁN LOGARIT RỜI RẠC VÀ


DIFFIE-HELLMAN

BÁO CÁO THỰC TẬP

Hà Nội - 2020
MỤC LỤC MỤC LỤC

Mục lục

1 Kiến thức cơ bản 4


1.1 Một số định lý cơ bản trong Lý thuyết số . . . . . . . . . . . . . . . . . 4
1.2 Tổng quan về lý thuyết nhóm . . . . . . . . . . . . . . . . . . . . . . . 4

2 Bài toán logarit rời rạc 7

3 Bài toán logarit rời rạc khó đến đâu? 9

4 Trao đổi khóa Diffie-Hellman 13

5 Hệ mã hóa công khai ElGamal 15

6 Thuật toán va chạm cho bài toán logarit rời rạc 19

7 Định lý thặng dư Trung Hoa 21


7.1 Giải các phương trình đồng dư với các modulo hợp số . . . . . . . . . 24

8 Thuật toán Pohlig-Hellman 25

9 Bài tập 33
9.1 Bài tập 2.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
9.2 Bài tập 2.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
9.3 Bài tập 2.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
9.4 Bài tập 2.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
9.5 Bài tập 2.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
9.6 Bài tập 2.8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
9.7 Bài tập 2.9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
9.8 Bài tập 2.10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
9.9 Bài tập 2.11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
9.10 Bài tập 2.12 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
9.11 Bài tập 2.13 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
9.12 Bài tập 2.14 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
9.13 Bài tập 2.15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

1
MỤC LỤC MỤC LỤC

9.14 Bài tập 2.16 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44


9.15 Bài tập 2.17 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
9.16 Bài tập 2.18 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
9.17 Bài tập 2.19 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
9.18 Bài tập 2.21 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
9.19 Bài tập 2.23 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
9.20 Bài tập 2.26 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
9.21 Bài tập 2.28 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

2
MỤC LỤC MỤC LỤC

LỜI MỞ ĐẦU
Trao đổi khóa Diffie–Hellman là một phương pháp trao đổi khóa được phát minh
sớm nhất trong mật mã học. Phương pháp trao đổi khóa Diffie–Hellman cho phép
hai bên (người, thực thể giao tiếp) thiết lập một khóa bí mật chung để mã hóa dữ
liệu sử dụng trên kênh truyền thông không an toàn mà không cần có sự thỏa thuận
trước về khóa bí mật giữa hai bên. Khóa bí mật tạo ra sẽ được sử dụng để mã hóa
dữ liệu với phương pháp mã hóa khóa đối xứng. Giao thức này được công bố đầu
tiên bởi Whitfield Diffie và Martin Hellman vào năm 1976. Năm 2002, Hellman đề
xuất thuật toán nên được gọi là trao đổi khóa Diffie–Hellman–Merkle để ghi nhận
sự đóng góp của Ralph Merkle trong phát minh lĩnh vực mật mã hóa khóa công
khai. Mặc dù giao thức trao đổi khóa Diffie–Hellman bản thân nó là giao thức trao
đổi khóa ẩn danh (không xác thực), nó đã đưa ra một nền tảng cơ sở cho nhiều loại
giao thức xác thực và được sử dụng để tạo nên bí mật chuyển tiếp hoàn hảo trong
chế độ ngắn hạn của giao thức Transport Layer Security (EDH hoặc DHE tùy theo
bộ mã hóa). Phương pháp này được áp dụng sau đó cho thuật toán RSA.
Trong báo cáo này, ta tìm hiểu về bài toán logarit rời rạc và tính khó của nó, từ
đó chỉ ra tính bảo mật của trao đổi khóa Diffie-Hellman. Tiếp theo ta tìm hiểu về
bài toán Diffie-Hellman và trao đổi khóa ElGamal, là một hệ mã hóa công khai giúp
trao đổi thông tin và dựa trên tính khó của bài toán Diffie-Hellman. Sau đó ta tìm
hiểu về hai thuật toán để giải bài toán logarit rời rạc là Thuật toán bước nhỏ-bước
lớn của Shanks và Thuật toán Pohlig-Hellman giải bài toán logarit rời rạc dựa trên
Định lý thặng dư Trung Hoa.
Báo cáo này được tôi tìm hiểu trong Chương 2 của cuốn "An introduction to
Mathematical Cryptography"của các tác giả Jeffrey Hoffstein, Jill Pipher, và J.H.
Silverman . Báo cáo này tôi đã được giao tìm hiểu trong dịp Tết năm 2020 và báo
cáo ngay sau Tết năm 2020. Tuy nhiên, do đợt dịch Covid-19 nên phải đến tháng 5
tôi mới có thể báo cáo.
Tôi xin cảm ơn lãnh đạo Phân viện đã cho tôi vào thực tập trong khoảng thời gian
từ tháng 11 năm 2019 đến tháng 5 năm 2020. Tôi cũng xin cảm ơn các cán bộ trong
Phân viện cũng đã nhiệt tình giúp đỡ tôi trong quá trình làm báo cáo.

3
1 KIẾN THỨC CƠ BẢN

1 Kiến thức cơ bản

1.1 Một số định lý cơ bản trong Lý thuyết số

Dưới đây là một số mệnh đề, định lý cần thiết sẽ sử dụng ở phần sau của báo cáo.
Định lý 1.1 (Thuật toán Euclid mở rộng). Cho a và b là các số nguyên dương. Khi đó
phương trình
au + bv = gcd( a, b)
luôn có ít nhất một nghiệm nguyên u và v.
Nếu (u0 , v0 ) là một nghiệm bất kỳ, thì khi đó mọi nghiệm đều có dạng
b.k a.k
u = u0 + và v = v0 − với k ∈ Z.
gcd( a, b) gcd( a, b)
Định lý 1.2 (Định lý nhỏ Fermat). Cho p là một số nguyên tố và a là một số nguyên bất
kỳ. Khi đó (
1 ( mod p) nếu p - a,
a p −1 =
0 ( mod p) nếu p| a.
Định lý 1.3 (Định lý nghiệm nguyên thủy). Cho p là một số nguyên tố. Khi đó, tồn tại
một phần tử g ∈ F∗p mà các lũy thừa của nó là các phần tử của F∗p , nghĩa là

F∗p = {1, g, g2 , . . . , g p−2 }.

Các phần tử với tính chất này được gọi là các nghiệm nguyên thủy của F∗p hoặc các
phần tử sinh của F∗p . Chúng đều là các phần tử trong F∗p và có cấp p − 1.

1.2 Tổng quan về lý thuyết nhóm

Trong phần này, ta giới thiệu ngắn gọn một số khái niệm giúp ta hiểu hơn về
logarit rời rạc.
Ở trên, ta đã nói một chút về lũy thừa của các phần tử trong F∗p . Do lũy thừa chỉ
đơn giản là một phép nhân liên tiếp, đây là một điểm tốt để có thể bắt đầu. Ta muốn
nhấn mạnh một số tính chất quan trọng của phép nhân trong F∗p và chỉ ra những
tính chất này được sử dụng khá nhiều.
Các tính chất gồm có:

• Tồn tại phần tử 1 ∈ F∗p thỏa mãn 1 · a = a với mọi a ∈ F∗p .

4
1.2 Tổng quan về lý thuyết nhóm 1 KIẾN THỨC CƠ BẢN

• Mọi phần tử a ∈ F∗p có một phần tử nghịch đảo a−1 ∈ F∗p thỏa mãn

a · a−1 = a−1 · a = 1.

• Phép nhân có tính kết hợp:


a · (b · c) = ( a · b) · c
với mọi a, b, c ∈ F∗p .
• Phép nhân có tính giao hoán:
a·b = b·a
với mọi a, b ∈ F∗p .

Giả sử thay vì phép nhân trong F∗p , ta thay bằng phép cộng trong F p . Ta cũng sử
dụng ký hiệu 0 thay cho 1 và − a thay cho ký hiệu a−1 . Khi đó, các tính chất vừa nêu
vẫn đúng.
Tập hợp và các phép toán thể hiện tương tự như với phép nhân hoặc phép cộng
và được biết đến rộng rãi. Do đó, ta có thể đưa ra một khái niệm tổng quát về nhóm.
Định nghĩa 1.4. Một nhóm gồm một tập hợp G, và một phép toán, được ký hiệu là
?, bằng cách kết hợp hai phần tử a, b ∈ G để thu được phần tử a ? b ∈ G. Phép toán
? cần có các tính chất sau đây:
(a) Quy tắc phần tử trung hòa. Tồn tại một phần tử e ∈ G sao cho
e?a = a?e = a
với mọi a ∈ G.
(b) Quy tắc lấy nghịch đảo. Với mỗi a ∈ G, tồn tại (duy nhất) một phần tử a−1 ∈ G
sao cho
a ? a−1 = a−1 ? a = e.
(c) Quy tắc kết hợp. Với mọi a, b, ∈ G, ta có
a ? (b ? c) = ( a ? b) ? c.

Hơn nữa, nếu nhóm phép toán thỏa mãn thêm điều kiện
a?b = b?a
với mọi a, b, ∈ G, thì khi đó nhóm được gọi là nhóm giao hoán hoặc nhóm abel.
Nếu G có hữu hạn phần tử, ta nói G là một nhóm hữu hạn. Cấp của G là số phần
tử trong G, được ký hiệu là | G | hoặc #G.

5
1.2 Tổng quan về lý thuyết nhóm 1 KIẾN THỨC CƠ BẢN

Ví dụ 1.5. (i) Cho G = F∗p và ? là phép nhân modulo thông thường. Khi đó, phần
tử đơn vị là e = 1. Khi đó G là một nhóm hữu hạn cấp p − 1.
(ii) G = Z/nZ, và ? là phép cộng modulo. Khi đó, phần tử đơn vị là e = 0 và
nghịch đảo của a là − a. G là một nhóm hữu hạn cấp n.
(iii) Một ví dụ về một nhóm không giao hoán là
  
a b
G= : a, b, c, d ∈ R và ad − bc 6= 0
c d
 
1 0
với phép nhân ma trận đã biết. Phần tử đơn vị là e = và phép nghịch
0 1
đảo được cho bởi công thức quen thuộc
d −b
 
  −1
a b  − bc ad − bc 
=  ad− c a .
c d
ad − bc ad − bc
Chú ý G không giao hoán, lấy ví dụ
     
1 1 1 1 1 1 1 1
6=
0 1 1 0 1 0 0 1

Cho g là một phần tử của nhóm G và x là một số nguyên dương. Khi đó g x có


nghĩa là ta áp dụng phép toán nhóm x lần cho phần tử g,
gx = g ? · · · ? g .
| {z }
x lần

Ví dụ, lũy thừa g x trong nhóm F∗p có nghĩa thông thường, nhân g với chính nó x
lần. Nhưng "lũy thừa"g x trong nhóm Z/nZ nghĩa là lấy g cộng với chính nó x lần.
Thông thường, nếu cộng như vậy ta sẽ viết x · g. Ta cũng có thể đưa ra định nghĩa
về g x khi x không phải số dương. Do đó, nếu x là số nguyên âm, ta định nghĩa
g x = ( g −1 ) | x | .
Với x = 0, ta đặt g0 = e, là phần tử trung hòa.
Định nghĩa 1.6. Cho G là một nhóm và cho a ∈ G là một phần tử trong nhóm. Giả
sử tồn tại một số nguyên dương d với tính chất ad = e. Số d nhỏ nhất thỏa mãn tính
chất trên được gọi là cấp của a. Nếu không tồn tại số d, ta nói a có cấp vô hạn.
TIếp theo, ta đưa ra hai mệnh đề minh họa các tính chất quan trọng của cấp của
một phần tử trong nhóm.

6
2 BÀI TOÁN LOGARIT RỜI RẠC

Mệnh đề 1.7. Cho G là một nhóm hữu hạn. Khi đó, mọi phần tử của G đều có cấp hữu
hạn. Hơn nữa, nếu a ∈ G có cấp d và ak = e thì d|k.
Mệnh đề 1.8 (Định lý Lagrange.). Cho G là một nhóm hữu hạn và cho a ∈ G. Khi đó,
cấp của a chia hết cấp của G.
Một cách chính xác hơn, cho n = | G | là cấp của G và d là cấp của a. Khi đó
an = e và d|n.

Chứng minh. Ta chỉ chứng minh với trường hợp G là một nhóm giao hoán.
Do G là hữu hạn, ta có thể liệt kê các phần tử của nó

G = { g1 , . . . , g n } .
Nhân mỗi phần tử của G với a và ta thu được tập hợp mới là Sa
S a = { a ? g1 , . . . , a ? g n } .

Ta thấy rằng các phần tử của Sa là phân biệt. Thật vậy, giả sử rằng a ? gi = a ? g j .
Khi đó, ta nhân về bên trái của đẳng thức với a−1 ta suy ra gi = g j . Do đó, Sa chứa
n phần tử phân biệt và số lượng phần tử bằng đúng số phần tử của G. Vậy G = Sa .
Khi đó, ta nhân tất cả các phần tử của Sa với nhau và nhân tất cả các phần tử của
G với nhau. Do đó
( a ? g1 ) ? · · · ? ( a ? g n ) = g1 ? · · · ? g n .
Do tính giao hoán, ta có thể sắp xếp lại các thừa số trong phép nhân ở vế trái và thu
được
a n ? g1 · · · ? g n = g1 · · · ? g n .
Tiếp theo, nhân về bên phải của hai vế phần tử ( g1 ? gn )−1 suy ra an = e.

2 Bài toán logarit rời rạc

Bài toán logarit rời rạc là một bài toán toán học nổi lên trong quá trình mã hóa
của mật mã học, bao gồm phiên bản mod p được mô tả trong phần này và phiên
bản đường cong elliptic. Phép xây dựng khóa công khai được đề xuất bởi Diffie-
Hellman, nó dựa trên bài toán logarit rời rạc trong một nhóm hữu hạn F p . Ta nhắc
lại rằng F p là một trường với số phần tử là số nguyên tố. Để thuận tiện, ta sẽ sử
dụng ký hiệu F p thay cho Z/pZ cho trường này, và ta sử dụng ký hiệu bằng nhau
cho các phần tử của F p và ký hiệu đồng dư cho các phần tử của Z/pZ.

7
2 BÀI TOÁN LOGARIT RỜI RẠC

Cho p là một số nguyên tố (đủ lớn). Định lý 1.3 cho ta biết rằng tồn tại một phần
tử nguyên thủy g: Mọi phần tử khác không của F p là một lũy thừa của g. Cụ thể,
g p−1 = 1 theo Định lý nhỏ Fermat (Định lý 1.2), và không có lũy thừa nào nhỏ hơn
của g bằng 1. Một cách tương đương, các phần tử
1, g, g2 , . . . , g p−2 ∈ F∗p

là toàn bộ phần tử trong F∗p .


Định nghĩa 2.1. Cho g là một nghiệm nguyên thủy của F p và h là một phần tử khác
không của F p . Bài toán logarit rời rạc (LRR) là bài toán tìm một lũy thừa x sao cho
gx ≡ h ( mod p).
Số x được gọi là logarit rời rạc của h cơ số g và được ký hiệu là logg (h).
Nhận xét 2.2. Một khái niệm lâu đời hơn cho logarit rời rạc là chỉ số, được ký hiệu
bởi indg (h). Khái niệm chỉ số vẫn thường được dùng trong lý thuyết số. Nó cũng
vẫn thuận tiện nếu có sự nhầm lẫn giữa các logarit thông thường và các logarit rời
rạc. Ví dụ, đại lượng log2 thường được sử dụng trong báo cáo này.
Nhận xét 2.3. Bài toán logarit rời rạc là bài toán được biết đến rộng rãi, ta tìm một
số lũy thừa nguyên x sao cho g x = h. Tuy nhiên, nếu có một nghiệm, thì sẽ tồn tại
vô số nghiệm, bởi theo Định lý nhỏ Fermat (Định lý 1.2) thì g p−1 ≡ 1( mod p). Do
đó nếu x là một nghiệm của bài toán g x = h thì x + k( p − 1) cũng là một nghiệm
với mọi giá trị của k, bởi

g x+k( p−1) = g x .( g p−1 )k ≡ h.1k ≡ h( mod p).


Do đó logg (h) được định nghĩa duy nhất sai khác một phép cộng trừ một số bội lần
của ( p − 1). Nói cách khác, logg (h) được định nghĩa modulo p − 1. Không khó để
xác thực rằng logg cho ta một hàm được định nghĩa tốt
Z
logg : F∗p → . (2.1)
( p − 1)Z
Thật vậy, giả sử rằng
logg h = a và logg h = b,
khi đó, ta suy ra g a = gb (= h). Do đó g a−b = e với e là phần tử trung hòa của nhóm.
Suy ra | g| | a − b.
Tuy nhiên, ta lại có | g| = p − 1, do đó ( p − 1)|( a − b). Vậy
a − b ≡ 0 ( mod p − 1) hay a ≡ b ( mod p − 1).

8
3 BÀI TOÁN LOGARIT RỜI RẠC KHÓ ĐẾN ĐÂU?

Vậy ánh xạ trên được xác định duy nhất trong Z/( p − 1)Z. Trong một số trường
hợp, do tính rời rạc, ta nói đến logarit rời rạc là một số nguyên x nằm giữa 0 và p − 2
thỏa mãn đẳng thức đồng dư g x ≡ h( mod p).
Nhận xét 2.4. Ta cũng không khó khăn để chứng minh

logg ( ab) = logg ( a) + logg (b) với mọi a, b ∈ F∗p .

Do đó ta gọi logg ( a) là logarit cũng hợp lý, do nó chuyển phép nhân thành phép
cộng theo cùng một cách như hàm logarit thông thường. Trong thuật ngữ toán học,
logarit rời rạc logg là một đẳng cấu nhóm từ F∗p vào Z/( p − 1)Z.

Nhận xét 2.5. Khẳng định của ta về bài toán logarit rời rạc bao gồm giả thiết rằng g
là một phần tử nguyên thủy modulo p, những điều này không thật sự cần thiết. Về
mặt tổng quát, với mỗi g ∈ F∗p và mỗi h ∈ F∗p , bài toán logarit rời rạc là bài toán xác
định một lũy thừa x thỏa mãn g x ≡ h( mod p), nếu x tồn tại.
Tổng quát hơn, thay vì lấy các phần tử khác không của một trường hữu hạn F p
và nhân chúng với nhau để tạo nên lũy thừa, ta có thể lấy các phần tử của nhóm
bất kỳ và sử dụng phép toán nhóm thay vì phép nhân. Điều này dẫn đến dạng tổng
quát nhất của bài toán logarit rời rạc.
Định nghĩa 2.6. Cho G là một nhóm và phép toán nhóm được ký hiệu bởi ký hiệu
?. Bài toán logarit rời rạc cho G là ta bài toán với mỗi hai phần tử g và h cho trước
trong G, ta tìm một số nguyên x thỏa mãn
g ? g ? · · · ? g = h.
| {z }
x lần

3 Bài toán logarit rời rạc khó đến đâu?

Cho một nhóm G và hai phần tử g, h ∈ G, bài toán logarit rời rạc yêu cầu tìm một
lũy thừa x sao cho g x = h. Vậy khi ta nói về tính khó của bài toán này nghĩa là gì?
Làm sao có thể định lượng được tính "khó"? Một phép đo tính khó tự nhiên nhất là
xấp xỉ số lượng phép toán cần thiết để một người hoặc một máy tính giải bài toán
trên sử dụng thuật toán hiệu quả nhất được biết đến hiện nay. Ví dụ, giả sử ta đếm
quá trình tính toán g x như một phép toán. Khi đó bằng cách tiếp cận "vét cạn"để
giải bài toán logarit rời rạc ta sẽ tính g x với mỗi x = 1, 2, 3, . . . và so sánh giá trị đó
với h. Nếu g có cấp n, thì thuật toán này đảm bảo tìm được nghiệm trong nhiều nhất
n phép toán, nhưng nếu n lớn, ví dụ n > 280 , khi đó thuật toán trên là không thực
tế bằng cách tính lũy thừa với những công cụ hiện nay.

9
3 BÀI TOÁN LOGARIT RỜI RẠC KHÓ ĐẾN ĐÂU?

Trong thực tế, trừ khi ta có thể xây dựng một chiếc máy đặc biệt chỉ với mục
đích trên, quá trình tính g x sẽ không được đếm như một thuật toán cơ bản. Sử
dụng phương pháp lũy thừa nhanh, ta chỉ mất một bội nhỏ của log2 ( x ) phép nhân
modulo để tính g x . Giả sử n và x là các số có độ lớn k-bit, và do đó chúng xấp xỉ 2k .
Khi đó hướng tiếp cận theo phương pháp "vét cạn"sẽ cần đến k.2k phép nhân. Thật
vậy, do bậc của g là n ≈ 2k , và ta cần log2 ( x ) phép nhân modulo để tính được g x ,
nên số phép toán cần thiết là

log2 ( x ).n ≈ log2 (2k ).2k = k.2k bước.


Tuy nhiên, nếu ta đang làm việc trong nhóm F∗p và nếu ta coi phép nhân modulo
như một phép toán cơ bản, khi đó phép nhân modulo của hai số k-bit sẽ cần (xấp
xỉ) 2k phép toán cơ bản, do đó nó sẽ giải bài toán logarit rời rạc bằng thuật toán "vét
cạn"sẽ cần một bội nhỏ của

k2 log(2k ).2k = k3 .2k


các phép toán cơ bản.
Tuy nhiên, cách nói "bội nhỏ"của 2k hoặc k.2k hoặc k2 .2k vẫn chưa chính xác lắm.
Điều này xảy ra khi ta muốn biết một phép tính là thực hiện được, các số như 3.2k và
10.2k và 100.2k có thể được coi là gần như nhau nếu k đủ lớn. Tính chất quan trọng
là hệ số bội được cố định khi k tăng. Ký hiệu cấp được đề xuất để giúp điều nói ở
trên được chính xác hơn.
Định nghĩa 3.1. Cho f ( x ) và g( x ) là các hàm của x nhận giá trị dương. Ta nói rằng
" f là O - lớn của g"và viết
f ( x ) = O( g( x ))
nếu tồn tại số dương c và C sao cho
f ( x ) ≤ c.g( x ) với mọi x ≥ C.
Cụ thể, ta viết f ( x ) = O(1) nếu f ( x ) bị chặn với mọi x ≥ C.

Mệnh đề tiếp theo đưa ra một phương pháp có thể sử dụng để chứng minh rằng
f ( x ) = O( g( x )).
Mệnh đề 3.2. Nếu giới hạn
f (x)
lim
x →∞ g ( x )

tồn tại và hữu hạn, khi đó f ( x ) = O( g( x )).

10
3 BÀI TOÁN LOGARIT RỜI RẠC KHÓ ĐẾN ĐÂU?

Chứng minh. Gọi L là giới hạn trên. Theo định nghĩa của giới hạn, với mọi ε > 0, tồn
tại hằng số Cε sao cho

f (x)

g( x ) − L < ε với mọi x > Cε .

Cụ thể, lấy ε = 1, ta thấy rằng


f (x)
< L+1 với mọi x > C1 .
g( x )
Do đó, theo định nghĩa, f ( x ) = O( g( x )) với c = L + 1 và C = C1 .
Ví dụ 3.3. Ta có 2x3 − 3x2 + 7 = O( x3 ) do
2x3 − 3x2 + 7
lim = 2.
x →∞ x3
Tương tự, ta cũng có x2 = O(2x ), do
x2
lim =0
x →∞ 2x

bằng cách sử dụng quy tắc L’Hospital 2 lần liên tiếp.


f (x)
Tuy nhiên, ta chú ý rằng ta vẫn có f ( x ) = O( g( x )) kể cả khi giới hạn không
g( x )
tồn tại. Ví dụ, giới hạn
( x + 2) cos2 x
lim
x →∞ x
không tồn tại, tuy nhiên

( x + 2) cos2 x = O( x ), do ( x + 2) cos2 x ≤ x + 2 ≤ 2x với mọi x ≥ 2.

Ký hiệu cấp cũng cho ta định nghĩa một số khái niệm cơ bản được sử dụng để ký
hiệu độ phức tạp tính toán của các bài toán toán học.
Định nghĩa 3.4. Giả sử ta đang giải một dạng bài toán toán học nhất định với đầu
vào của bài toán là một số với mọi cỡ. Như một ví dụ, ta xét Bài toán phân tích thừa số
nguyên tố, mà đầu vào là một số N và đầu ra là một phân tích nguyên tố của N. Ta
quan tâm đến việc biết rằng mất bao lâu để giải bài toán dựa vào cỡ đầu vào. Ta đo
cỡ đầu vào bằng số bit của nó, và từ đó xác định độ lớn của bộ nhớ để ghi lại đầu
vào. Giả sử rằng có một hằng số A ≥ 0, độc lập với cỡ đầu vào, sao cho nếu đầu vào
có độ dài O(k ) bit, khi đó sẽ cần O(k A ) bước để giải bài toán. Khi đó bài toán được
gọi là giải được trong thời gian đa thức.

11
3 BÀI TOÁN LOGARIT RỜI RẠC KHÓ ĐẾN ĐÂU?

Nếu ta lấy A = 1, khi đó bài toán giải được trong thời gian tuyến tính, và nếu ta
lấy A = 2, khi đó bài toán là giải được trong thời gian toàn phương. Các thuật toán
thời gian đa thức được coi là các thuật toán nhanh.
Mặt khác, nếu tồn tại một hằng số c > 0 sao cho đầu vào có cỡ O(k) bit, và một
thuật toán giải bài toán trong O(eck ) bước, khi đó bài toán được gọi là giải được
trong thời gian lũy thừa. Các thuật toán thời gian lũy thừa được coi là các thuật toán
chậm.
Các thuật toán nằm giữa thời gian đa thức và thời gian lũy thừa là thời gian gần
lũy thừa. Chúng có tính chất là với mọi ε > 0, chúng giải bài toán trong Oε (eεk )
bước. Ký hiệu này nghĩa là các hằng số c và C xuất hiện trong định nghĩa của ký
hiệu cấp cho phép dựa vào ε.
Một luật bất thành văn trong mật mã học là các bài toán giải được trong thời gian
đa thức được coi là bài toán "dễ", và các bài toán cần thời gian lũy thừa được coi là
"khó". Tuy nhiên, cần nhớ rằng các mô tả trên áp dụng được khi số các thể hiện rất
lớn. Dựa vào ký hiệu O , khi đó một bài toán thời gian lũy thừa có thể dễ hơn bài
toán thời gian đa thức.
Ví dụ 3.5. Ta bắt đầu với bài toán logarit rời rạc g x = h trong G = F∗p . Nếu số
nguyên tố p được chọn giữa 2k và 2k+1 , thì g, h, và p yêu cầu ít nhất k bit, do đó bài
toán được phát biểu trong O(k) bit (Chú ý rằng O(k) cũng tương tự như O(log2 p)
do log2 p ≈ log2 (2k ) = k.)
Nếu ta giải bài toán logarit rời rạc bằng cách sử dụng phương pháp "vét cạn"đã
được nói đến ở trên, thì sẽ cần O( p) bước để giải bài toán.
Thật vậy, do g là một phần tử nguyên thủy nên cấp của nó là p − 1, vậy số lần thử
x sẽ là O( p − 1) ≈ O( p).
Do O( p) = O(2k ), thuật toán này yêu cầu thời gian lũy thừa. (Nếu ta coi phép
cộng và phép nhân là các phép toán cơ bản thì thuật toán mất O(k.2k ) hoặc O(k3 .2k )
bước, nhưng cách phân biệt vẫn không cần thiết; thời gian chạy vẫn là thời gian lũy
thừa, ví dụ là O(3k ).)
Tuy nhiên, có những cách nhanh hơn để giải bài toán logarit rời rạc trong F∗p ,
một vài trong số đó rất nhanh nhưng chỉ áp dụng với một vài số nguyên tố, trong
khi những thuật toán còn lại chậm hơn, nhưng hoạt động với mọi số nguyên tố. Ví
dụ, thuật toán Pohlig-Hellman mô tả trong phần sau chỉ ra rằng nếu p − 1 phân
tích hoàn toàn thành tích của các số nguyên tố nhỏ, thì bài toán logarit rời rạc là
khá dễ giải. Với số nguyên tố bất kỳ, thuật toán va chạm giải bài toán logarit rời

rạc trong O( p log p) bước, nhanh hơn rất nhiều so với O( p), nhưng vẫn là lũy
thừa. Tốt hơn nữa là thuật toán giải tích chỉ số giải bài toán logarit rời rạc trong

12
4 TRAO ĐỔI KHÓA DIFFIE-HELLMAN

c (log p)(log log p)
O(e ) bước, do đó nó vẫn là một thuật toán thời gian gần lũy thừa.
Ví dụ 3.6. Ta xét bài toán logarit rời rạc trong nhóm G = F∗p , với phép toán nhóm
là phép cộng. Bài toán logarit rời rạc trong điều kiện này đòi hỏi một nghiệm x cho
phép đồng dư
x · g ≡ h ( mod p),
với g và h là các phần tử trong Z/pZ. Ta có thể giải phép đồng dư này bằng cách
sử dụng thuật toán Euclid mở rộng (Định lý 1.1) để tính g−1 ( mod p) và đặt
x ≡ g−1 .h ( mod p).
Việc tính g−1 ( mod p) sẽ mất O(log p) bước, do khi sử dụng thuật toán Euclid mở
rộng, thuật toán mất 2 log2 ( p) + 3 để tính gcd( g, p), do đó ta mất một bội nhỏ của
log2 ( p) để tính được nghịch đảo của g modulo p, do đó có một thuật toán thời gian
tuyến tính để giải bài toán logarit rời rạc trong nhóm cộng F p . Đây là một thuật toán
rất nhanh, do đó bài toán logarit rời rạc trong F p với phép cộng không phải là một
ứng cử viên tốt cho hàm một cửa trong mật mã học.
Một lưu ý quan trọng là các bài toán logarit rời rạc trong các nhóm khác nhau thể
hiện mức độ khó khác nhau cho lời giải của nó. Do đó bài toán logarit rời rạc trong
F p với phép cộng có lời giải trong thời gian tuyến tính, trong khi thuật toán tổng
quát tốt nhất được biết đến giải bài toán logarit rời rạc trong F∗p với phép nhân là
thời gian gần lũy thừa. Bài toán logarit rời rạc cho các đường cong elliptic được cho
là thậm chí khó hơn cả bài toán logarit rời rạc trong F∗p . Cụ thể, nếu nhóm đường
cong elliptic được chọn cẩn√ thận và có N phàn tử, thì thuật toán tốt nhất giải bài
toán logarit rời rạc trong O( N ).

4 Trao đổi khóa Diffie-Hellman

Thuật toán trao đổi khóa Diffie-Hellman giải quyết khó khăn sau. Alice và Bob
muốn chia sẻ một khóa bí mật chung để sử dụng trong mã hóa đối xứng, nhưng
phương pháp liên lạc này không an toàn. Mọi thông tin được trao đổi đều bị lộ
cho một kẻ tấn công Eve. Vậy làm thế nào để Alice và Bob có thể chia sẻ một khóa
chung mà không bị lộ cho Eve? Thoạt nhìn, ta thấy Alice và Bob đang đối diện với
một nhiệm vụ bất khả thi. Tuy nhiên, Diffie và Hellman thấy tính khó của bài toán
logarit rời rạc cho F∗p cho ta một lời giải khả thi.
Bước đầu tiên là Alice và Bob thống nhất một số nguyên tố lớn p và một số nguyên
khác không g lấy modulo p. Alice và Bob cho p và g là kiến thức công khai; ví dụ,
họ có thể đăng các giá trị đó lên các trang web, do đó Eve cũng biết đến chúng. Với

13
4 TRAO ĐỔI KHÓA DIFFIE-HELLMAN

nhiều lý do sẽ được bàn luận sau, cách tốt nhất là ta chọn g là phần tử trong F∗p có
cấp nguyên tố cao nhất.
Bước tiếp theo Alice chọn một số nguyên bí mật a mà không để lộ cho bất kì ai,
cùng lúc đó Bob chọn một số nguyên b và cũng giữ bí mật. Bob và Alice sử dụng
các số nguyên bí mật đó để tính các giá trị
A ≡ g a ( mod p) và B ≡ gb ( mod p) .
| {z } | {z }
Alice tính Bob tính

Tiếp theo, họ sẽ trao đổi các giá trị được tính, Alice gửi A cho Bob và Bob gửi B cho
Alice. Ta để ý rằng Eve thấy được các giá trị A và B, do chúng bị gửi qua kênh liên
lạc không an toàn.
Cuối cùng, Bob và Alice một lần nữa sử dụng các số nguyên bí mật của họ để
tính
A0 ≡ B a ( mod p) và B0 ≡ Ab ( mod p) .
| {z } | {z }
Alice tính Bob tính
Với các giá trị họ đã tính, A0 và B0 thực ra là bằng nhau do
A0 ≡ B a ≡ ( gb ) a ≡ g ab ≡ ( g a )b ≡ Ab ≡ B0 ( mod p).
Giá trị chung này là khóa được trao đổi.
Ví dụ 4.1. Alice và Bob thống nhất sử dụng số nguyên tố p = 491 và nghiệm nguyên
thủy g = 627. Alice chọn khóa bí mật a = 347 và tính A = 390 ≡ 627347 ( mod 941).
Tương tự, Bob chọn khóa bí mật b = 781 và tính B = 691 ≡ 627781 ( mod 941). Alice
gửi Bob số 390 và Bob gửi Alice số 691. Cả hai quá trình trao đổi đều bị thực hiện
trên một kênh không an toàn, do đó cả A = 390 và B = 691 đều bị coi là kiến thức
công khai. Các số a = 347 và b = 781 không bị trao đổi và do đó được giữ bí mật.
Khi đó Alice và Bob đều tính được số
470 ≡ 627347.781 ≡ Ab ≡ B a ( mod 941),

do đó 470 là bí mật chung.


Giả sử Eve chứng kiến toàn bộ quá trình trao đổi. Cô ấy có thể khôi phục bí mật
chung của Alice và Bob nếu cô ấy có thể giải một trong hai biểu thức đồng dư
627 ≡ 390 ( mod 941) hoặc 627 ≡ 691 ( mod 941),

khi đó cô ấy sẽ biết một trong hai lũy thừa bí mật. Đến khi bị lộ, đây là cách duy
nhất cho Eve tìm được giá trị bí mật chung mà không có sự trợ giúp của Alice hoặc
Bob.

14
5 HỆ MÃ HÓA CÔNG KHAI ELGAMAL

Tất nhiên ví dụ trên sử dụng các số rất nhỏ để cho Alice và Bob sự an toàn thực
tế, do nó cần rất ít thời gian cho máy tính của Eve kiểm tra mọi lũy thừa có thể của
627 modulo 941. Hướng dẫn trên đề xuất rằng Alice và Bob chọn một số nguyên tố
xấp xỉ 1000 bit (nghĩa là p ≈ 21000 ) và một phần tử g có cấp nguyên tố và xấp xỉ p/2.
Khi đó, Eve phải đối diện với một nhiệm vụ thật sự khó khăn.
Tổng quát, khó khăn của Eve là như sau. Cô ấy biết các giá trị A và B, do đó biết
các giá trị g a và gb . Cô ấy cũng biết giá trị g và p, do đó nếu có thể giải bài toán
logarit rời rạc, cố ấy có thể tìm a và b, sau đó dễ dàng tính được bí mật chung của
Alice và Bob là g ab . Ta thấy rằng Alice và Bob được cung cấp sự an toàn khi Eve
không thể giải bài toán logarit rời rạc, nhưng điều này không hẳn là đúng. Dĩ nhiên
một phương pháp để tìm giá trị chung của Alice và Bob là giải bài toán logarit rời
rạc, nhưng đó không phải là bài toán thật sự mà Eve cần giải. Tính bảo mật của
khóa chung của Alice và Bob nằm trong tính khó của bài toán được coi là có tiềm
năng dễ giải hơn dưới đây.
Định nghĩa 4.2. Cho p là một số nguyên tố và g là một số nguyên. Bài toán Diffie-
Hellman là bài toán tính giá trị của g ab ( mod p) khi biết các giá trị g a ( mod p) và
gb ( mod p).
Dễ thấy rằng bài toán trên không khó hơn bài toán logarit rời rạc. Nếu Eve có thể
giải bài toán logarit rời rạc, thì cô ấy có thể tính các lũy thừa bí mật a và b của Alice
và Bob bằng các lấy các giá trị A = g a và B = gb , và khi dó cô ấy dễ dàng tính được
khóa chung g ab . (Thật ra, Eve chỉ cần tính một trong hai giá trị a hoặc b.) Tuy nhiên
điều ngược lại không hẳn đã chính xác. Giả sử rằng Eve có một thuật toán giải bài
toán Diffie-Hellman một cách hiệu quả, thì liệu cô ấy có thể giải bài toán logarit rời
rạc hiệu quả không? Câu trả lời là điều này chưa được biết chắc.

5 Hệ mã hóa công khai ElGamal

Mặc dù thuật toán trao đổi khóa Diffie-Hellman cung cấp một phương pháp chia
sẻ công khai một khóa bí mật ngẫu nhiên, nó không đạt được điều kiện để trở thành
một hệ mã khóa công khai, không chỉ là một xâu bit ngẫu nhiên. Hệ mã hóa công
khai đầu tiên là hệ RSA của Rivest, Shamir, và Adleman được công bố năm 1978.
RSA đã và vẫn đang là một phát hiện quan trọng. Tuy nhiên, mặc dù về mặt lịch sử
thì RSA xuất hiện trước, tuy nhiên sự phát triển tự nhiên nhất của một hệ mã hóa
công khai trong báo cáo của Diffie-Hellman là một hệ thống được mô tả bởi Taher
ElGamal năm 1985. Thuật toán mã hóa công khai ElGamal được dựa trên bài toán
logarit rời rạc và liên hệ chặt chẽ với trao đổi khóa Diffie-Hellman ở phần trước.
Trong phần này ta mô tả một phiên bản của hệ mã hóa công khai ElGamal mà được

15
5 HỆ MÃ HÓA CÔNG KHAI ELGAMAL

dựa trên bài toán logarit rời rạc cho F∗p , nhưng phép xây dựng hoạt động một cách
khá tổng quát khi bài toán logarit rời rạc được áp dụng trên mỗi nhóm.
Hệ mã hóa công khai ElGamal là ví dụ đầu tiên về một hệ mã hóa công khai, sau
đó ta sẽ tiếp tục một cách từ từ và đưa vào mọi chi tiết. Alice bắt đầu bằng cách
công khai thông tin về một khóa công khai và một thuật toán. Khóa công khai đơn
giản là một số, và thuật toán là phương pháp mà Bob sẽ dùng để mã hóa thông điệp
của anh ấy bằng cách sử dụng khóa công khai của Alice. Alice không công khai một
số khác là khóa bí mật của cô ấy. Khóa bí mật cho phép Alice, và chỉ cô ấy giải mã
được thông điệp mà đã được mã hóa bởi khóa công khai của cô ấy.
Mặc dù điều này nghe vẫn chưa rõ ràng và áp dụng cho mọi hệ mã hóa công
khai. Với hệ mã hóa ElGamal, Alice cần một số nguyên tố lớn p để bài toán logarit
rời rạc trong F∗p là khó, và cũng cần một phần tử g lấy modulo p có cấp nguyên tố
lớn. Cô ấy có thể chọn số p hoặc g, hoặc được chọn trước bởi một bên thứ ba đáng
tin cậy như tổ chức chính phủ.
Alice chọn một số bí mật a, số này được coi là khóa bí mật của cô ấy và tính đại
lượng
A ≡ g a ( mod p).
Để ý rằng bước này tương tự như trao đổi khóa Diffie-Hellman. Alice cho mọi người
biết khóa công khai A và giữ lại khóa bí mật a.
Bây giờ, giả sử rằng Bob muốn mã hóa một thông điệp sử dụng khóa công khai
A của Alice. Ta sẽ giả sử rằng thông điệp của Bob là m, là một số nguyên nằm giữa
2 và p. Để mã hóa m, đầu tiên Bob chọn ngẫu nhiên một số k khác và lấy modulo p.
Bob sử dụng k để mã hóa duy nhất một thông điệp, và sau đó loại bỏ nó. Số k được
gọi là một khóa tức thời, do nó chỉ dùng duy nhất một lần với mục đích là mã hóa
một thông điệp.
Bob lấy bản thông điệp chưa mã hóa m, khóa tức thời ngẫu nhiên k, và khóa công
khai A của Alice và sử dụng chúng để tính hai đại lượng
c1 ≡ gk ( mod p) và c2 ≡ mAk ( mod p).
(Chú ý rằng g và p là các tham số công khai, do đó Bob cũng biết các giá trị của
chúng.) Bản thông điệp m được mã hóa của Bob là cặp số (c1 , c2 ), sẽ được gửi cho
Alice.
Vậy làm thế nào Alice có thể giải mã bản thông điệp được mã hóa (c1 , c2 ) của
Bob? Do Alice biết a, do đó cô ấy có thể tính được đại lượng
x ≡ c1a ( mod p),
và từ đó cũng tính được x −1 ( mod p). Alice sau đó nhân c2 với x −1 , và kết quả thu

16
5 HỆ MÃ HÓA CÔNG KHAI ELGAMAL

được là bản thông điệp m gốc chưa bị mã hóa. Để biết lý do, ta tính
x −1 .c2 ≡ (c1a )−1 .c2 ( mod p), do x ≡ c1a ( mod p),
≡ ( g ak )−1 .(mAk ) ( mod p), do c1 ≡ gk , c2 ≡ mAk ( mod p),
≡ ( g ak )−1 .(m( g a )k ) ( mod p), do A ≡ g a ( mod p),
≡m ( mod p), do số hạng g ak bị triệt tiêu.

Vậy Eve cần làm gì để có thể giải mã thông điệp? Eve biết tham số công khai p và
g, và cô ấy cũng biết giá trị A ≡ g a ( mod p), do khóa công khai A của Alice là kiến
thức công khai. Nếu Eve có thể giải bài toán logarit rời rạc, cô ấy có thể tìm được a
và giải mã thông điệp. Ngược lại, Eve sẽ rất khó để có thể tìm được bản thông điệp
gốc, mặc dù vẫn có khó khăn, ta sẽ nói về các khó khăn đó sau một vài ví dụ nhỏ.
Ví dụ 5.1. Alice dùng số nguyên tố p = 467 và số nguyên thủy g = 2. Cô ấy chọn
a = 153 là khóa bí mật và tính khóa công khai
A ≡ g a ≡ 2153 ≡ 224 ( mod 467).
Bob chọn thông điệp m = 331. Sau đó chọn tiếp một khóa ngắn hạn ngẫu nhiên là
k = 197, và tính các đại lượng
c1 ≡ 2197 ≡ 87 ( mod 467) và c2 ≡ 331.224197 ≡ 57 ( mod 467).
Cặp số (c1 , c2 ) = (87, 57) là bản mã Bob sẽ gửi cho Alice.
Alice biết a = 153, cô ấy sẽ tính
x ≡ c1a ≡ 87153 ≡ 367 ( mod 467), và khi đó x −1 ≡ 14 ( mod 467).
Cuối cùng, Alice tính
c2 x −1 ≡ 57.14 ≡ 331 ( mod 467)
và đây chính là thông điệp m.
Nhận xét 5.2. Trong hệ mã hóa ElGamal, thông điệp là một số nguyên m nằm giữa
2 và p − 1, trong khi bản mã chứa hai số nguyên c1 , c2 cũng nằm trong khoảng đó
do c1 và c2 đều được lấy modulo p − 1 sau khi tính.
Do đó, về mặt tổng quát ta mất gấp đôi số bit để viết bản mã hóa so với ta viết
bản gốc. Ta nói rằng ElGamal có một mở rộng thông điệp 2 đến 1.

Một câu hỏi quan trọng được đưa ra là khi Eve tấn công vào hệ ElGamal thì có
khó bằng giải bài toán Diffie-Hellman không? Tuy nhiên, khi ta giới thiệu cách mã
hóa, liệu ta đã vô tình mở một cửa sau để khiến thông điệp dễ giải hơn và thậm chí

17
5 HỆ MÃ HÓA CÔNG KHAI ELGAMAL

không cần giải bài toán Diffie-Hellman? Một trong các mục tiêu của mật mã hiện
đại là xác thực một bài toán khó đứng đằng sau một hệ mã hóa như bài toán Diffie-
Hellman và chứng minh rằng một phép xây dựng mật mã như ElGamal ít nhất khó
bằng bài toán đã cho
Trong trường hợp này, ta muốn chứng minh rằng bất kì ai có thể giải mã một
bản mã bất kỳ được xây dựng bởi hệ mã hóa ElGamal, cũng phải giải được bài toán
Diffie-Hellman. Cụ thể ta muốn chứng minh điều sau đây:
Mệnh đề 5.3. Cố định một số nguyên tố p và một phần tử g được sử dụng trong hệ mã
hóa ElGamal. Giả sử Eve có thể truy cập vào một oracle giải mã một bản mã của hệ mã hóa
ElGamal. Khi đó, cô ấy có thể dùng oracle đó để giải bài toán Diffie-Hellman.

Chứng minh. Thay vì đưa ra một chứng minh mang tính hình thức, ta sẽ đưa ra một
chứng minh dễ hiểu hơn và giải thích cách tiếp cận bài toán bằng cách sử dụng
một oracle ElGamal để giải bài toán Diffie-Hellman. Nhắc lại trong bài toán Diffie-
Hellman, Eve biết các giá trị
A ≡ g a ( mod p) và B ≡ gb ( mod p),
và bài toán là tính giá trị của g ab ( mod p). Cần ghi nhớ rằng Eve biết cả hai giá trị A
và B, tuy nhiên lại không biết các giá trị a và b.
Giả sử Eve có thể tham vấn một oracle ElGamal. Điều này nghĩa là Eve có thể gửi
cho oracle một số nguyên tố p, một phần tử cơ sở g, một khóa công khai A, một bản
mã hóa (c1 , c2 ). Khi đó, oracle sẽ trả lại đại lượng
(c1a )−1 .c2 ( mod p).
Nếu Eve muốn giải được bài toán Diffie-Hellman, thì giá trị của c1 và c2 cần được
chọn là bao nhiêu? Để ý ta thấy rằng c1 = B = gb và c2 = 1 là sự lựa chọn tốt, do
với đầu vào như trên, thì oracle sẽ trả lại giá trị
h i −1
(c1a )−1 .c2 = ( gb ) a .1 = ( g ab )−1 ( mod p),

và khi đó Eve chỉ cần lấy nghịch đảo modulo p để thu được g ab ( mod p), và từ đó
giải được bài toán Diffie-Hellman.
Tuy nhiên, oracle có thể đủ thông minh và biết rằng nó sẽ không bao giờ giải mã
thông điệp nếu c2 = 1. Eve vẫn có thể đánh lừa oracle bằng cách gửi một bản mã
ngẫu nhiên như sau. Eve chọn một giá trị c2 bất kì và cho oracle biết khóa công khai
là A và bản mã là ( B, c2 ). Khi đó, oracle sẽ trả lại bản thông điệp gốc m thỏa mãn
m ≡ (c1a )−1 .c2 ≡ ( B a )−1 .c2 ≡ ( g ab )−1 .c2 ( mod p).

18
6 THUẬT TOÁN VA CHẠM CHO BÀI TOÁN LOGARIT RỜI RẠC

Sau khi oracle cho Eve biết giá trị của m, ta tính tiếp
g ab ≡ c2 .m−1 ( mod p)

để tìm giá trị của g ab ( mod p). Mặc dù, với sự trợ giúp của oracle, Eve đã tính được
g ab ( mod p), Eve vẫn không biết bất kì giá trị nào của a hoặc b, do đó Eve chỉ giải
được bài toán Diffie-Hellman, chứ không phải bài toán logarit rời rạc.
Nhận xét 5.4. Một tấn công mà trong đó Eve truy cập vào một oracle giải mã một
bản mã bất kỳ đã biết được gọi là một tấn công chọn bản mã. Mệnh đề trên chỉ ra rằng
hệ ElGamal là an toàn đối với tấn công chọn bản mã. Chính xác hơn, nó bảo mật
nếu bài toán Diffie-Hellman được giả sử là khó.

6 Thuật toán va chạm cho bài toán logarit rời rạc

Trong phần này ta mô tả một thuật toán logarit rời rạc theo Shanks. Nó là một
ví dụ của một va chạm, hoặc thuật toán "gặp ở giữa". Thuật toán của Shanks hoạt
đồng trong mọi nhóm, không chỉ F∗p và chứng minh rằng nó không khó hơn trong
bất kỳ nhóm nào, và ta phát biểu và chứng minh trong tổng quát.
Mệnh đề 6.1 (Cận tầm thường cho bài toán logarit rời rạc). Cho G là một nhóm và
g ∈ G là một phần tử cấp n. Khi đó, bài toán logarit rời rạc
gx = h (6.1)
có thể được giải trong O(n) bước, vói mỗi bước là phép nhân với g.

Chứng minh. Ta lập một danh sách các giá trị của g x với x = 0, 1, 2, . . . , n − 1. Để ý
rằng mỗi giá trị liên tiếp thu được bằng cách nhân phần tử trước với g. Nếu tồn tại
một nghiệm cho g x = h thì h sẽ xuất hiện trong danh sách trên.
Nhận xét 6.2. Nếu ta làm việc trong F∗p , thì mỗi khi tính g x ( mod p) cần O((log p)k )
phép toán trên máy tính, với hằng số k và ký hiệu "O "phụ thuộc vào máy tính và
thuật toán được sử dụng cho phép nhân modulo. Khi đó, tổng số bước mà máy
tính thực hiện, hoặc thời gian chạy, là O(n(log p)k ). Tổng quát, nhân tố được tạo bởi
O((log p)k ) là không đáng kể, do đó ta sẽ bỏ qua nó và đơn giản gọi là thời gian
chạy là O(n).
Ý tưởng đằng sau một thuật toán va chạm là lập hai danh sách và tìm một phần
tử xuất hiện ở cả hai danh sách. Với bài toán logarit rời rạc, thời gian chạy của một

thuật toán va chạm nhiều hơn O( n) một số bước, tiết kiệm được một lượng lớn
so với O(n) nếu n lớn.

19
6 THUẬT TOÁN VA CHẠM CHO BÀI TOÁN LOGARIT RỜI RẠC

Mệnh đề 6.3 (Thuật toán Bước nhỏ-Bước lớn của Shanks). Cho G là một nhóm và cho
g ∈ G là một phần
√ tử có cấp N ≥ 2. Khi đó thuật toán sau giải bài toán logarit rời rạc
x
g = h trong O( N. log N ) bước.
√ √
(1) Cho n = 1 + b N c, do đó n > N.
(2) Tạo hai danh sách
(i) Danh sách 1: e, g, . . . , gn ,
2 n
(ii) Danh sách 2: h, h ( g−n ) , h. ( g−n ) , . . . , h ( g−n ) .
(3) Tìm một phần tử xuất hiện trong cả hai danh sách, giả sử gi = h.g− jn .
(4) Khi đó x = i + jn là một nghiệm của bài toán g x = h.

Chứng minh. Ta bắt đầu với một vài quan sát. Đầu tiên, khi tạo ra Danh sách 2,
ta bắt đầu bằng việc tính đại lượng u = g−n và lập Danh sách 2 bằng cách tính
h, hu, hu2 , . . . , hun . Do đó tạo nên hai danh sách mất xấp xỉ 2n phép nhân. Tiếp theo,
giả sử tồn tại phần tử trùng nhau ở cả 2 danh sách, ta có thể tìm một cặp trong một
bội của log(n) bằng cách sử dụng các thuật toán sắp xếp tiêu chuẩn và thuật toán
truy tìm, do đó Bước (3)√mất O(log n) bước. Do đó tổng thời gian chạy của thuật
toán là O(n log n) = O( N log N ). Với bước cuối cùng này ta sử dụng n ≈ N, do
đó
√ √ 1√
n log n ≈ N log N = N log N.
2
Để chứng minh tính đúng đắn của thuật toán, ta cần chỉ ra Danh sách 1 và 2 luôn
có ít nhất 1 phần tử trùng nhau. Để chứng minh, giả sử x là nghiệm chưa biết của
g x = h và viết x dưới dạng
x = nq + r với 0 ≤ r < n.
Ta biết rằng 1 ≤ x < N, do đó
x−r N √
q= < <n do n > N.
n n
Do đó, ta có thể viết lại bài toán g x = h thành
gr = h.g−qn với 0 ≤ r < n và 0 ≤ q < n.
Do đó gr nằm trong Danh sách 1 và h.g−qn nằm trong Danh sách 2, do đó 2 danh
sách trên có phần tử trùng nhau.
Ví dụ 6.4. Ta sẽ mô tả phương pháp bước nhỏ-bước lớn của Shanks bằng cách sử
dụng thuật toán để giải bài toán logarit rời rạc
gx = h trong F∗p với g = 9704, h = 13896, và p = 17389.

20
7 ĐỊNH LÝ THẶNG DƯ TRUNG HOA



Số 9704 có cấp 1242 trong F17389 . Đặt n = b 1242c + 1 = 36 và u = g−n =
9704−36 = 2494. Qua tính toán ta có

97044 = 14567 = 13896.249432 trong F17389 .


Lại có 2494 = 9704−36 nên ta tính được

13896 = 97047 .2494−32 = 97047 .(970436 )32 = 97041159 trong F17389 .


Do đó x = 1159 là nghiệm của bài toán 9704x = 13896 trong F17389 .

7 Định lý thặng dư Trung Hoa

Định lý thặng dư Trung Hoa mô tả nghiệm của một hệ phương trình đồng dư
tuyến tính. Trường hợp đơn giản nhất là một hệ hai phương trình đồng dư

x ≡ a ( mod m) và x ≡ b ( mod n), (7.1)


với gcd(m, n) = 1. Khi đó, định lý thặng dư Trung Hoa nói rằng tồn tại duy nhất
một nghiệm modulo mn thỏa mãn hệ trên.
Phiên bản đầu tiên của một bài toán có dạng như trên xuất hiện trong một công
trình toán học ở Trung Hoa từ cuối thế kỷ thứ III hoặc đầu thế kỷ thứ IV. Bài toán
ban đầu phải giải quyết với bài toán khó hơn khi phải giải hệ 3 phương trình đồng
dư.

Ta có một số đồ vật, nhưng không biết chính xác là bao nhiêu. Khi đếm chúng theo
3 cái một thì thừa hai cái. Khi đếm 5 cái một thì thừa 3 cái. Nếu ta đếm theo 7 cái
một thì thừa 2 cái. Hỏi có bao nhiêu đồ vật?
[Sun Tzu Suan Ching, khoảng 300 năm sau Công nguyên.]

Định lý thặng dư Trung Hoa và tổng quát hóa của nó có nhiều ứng dụng trong lý
thuyết số và nhiều lĩnh vực khác trong Toán học. Ở Phần 13 ta sẽ chỉ ra nó được sử
dụng như nào để giải một số thể hiện nhất định của bài toán logarit rời rạc. Ta sẽ
bắt đầu với một ví dụ mà ta giải hệ hai phương trình đồng dư. Phương pháp mà ta
mô tả thực tế là một thuật toán cho phép tìm ra nghiệm.
Ví dụ 7.1. Ta tìm một số nguyên x thỏa mãn đồng thời hai phép đồng dư
x ≡ 1 ( mod 5) và x ≡ 9 ( mod 11). (7.2)

21
7 ĐỊNH LÝ THẶNG DƯ TRUNG HOA

Đẳng thức đồng dư đầu chỉ ra rằng x ≡ 1 ( mod 5). Do đó, tập nghiệm của phương
trình đầu là họ các số nguyên
x = 1 + 5y, y ∈ Z. (7.3)
Thay (7.3) vào phương trình thứ hai của (7.2) ta có
1 + 5y ≡ 9 ( mod 11), và do đó 5y ≡ 8 ( mod 11). (7.4)
Ta giải y bằng cách nhân cả 2 vế của (7.4) với nghịch đảo của 5 modulo 11. Nghịch
đảo này tồn tại do gcd(5, 11) = 1 và có thể tính được. Tuy nhiên, trong trường hợp
này việc lấy modulo là số nhỏ nên ta có thể tìm bằng cách "vét cạn"do 5.9 = 45 ≡
1 ( mod 11). Trong mọi trường hợp, nhân cả hai vế của (7.4) với 9 ta suy ra
y ≡ 9.8 ≡ 72 ≡ 6 ( mod 11).
Cuối cùng, thay giá trị của y vào (7.3) ta thu được nghiệm
x = 1 + 5.6 = 31
của bài toán ban đầu.

Cách làm ở ví dụ trên có thể sử dụng để suy ra một công thức tổng quát cho
nghiệm của hệ hai phương trình đồng dư.
Định lý 7.2 (Định lý thặng dư Trung Hoa). Cho m1 , . . . , mk là họ các số nguyên đôi một
nguyên tố cùng nhau. Điều này nghĩa là
gcd(mi , m j ) = 1 với mọi i 6= j.
Cho a1 , . . . , ak là các số nguyên bất kỳ. Khi đó hệ các phương trình đồng dư
x ≡ a1 ( mod m1 ), x ≡ a2 ( mod m2 ), . . . , x ≡ ak ( mod mk ). (7.5)
có nghiệm x = c. Hơn nữa, nếu x = c và x = c0 đều là nghiệm, khi đó
c ≡ c0 ( mod m1 m2 · · · mk ). (7.6)

Chứng minh. Giả sử rằng với một giá trị nào đó của i ta đã tìm được nghiệm x = ci
cho hệ phương trình đồng dư
x ≡ a1 ( mod m1 ), x ≡ a2 ( mod m2 ), . . . , x ≡ ai ( mod mi ). (7.7)
Ví dụ, nếu i = 1, thì c1 = a1 . Ta sẽ giải thích cách làm để tìm ra nghiệm cho một
phương trình đồng dư nữa
x ≡ a1 ( mod m1 ), x ≡ a2 ( mod m2 ), . . . , x ≡ ai+1 ( mod mi+1 ).

22
7 ĐỊNH LÝ THẶNG DƯ TRUNG HOA

Ý tường là ta sẽ tìm nghiệm dưới dạng


x = ci + m1 · · · mi y.
Để ý rằng giá trị này của x vẫn thỏa mãn tất cả phương trình trong (7.7), do đó ta
cần chọn được y sao cho nó cũng thỏa mãn x ≡ ai+1 ( mod mi+1 ). Nói cách khác, ta
cần tìm một giá trị của y thỏa mãn
ci + m1 m2 · · · mi y ≡ ai+1 ( mod mi+1 ).
Việc gcd(mi+1 , m1 m2 · · · mi ) = 1 chỉ ra rằng ta luôn có thể làm được điều này. Do
đó ta đã chỉ ra sự tồn tại nghiệm của hệ phương trình đồng dư đã cho.

Chứng minh của Định lý thặng dư Trung Hoa dễ dàng chuyển thành một thuật
toán tìm nghiệm của một hệ phương trình đồng dư. Ví dụ dưới đây được dùng để
mô tả phương pháp tổng quát.
Ví dụ 7.3. Ta giải hệ phương trình đồng dư
x ≡ 2 ( mod 3), x ≡ 3 ( mod 7), x ≡ 4 ( mod 16). (7.8)
Định lý thặng dư Trung Hoa chỉ ra rằng tồn tại duy nhất một nghiệm modulo 336,
do 336 = 3.7.16. Ta bắt đầu với nghiệm x = 2 cho phương trình đồng dư đầu tiên là
x ≡ 2 ( mod 3). Ta sử dụng nó để tìm nghiệm tổng quát dưới dạng x = 2 + 3y và
thay vào phương trình đồng dư thứ 2 ta có
2 + 3y ≡ 3 ( mod 7).
Ta rút gọn còn 3y ≡ 1 ( mod 7), và ta nhân cả hai vế với 5 (do 5 là nghịch đảo của 3
modulo 7) để thu được y ≡ 5 ( mod 7). Khi đó, ta có giá trị
x = 2 + 3y = 2 + 3.5 = 17
là một nghiệm của hai phương trình đồng dư đầu trong (7.8).
Nghiệm tổng quát cho hai phương trình đầu là x = 21z + 17. Ta thay vào phương
trình đồng dư thứ ba ta thu được
21z + 17 ≡ 4 ( mod 16).
Suy ra 5z ≡ 3 ( mod 16). Ta nhân hai vế với 13, là nghịch đảo của 5 modulo 16, thu
được
z ≡ 3.13 ≡ 39 ≡ 7 ( mod 16).
Cuối cùng, ta thấy x = 17 + 21z để thu được nghiệm
x = 17 + 21.7 = 164.
Các nghiệm khác thu được bằng cách cộng hoặc trừ một số lần bội của 336 với
nghiệm trên.

23
7.1 Giải các phương trình đồng dư với các modulo hợp số 7 ĐỊNH LÝ THẶNG DƯ TRUNG HOA

7.1 Giải các phương trình đồng dư với các modulo hợp số

Thông thường cách dễ nhất để giải một phương trình đồng dư với một modulo
hợp số bằng cách giải các phương trình đồng dư modulo các số nguyên tố (hoặc lũy
thừa của số nguyên tố) và sau đó kết hợp nghiệm bằng cách sử dụng Định lý thặng
dư Trung Hoa. Ta sẽ minh họa quy tắc đó trong phần này bằng cách đưa ra bài toán
tìm căn bậc 2 modulo m. Việc tính căn bậc hai của một số modulo nguyên tố khá dễ
dàng. Thật vậy, với các số nguyên tố đồng dư 3 modulo 4, việc tìm căn bậc hai rất
dễ.
Mệnh đề 7.4. Cho p là một số nguyên tố thỏa mãn p ≡ 3 ( mod 4). Cho a là một số nguyên
sao cho x2 ≡ a ( mod p) có nghiệm, nghĩa là a có một căn bậc hai modulo p. Khi đó
p +1
b≡a 4 ( mod p)
là một nghiệm thỏa mãn b2 ≡ a ( mod p).

Chứng minh. Cho g là một phần tử nguyên thủy modulo p. Khi đó a là một lũy thừa
của g, và việc a có căn bậc hai modulo p nghĩa là a là một lũy thừa chẵn của g, giả
sử là a ≡ g2k ( mod p). Khi đó, ta tính
p +1
b2 ≡ a 2 ( mod p) theo định nghĩa của b,
p +1
≡ ( g2k ) 2 ( mod p) do a ≡ g2k ( mod p),
≡ g ( p +1) k ( mod p)
≡ g2k+( p−1)k ( mod p)
≡ a.( g p−1 )k ( mod p) do a ≡ g2k ( mod p),
≡a ( mod p) do g p−1 ≡ 1 ( mod p).
Do đó b là một căn bậc hai của a modulo p.
Ví dụ 7.5. Một căn bậc hai của a = 2201 modulo p = 4127 là
p +1 4128
b≡a 4 = 2201 4 ≡ 22011032 ≡ 3718 ( mod 4127).

Để thấy rằng a thật sự có căn bậc hai modulo 4127, ta bình phương b và kiểm tra
được rằng 37182 = 13823524 ≡ 2201 ( mod 4127).

Giả sử ta muốn tính một căn bậc 2 modulo m, với m không nhất thiết là số nguyên
tố. Một phương pháp hiệu quả là phân tích m, tính căn bậc hai modulo mỗi số
nguyên tố (hoặc lũy thừa nguyên tố) của các thừa số, và kết hợp nghiệm bằng cách
sử dụng Định lý thặng dư Trung Hoa.

24
8 THUẬT TOÁN POHLIG-HELLMAN

Ví dụ 7.6. Ta tìm nghiệm của phép đồng dư


x2 ≡ 197 ( mod 437).
Phép phân tích cho ta 437 = 19.23. Do đó, đầu tiên ta giải hệ hai phương trình đồng

y2 ≡ 197 ≡ 7 ( mod 19), và z2 ≡ 197 ≡ 13 ( mod 23).
Do 19 và 23 đều đồng dư 3 modulo 4, nên ta có thể tìm các căn bậc hai của chúng
theo Mệnh đề (7.4). Khi đó, ta có
y ≡ ±8 ( mod 19) và z ≡ ±6 ( mod 23).
Ta có thể chọn y bằng 8 hoặc -8, và z bằng 6 hoặc -6. Ta sẽ chọn hai nghiệm dương,
và sử dụng Định lý thặng dư Trung Hoa để giải hệ phương trình đồng dư
x ≡ 8 ( mod 19) và x ≡ 6 ( mod 23).
Ta tìm được x ≡ 236 ( mod 437), do đó tìm được nghiệm của bài toán ban đầu.
Nhận xét 7.7. Nghiệm của bài toán trên là không duy nhất. Ban đầu ta hoàn toàn có
thể chọn số âm
−236 ≡ 201 ( mod 437),
để thu được căn bậc hai thứ hai của 197 modulo 437. Nếu các modulo là các số
nguyên tố, thì chỉ có duy nhất hai căn bậc hai như trên. Tuy nhiên, do 437=19.23 là
hợp số, do đó có thêm hai số nữa. Để tìm chúng, ta thấy hoặc 8 hoặc 6 là số âm. Từ
đó tính ra được x = 144 và x = 293, do đó 197 có bốn căn bậc hai modulo 437.
Nhận xét 7.8. Ta thấy rằng từ Ví dụ (7.6) khá dễ dàng tính được các căn bậc hai
modulo m nếu ta biết cách phân tích m thành tích các lũy thừa của các số nguyên
tố. Tuy nhiên, giả sử m quá lớn và ta không thể phân tích nó. Khi đó bài toán tìm
căn bậc hai modulo m là rất khó. Thật vậy, theo một nghĩa nào đó việc tìm căn bậc
hai modulo m khó tương đương với việc phân tích m thành thừa số nguyên tố.
Thật ra, nếu m là một số nguyên lớn và không biết phân tích thừa số nguyên tố
của nó, khi đó rất khó để xác định một số nguyên a cho trước có căn bậc hai modulo
m, kể cả không yêu cầu tính căn bậc hai.

8 Thuật toán Pohlig-Hellman

Ngoài việc là một định lý và một thuật toán, Định lý thặng dư Trung Hoa được
coi là một điều hiển nhiên. Nếu
m = m1 · m2 · · · m t

25
8 THUẬT TOÁN POHLIG-HELLMAN

là một tích của các số nguyên đôi một nguyên tố cùng nhau, khi đó Định lý thặng
dư Trung Hoa nói rằng việc giải một phương trình modulo m không dễ hơn việc
giải một hệ phương trình modulo mi với mỗi i, do nó cho ta biết cách kết hợp các
nghiệm để thu được nghiệm của phương trình modulo m.
Trong bài toán logarit rời rạc, ta cần giải phương trình
g x ≡ h ( mod p).
Trong trường hợp này, modulo p là số nguyên tố, do đó việc sử dụng Định lý thặng
dư Trung Hoa là không khả thi. Tuy nhiên, nhắc lại rằng nghiệm x được xác định
chỉ với modulo p − 1, do đó ta có thể xem nghiệm nằm ở trong Z/( p − 1)Z. Điều
này gợi ý phân tích p − 1 thành tích các thừa số nguyên tố có thể đóng một vai
trò quan trọng trong việc xác định tính khó của bài toán logarit rời rạc trong F∗p .
Tổng quát hơn, nếu G là một nhóm bất kỳ và g ∈ G là một phần tử có cấp N, thì
nghiệm của g x = h trong G được xác định duy nhất modulo N, do đó việc phân
tích N thành thừa số nguyên tố là cần thiết. Đây chính là ý tưởng của thuật toán
Pohlig-Hellman.
Định lý 8.1 (Thuật toán Pohlig-Hellman). Cho G là một nhóm, và ta có bài toán logarit
rời rạc trong G với mọi phần tử có cấp là một lũy thừa của một số nguyên tố. Với tính rời
rạc, nếu g ∈ G có cấp qe và giả sử ta có thể giải g x = h trong O(Sqe ) bước.
Cho g ∈ G là một phần tử có cấp N, và giả sử N phân tích được thành tích của lũy thừa
các số nguyên tố
e
N = q11 · q2e2 · · · qet t .
Khi đó bài toán logarit rời rạc g x = h có thể được giải trong
!
t
∑ Sqii + log N
e
O bước (8.1)
i =1

bằng cách sử dụng thủ tục sau:

(1) Với mỗi 1 ≤ i ≤ t, ta đặt


ei ei
gi = g N/qi và hi = h N/qi .
e
Chú ý rằng gi có lũy thừa nguyên tố cấp qi i , do đó sử dụng thuật toán đã cho để giải
bài toán logarit rời rạc
y
gi = h i . (8.2)
Cho y = yi là một nghiệm của (8.2).

26
8 THUẬT TOÁN POHLIG-HELLMAN

(2) Sử dụng Định lý thặng dư Trung Hoa để giải hệ phương trình đồng dư
e
x ≡ y1 ( mod q11 ), x ≡ y2 ( mod q2e2 ), . . . , x ≡ yt ( mod qet t ). (8.3)
Chứng minh. Thời gian chạy khá rõ ràng, do Bước (1) mất O(∑ Sqei ) bước, và Bước
i
(2), theo Định lý thặng dư Trung Hoa, mất O(log N ) bước. Trong thực hành, việc
tính toán theo Định lý thặng dư Trung Hoa thông thường là không đáng kể so với
các tính toán logarit rời rạc.
Ta vẫn phải chỉ ra Bước (1) và (2) cho ta nghiệm của g x = h. Cho x là một nghiệm
của hệ phương trình đồng dư (8.3). Khi đó, với mỗi i ta có thể viết
e
x = yi + qi i zi với zi nào đó. (8.4)
Khi đó ta có thể tính
e e e
x N/qi i yi +qi i zi N/qi i
(g ) = (g ) , theo (8.4)
e
N/qi i
= (g )yi .g Nzi
e
N/qi i yi
= (g ) do g N là phần tử đơn vị,
y
= gi i theo định nghĩa của gi ,
= hi theo (8.2)
ei ei
= h N/qi = glogg (h).N/qi theo định nghĩa của hi .
Theo định nghĩa của logarit rời rạc cơ số g, ta có thể viết thành
N N
e .x ≡ e . log g ( h ) ( mod N ), i = 1, t (8.5)
qi i qi i
và logarit rời rạc với cơ số g được định nghĩa modulo N, do g N là phần tử đơn vị.
Tiếp theo, ta thấy rằng
N N N
e1 , e2 , . . . ,
q1 q2 qet t
không có thừa số chung, nghĩa là ước chung lớn nhất của chúng là 1. Áp dụng liên
tiếp thuật toán Euclid mở rộng, khi đó ta có thể tìm được các số nguyên c1 , c2 , . . . , ct
sao cho
N N
e .c 1 + · · · + .ct = 1. (8.6)
q11 qet t
Nhân cả hai vế của (8.5) bởi ci và lấy tổng chạy với i = 1, 2, . . . , t. Ta suy ra
N N N N
e1 .c1 .x + · · · + et .ct .x = e1 .c1 . log g ( h ) + · · · + et .ct . log g ( h )
q1 qt q1 qt

27
8 THUẬT TOÁN POHLIG-HELLMAN

hay
t t
N N
∑ qei .ci .x ≡ ∑ qei .ci . logg (h) ( mod N ),
i =1 i i =1 i
và khi đó (8.6) cho ta biết rằng

x = logg (h) ( mod N ).

Đẳng thức này chứng minh rằng x thỏa mãn g x ≡ h.


Nhận xét 8.2. Thuật toán Pohlig-Hellman nhiều hay ít có tính suy dẫn từ bài toán
logarit rời rạc với các phần tử cấp bất kỳ đến bài toán logarit rời rạc có cấp lũy
thừa số nguyên tố. Chính xác hơn, theo ký hiệu của Định lý (8.1), thời gian chạy Sqe
với các phần tử cấp qe có thể được suy dẫn về O(e.Sq ). Điều này được đưa ra trong
Mệnh đề (8.1), thời gian chạy Sqe với các phần tử có cấp qe có thể suy dẫn về O(e.Sq ).
Điều này được chứng minh trong Mệnh đề (8.3).
Thuật toán Pohlig-Hellman chỉ ra rằng bài toán logarit rời rạc trong nhóm G là
không bảo mật nếu cấp của nhóm là tích của lũy thừa các số nguyên tố nhỏ. Tổng
quát hơn, nếu g x = h là dễ giải nếu cấp của phần tử g là tích của lũy thừa các số
nguyên tố nhỏ. Điều này được áp dụng trong bài toán logarit rời rạc trong F p nếu
p − 1 phân tích thành tích của lũy thừa các số nguyên tố nhỏ. Do p − 1 luôn là số
chẵn nên cách tốt nhất để làm việc này là đặt p = 2q + 1 với q là một số nguyên tố
và sử dụng một phần tử g cấp q. Khi đó thời gian chạy của thuật toán va chạm được
√ √
mô tả trong Mệnh đề (6.3) là O( q) = O( p). Tuy nhiên, phương pháp giải tích
chỉ số có thời gian chạy là cận lũy thừa do kể cả khi p = 2q + 1, số nguyên tố q được
chọn phải khá lớn.
Ta sẽ giải thích thuật toán suy dẫn bài toán logarit rời rạc cho các phần tử có cấp
là lũy thừa số nguyên tố đến bài toán logarit rời rạc cho các phần tử có cấp nguyên
e −1
tố. Ý tưởng khá đơn giản: nếu g có cấp qe , thì gq có cấp q.
Mệnh đề 8.3. Cho G là một nhóm. Giả sử rằng q là một số nguyên tố, và giả sử ta biết một
thuật toán mất Sq bước để giải bài toán logarit rời rạc g x = h trong G khi g có cấp q. Bây
giờ ta có g ∈ G là một phần tử có cấp qe với e ≥ 1. Khi đó ta có thể giải bài toán logarit rời
rạc

gx = h trong O(e.Sq ) bước. (8.7)



Nhận xét 8.4. Mệnh đề (6.3) nói rằng ta cần lấy Sq = O( q), và Mệnh đề (8.3) nói

rằng ta có thể giải bài toán logarit rời rạc (8.7) trong O(e q) bước. Chú ý rằng nếu
ta áp dụng Mệnh đề (6.3) trực tiếp cho bài toán logarit rời rạc (8.7), thời gian chạy
sẽ là O(qe/2 ), chậm hơn rất nhiều nếu e ≥ 2.

28
8 THUẬT TOÁN POHLIG-HELLMAN

Chứng minh. Ý tưởng chính để chứng minh mệnh đề là viết lũy thừa chưa biết x
dưới dạng
x = x0 + x1 q + · · · + xe−1 qe−1 với 0 ≤ xi < q, (8.8)
e −1
và xác định các hệ số x0 , x1 , . . . . Ta bắt đầu bằng việc quan sát thấy phần tử gq có
cấp q. Khi đó, ta có thể tính được
e −1 e −1
hq = ( g x )q lũy thừa qe−1 hai vế của (8.7)
 q e −1
x0 + x1 q+···+ xe−1 qe−1

= g từ (8.8)
e −1
 e  x1 + x2 q+···+ xe−1 qe−2
= g x0 q . g q
 e −1  x 0 e
= gq do gq = 1.
e −1
Do gq là một phần tử cấp q trong G, phương trình
 e −1  x 0 e −1
gq = hq

là một bài toán logarit rời rạc với cơ số là một phần tử cấp q. Theo giả thiết, ta có thể
giải bài toán này trong Sq bước. Khi đã xong, ta biết một lũy thừa x0 với tính chất
e −1 e −1
g x0 q = hq trong G.
Tính toán tương tự, ta lấy lũy thừa qe−2 hai vế của (8.7), suy ra
e −2 e −2
hq = ( g x )q
 q e −2
x0 + x1 q+···+ xe−1 qe−1

= g
 e  x2 + x3 q+···+ xe−1 qe−3
x 0 q e −2 x 1 q e −1
=g .g . gq
e −2 e −1
= g x0 q .g x1 q .
e −1
Để ý rằng ta đã xác định được giá trị của x0 và do đó phần tử gq có cấp q trong G.
Để tìm x1 , ta giải bài toán logarit rời rạc
 e −1  x 1  q e −2
gq = h.g− x0

với đại lượng chưa biết là x1 . Áp dụng thuật toán đã cho một lần nữa, ta có thể giải
bài toán trên trong Sq bước. Khi đó, trong O(2Sq ) bước, ta đã xác định các giá trị
của x0 và x1 thỏa mãn
e −2 e −2
g ( x0 + x1 q ) q = hq trong G.

29
8 THUẬT TOÁN POHLIG-HELLMAN

Tương tự, ta tìm được x2 bằng cách giải bài toán logarit rời rạc
 e −1  x 2  q e −3
gq = h.g− x0 − x1 q ,....

Tổng quát, sau khi đã xác định được x0 , . . . , xi−1 , khi đó giá trị của xi thu được bằng
cách giải
 e −1  x i   q e − i −1
q − x0 − x1 q−···− xi−1 qi−1
g = h.g trong G.

Mỗi bước này là một bài toán logarit rời rạc với cơ số có cấp q, do đó mỗi bài toán
được giải trong Sq bước. Do đó sau O(eSq ) bước, ta thu được lũy thừa x = x0 +
x1 q + · · · + xe−1 qe−1 thỏa mãn g x = h, do đó giải được bài toán logarit rời rạc ban
đầu.
Ví dụ 8.5. Ta đưa ra một ví dụ để làm rõ thuật toán đã được mô tả và chứng minh
của Mệnh đề (8.3). Ta giải

5448x = 6909 trong F11251 . (8.9)
Số nguyên tố p = 11251 có tính chất là p − 1 chia hết cho 54 , và dễ dàng kiểm tra lại
rằng 5448 có cấp là 54 trong F11251 . Bước đầu tiên ta giải
3 x0
  3
54485 = 69095 ,

rút gọn về 11089x0 = 11089. Dễ dàng giải được nghiệm x0 = 1, do đó giá trị ban
đầu của x là 1.
Bước tiếp theo, ta giải
 x
53 1 2 2
5448 = (6909.5448− x0 )5 = (6909.5448−1 )5 ,

rút gọn về 11089x1 = 3742. Chú ý rằng ta chỉ cần kiểm tra các giá trị nằm giữa 1 và 4,
mặc dù nếu q lớn, ta có thể sử dụng một thuật toán nhanh hơn như trong Mệnh đề
(6.3) để giải bài toán logarit rời rạc. Trong hai trường hợp, nghiệm của nó là x1 = 2,
và do đó giá trị của x là x = 11 = 1 + 2.5.
Tiếp tục, ta giải
 x
53 2
5448 = (6909.5448− x0 − x1 .5 )5 = (6909.5448−11 )5 ,

suy ra 11089x2 = 1. Do đó x2 = 0, suy ra giá trị của x vẫn là 11.


Bước cuối cùng, ta giải
 x
53 3 2
5448 = 6909.5448− x0 − x1 .5− x2 .5 = 6909.5448−11 .

30
8 THUẬT TOÁN POHLIG-HELLMAN

Suy ra ta cần giải 11089x3 = 6320, và nghiệm là x3 = 4. Do đó, đáp án cuối cùng của
ta là
x = 511 = 1 + 2.5 + 4.53 .
Kiểm tra lại, ta tính được
5448511 = 6909 trong F11251 .

Thuật toán Pohlig-Hellman để giải bài toán logarit rời rạc sử dụng Định lý thặng
dư Trung Hoa để kết hợp các nghiệm có cấp lũy thừa của số nguyên tố. Ví dụ sau
đây mô tả thuật toán Pohlig-Hellman đầy đủ.
Ví dụ 8.6. Xét bài toán logarit rời rạc
23x = 9689 trong F11251 .
Cơ số 23 là một phần tử nguyên thủy trong F11251 , nghĩa là nó có cấp 11250. Do
11250 = 2.32 .54 là tích của các số nguyên tố nhỏ, thuật toán Pohlig-Hellman sẽ hoạt
động tốt. Khi đó ta đặt
p = 11251, g = 23, h = 9689, N = p − 1 = 2.32 .54 .

Bước đầu tiên ta giải ba bài toán logarit rời rạc được ghi ở bảng dưới đây
e x
e e
  e
q e g ( p − 1 ) /q h ( p − 1 ) q Giải g ( p − 1 ) /q = h( p−1)/q
2 1 11250 11250 1
3 2 5029 10724 4
5 4 3448 6909 511

Để ý rằng bài toán đầu tiên là tầm thường, trong khi bài toán thứ ba là bài toán ta
đã giải ở ví dụ trên. Trong mọi trường hợp, các bài toán đơn lẻ trong bước này của
thuật toán có thể được giải như trong phần chứng minh của Mệnh đề (8.3)
Bước tiếp theo là sử dụng Định lý thặng dư Trung Hoa để giải hệ phương trình
đồng dư
x ≡ 1 ( mod 2), x ≡ 4 ( mod 32 ), x ≡ 511 ( mod 54 ).
Nghiệm nhỏ nhất là x = 4261. Kiểm tra lại đáp án bằng cách tính

234261 ≡ 9689 trong F11251 .

31
8 THUẬT TOÁN POHLIG-HELLMAN

KẾT LUẬN
Trong báo cáo này, ta đã tìm hiểu về bài toán logarit rời rạc trong nhóm F∗p và trong
nhóm G tổng quát. Ta cũng đã tìm hiểu về hệ mã hóa ElGamal, ưu điểm cũng như
nhược điểm của nó và độ khó để phá được hệ mã hóa này. Tiếp theo, ta được giới
thiệu về thuật toán va chạm bước nhỏ-bước lớn của Shanks, cách thức hoạt động
của thuật toán này cũng như thời gian chạy của nó.
Tiếp theo, ta tìm hiểu về định lý thặng dư Trung Hoa và cách tìm căn bậc hai
modulo p của những số p đồng dư 3 modulo 4. Định lý thặng dư Trung Hoa là nền
tảng cho thuật toán Pohlig-Hellman giải bài toán logarit rời rạc.
Sau phần kết luận là phần bài tập tương ứng trong cuốn sách đã nêu trong Lời
mở đầu. Số bài tập trình bày trong báo cáo này là 21 bài trong tổng số 28 bài.

32
9 BÀI TẬP

9 Bài tập

9.1 Bài tập 2.3

Cho g là một phần tử nguyên thủy của F p .

(a) Giả sử x = a và x = b là hai nghiệm nguyên của phương trình đồng dư g x ≡


h ( mod p). Chứng minh rằng a ≡ b ( mod p − 1). Giải thích tại sao điều này lại
suy ra ánh xạ logg được định nghĩa tốt.

(b) Chứng minh rằng log( ab) = logg ( a) + logg (b) với mọi a, b ∈ F∗p .

(c) Chứng minh rằng logg (hn ) = n logg (h) với mọi h ∈ F∗p và n ∈ Z.

BÀI LÀM

(a) Giả sử x = a và x = b là nghiệm của phương trình g x ≡ h ( mod p). Khi đó ta



g a = h và gb = h.
Khi đó ta có
g a−b = 1
Lại có cấp của g là p − 1 nên ( p − 1)|( a − b), suy ra a − b ≡ 0 ( mod p − 1).
Vậy a ≡ b( mod p − 1). Do đó ánh xạ logg được định nghĩa tốt.
(b) Giả sử logg ( a) = n, logg (b) = m. Khi đó ta có a = gn và b = gm . Vậy

logg ( ab) = logg ( gm .gn ) = logg ( gm+n ) = m + n = logg ( a) + logg (b) ( mod p − 1).

(c) Giả sử logg (h) = k, tức là h = gk . Khi đó, ta có

logg (hn ) = logg [( gk )n ] = logg ( gkn ) = nk = n logg (h) ( mod p − 1).

9.2 Bài tập 2.4

Tính các logarit rời rạc sau đây:

(a) log2 (13) với số nguyên tố 23 (tức là giải phương trình 2x = 13 ( mod 23)).
(b) log10 22 với p = 47.
(c) log627 (608) với p = 941.

BÀI LÀM

33
9.3 Bài tập 2.5 9 BÀI TẬP

(a) Ta cần tính log2 (13) với p = 23. Sử dụng phương pháp "vét cạn", ta tính được
27 = 128 ≡ 13 ( mod 23).
Vậy log2 (13) = 7 với p = 23.
(b) Tương tự, bằng phương pháp vét cạn, ta tính được
log10 (22) = 11
với p = 47.
(c) Tương tự, ta có
log627 (608) = 18
với p = 941.

9.3 Bài tập 2.5

Cho p là một số nguyên tố lẻ và g là một nghiệm nguyên thủy modulo p. Chứng


minh rằng a có căn bậc hai modulo p nếu và chỉ nếu logarit rời rạc của nó logg ( a)
modulo p là chẵn.

BÀI LÀM

[⇒] Giả sử phản chứng rằng m lẻ, nghĩa là tồn tại số tự nhiên k sao cho m = 2k + 1,
và giả sử gm là một căn bậc hai modulo p, nghĩa là gm ≡ c2 ( mod p). Khi đó, theo
định lý nhỏ Fermat ta có
c p−1 ≡ 1 ( mod p).
Tuy nhiên, c p−1 ( mod p) cũng bằng với
p −1 p −1 p −1 p −1
c p −1 ≡ ( c 2 ) 2 ≡ ( gm ) 2 ≡ ( g2k+1 ) 2 ≡ gk( p−1) .g 2 ( mod p).
Một ứng dụng khác của Định lý nhỏ Fermat cho ta biết rằng

gk( p−1) ≡ ( g p−1 )k ≡ 1k ≡ 1 ( mod p)


Do đó, ta có
p −1
g 2 ≡ 1 ( mod p).
Điều này mâu thuẫn với việc g là một nghiệm nguyên thủy của F∗P , do đó mọi lũy
thừa lẻ của g không là một căn bậc hai modulo p.
[⇐] Giả sử logarit rời rạc của a modulo p là một số chẵn, tức là
logg ( a) = 2k

34
9.4 Bài tập 2.6 9 BÀI TẬP

với k là một số nguyên nào đó. Điều này chỉ ra rằng


a = g2k = ( gk )2
Do đó
( gk )2 ≡ a ( mod p).
Ta thấy rằng gk chính là căn bậc hai modulo p của a. Vậy a có căn bậc hai modulo p.

9.4 Bài tập 2.6

Alice và Bob thống nhất sử dụng số nguyên tố p = 1373 và cơ số g = 2 cho một


trao đổi khóa Diffie-Hellman. Alice gửi Bob giá trị A = 974. Bob hỏi sự trợ giúp từ
bạn, và bạn đưa cho Bob giá trị lũy thừa bí mật b = 871. Vậy Bob phải gửi giá trị
nào cho Alice, và giá trị bí mật chung của hai người là bao nhiêu? Bạn có thể tìm ra
lũy thừa bí mật của Alice không?
BÀI LÀM
Giá trị mà Bob phải gửi cho Alice là
gb = 2871 ≡ 805 ( mod 1373)
Khi đó, giá trị bí mật chung của hai người là
Ab = 974871 ≡ 397 ( mod 1373)
Việc tìm ra lũy thừa bí mật của Alice là ta tìm giá trị x nguyên thỏa mãn đẳng thức
đồng dư
2x ≡ 974 ( mod 1373)
Bằng phương pháp bước nhỏ-bước lớn của Shanks, ta tính được
x = 587.

9.5 Bài tập 2.7

Cho p là một số nguyên tố và g là một số nguyên. Bài toán Diffie-Hellman quyết


định được phát biểu như sau. Giả sử ta có bộ ba số A, B, và C, và giả sử thêm rằng
A ≡ g a ( mod p) B ≡ gb ( mod p),
nhưng không nhất thiết phải biết các giá trị lũy thừa a và b. Phân biệt C liệu có
bằng với g ab ( mod p) hay không. Chú ý rằng bài toán này khác với bài toán Diffie-
Hellman đã được nêu ở trên. Bài toán Diffie-Hellman yêu cầu tính trực tiếp giá trị
của g ab .

35
9.6 Bài tập 2.8 9 BÀI TẬP

(a) Chứng minh rằng một thuật toán giải được bài toán Diffie-Hellman có thể được
dùng để giải bài toán Diffie-Hellman quyết định.
(b) Bạn nghĩ rằng bài toán Diffie-Hellman quyết định là khó hay dễ? Tại sao?

BÀI LÀM

1. Giả sử có một thuật toán giải được bài toán Diffie-Hellman. Khi đó, nếu ta biết
các giá trị A = g a và B = gb thì thuật toán sẽ cho đầu ra là giá trị g ab .
Khi đó, ta chỉ cần so sánh giá trị của C với g ab đã biết. Vậy ta đã giải được bài
toán Diffie-Hellman quyết định.
2. Bài toán Diffie-Hellman quyết định không khó hơn bài toán Diffie-Hellamn,
theo nghĩa rằng nếu giải được bài toán Diffie-Hellman thì sẽ giải được bài toán
Diffie-Hellman quyết định.

9.6 Bài tập 2.8

Alice và Bob thống nhất sử dụng số nguyên tố p = 1373 và cơ số g = 2 để liên lạc


với nhau qua hệ mã hóa công khai ElGamal.
(a) Alice chọn a = 947 là khóa bí mật. Vậy khi đó khóa công khai A là bao nhiêu?
(b) Bob chọn b = 716 là khóa bí mật, khi đó khóa công khai tương ứng là
B ≡ 2716 ≡ 469 ( mod 1373).
Alice giải mã thông điệp m = 583 với khóa tức thời là k = 877. Vậy bản mã
(c1 , c2 ) mà Alice gửi cho Bob là gì?
(c) Alice quyết định chọn khóa bí mật mới a = 299 tương ứng với khóa công khai
A ≡ 2299 ≡ 34 ( mod 1373). Bob mã hóa một thông điệp sử dụng khóa công
khai của Alice và gửi bản mã (c1 , c2 ) = (661, 1325). Hãy giải mã thông điệp.
(d) Bob chọn một khóa bí mật mới và công bố khóa công khai tương ứng B =
893. Alice mã hóa một thông điệp sử dụng khóa công khai này và gửi bản mã
(c1 , c2 ) = (693, 793) cho Bob. Eve can thiệp vào quá trình trao đổi khóa. Hãy
giúp Eve bằng cách giải bài toán logarit rời rạc 2b ≡ 893 ( mod 1373) và sử dụng
giá trị b để giải mã thông điệp.

BÀI LÀM

(a) Ta tính khóa công khai A bằng cách tính


A = g a ≡ 2974 ≡ 177 ( mod 1373)

36
9.7 Bài tập 2.9 9 BÀI TẬP

(b) Với k = 877, giá trị của c1 là


c1 = gk ≡ 2877 ≡ 719 ( mod 1373)
và giá trị c2 là
c2 = m.Bk ≡ 583.469877 ≡ 623 ( mod 1373)
Khi đó, bản mã mà Alice gửi cho Bob là (c1 , c2 ) = (719, 623).
(c) Để giải mã thông điệp với bản mã (c1 , c2 ) = (661, 1325), a = 34, thì ta cần tính
m = (c1a )−1 .c2 = (66134 )−1 .1325 = 332

(d) Để giúp Eve can thiệp vào quá trình trao đổi, ta sẽ giải bài toán logarit rời rạc
2x ≡ 893 ( mod 1373).
Khi đó, ta tính được b = 219. Khi đó, với bản mã (c1 , c2 ) = (693, 793), để giải
mã thì Alice cần tính
(c1b )−1 .c2 = (693219 )−1 .793 = 365.

9.7 Bài tập 2.9

Giả sử rằng oracle được đưa vào để giải bài toán Diffie-Hellman. Hãy giải thích
cách bạn sử dụng oracle đó để giải mã hệ mã hóa công khai ElGamal.

BÀI LÀM

Trong hệ mã hóa công khai ElGamal, khi biết khóa công khai của Alice A ≡ g a ( mod
p) và biết bản mã chứa hai đại lượng c1 ≡ gk ( mod p) và c2 ≡ m.Ak ( mod p), với k
là khóa tức thời bí mật của Bob. Do các giá trị g a và gk đã biết nên oracle của bài toán
Diffie-Hellman sẽ tính được giá trị g ak ( mod p). Nhưng ta lại có g ak ≡ Ak ( mod p),
do đó ta có thể tìm được bản rõ của Bob bằng cách tính
( g ak )−1 .c2 = g−ak .m.Ak = g−ak .m.g ak ≡ m ( mod p).

9.8 Bài tập 2.10

Bài tập sau đây mô tả một hệ mã hóa công khai yêu cầu Bob và Alice trao đổi một
số thông điệp.
Bob và Alice cố định một số nguyên tố công khai p = 32611, và tất cả những số
khác được sử dụng đều là bí mật. Alice lấy thông điệp là m = 11111, chọn một số
nguyên bất kỳ a = 3589, và gửi số u = m a ( mod p) = 15950 cho Bob. Bob chọn một

37
9.8 Bài tập 2.10 9 BÀI TẬP

số mũ bất kỳ b = 4037 và gửi v = ub ( mod p) = 15422 cho Alice. Alice khi đó tính
w = v15619 ≡ 27257 ( mod 32611) và gửi w = 27257 cho Bob. Cuối cùng, Bob tính
w31883 ( mod 32611) và khi đó thu được giá trị 11111, là thông điệp của Alice.

(a) Giải thích tại sao thuật toán hoạt động. Cụ thể, Alice sử dụng số a = 3589 và
15619 là các số mũ. Chúng liên hệ với nhau như nào? Tương tự, các số mũ của
Bob là b = 4037 và 31883 liên hệ với nhau như nào?
(b) Đưa ra công thức tổng quát cho hệ mã hóa này.
(c) Điểm yếu của hệ mã hóa này so với ElGamal là gì?
(d) Có điểm nào ở hệ mã hóa này hơn ElGamal? Cụ thể, Eve có thể phá vỡ nó nếu
cô ấy có thể giải bài toán logarit rời rạc? Liệu Eve có thể phá vỡ nó nếu cô ấy
giải được bài toán Diffie-Hellman?

BÀI LÀM

(a) Ta có |m| = 32610 và


3589.15619 ( mod 32610) ≡ 4037.31883 ( mod 32610) ≡ 1 ( mod 32610).

Vậy 15619 chính là phần tử nghịch đảo của a = 3589 trong nhóm nhân F32611
và 31883 là phần tử nghịch đảo của b = 4037 trong nhóm nhân trên.
Khi đó, ta có
 15619 31883
3589 4037
(m ) = m3589.4037.15619.31883 = m1 = m.

Vậy thuật toán hoạt động.


(b) Giả sử Alice và Bob muốn gửi thông điệp bằng hệ mã hóa trên. Khi đó, Alice
và Bob lần lượt chọn các tham số bí mật a và b.

38
9.9 Bài tập 2.11 9 BÀI TẬP

Thiết lập tham số công khai


Một bên thứ ba tin cậy chọn và công bố một số nguyên tố lớn p
và một phần tử g modulo p có cấp p − 1 lớn.
Alice Bob
Tạo khóa
Chọn tham số bí mật a ∈ [1, p − 1].
Chọn thông điệp m.
Gửi u = m a cho Bob.
Chọn tham số bí mật b ∈ [1, p − 1].
Gửi v = ub cho Alice.
Tính a−1 ( mod p − 1)
−1
Gửi w = v a cho Bob.
Giải mã

Tính b 1 ( mod p − 1)
−1
Tính m = wb .

(c) Hệ mã hóa công khai ElGamal chỉ yêu cầu Alice gửi Bob một tin nhắn duy nhất.
Hệ mã hóa mới này yêu cầu Alice gửi cho Bob hai thông điệp, và Bob phải gửi
một thông điệp cho Alice. Do đó hệ mã hóa mới này tương tác nhiều hơn và yêu
cầu nhiều sự liên lạc hơn so với ElGamal.
(d) Lợi thế của hệ mã hóa mới là Alice và Bob để lộ ít thông tin hơn trong hệ mã
hóa ElGamal. Tất nhiên, nếu Eve có thể giải bài toán logarit rời rạc, khi đó, do
Eve biết u, v và w, cô ấy có thể giải
w ≡ v x ( mod p)
để thu được x = a0 , và do đó có thể khôi phục lại m do
0 0
u a ≡ m aa ≡ m ( mod p).
Tuy nhiên, không có cách dễ dàng nào cho Eve để phá được hệ mã hóa trên
nếu cô ấy có thể giải được bài toán Diffie-Hellman. Do đó, hệ mã hóa mới này
có tiềm năng an toàn hơn hệ ElGamal, nếu bài toán Diffie-Hellman dễ hơn bài
toán logarit rời rạc.

9.9 Bài tập 2.11

Nhóm S3 gồm 6 phần tử phân biệt sau đây


e, σ, σ2 , τ, στ, σ2 τ.

39
9.10 Bài tập 2.12 9 BÀI TẬP

với e là phần tử trung hòa và phép nhân được tính theo quy tắc
σ3 = e, τ 2 = 1, τσ = σ2 τ.

Tính các giá trị sau trong nhóm S3 :

(a) τσ2 .
(b) τ (στ ).
(c) (στ )(στ ).
(d) (στ )(σ2 τ ).

Nhóm S3 có giao hoán không?

BÀI LÀM

(a) Ta có
τσ2 = (τσ ).σ = σ2 τ.σ = σ2 .σ2 τ = σ3 .στ = στ.

(b) Ta có
τ (στ ) = (τσ )τ = σ2 ττ = σ2 τ 2 = σ2 .

(c) Ta có
(στ )(στ ) = σ(τσ)τ = σσ2 ττ = σ3 τ 2 = e.
(d) Ta có
(στ )(σ2 τ ) = σ(τσ)στ = σσ2 τστ = σ3 (τσ)τ = σ2 ττ = σ2 .

Hiển nhiên nhóm S3 ko giao hoán do


τσ = σ2 τ 6= στ.

9.10 Bài tập 2.12

Cho G là một nhóm, d ≥ 1 là một số nguyên, và định nghĩa tập con của G bởi

G [ d ] = { g ∈ G : g d = e }.

(a) Chứng minh rằng nếu g nằm trong G [d] thì g−1 cũng thế.
(b) Giả sử G là giao hoán. Chứng minh rằng nếu g và h nằm trong G [d] thì g.h cũng
nằm trong đó.
(c) Suy ra rằng nếu G là giáo hoán, thì G [d] là giao hoán.

40
9.11 Bài tập 2.13 9 BÀI TẬP

(d) Chỉ ra một ví dụ rằng nếu G là nhóm không giao hoán, thì G [d] không nhất
thiết là một nhóm.

BÀI LÀM

(a) Ta có
( g−1 )d = g−d = ( gd )−1 = e−1 = e.
Trong đó dấu bằng thứ 3 xảy ra do g ∈ G [d].
(b) Giả sử g và h nằm trong G [d], khi đó ta có
( gh)d = gd hd = e.e = e.
Trong đó dấu bằng thứ nhất xảy ra do g và h nằm trong G [d].
(c) Hiển nhiên e nằm trong G [d]. Từ phần (a) và(b) ta suy ra G [d] là một nhóm nếu
G là một nhóm giao hoán.
(d) Ta lấy nhóm S3 và lấy τ = (123), σ = (132). Khi đó

τ 3 = σ3 = e.
Do đó τ, σ ∈ S3 [3]. Tuy nhiên
στ = (12)
là một phần tử cấp 2 trong S3 , do đó στ ∈
/ S3 [3].

9.11 Bài tập 2.13

Cho G và H là các nhóm. Một hàm φ : G → H được gọi là một đồng cấu nhóm
nếu nó thỏa mãn
φ( g.h) = φ( g).φ(h) với mọi g, h ∈ G.

(a) Cho eG là phần tử trung hòa của G, và e H là phần tử trung hòa của H, và cho
g ∈ G. Chứng minh rằng
φ(eG ) = e H và φ ( g −1 ) = φ ( g ) −1 .

(b) Cho G là một nhóm giao hoán. Chứng minh rằng ánh xạ φ : G → G được định
nghĩa bởi φ( g) = g2 là một đồng cấu.
(c) Câu hỏi tương tự câu (b) với φ( g) = g−1 .

BÀI LÀM

41
9.12 Bài tập 2.14 9 BÀI TẬP

(a) Với g ∈ G, ta có
φ( g) = φ( g.eG ) = φ( g).φ(eG ).
Giản ước hai vế ta suy ra
φ(eG ) = e H .
Mặt khác, ta có
φ(eG ) = φ( g.g−1 ) = φ( g).φ( g−1 ).
Chuyển vế ta có
φ( g−1 ) = (φ( g))−1 .
(b) Giả sử g và h trong G. Khi đó, ta có
φ( gh) = ( gh)2 = g2 h2 = φ( g).φ(h).
Trong đó, dấu bằng thứ 2 xảy ra do G là một nhóm giao hoán. Vậy φ là một
đồng cấu.
(c) Với g và h nằm trong nhóm G, ta có
φ( gh) = ( gh)−1 = h−1 g−1 = g−1 h−1 .
Trong đó dấu bằng cuối cùng xảy ra do G là nhóm giao hoán.

9.12 Bài tập 2.14

Chứng minh rằng các ánh xạ sau là đồng cấu.


(a) Ánh xạ φ : Z → Z/NZ chuyển a ∈ Z thành a mod N trong Z/NZ.
 
a 0
(b) Ánh xạ φ : R → GL2 (R) được định nghĩa bởi φ( a) = .
0 a −1
(c) Ánh xạ logarit rời rạc logg : F∗p → Z/( p − 1)Z, với g là một nghiệm nguyên
thủy modulo p.

BÀI LÀM

(a) Lấy a và b nằm trong Z. Khi đó, ta có


φ( ab) = ab ( mod N ) ≡ a ( mod N ).b ( mod N ) = φ( a).φ(b).
Vậy φ là một đồng cấu nhóm.
(b) Lấy a, b ∈ R∗ , khi đó ta có
       
a 0 b 0 ab 0 ab 0
φ( a).φ(b) = . = = = φ( ab).
0 a −1 0 b −1 0 a −1 b −1 0 ( ab)−1

42
9.13 Bài tập 2.15 9 BÀI TẬP

(c) Lấy a, b ∈ F∗p . Khi đó ta có


logg ( ab) = logg ( a) + logg (b).

Công thức đã được chứng minh ở bài trước.

9.13 Bài tập 2.15

(a) Chứng minh rằng GL2 (F p ) là một nhóm


(b) Chỉ ra rằng GL2 (F p ) là một nhóm không giao hoán với mọi p.
(c) Có bao nhiêu phần tử trong GL2 (F p )?
(d) Có bao nhiêu phần tử trong GLn (F p )?

BÀI LÀM

(a) Lấy hai ma trận


   
a b x y
A= và B = ∈ GL2 (F p ).
c d z t
Khi đó, ta có
    
a b x y ax + bz ay + bt
AB = = ∈ GL2 (F p ).
c d z t cx + dz cy + dt
Ma trận đơn vị là  
1 0
E2 =
0 1
và nghịch đảo của ma trận A là
 
−1 1 d −c
A =
ad − bc −b a
với các số được lấy theo modulo p.
Vậy GL2 (F p ) là một nhóm.
(b) Nhóm GL2 (F p ) không là một nhóm giao hoán do
         
1 1 1 0 2 1 1 1 1 0 1 1
= 6= = .
0 1 1 1 1 1 1 2 1 1 0 1

43
9.14 Bài tập 2.16 9 BÀI TẬP

(c) Ta có GL2 (F p ) là nhóm các ma trận cấp 2 có định thức khác 0 với các phần tử
trong F p . Số cách để chọn cột đầu tiên là p2 − 1, và số cách để chọn cột còn lại
độc lập tuyến tính với cột đã cho là p2 − p. Vậy số phần tử của GL2 (F p ) là

| GL2 (F p )| = ( p2 − 1)( p2 − p) = p( p − 1)2 ( p + 1).

(d) Áp dụng cách làm tương tự, số phần tử của GLn (F p ) là


n −1
| GLn (F p )| = ∏ ( p n − p i ).
i =0

9.14 Bài tập 2.16

Xác thực các khẳng định sau đây



(a) x2 + x = O( x2 ),
(b) 6x2 − 37x5 + 5 = O( x5 ),
(c) k300 = O(2k ),
(d) (ln k)375 = O(k0,001 ),
(e) k2 2k = O(e2k ),
(f) N 10 2 N = O(e N ).

BÀI LÀM

(a) Ta có √
x2 + x
lim = 1.
x2

Vậy x2 + x = O( x2 ).
(b) Ta có
6x2 − 37x5 + 5
lim = −37.
x5
Vậy 6x2 − 37x5 + 5 = O( x5 ).
(c) Ta tính
k300
lim k
2

44
9.15 Bài tập 2.17 9 BÀI TẬP

Ta thấy cả tử và mẫu tiến đến vô cùng khi k tiến đến vô cùng. Áp dụng quy tắc
L’Hospital liên tục, khi đó giới hạn đã cho trở thành
300!
lim = 0.
(ln 2)300 .2k
Vậy k300 = O(2k ).
(d) Ta tính
(ln k)375
lim 0,001
k
Áp dụng L’Hospital liên tiếp ta có giới hạn trên bằng
1
lim = 0.
k375,001
Vậy (ln k)375 = O(k0,001 ).
(e) Ta có
k2 .2k k2
lim = lim  2 k
e2k e
2

Áp dụng L’Hospital 2 lần, ta tính được giới hạn trên bằng 0. Do đó k2 2k =


O(e2k ).
(f) Ta tính giới hạn
N 10 2 N N 10
lim = lim  N .
eN e
2
Áp dụng quy tắc L’Hospital liên tiếp, ta có
N 10
lim  N = 0.
e
2

Vậy N 10 2 N = O(e N ).

9.15 Bài tập 2.17

Sử dụng phương pháp bước nhỏ-bước lớn của Shanks để giải các bài toán logarit
rời rạc sau.

(a) 11x = 21 trong F71 .


(b) 156x = 116 trong F593 .

45
9.15 Bài tập 2.17 9 BÀI TẬP

(c) 650x = 2213 trong F3571 .

BÀI LÀM

(a) Ta giải bài toán logarit rời rạc

11x = 21 trong F71 .


Cấp của phần tử 11 trong F71 là 70. Khi đó, ta tính
Danh sách 1: 1, 11, 50, 53, 15, 23, 40, 14, 12, 61.


Danh sách 2: 21, 5, 35, 32, 11, 6, 42, 10, 70, 64.
Ta thấy rằng
111 = 21.11−9.4 .
Vậy x = 1 + 9.4 = 37.
(b) Ta giải bài toán logarit rời rạc
156x = 116 trong F593 .

Cấp của phần tử 156 trong F593 là 148. Ta đặt N = d 148e = 13 và H = h− N =
156−13 = 297. Ta có bảng sau

k hk a.H k
1 156 58
2 23 29
3 30 311
4 529 452
5 97 226
6 307 113
7 452 353

Từ bảng trên ta thấy rằng

1567 = 116.2974 = 452 trong F593 .


Khi đó, ta có

16 = 1567 .2974 = 1567 .(13613 )4 = 15659 trong F593 ,


do đó nghiệm là x = 59.

46
9.16 Bài tập 2.18 9 BÀI TẬP

(c) Ta có h = 650 có cấp 510 trong F3571 . Đặt N = d 510e = 23 và H = h− N =
650−23 = 1925. Ta có bảng sau

k hk a.H k k hk a.H k k hk a.H k k hk a.H k


1 650 3393 6 1650 694 11 2815 2430 16 2476 677
2 1122 166 7 1200 396 12 1398 3311 17 2450 3381
3 816 1731 8 1522 1677 13 1666 3011 18 3405 2063
4 1892 432 9 133 41 14 887 442 19 2801 323
5 1376 3128 10 746 363 15 1619 952 20 3011 421

Ta thấy rằng
65020 = 2213.192513 = 3011 trong F3571 .
Lại có 1925 = 650−23 , ta tính được

2213 = 65020 .1925−13 = 65020 .(65023 )13 = 650319 trong F3571 ,


Vậy nghiệm của phương trình là x = 319.

9.16 Bài tập 2.18

Giải mỗi hệ phương trình đồng dư sau (hoặc giải thích tại sao không có nghiệm).

(a) x ≡ 3 ( mod 7) và x ≡ 4 ( mod 9).


(b) x ≡ 137 ( mod 423) và x ≡ 87 ( mod 191).
(c) x ≡ 133 ( mod 451) và x ≡ 237 ( mod 697).
(d) x ≡ 5 ( mod 9), x ≡ 6 ( mod 10), và x ≡ 7 ( mod 11).
(e) x ≡ 37 ( mod 43), x ≡ 22 ( mod 49), và x ≡ 18 ( mod 71).

BÀI LÀM

(a) Do x ≡ 3 ( mod 7) nên x có dạng x = 7k + 3 với k là một số nguyên dương. Mặt


khác, lại có x ≡ 4 ( mod 9) nên ta có

7k + 3 ≡ 4 ( mod 9) hay 7k ≡ 1 ( mod 9)


Nhân hai vế với nghịch đảo của 7 modulo 11 là 4. Khi đó, ta có
k ≡ 1.4 ( mod 9).

Do đó k = 9n + 4. Do đó x = 7.4 + 3 = 31.

47
9.17 Bài tập 2.19 9 BÀI TẬP

(b) Do x ≡ 87 ( mod 191) nên x có dạng x = 191k + 87 với k là một số nguyên


dương. Mặt khác, lại có x ≡ 137 ( mod 423) nên ta có
191k + 87 ≡ 137 ( mod 423) hay 191k ≡ 50 ( mod 423)
Nhân hai vế với nghịch đảo của 191 modulo 423 là 392. Khi đó, ta có
k ≡ 50.392 ( mod 423) = 142 ( mod 423).
Do đó k = 423n + 142.
Vậy x = 191.142 + 87 = 27209.
(c) Do x ≡ 133 ( mod 451) nên x có dạng x = 451k + 133 với k là một số nguyên
dương. Mặt khác, lại có x ≡ 237 ( mod 697) nên ta có
451k + 133 ≡ 237 ( mod 697) hay 451k ≡ 104 ( mod 697)
Tuy nhiên, 451 ko có nghịch đảo của phép nhân modulo 697 do 451 và 697
không nguyên tố cùng nhau. Vậy không tồn tại nghiệm.
(d) Áp dụng Định lý thặng dư Trung Hoa để giải hệ
x ≡ 5 ( mod 9), x ≡ 6 ( mod 10), ≡ 7 ( mod 11).
Suy ra x = 986.
(e) Áp dụng Định lý thặng dư Trung Hoa để giải hệ
x ≡ 37 ( mod 43), x ≡ 22 ( mod 49), x ≡ 18 ( mod 71).
Suy ra x = 11733.

9.17 Bài tập 2.19

Ta có một số đồ vật, nhưng ta không biết chính xác có bao nhiêu. Nếu ta xếp hàng
ba cái một thì sẽ thừa hai cái. Nếu xếp thành 5 cái một hàng thì sẽ thừa 3 cái. Nếu
ta xếp thành 7 cái một hàng thì sẽ thừa 2 cái. Vậy có bao nhiêu đồ vật?
BÀI LÀM
Gọi x là số đồ vật. Khi đó, ta giải hệ phương trình đồng dư
x ≡ 2 ( mod 3), x ≡ 3 ( mod 5), x ≡ 2 ( mod 7).
Do x ≡ 2 ( mod 3), do đó x = 3k + 2 với k là một số tự nhiên nào đó. Lại có từ
phương trình thứ hai ta có
3k + 2 ≡ 3 ( mod 5) hay k ≡ 2 ( mod 5).

48
9.18 Bài tập 2.21 9 BÀI TẬP

Vậy k = 5n + 2 với n là một số tự nhiên nào đó, suy ra x = 3(5n + 2) + 2 = 15n + 8.


Và cuối cùng, từ phương trình thứ 3 ta có
15n + 8 ≡ 2 ( mod 7), hay n ≡ 1 ( mod 7).
Do đó n = 7m + 1 với m là một số tự nhiên nào đó. Khi đó, ta có x = 15(7m + 1) +
8 = 105m + 23. Vậy số đồ vật là 23 là số đồ vật ít nhất thỏa mãn đề bài.

9.18 Bài tập 2.21

Cho x = c và x = c0 là hai nghiệm của hệ phương trình đồng dư của Định lý


thặng dư Trung Hoa. Chứng minh rằng
c ≡ c0 ( mod m1 . . . mk ).

BÀI LÀM

Giả sử c và c0 là hai nghiệm của Định lý thặng dư Trung Hoa. Khi đó, ta có
c ≡ c0 ≡ a1 ( mod m1 ).
Do đó m1 |(c − c0 ). Lập luận tương tự ta cũng có mi |(c − c0 ) với 1 ≤ i ≤ k. Do đó
lcm(m1 , . . . , mk )|(c − c0 ).
Do mi , m j đôi một nguyên tố cùng nhau với i 6= j nên ta có lcm(m1 , . . . , mk ) =
m1 . . . mk . Do đó
m1 . . . mk |(c − c0 ).
Vậy
c ≡ c0 ( mod m1 . . . mk ).

9.19 Bài tập 2.23

Sử dụng phương pháp đã nói trong phần (7.1) để tìm các cắn bậc hai của các
modulo hợp số

(a) Tìm một căn bậc hai của 340 modulo 437.
(b) Tìm một căn bậc hai của 253 modulo 3143.
(c) Tìm bốn căn bậc hai của 2833 modulo 4189.
(d) Tìm tám căn bậc hai của 813 modulo 868.

BÀI LÀM

49
9.19 Bài tập 2.23 9 BÀI TẬP

(a) Ta tìm phần tử x sao cho


x2 ≡ 340 ( mod 437).
Ta có 437 = 19.23, khi đó, ta sẽ giải hệ phương trình đồng dư
y2 ≡ 340 ≡ 17 ( mod 19), z2 ≡ 340 ≡ 18 ( mod 23).
Do cả 19 và 23 đều đồng dư 3 modulo 4, ta có thể tìm căn bậc hai bằng cách sử
dụng Mệnh đề (7.4) và sử dụng phương pháp "vét cạn". Khi đó, ta có
y ≡ ±6, z ≡ ±8.
Ta chọn hai nghiệm dương, khi đó, sử dụng Định lý thặng dư Trung Hoa để giả
hệ phương trình đồng dư
x ≡ 6 ( mod 19), x ≡ 8 ( mod 23).
Giải ra ta được x = 215.
(b) Ta tìm nghiệm x sao cho
x2 ≡ 253 ( mod 3143).
Ta có 3143 = 7.449. Khi đó, ta giải hệ phương trình đồng dư
y2 ≡ 253 ≡ 1 ( mod 7), z2 ≡ 253 ( mod 449)
Dễ thấy rằng y = ±1 là nghiệm của phương trình đầu. Ta giải phương trình
z2 ≡ 253 ( mod 449).
Giải ra ta có z = ±40.
Ta chọn hai nghiệm dương, khi đó, sử dụng Định lý thặng dư Trung Hoa để giả
hệ phương trình đồng dư
x ≡ 1 ( mod 7), x ≡ 40 ( mod 449).
Giải ra ta được x = 1387.
(c) Ta tìm số nguyên x sao cho
x2 ≡ 2833 ( mod 4189)
Ta lại có 4189 = 59.71 và 59, 71 đều đồng dư 3 modulo 4. Khi đó, ta tìm các số
y, z thỏa mãn
y2 ≡ 2833 ≡ 1 ( mod 59), z2 ≡ 2833 ≡ 64 ( mod 71).
Áp dụng Mệnh đề 2.27 ta có
y ≡ ±1, ( mod 59), z ≡ ±8 ( mod 71).
Vậy ta có 4 giá trị của x

50
9.20 Bài tập 2.26 9 BÀI TẬP

y 1 1 -1 -1
z 8 -8 8 -8
x 1712 3187 1002 2477

(d) Ta tìm số nguyên x sao cho


x2 ≡ 813 ( mod 868).
Lại có 868 = 4.7.31. Khi đó, ta tìm các số a, b, c thỏa mãn
a2 ≡ 813 ≡ 1 ( mod 4), b2 ≡ 813 ≡ 1 ( mod 7), c2 ≡ 813 ≡ 7 ( mod 31).
Dễ dàng thấy rằng
a ≡ ±1 ( mod 4), b ≡ ± ( mod 7).
Áp dụng Mệnh đề (7.4) ta tính được
c ≡ ±10 ( mod 31)
Vậy ta có 8 giá trị của x như sau

a 1 1 1 1 -1 -1 -1 -1
b 1 1 -1 -1 1 1 -1 -1
c 10 -10 10 -10 10 -10 10 -10
x 785 393 41 517 351 827 475 83

9.20 Bài tập 2.26

Cho F p là một trường hữu hạn và N | p − 1. Chứng minh rằng F∗p có một phần tử
cấp N. Điều này đúng với mỗi lũy thừa nguyên tố chia hết p − 1.

BÀI LÀM

Gọi g là một phần tử căn nguyên thủy. Khi đó ta có cấp của g là p − 1. Vậy phần tử
p −1
h=g N là một phần tử cấp N trong F∗p .

9.21 Bài tập 2.28

Sử dụng thuật toán Polig-Hellman để giải các bài toán logarit rời rạc
gx = a trong Fp
trong mỗi trường hợp sau

51
9.21 Bài tập 2.28 9 BÀI TẬP

(a) p = 433, g = 7, a = 166.


(b) p = 746497, g = 10, a = 243278.
(c) p = 41022299, g = 2, a = 39183497.
(d) p = 1291799, g = 17, a = 192988.

BÀI LÀM

(a) Ta có p − 1 = 432 = 24 .33 . Do đó, Bước 1, ta sẽ giải các phương trình


e e
q e h = g( p−1)/q b = a( p−1)/q y với hy = b
2 4 265 250 15
3 3 374 335 20

Bước 2, ta sẽ giải

x ≡ 15 ( mod 24 ), x =≡ 20 ( mod 33 ).
Do x ≡ 15 ( mod 24 ) nên ta có x = 16k + 15 với k là một số tự nhiên. Khi đó, từ
phương trình thứ hai ta có
16k + 15 = 20 ( mod 27), hay k ≡ 2 ( mod 27).

Do đó x = 16(27n + 2) + 15 = 512n + 47. Vậy x = 47.


(b) Ta có p − 1 = 746496 = 210 .36 . Khi đó, ta sẽ giải
e e
q e h = g( p−1)/q b = a( p−1)/q y với hy = b
2 10 4168 38277 523
3 6 674719 322735 681

Bước 2, ta sẽ giải hệ

x ≡ 523 ( mod 210 ), x ≡ 681 ( mod 36 ).


Do x ≡ 523 ( mod 1024) nên x = 1024k + 523. Từ phương trình thứ hai ta có
1024k + 523 ≡ 681 ( mod 729), hay k ≡ 218( mod 729).

Vậy k = 729n + 218, suy ra x = 1024(729n + 218) + 523 = 746496n + 223755.


Vậy x = 223755.
(c) Ta có p − 1 = 41022298 = 2.295 . Khi đó, ta giải

52
9.21 Bài tập 2.28 9 BÀI TẬP

e e
q e h = g( p−1)/q b = a( p−1)/q y với hy = b
2 1 41022298 1 0
29 5 4 11844727 13192165

Để giải được bài toán logarit rời rạc ở hàng dưới, tức là tìm y sao cho
4y ≡ 11844727 ( mod 41022299)
4
Áp dụng Mệnh đề (8.3) để giải bài toán logarit rời rạc trên, với dữ kiện 429 =
18794375 là một phần tử cấp 29 trong F∗p . Để tránh nhầm lẫn ký hiệu, ta sẽ viết
u là lũy thừa cần tìm
u = u0 + u1 .29 + u2 .292 + u3 .393 + u4 .294 .
Đầu tiên, ta giải
4
18794375u0 = (11844727)29 = 987085.
Nghiệm của phương trình này là u0 = 7. Giá trị của u ở bước này là u = 7.
Tiếp theo, ta giải
3
18794375u1 = (11844727.4−7 )29 = 8303208.
Nghiệm của phương trình này là u1 = 8. Giá trị của u ở bước này là u = 239 =
7 + 8.29.
Tiếp theo, ta giải
2
18794375u2 = (11844727.4−239 )29 = 30789520.
Nghiệm của phương trình này là u2 = 26. Giá trị của u ở bước này là u =
22105 = 7 + 8.29 + 26.292 .
Tiếp theo, ta giải
1
18794375u3 = (11844727.4−22105 )29 = 585477.
Nghiệm của phương trình này là u3 = 18. Giá trị của u ở bước này là u =
461107 = 7 + 8.29 + 26.292 + 18.293 .
Cuối cùng, ta giải
0
18794375u4 = (11844727.4−461107 )29 = 585477.
Nghiệm của phương trình này là u4 = 18. Giá trị của u ở bước này là u =
13192165 = 7 + 8.29 + 26.292 + 18.293 + 18.294 .

53
9.21 Bài tập 2.28 9 BÀI TẬP

Vậy giá trị cuối cùng của u là


u = 13192165 = 7 + 8.29 + 26.292 + 18.293 + 18.294 ,

chính là giá trị ở cột cuối cùng của bảng trên.


Bước tiếp theo là giải hệ phương trình
x ≡ 0 ( mod 2), x ≡ 13192165 ( mod 295 ).
Bằng cách giải tương tự, ta có x = 33703314.
(d) Ta có p − 1 = 1291798 = 2.709.911. Khi đó, ta giải
e e
q e h = g( p−1)/q b = a( p−1)/q y với hy = b
2 1 1291798 1 0
709 1 679773 566657 322
911 1 329472 898549 534

Ta cần giải các bài toán logarit rời rạc


679773a ≡ 566657 ( mod 1291799) và 329472b ≡ 898549 ( mod 1291799).

• Xét bài toán


679773a ≡ 566657 ( mod 1291799).
Sử dụng thuật toán va chạm. Ta có cấp của 679773 trong F∗p là 709. Khi đó,

ta đặt N = d 709e = 27, và H = h− N = 679773−27 = 1163228. Ta có các
bảng sau đây
k hk a.H k k hk a.H k
1 679773 514654 8 628131 33662
2 619440 240743 9 419999 861447
3 1201482 227586 10 899639 452224
4 273032 871342 11 1029156 981086
5 560411 664194 12 627952 1088847
6 741603 869719 13 169738 693591
7 1011766 63489 14 1114593 1071906

54
9.21 Bài tập 2.28 9 BÀI TẬP

k hk a.H k k hk a.H k
15 402512 841788 22 570648 925880
16 843586 1270669 23 656591 543968
17 616491 51933 24 777755 779931
18 131154 231288 25 981086 680573
19 148258 283532 26 1287346 637680
20 794650 575008 27 947687 743652
21 361012 303202 28 916344 421693
Ta thấy rằng
67977325 = 566657.(679773−27 )11 .
Suy ra
67977325+27.11 = 566657.
Vậy a = 25 + 27.11 = 322.
Làm tương tự với bài toán sau, ta tính được nghiệm của bài toán logarit rời rạc
sau là y = 534. Khi đó, nghiệm của bài toán ban đầu thỏa mãn hệ phương trình
đồng dư
x ≡ 0 ( mod 2), x ≡ 322 ( mod 709), x ≡ 534 ( mod 911).

Nghiệm của bài toán này là x = 984414.

55

You might also like