Phan Trọng Hiếu Nông Văn Hoàn Nguyễn Trung Kiên Hoàng Hồng Quân Cao Văn Tài 1 Giới thiệu mở đầu và nêu đặc trưng x Ưu nhược điểm, ứng dụng hệ mã khóa công khai x 2 Giới thiệu về
Trang 1Bài tập lớn
Nhóm 2
Xây dựng công cụ mã hóa và giải mã ELGAMAL + demo (dev c++)
Trang 2
MỤC LỤC
LỜI MỞ ĐẦU
Chương 1 HỆ MẬT MÃ KHÓA CÔNG KHAI 3
1.1 Giới thiệu mở đầu 3
1.2 Đặc trưng 5
1.3 Ưu nhược điểm của mật mã khóa công khai 6
1.4 Ứng dụng hệ mã khóa công khai 8
Chương 2 HỆ MẬT ELGAMAL 8
2.1 Giới thiệu hệ mật ElGamal 8
2.2 Bài toán logarit rời rạc 9
2.3 Thuật toán hình thành tham số và khóa 10
2.4 Thuật toán mã hóa: 10
2.5 Thuật toán giải mã 11
2.6 Một số ví dụ về mã hóa và giải mã hệ mật ElGamal 11
2.7 Ưu điểm, nhược điểm 13
2.8 Tính đúng đắn của thuật toán mật mã ElGamal 13
2.9 Đánh giá độ an toàn 14
2.9.1 Độ phức tạp của bài toán Logarit rời rạc 14
2.9.2 Độ an toàn Hệ ElGamal dựa trên bài toán logarit rời rạc 14
2.9.3 Độ an toàn của hệ mật ElGamal 15
2.10 Các dạng tấn công vào hệ mã hóa ElGamal 16
2.10.1 Tấn công dạng 1: Tìm cách xác định khóa bí mật 16
2.10.2 Tấn công dạng 2: Tìm cách xác định bản rõ 17
2.11 Ứng dụng chữ ký số ElGamal 17
Chương 3 XÂY DỰNG THUẬT TOÁN MÃ HÓA VÀ GIẢI MÃ HỆ MẬT ELGAMAL 20
3.1 Định nghĩa bài toán 20
3.2 Phân tích chương trình 20
3.2.1 Thuật toán kiểm tra số nguyên tố 20
3.2.2 Thuật toán phép toán Modulo 21
3.2.3 Thuật toán nhân và bình phương 23
Trang 33.2.4 Thuật toán Euclid mở rộng 24
3.2.5 Thuật toán tìm phần tử nguyên thủy (phần tử sinh) .26
3.2.6 Thuật toán mã hóa ElGamal 28
3.2.7 Thuật toán giải mã ElGamal 31
3.3 Kết quả đạt được 33
3.3.1 Thuật toán Chương trình hệ mật ElGamal 33
3.3.2 Kiểm nghiệm chương trình 39
KẾT LUẬN
DANH MỤC TÀI LIỆU THAM KHẢO
Trang 4
LỜI CAM ĐOAN
Nhóm em xin cam đoan toàn bộ nội dung của bài tập lớn do nhóm tự học tập, nghiên cứu trên Internet, sách báo, các tài liệu trong và ngoài nước có liên quan Không sao chép hay sử dụng bài làm của bất kì ai khác, mọi tài liệu đều được trích dẫn cụ thể, tất cả các thành viên trong nhóm đều tham gia nghiên cứu, tìm tòi để hoàn thiện nội dung của bài tập lớn Nhóm em xin chịu hoàn toàn trách nhiệm về lời cam đoan của mình trước Cô, Khoa và nhà trường
Bắc Ninh, Ngày 1 tháng 4 năm 2019
Trang 5
LỜI CÁM ƠN
Nhóm xin chân thành gửi lời cám ơn tới cô Trần Thị Bích Ngọc, thầy cô trong khoa Mật mã và An ninh thông tin đã tận tình giảng dạy, giúp đỡ và tạo điều
kiện cho nhóm chúng em trong quá trình làm bài tập lớn “Xây dựng công cụ mã
hóa và giải mã sử dụng thuật toán ElGamal ”
Và nhóm cũng xin gửi lời cảm ơn tới cô Trần Thị Bích Ngọc - giáo viên hướng dẫn đã tận tình, hết lòng hướng dẫn nhóm trong suốt quá trình làm bài tập lớn để nhóm có thể hoàn thành tốt nhất đề tài của mình Các thành viên trong nhóm mong cô luôn mạnh khỏe để nghiên cứu và giảng dạy, đào tạo nguồn nhân lực cho đất nước
Mật lần nữa nhóm xin chân thành cảm ơn
Trang 6
DANH MỤC CÁC KÍ HIỆU CHỮ VIẾT TẮT
TCN Trước công nguyên CNTT Công nghệ thông tin
E Khóa công khai (tập quy tắc mã hóa)
D Khóa mật (tập quy tắc giải mã)
NỘI DUNG PHÂN CÔNG CÔNG VIỆC
Chương Nội dung công việc Học viên thực hiện
Trang 7Phan Trọng Hiếu
Nông Văn Hoàn
Nguyễn Trung Kiên
Hoàng Hồng Quân
Cao Văn Tài
1 Giới thiệu mở đầu và nêu đặc trưng x
Ưu nhược điểm, ứng dụng hệ mã khóa
công khai
x
2 Giới thiệu về hệ mật ElGamal và bài
toán logarit rời rạc
x
Thuật toán hình thành tham số x
Thuật toán mã hóa và giải mã x
Thuật toán kiểm tra số nguyên tố x
Thuật toán phép toán modulo x
Thuật toán nhân và bình phương x
Thuật toán Euclide mở rộng x
Thuật toán tìm phần tử nguyên thủy x
Trang 8Viết lời mở đầu, kết luận, cam đoan,
cảm ơn
x
Trang 9LỜI MỞ ĐẦU
Từ khi con người có nhu cầu trao đổi thông tin, thư từ cho nhau thì nhu cầu giữ bí mật và bảo vệ tính riêng tư của thông tin, thư từ được trao đổi đó cũng nảy sinh Trao đổi thông tin dưới dạng các văn bản là hình thức được sử dụng sớm nhất và phổ biến nhất, để có thể giữ bí mật được nội dung các thông tin cần được trao đổi người ta đã sớm nghĩ đến cách che dấu bằng cách làm biến dạng các văn bản đó để người ngoài không đọc hiểu được, đồng thời có cách để khôi phục lại nguyên dạng để người cần nhận thông tin trao đổi có thể đọc hiểu được
Ngày nay với sự xuất hiện của máy tính, các tài liệu văn bản giấy tờ và các thông tin quan trọng đều được số hóa và xử lý trên máy tính, được truyền đi trên kênh truyền không an toàn Do đó yêu cầu về việc có một cơ chế, giải pháp để bảo
vệ sự an toàn và bí mật của các thông tin nhạy cảm, quan trọng ngày càng trở nên cần thiết
Khoa học mật mã từ khi ra đời tới nay đã trải qua nhiều giai đoạn phát triển,
từ một môn khoa học thực nghiệm đã nhanh chóng trở thành môn khoa học logic đỉnh cao và ngày càng hội tụ những kiến thức tinh túy của loài người Sự phát triển của khoa học mật mã đã góp phần thúc đẩy xã hội loài người ngày càng tiến lên Đặc biệt trong thời đại ngày nay dưới tác động của cuộc cách mạng tin học hóa toàn cầu, khi các hoạt động kinh tế - xã hội trong mô hình kinh tế mở và biến động không ngừng, đặc biệt là với các dự án xây dựng chính phủ điện tử thì khoa học mật mã chiếm vị trí ngày càng quan trọng, và có những đóng góp không nhỏ trong việc bảo đảm an ninh cho các quốc gia, an toàn cho thông tin kinh tế - xã hội Với mục đích giải quyết vấn đề trên, vào năm 1976 W.Diffie_M.E.Hellmam
đã đề xuất mô hình hệ mật mã khóa phi đối xứng hay còn gọi là hệ mật mã khóa công khai, an toàn về mặt tính toán dựa trên cơ sở lý thuyết độ phức tạp tính toán Chính vì nhu cầu cần thiết của mã hóa thông tin, nên nhóm em cùng với sự hướng dẫn của cô Nguyễn Thị Bích Ngọc đã tìm hiểu về “Hệ mật ElGamal “ với chủ đề
Trang 10”Xây dựng công cụ mã hóa và giải mã sử dụng thuật toán ElGamal” để biết được cách thức hoạt động của hệ mật ElGamal Song song với việc chúng ta luôn tìm
ra các giải pháp mã hóa tốt nhất để đảm bảo an toàn cho các thông tin được truyền
đi, thì các kẻ thám mã cũng không ngừng nỗ lực tìm ra các sơ hở, các điểm yếu của những hệ mã hóa đó để phá được bản mã khi chúng “bắt” được một bản mã nào đó Qua đó chúng ta cũng tìm hiểu được những điểm yếu cũng như những một
số sơ hở của hệ mật ElGmal, mà kẻ thám mã có thể lợi dụng để “tấn công” vào các hệ mã hóa, biết được các thông tin bí mật Để từ đó ta tìm ra cách phòng tránh, đưa ra các giải pháp tối ưu nhất, để đảm bảo an toàn cao nhất khi sử dụng các hệ
mã hóa
Nội dung của bài báo cáo gồm 3 chương:
Chương 1: Giới thiệu chung về mật mã khóa công khai
Chương 2: Hệ mật ElGamal
Chương 3: Xây dựng thuật toán mã hóa và giải mã hệ mật ElGamal
Với kinh nghiệm và thời gian hạn chế, việc chọn lọc và trình bày các vấn
đề không thể tránh khỏi các thiếu sót nhất định Rất mong nhận được các ý kiến đóng góp quý báu của cô và các bạn để bài báo cáo được hoàn thiện hơn
Trang 11
Chương 1 HỆ MẬT MÃ KHÓA CÔNG KHAI
1.1 Giới thiệu mở đầu
Mật mã có một lịch sử lâu đời và vô cùng thú vị, gắn liền với những cuộc đấu tranh và những sự kiện nổi bật trong lịch sử Giữ bí mật luôn là một nhu cầu cần thiết đối với một số cá nhân, tổ chức và quốc gia, bởi vì những tin tức cần phải giữ bí mật là những tin tức có một giá trị nhất định Mật mã là một phương tiện hữu hiệu nhất để đảm bảo bí mật những tin tức đó Khi yêu cầu về giữ bí mật ngày càng trở nên cấp thiết thì việc cố gắng bảo vệ những thông tin liên lạc là rất quan trọng Tất nhiên mật mã không phải là phương tiện duy nhất cung cấp sự an toàn cho thông tin, mà chỉ là một tập hợp các kỹ thuật bảo vệ trong rất nhiều các phương pháp khác Tuy nhiên các kỹ thuật mật mã đã đạt được hiệu quả cao trong việc ngăn chặn và phát hiện sự lừa đảo và các hoạt động có hại khác đến thông tin, nó đảm bảo được rất nhiều mục tiêu của an toàn thông tin cả trên lý thuyết và thực
tế
Ngày nay dạng văn bản đã được biến đổi được gọi là mật mã của văn bản, cách để tạo ra mật mã cho các văn bản được gọi là phép lập mã, còn cách khôi phục mật mã của các văn bản về nguyên dạng được gọi là phép giải mã Những người cần trao đổi thông tin cho nhau sẽ tạo ra một chìa khóa riêng để thực hiện phép lập mã và phép giải mã Người không được phép biết nội dung của các văn bản sẽ không được biết chìa khóa riêng đó, nên cho dù có lấy được bản mã đó thì cũng sẽ không thể giải mã và hiểu được nội dung của văn bản được truyền đi
Mật mã phát triển cùng với sự phát triển của xã hội loài người, qua nhiều thời kỳ và giai đoạn lịch sử lâu dài, bắt đầu từ 4500 năm TCN cho đên tận ngày nay vẫn đang tiếp tục phát triển Đầu tiên chúng ta phải nói đến sự phát triển mạnh
và phổ biến của mật mã khóa bí mật đã bộc lộ những nhược điểm của loại hình
Trang 12mật mã này, đặc biệt ở việc quản lý và phân phối khóa Khóa mật mã cần phải được phân phối trước qua một kênh an toàn tới các bên liên lạc, điều này làm tăng chi phí, công sức khi thiết kế, xây dựng và vận hành các hệ thống thông tin bí mật
Từ đó, sự bùng nổ thực sự trong lý thuyết mật mã đã bắt đầu và một loại hình mới
ra đời chính là mật mã khóa công khai
- Khái niệm: Hệ mật khóa công khai là hệ mật trong đó khóa mã - khóa dịch hoàn
toàn khác nhau
+ Khóa mã (khóa công khai): được công bố một cách công khai
+ Khóa dịch (khóa riêng - khóa bí mật): được giữ bí mật
+ Cặp khóa mã - khóa dịch liên hệ với nhau theo một thuật toán nhất định
Sự ra đời của khái niệm hệ mật mã khóa công khai là một tiến bộ có tính chất bước ngoặt trong lịch sử mật mã nói chung, gắn liền với sự phát triển của khoa học tính toán hiện đại Người ta có thể xem thời điểm khởi đầu của bước ngoặt đó là sự xuất hiện ý tưởng của D.Diffie và M.E Hellman được trình bày vào tháng sáu năm 1976 tại Hội nghị quốc gia hàng năm của AFIPS (Hoa Kỳ) trong
bài Multiueser cryptographic techniques Trong bài đó, cùng với ý tưởng chung,
hai tác giả đã đưa ra những thí dụ cụ thể để thực hiện ý tưởng đó, và mặc dù các thí dụ chưa có ý nghĩa thuyết phục ngay đối với tác giả, thì ý tưởng về các hệ mật khóa công khai cũng đã rất rõ ràng và có sức hấp dẫn đối với nhiều người Và ngay sau đó, công việc tìm kiếm những thể hiện cụ thể có khả năng ứng dụng trong thực tế đã bắt đầu thu hút sự quan tâm của nhiều chuyên gia
Một năm sau, năm 1977, R.L Rivest, A Shamir và L.M Adlemen đề xuất một hệ
cụ thể về mật mã khóa công khai mà độ an toàn của hệ đưa vào bài toán khó “phân tính số nguyên thành thừa số nguyên tố”, hệ này về sau trở thành một hệ nổi tiếng
và mang ten là hệ RSA, được sử sụng rộng rãi trong thực tiễn bảo mật và an toàn thông tin Cũng vào thời gian đó, M.O Rabin cũng đề xuất hệ mã khóa công khai dựa vào cùng bài toán số học khó nói trên Liên tiếp sau đó, nhiều hệ mật mã khóa
Trang 13công khai được đề xuất, mà khá nổi tiếng và được quan tâm nhiều là các hệ: hệ McEliece được đưa ra năm 1978 dựa trên độ NP-khó của bài toán giải mã đối với các hệ mã cyclic tuyến tính, hệ Merkle-Hellman dựa trên tính NP - đầy đủ của bài toán xếp ba lô (knapsack problem), hệ mật mã nổi tiếng ElGamal dựa trên độ khó của bài toán lôgarit rời rạc, hệ này về sau được mở rộng để phát triển nhiều hệ tương tự dựa trên độ khó của các bài toán tương tự lôgarit rời rạc trên cấu trúc nhóm cyclic hữu hạn, nhóm các điểm nguyên trên đường cong eliptic, v.v Để tăng độ bảo mật, hệ mật mã ElGamal còn dùng với tư cách đầu vào cho thuật toán lập mật mã của mình, ngoài khóa công khai và bản rõ, một yếu tố ngẫu nhiên được chọn tùy ý, điều đó làm cho hệ mật mã trở thành một hệ mật mã xác suất khóa công khai Một số hệ mật mã xác suất khóa công khai cũng được phát triển sau đó bởi Goldwasser-Micali và Blum- Goldwasser
1.2 Đặc trưng
+ Khóa mã và khóa dịch hoàn toàn khác nhau, có liên hệ toán học với nhau + Độ an toàn của mật mã khóa công khai được đo bằng độ phức tạp của hàm 1 chiều xác định nên hệ mật đó
+ Trong mật mã khóa công khai: tính bí mật xác thực có thể tách rời nhau
- Mô hình hệ mật khóa công khai (R, M, K, E, D)
+ Với mỗi k∈K có một hàm lập mã Ek∈E, Ek: R→ M, và một hàm dịch mã Dk∈D,
Dk: M→R sao cho thỏa mãn các điều kiện sau:
∙ Đối với mỗi k∈K thì Dk(Ek(R)) = R với ∀R∈R
∙ Đối với mỗi k∈K thì giá trị các hàm Ek, Dk là dễ dàng tính toán được ∙ Đối với hầu hết k∈K từ Ek thể tích được Dk
∙ Đối với k∈K có thể tính được cặp nghịch đảo Ek, Dk theo k
Trang 14Giả sử A, B là hai người liên lạc với nhau theo mật mã khóa công khai
+ Bước 1: Sinh khóa: A tạo ra (EA, DA), B tạo ra cặp khóa(EB,DB)
A công khai EA B công khai EB
A bí mật DA B bí mật DB
G
+ Bước 2: Trao đổi khóa:A →
B
- A,B gửi EA, EB lên mạng công khai
- A lấy khóa EB của B
+ Bước 3: Mã hóa
A dùng EB mã hóa: R→M gửi M→B
+ Bước 4: Giải mã
B nhận M dùng DB giải mã M→R
1.3 Ưu nhược điểm của mật mã khóa công khai
- Ưu điểm của mật mã khóa công khai
+ Chỉ cần giữ bí mật khóa riêng, khóa công khai có thể công bố để các đầu mối liên lạc sử dụng, không cần trao đổi trước khi liên lạc
+ Phụ thuộc vào mô hình sử dụng, một cặp khóa công khai – khóa riêng thường có thời gian sử dụng dài hơn (có thể lên đến vài năm) so với khóa phiên của mật mã khóa bí mật
+ Khi biết các tham số ban đầu của hệ mã hóa, việc tính ra cặp khóa công khai và bí mật phải là “dễ”, tức là trong thời gian đa thức
Người gửi có bản rõ R và khóa công khai, thì dễ tạo ra bản mã M
Người nhận có bản mã M và khóa bí mật, thì “dễ” giải được thành bản rõ R
Trang 15+ Người mã hóa dùng khóa công khai, người giải mã giữ khóa bí mật, khả năng lộ khóa bí mật khó hơn vì chỉ có một người giữ gìn
Nếu thám mã biết khóa công khai, cố gắng tìm khóa bí mật, thì chúng phải đương đầu với bài toán “khó”
+ Sử dụng mật mã khóa công khai thường hiệu quả hơn cho các sơ đồ chữ
kỹ số Khóa công khai sử dụng để kiểm tra chữ ký số hiệu quả hơn cho việc chứng thực công khai
+ Số lượng cặp khóa công khai – bí mật cần sử dụng trong một mạng liên lạc thường nhỏ hơn rất nhiều so với số lượng khóa bí mật cần trao đổi trong mạng
+ Nếu thám mã biết khóa công khai và bản mã M, thì việc tìm ra bản rõ R cũng là bài toán khó, số phép thử là vô cùng lớn, không khả thi
- Nhược điểm của mật mã khóa công khai
+ Tốc độ xử lý mã hóa/giải mã của hầu hết các hệ mật mã khóa công khai thường chậm hơn nhiều so với mật mã khóa bí mật do yêu cầu khối lượng xử lý
và tính toán vô cùng lớn
+ Kích thước của khóa tương đối lớn so với khóa sử dụng trong mật mã khóa bí mật với độ an toàn tương đương; đồng thời, chữ ký số của mật mã khóa công khai thường lớn hơn so với các dạng xác thực sử dụng mật mã khóa bí mật
+ Hiện nay, chưa có hệ mật khóa công khai nào là hoàn toàn bảo mật chống lại các dạng tấn công, kể cả tấn công vét cạn khóa Các hệ mật mã hóa sử dụng mật mã khóa công khai có độ an toàn dựa trên độ phức tạp tính toán của hàm một chiều liên hệ giữa hai khóa công khai – khóa bí mật nên độ bảo mật là hữu hạn, phụ thuộc vào thời gian và năng lực tính toán của hệ thống máy tính hiện thời
Trang 161.4 Ứng dụng hệ mã khóa công khai
Hệ mã khóa công khai thường được sử dụng chủ yếu trên các trang mạng công khai như Internet, khi mà làm việc trao đổi chuyển khóa bí mật tương đối khó khăn
Đặc trưng nổi bật của hệ mã khóa công khai là khóa công khai (public key)
và bản mã R đều có thể gửi đi trên một kênh truyền tin “không an toàn”
Biết cả khóa công khai và bản mã, thám mã cũng không dễ khám phá được bản rõ
Nhưng vì tốc độ mã hóa và giải mã chậm, nên hệ mã hóa khóa công khai chỉ dùng để mã hóa những bản tin ngắn, ví dụ như mã hóa khóa bí mật gửi đi
Hệ mã hóa công khai thường được sử dụng cho cặp người dùng thỏa thuận khóa công bí mật của hệ mã hóa khóa riêng
Chương 2 HỆ MẬT ELGAMAL 2.1 Giới thiệu hệ mật ElGamal
- Hệ ElGamal là 1 hệ mật mã công khai do tiến sĩ taher-A.ElGamal đưa ra vào năm 1985
- Hệ ElGamal dựa trên bài toán logarit rời rạc Tính an toàn của nó tùy thuộc vào độ phức tạp của bài toán logarit
- Hệ ElGamal là 1 biến thể của sơ đồ phân phối khóa Diffie – Hellman,
- So với RSA, hệ ElGamal không có nhiều rắc rối về vấn đề bản quyền
sử dụng
Hệ mật Elgama được đề xuất vào năm 1984 trên cơ sở bài toán logarith rời rạc khó giải Sau đó, các chuẩn chữ ký số DSS [2] của Mỹ và GOST R34.1094 [3] của Liên bang Nga đã được phát triển trên cơ sở thuật toán chữ ký số của hệ mật
Trang 17này, còn thuật toán mật mã khóa công khai ElGamal đã được sử dụng bởi Cơ quan
An ninh Quốc gia Mỹ - NSA (National Security Agency)
2.2 Bài toán logarit rời rạc
Cho số nguyên tố p và α là phần tử sinh của nhóm nhân 𝑍𝑝∗ và một phần tử Hãy tìm số nguyên x, 0 ≤ x ≤ p-2, sao cho α𝑥≡ β (mod p)
Phần tử sinh của nhóm nhân là phần tử mà tất cả các phần tử còn lại của nhóm nhân có thể được sinh ra bằng cách lũy thừa với cơ số là phần tử sinh đó
Độ khó giải của bài toán logarit rời rạc là hoàn toàn độc lập và không phụ thuộc với việc chọn phần tử sinh
Thật vậy, giả sử α và γ là hai phần tử sinh của nhóm cyclic G bậc n và β ∈
G giả sử x=logα β, y=logγ β, z=logα γ Khi đó α𝑥 = β = γ𝑦 = (α𝑧)𝑦 Do đó x = zy (mod n), và ta có:
logγ β = (logα β)( logα γ)−1 mod n
Điều này có nghĩa rằng thuật toán bất kỳ tính logarit theo cơ sở α cũng có thể sử dụng để tính logarit theo cơ sở γ của nhóm G
Phần tử nguyên thủy của nhóm nhân 𝑍𝑝∗ là một phần tử sinh có bậc bằng giá trị hàm phi-ơ-le của giá trị p trong hệ mật ElGamal , thường chọn giá trị p là
số nguyên tố lớn và giá trị phần tử sinh g là phần tử nguyên thủy Các phần tử được sinh bởi giá trị g sẽ bao gồm toàn bộ các giá trị từ 1 đến p-1; khi đó, độ lớn của nhóm nhân là lớn nhất
Đây là bài toán logarit rời rạc truyền thống và là bài toán khó giải nổi tiếng làm cơ sở cho hệ mật ElGamal
Trang 182.3 Thuật toán hình thành tham số và khóa
Hai bạn An và Bình có chung (công khai) một số nguyên tố p và một số sinh g(generator).Khi hai người muốn trao đổi thông tin mật với nhau bằng thuật toán mật mã Elgamma thì trước tiên thực hiện quá trình hình thành khóa như sau: 1- Chọn số nguyên tố đủ lớn p sao cho bài toán logarit trong Zp là khó giải 2- Chọn g là phần tử nguyên thủy g
3- Chọn khóa mật a là số ngẫu nhiên sao cho: 1< a < p-1
Tính khóa công khai y theo công thức: y = gamod p
Lúc này khóa công khai của An là (𝑦𝐴)và khóa riêng là 𝑎𝐴; tương tự như vậy, khóa công khai của Bình là (𝑦𝐵)còn khóa riêng là (𝑎𝐵)
2.4 Thuật toán mã hóa:
Giả sử người gửi là An, người nhận là Bình Khi đó, Nếu An muốn gửi một thông điệp (R) cho Bình, với: 0 ≤ R < p, người gửi An sẽ thực hiện các bước như sau:
1- Chọn số ngẫu nhiên k thỏa mãn: 1 < k < p-1 Tính giá trị M theo công thức:
𝑚1 = g𝑘𝑚𝑜𝑑 𝑝 2- Sử dụng khóa công khai của B để tính:
𝑚2 = 𝑅 𝑦𝑘𝑚𝑜𝑑 𝑝
3- Gửi bản mã gồm M(m1,m2) đến người nhận Bình
Trang 192.5 Thuật toán giải mã
Để khôi phục bản tin ban đầu (R) từ bản mã M(𝑚1 , 𝑚2), nhận được, người nhận B thực hiện như sau: Bình sử dụng (𝑚1 , 𝑚2) để tái hiện thông điệp bằng cách tính:
1- Tính giá trị Z theo công thức:
Tìm khóa của hệ mã trên Mã hóa bản rõ R = 3 với k được chọn bằng 36
Mã hóa: Trước hết ta tính 𝑦 = 558𝑚𝑜𝑑 97 = 44, từ đó suy ra {𝐸𝑘 = (𝑝, 𝑔, 𝑦) = (97,5, 44)
Trang 20y = ga mod p = 2765 mod 2579 = 949 mod 2579
Ta có khóa công khai 𝐸𝐾 = (p,g,y) = (2579, 2, 949) và khóa bí mật 𝐷𝐾 = a
= 765
Giả sử để lập mã cho R = 1299 thành bản mã M = (m1, m2), ta chọn ngẫu nhiên số k = 853 thì sẽ có:
m1 = gk mod p = 2853 mod 2579 = 435 mod 2579 m2 = R yk
mod p = 1299 949853 mod 2579 = 2396 mod 2579
Tìm khóa của hệ mã trên Mã hóa bản rõ R = 3 với k được chọn bằng 56
Mã hóa Trước hết ta tính 𝑦 = 5487𝑚𝑜𝑑 887 = 778, từ đó suy ra
{𝐸𝑘 = (𝑝, 𝑔, 𝑦) = (887, 5,778)
𝐷𝑘 = 487
Để mã hóa thông điệp R = 123 ta tính:
Trang 21m1 = gkmod p = 556mod887 = 286 m2 = R ykmod p = 123
77856mod 887 với 77856mod 97 = 56 nên m2 = R ykmod p = 123.56mod 887 = 679 Vậy bản mã được gửi đi sẽ là M = (𝑚1, 𝑚2) = (286, 679) Giải mã Ta tính theo công thức:
+ Độ phức tạp của bài toán logarit lớn nên độ an toàn cao
+ Bản mã phụ thuộc vào bản rõ x và giá trị ngẫu nhiên nên từ 1 bản rõ ta có thể có nhiều bản mã khác nhau
Nhược điểm:
+ Tốc độ chậm (do phải xử lý số nguyên lớn)
+ Dung lượng bộ nhớ dành cho việc lưu trữ khóa cũng lớn
2.8 Tính đúng đắn của thuật toán mật mã ElGamal
Giả sử bản tin nhận được sau quá trình giải mã (𝑚1 , 𝑚2) là 𝑅 :
Với 𝑚1 = 𝑔𝑘𝑚𝑜𝑑 𝑝 ,𝑚2 = 𝑅 𝑦𝑘𝑚𝑜𝑑 𝑝 ta có:
𝑅 = 𝑚2𝑍−1 = 𝑚2(𝑚1𝑎)−1𝑚𝑜𝑑 𝑝 = 𝑅 𝑦𝑘 (𝑔−𝑎.𝑘) =𝑅 𝑔𝑎.𝑘 (𝑔−𝑎.𝑘)=R Như vậy, bản tin nhận được sau giải mã (R) chính là bản tin ban đầu (𝑅 )
Trang 22
2.9 Đánh giá độ an toàn
2.9.1 Độ phức tạp của bài toán Logarit rời rạc
Logarit rời rạc là sự tiếp nối của phép tính lôgarit trên trường số thực vào các nhóm hữu hạn Ta nhắc lại rằng với hai số thực x, y và cơ số a>0, a ≠ 1, nếu
ax = y thì x được gọi là lôgarit cơ số a của y, ký hiệu x= logay Logarit rời rạc là bài toán khó (chưa biết một thuật toán hiệu quả nào), trong khi bài toán ngược luỹ thừa rời rạc lại không khó (có thể sử dụng thuật toán bình phương và nhân)
Ví dụ: Cho p là một số nguyên tố Xét nhóm nhân các số nguyên modulo p: Nếu ta tính luỹ thừa bậc k của một số trong nhóm rồi rút gọn theo modulo p thì ta được một số trong nhóm đó Quá trình này được gọi là luỹ thừa rời rạc modulo p Chẳng hạn với p = 17, lấy 𝛼 = 3, k = 4 ta có 34 mod 17 = 13
Tuy nhiên, logarit rời rạc là phép tính ngược lại: “Biết 3k mod 17 = 13 mod 17, hãy tìm k” là một bài toán khó và phức tạp nếu các số 3 và 17 được thay bằng các
số lớn hơn rất nhiều
2.9.2 Độ an toàn Hệ ElGamal dựa trên bài toán logarit rời rạc
Tính an toàn của nó tùy thuộc vào độ phức tạp của bài toán logarit Trong bài toán về hệ ElGamal :
+ p là số nguyên tố, g là phần tử nguyên thủy của Z𝑝∗ p và g là cố định + Bài toán logarit rời rạc có thể được phát biểu như sau: Tìm 1 số mũ a duy nhất, 0 ≤ a ≤ p-2 sao cho ga = y mod p, với y thuộc Z𝑝∗ cho trước
+ Bài toán có thể giải được bởi phương pháp vét cạn, tức là duyệt tất cả phần tử a để tìm a thỏa mãn Bài toán có độ phức tạp là: O(p) (bỏ qua thừa số logarit) Vấn đề đặt ra là nếu p lớn, rất lớn thì để thực hiện phương pháp này cần thời gian rất lớn, cho nên không khả thi
Trang 23Xét thuật toán Shank để thám mã hệ mã hóa ElGamal :
+ Người thám mã chỉ có khóa công khai (p, g, y)
+ Bài toán logarit rời rạc cũng được phát biểu như sau: Tìm 1 số mũ a duy nhất, 0 ≤ a ≤ p-2 sao cho ga = y mod p, với y thuộc Z𝑝∗ cho trước
+ Độ phức tạp của bài toán là O((p − 1)1/2) và bộ nhớ O((p − 1)1/2) (bỏ qua thừa số logarit), giảm rất nhiều so với phương pháp vét cạn
+ Chúng ta cần tính các phần tử thuộc 2 danh sách L1,L2 đều là các phép toán lũy thừa phụ thuộc vào i,j i và j lại phụ thuộc vào m nên ta nhận thấy bài toán chỉ áp dụng với những trường hợp p nhỏ
Đánh giá độ an toàn của hệ mã hóa ElGamal: Hệ mã hóa ElGamal áp dụng bài toán logarit rời rạc chính vì vậy độ an toàn của hệ mã hóa là rất lớn vì bài toán logarit rời rạc chưa có phương pháp hiệu quả để tính Với 1 số p đủ lớn, thuật toán
mã hóa ElGamal không có phương pháp thám mã hiệu quả
2.9.3 Độ an toàn của hệ mật ElGamal
Hệ mật ElGamal sẽ bị phá vỡ nếu khóa mật a hoặc k có thể tính được Để tính được a hoặc k, cần phải giải một trong hai bài toán logarit rời rạc, chẳng hạn:
𝑦 = 𝑔𝑎𝑚𝑜𝑑 𝑝 hay 𝑚1 = 𝑔𝑘𝑚𝑜𝑑 𝑝
Tuy nhiên, việc giải bài toán logarit rời rạc này là việc khó
Một điểm yếu có thể bị tấn công trong hệ mã ElGamal là khi giá trị k bị sử dụng lại Thực vậy, giả sử cùng một giá trị k được sử dụng để mã hóa hai bản tin
R và 𝑅∗được các bản mã M(𝑚1 , 𝑚2)và 𝑀 , 𝑚 tương ứng khi ấy ta sẽ có:
𝑚2
= 𝑅 (𝑔−𝑎.𝑘) (𝑅∗)−1 (𝑔𝑎.𝑘)𝑚𝑜𝑑 𝑝 𝑠𝑢𝑦 𝑟𝑎:
Trang 24𝑅 𝑅 𝑚𝑜𝑑 𝑝 nghĩa là, chỉ cần biết nội dung của một trong hai bản tin R hoặc 𝑅∗ thì sẽ dễ dàng biết được nội dung của bản tin kia
Tính bí mật và xác thực có thể tách rời nhau Một vấn đề được đặt ra không chỉ với hệ ElGamal nói riêng mà với các hệ mật khóa công khai nói chung là: giả
sử một người gửi A mã hóa bản tin R được bản mã 𝑚2 và gửi 𝑚2 cho người nhận
B sẽ có các tình huống xảy ra như sau:
- Người nhận B không thể biết chắc chắn rằng bản tin nhận được (R)
có nguồn gốc từ người gửi A
- Giả sử bản mã 𝑚2 đã bị thay đổi thành 𝑚2∗và người nhận giải mã được bản tin 𝑅∗ trường hợp này người nhận không thể khẳng định nội dung bản tin nhận được R* đã bị thay đổi hay không
2.10 Các dạng tấn công vào hệ mã hóa ElGamal
2.10.1 Tấn công dạng 1: Tìm cách xác định khóa bí mật
2.10.1.1 Trường hợp 1: Sử dụng modul p nhỏ
Khi sử dụng số nguyên tố p nhỏ, thì tập Z*p nhỏ, do đó việc tìm được phần
tử sinh α ∈Z*p cũng không khó khăn lắm Khi biết được α và biết được giá trị 𝛼𝑎
từ khóa công khai, thám mã sẽ tính được khóa bí mật a
→ Giải pháp phòng tránh:
Chọn modul p là số nguyên tố sao cho p – 1 có ít nhất một ước số nguyên
tố lớn Điều đó là thực hiện được nếu số nguyên tố p được chọn là số nguyên tố Sophie Germain (tức có dạng 2q+1, với q cũng là số nguyên tố lớn)
2.10.1.2 Trường hợp 2: Bị lộ số k được dùng
Do cẩu thả trong việc sử dụng số ngẫu nhiên k, đặc biệt là khi để lộ số k được dùng Thì khóa bí mật a được tính ra ngay theo công thức:
Trang 25𝑎 = (𝑥 − 𝑘 𝑦2) 𝑦1−1𝑚𝑜𝑑(𝑝 − 1)
Như vậy, một kẻ thám mã có khả năng tấn công theo kiểu “biết cả bản rõ”,
có thể phát hiện ra khóa bí mật a nếu biết k
→ Giải pháp phòng tránh: Cẩn thận trong việc sử dụng số ngẫu nhiên k, không để lộ số k được dùng
2.10.2 Tấn công dạng 2: Tìm cách xác định bản rõ
Dùng cùng một số k cho nhiều lần lập mã:
Giả sử dùng cùng một số ngẫu nhiên k cho hai lần lập mã, một lần cho R1, một lần cho R2, và được các bản mã tương ứng (y1, y2) và (z1, z2) Vì dùng cùng một số k nên 𝑦1 = 𝑧1 = g𝑘𝑚𝑜𝑑 𝑝 Và do đó theo công thức lập mã ta có: z2/y2 =
x2/x1, tức là x2 = x1.z2 /y2 Như vậy, một người thám mã, một lần biết cả bản rõ dễ dàng phát hiện được bản rõ trong các lần sau
→ Giải pháp phòng tránh: Mỗi lần lập mã thì sử dụng một số k khác nhau
2.11 Ứng dụng chữ ký số ElGamal
Hiện nay có khá nhiều nhà cung cấp dịch vụ tạo khóa mã và tạo chữ ký số cho những người cần sử dụng Chữ ký số có thể được ứng dụng rộng rãi trong môi trường số, thực hiện được các giao dịch trực tuyến một cách nhanh chóng và hiệu qủa Tuy nhiên, chữ ký số có tính bảo mật hạn chế hơn so với chữ ký thông thường
vì nội dung văn bản cố định, sau một thời gian, người mã thám có thể sử dụng phương pháp thống kê để tìm ra khóa riêng sử dụng chữ ký số Để tăng độ bảo mật, người sử dụng có thể tường xuyên thay đổi hoặc định kỳ phải thay đổi giá trị khóa riêng và khóa công khai
Sơ đồ chữ ký số ElGamal được đề xuất năm 1985 và được thiết kế đặc biệt cho mục đích ký Giả sử p là số nguyên tố xây dựng lên trường 𝑍𝑝∗ và gọi g là phần tử nguyên thủy của 𝑍𝑝∗ Với mỗi K = (p, g, a, y) trong đó D = a là khóa bí