Sau đó tôi tìm hiểu về hai thuật toán để giảibà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ánPohlig-Hellman giải bài toán logarit rời rạc dựa trên Định l
Trang 1VIỆN KHOA HỌC - CÔNG NGHỆ MẬT MÃ
PHÂN VIỆN KHOA HỌC MẬT MÃ
Trang 2VIỆN KHOA HỌC - CÔNG NGHỆ MẬT MÃ
PHÂN VIỆN KHOA HỌC MẬT MÃ
Trang 36 Thuật toán va chạm cho bài toán logarit rời rạc 18
7.1 Giải các phương trình đồng dư với các modulo hợp số 23
Trang 4MỤ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 minhsớm nhất trong mật mã học Phương pháp trao đổi khóa Diffie–Hellman cho phéphai 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ậntrướ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ố đầutiê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ôngkhai 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ạigiao 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 trongchế độ 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
Tôi được lãnh đạo Phân viện giao tìm hiểu trong Chương 2 của cuốn "An duction to Mathematical Cryptography"của các tác giả Jeffrey Hoffstein, Jill Pipher,
intro-và J.H Silverman Báo cáo này tôi đã được giao tìm hiểu từ tháng 1 năm 2020 intro-vàbáo cáo vào giữa tháng 2 năm 2020 Tuy nhiên, do đợt dịch Covid-19 nên phải đếntháng 5 tôi mới có thể báo cáo
Trong báo cáo này, tôi 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 tôi tìm hiểu vềbài toán Diffie-Hellman và trao đổi khóa ElGamal, là hệ mã hóa công khai dựa trêntính khó của bài toán Diffie-Hellman Sau đó tôi tìm hiểu về hai thuật toán để giảibà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ánPohlig-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 bao gồm 54 trang, được chia thành 9 phần, trong đó phần đầu là một
số kiến thức cơ bản về nhóm và những định lý trong Lý thuyết số cần thiết để sửdụng trong các phần sau Phần 2 và phần 3 giới thiệu về bài toán logarit rời rạc và
độ khó của bài toán DLP Phần 4 giới thiệu về trao đổi khóa Diffie-Hellman Phần 5giới thiệu về hệ mã hóa ElGamal Phần 6 và phần 8 đưa ra hai thuật toán để giải bàitoán logarit rời rạc là thuật toán của Shank và thuật toán Pohlig-Hellman Phần 9 làphần bài tập
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ộ trongPhân viện cũng đã nhiệt tình giúp đỡ tôi trong quá trình làm báo cáo
Trang 51 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
p và chỉ ra nhữngtí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
Trang 61.2 Tổng quan về lý thuyết nhóm 1 KIẾN THỨC CƠ BẢN
p
• Phép nhân có tính giao hoán:
a·b = b·avớ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 Fp 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êuvẫ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 ∈ Gsao cho
e?a = a?e = avớ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 ∈ Gsao cho
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
Trang 71.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à
G = a b
c d
: a, b, c, d ∈R và ad−bc 6= 0
Ví dụ, lũy thừa gx trong nhóm F∗
p có nghĩa thông thường, nhân g với chính nó xlần Nhưng "lũy thừa"gx trong nhómZ/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ề gx khi x không phải số dương Do đó, nếu x là số nguyên âm, ta định nghĩa
gx = (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ínhchấ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ủamột phần tử trong nhóm
Trang 82 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, , gn}.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
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óacủ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ênbả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 Fp Ta nhắclại rằng Fp 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 Fp thay choZ/pZ cho trường này, và ta sử dụng ký hiệu bằng nhau
cho các phần tử củaFp và ký hiệu đồng dư cho các phần tử củaZ/pZ.
Trang 92 BÀI TOÁN LOGARIT RỜI RẠCCho 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 Fp là một lũy thừa của g Cụ thể,
gp−1 = 1 theo Định lý nhỏ Fermat (Định lý 1.2), và không có lũy thừa nào nhỏ hơncủa g bằng 1 Một cách tương đương, các phần tử
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ũngvẫ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ờirạ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 gx = 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ì gp−1 ≡ 1(mod p) Do
đó nếu x là một nghiệm của bài toán gx = h thì x+k(p −1) cũng là một nghiệmvới mọi giá trị của k, bởi
gx+k(p−1) = gx.(gp−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ầncủ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
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)
Trang 103 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−2thỏa mãn đẳng thức đồng dư gx ≡ 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épcộ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àoZ/(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 gx ≡ 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 Fp
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ómbấ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ổngquá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
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ộtlũy thừa x sao cho gx = 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ántrê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 đếmquá trình tính toán gx 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 gx 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
Trang 113 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 gx 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ânmodulo để tính gx 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ậtvậy, do bậc của g là n ≈ 2k, và ta cần log2(x) phép nhân modulo để tính được gx,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 modulonhư 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ấpxỉ) 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étcạn"sẽ cần một bội nhỏ của
k2log(2k).2k = k3.2kcá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
Trang 123 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ồntại hằng số Cε sao cho
f(x)
g(x) −L
Tuy nhiên, ta chú ý rằng ta vẫn có f(x) = O(g(x)) kể cả khi giới hạn f(x)
g(x) khôngtồn tại Ví dụ, giới hạn
lim
x → ∞
(x+2)cos2x
xkhông tồn tại, tuy nhiên
(x +2)cos2x = O(x), do(x+2)cos2x ≤ 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 Taquan 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 đầuvà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àiO(k) bit, khi đó sẽ cầnO(kA) 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.
Trang 133 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ộtthuậ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ấtlớ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àitoá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 gx = 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àitoán được phát biểu trong O(k) bit (Chú ý rằngO(k) cũng tương tự như O(log2 p)
cộng và phép nhân là các phép toán cơ bản thì thuật toán mấtO(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ũythừ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ố, trongkhi 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ântí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ờirạ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ũythừ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
Trang 144 TRAO ĐỔI KHÓA DIFFIE-HELLMAN
O(ec
√
( log p )( log log p )) 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 chophé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ủalog2(p) để tính được nghịch đảo của g modulo p, do đó có một thuật toán thời giantuyến tính để giải bài toán logarit rời rạc trong nhóm cộngFp Đây là một thuật toánrất nhanh, do đó bài toán logarit rời rạc trong Fp 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
Fp 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ổngquá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 đườngcong 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àitoán logarit rời rạc trongO(√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à Bobmuốn chia sẻ một khóa bí mật chung để sử dụng trong mã hóa đối xứng, nhưngphươ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óachung mà không bị lộ cho Eve? Thoạt nhìn, ta thấy Alice và Bob đang đối diện vớimột nhiệm vụ bất khả thi Tuy nhiên, Diffie và Hellman thấy tính khó của bài toánlogarit rời rạc choF∗
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ênkhá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
Trang 154 TRAO ĐỔI KHÓA DIFFIE-HELLMANnhiề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ử trongF∗
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ụngcác số nguyên bí mật đó để tính các giá trị
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
Ví dụ 4.1. Alice và Bob thống nhất sử dụng số nguyên tố p = 491 và nghiệm nguyênthủ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) Alicegửi Bob số 390 và Bob gửi Alice số 691 Cả hai quá trình trao đổi đều bị thực hiệntrên một kênh không an toàn, do đó cả A = 390 và B = 691 đều bị coi là kiến thứccô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ố
Trang 165 HỆ MÃ HÓA CÔNG KHAI ELGAMALTấ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ếtcác giá trị ga và gb Cô ấy cũng biết giá trị g và p, do đó nếu có thể giải bài toánlogarit 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ủaAlice và Bob là gab Ta thấy rằng Alice và Bob được cung cấp sự an toàn khi Evekhô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ênmột phương pháp để tìm giá trị chung của Alice và Bob là giải bài toán logarit rờirạ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ủakhóa chung của Alice và Bob nằm trong tính khó của bài toán được coi là có tiềmnă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 Hellman là bài toán tính giá trị của gab(mod p) khi biết các giá trị ga(mod p) và
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ànhmộ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ôngkhai đầ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óacông khai trong báo cáo của Diffie-Hellman là một hệ thống được mô tả bởi TaherElGamal năm 1985 Thuật toán mã hóa công khai ElGamal được dựa trên bài toánlogarit 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
Trang 175 HỆ MÃ HÓA CÔNG KHAI ELGAMALdự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áchkhá 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áchcô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 đơngiả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ệpcủ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ôngkhai Với hệ mã hóa ElGamal, Alice cần một số nguyên tố lớn p để bài toán logaritrờ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 đángtin 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 đạilượng
A ≡ ga(mod p)
Để ý rằng bước này tương tự như trao đổi khóa Diffie-Hellman Alice cho mọi ngườibiế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 đượcgọ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óamộ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ôngkhai 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ủachú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 choAlice
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ủaBob? Do Alice biết a, do đó cô ấy có thể tính được đại lượng
x ≡ ca1(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
Trang 185 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),
≡ (gak)−1.(mAk) (mod p), do c1 ≡ gk, c2 ≡ mAk(mod p),
≡ (gak)−1.(m(ga)k) (mod p), do A ≡ ga(mod p),
≡ m (mod p), do số hạng gakbị 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 ≡ ga(mod p), do khóa công khai A của Alice là kiếnthứ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ệpgố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 ≡ ga ≡ 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
c2x−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 c1và 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í
Trang 195 HỆ MÃ HÓA CÔNG KHAI ELGAMALkhô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ộtbả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ánDiffie-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ộtchứ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ụngmộ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 ≡ ga(mod p) và B ≡ gb(mod p),
và bài toán là tính giá trị của gab(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ửicho 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 đượcchọn là bao nhiêu? Để ý ta thấy rằng c1 = B = gb và c2 = 1 là sự lựa chọn tốt, dovới đầu vào như trên, thì oracle sẽ trả lại giá trị
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 ≡ (Ba)−1.c2 ≡ (gab)−1.c2(mod p)
Trang 206 THUẬT TOÁN VA CHẠM CHO BÀI TOÁN LOGARIT RỜI RẠCSau khi oracle cho Eve biết giá trị của m, ta tính tiếp
gab ≡ c2.m−1(mod p)
để tìm giá trị của gab(mod p) Mặc dù, với sự trợ giúp của oracle, Eve đã tính được
gab(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ậtnế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 trongbấ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
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 gx 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ạimột nghiệm cho gx = 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 trongF∗
p, thì mỗi khi tính gx(mod p)cầnO((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 gianchạ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ộtthuậ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
Trang 216 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
gx = h trong O(√N log N) bước.
(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 gx = 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ộtbộ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ántruy tìm, do đó Bước (3) mất O(log n) bước Do đó tổng thời gian chạy của thuậttoá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đó
n log n ≈ √N log√N = 1
2
√
N log N
Để 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
Trang 227 ĐỊNH LÝ THẶNG DƯ TRUNG HOA
13896 = 97047.2494−32 = 97047.(970436)32 = 97041159 trong F17389
Do đó x = 1159 là nghiệm của bài toán 9704x = 13896 trongF17389
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ấtmộ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ôngtrình toán học ở Trung Hoa từ cuối thế kỷ thứ III hoặc đầu thế kỷ thứ IV Bài toánban đầ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 đồngdư
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)
Trang 237 ĐỊ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ươngtrình đầu là họ các số nguyên
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 = 31củ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 chonghiệ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, mj) = 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 m1m2· · ·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 = cicho 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ộtphương trình đồng dư nữa
x ≡ a1(mod m1), x ≡ a2(mod m2), , x ≡ ai+1(mod mi+1)
Trang 247 ĐỊNH LÝ THẶNG DƯ TRUNG HOA
Ý tường là ta sẽ tìm nghiệm dưới dạng
x = ci +m1· · ·miy.
Để ý 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 đó tacầ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, tacần tìm một giá trị của y thỏa mãn
ci +m1m2· · ·miy ≡ ai+1(mod mi+1).Việc gcd(mi+1, m1m2· · ·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ậttoá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 3modulo 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ươngtrì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ớinghiệm trên
Trang 257.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 modulohợ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ũythừ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ántì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ấtdễ
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 đó
b ≡ ap+41 (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ừacủ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ả
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à
b ≡ ap+41 = 220141284 ≡ 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
Trang 268 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 đồngdư
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úngtheo 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 haimodulo 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ìmcă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ậchai 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 đượccoi là một điều hiển nhiên Nếu
m = m1·m2· · ·mt
Trang 278 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ệcgiả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ácnghiệ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
gx ≡ 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 địnhchỉ 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 gx = h trong G được xác định duy nhất modulo N, do đó việc phântí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ánPohlig-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 gx = h trongO(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ố
Chú ý rằng gi có lũy thừa nguyên tố cấp qei
i , do đó sử dụng thuật toán đã cho để giải bài toán logarit rời rạc
Cho y = yi là một nghiệm của (8.2).
Trang 288 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ư
Ta vẫn phải chỉ ra Bước (1) và (2) cho ta nghiệm của gx = h Cho x là một nghiệmcủa hệ phương trình đồng dư (8.3) Khi đó, với mỗi i ta có thể viết
... giải toán logarit rời rạc 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 đường cong elliptic cho
là chí khó tốn logarit. .. phântích hồn tồn thành tích số ngun tố nhỏ, tố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 toán logarit rờirạc O(√p log p) bước, nhanh... tốn toán toán học
Định nghĩa 3.4. Giả sử ta giải dạng toán toán học định với đầu
vào toán số với cỡ Như ví dụ, ta xét Bài tốn phân tích thừa số ngun tố, mà đầu vào