Báo cáo Môn An toàn bảo mật Haui chủ đề Mã hóa và giải mã ElGamal chi tiết có chương trình demo với C++ GUI và C .●Phân tích được các kỹ thuật sử dụng để mã hóa và xác thực thông tin.●Hiểu và áp dụng các thuật toán liên quan đến hệ mã hóa Elgamal như (thuật toán sinh khóa, thuật toán mã hóa, thuật toán giải mã cùng vời các thuật toán liên quan như thuật toán nghịch đảo của phép nhân modulo hay thuật toán bình phưong và nhân trong modulo) vào việc mã hóa và giải mã để giải quyết bài toán có tính ứng dụng
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
-🙞🙞🙞🙞🙞 -BÁO CÁO THỰC NGHIỆM Học phần: An toàn và bảo mật thông tin Chủ đề : Xây dựng chương trình mã hóa và giải mã ElGamal
Thành viên Ngô Kim Đông – 2020604782
Hoàng Đức Hiếu – 2020607919Dương Thế Đoàn – 2020603456Đằng Anh Quân – 2021606314
Hà Nội, Năm 2023
Trang 2LỜI CẢM ƠN Báo cáo bài tập lớn với đề tài “Xây dựng chương trình mã hóa và giải mã ElGamal ” là kết quả của quá trình cố gắng không ngừng của cả
nhóm, động viên khích lệ, giúp đỡ của giảng viên Phạm Văn Hiệp Qua trangviết này chúng em xin gửi lời cảm ơn tới những người đã giúp đỡ chúng emtrong thời gian học tập - nghiên cứu vừa qua
Chúng em xin tỏ lòng kính trọng và biết ơn sâu sắc đối với thầy PhạmVăn Hiệp đã trực tiếp tận tình hướng dẫn cũng như cung cấp tài liệu thông tinkhoa học cần thiết cho bài tập này của chúng em
Cuối cùng chúng em kính chúc thầy dồi dào sức khỏe và thành công trong sựnghiệp cao quý
Nhóm 8 thực hiện
Trang 3MỤC LỤC
Lời nói đầu 5
CHƯƠNG 1: TỔNG QUAN 6
1.1 Tổng quan về An toàn bảo mật thông tin 6
1.2 Lý do chọn đề tài 6
1.3 Nội dung nghiên cứu 7
1.4 Các kiến thức cần có 8
CHƯƠNG 2: KẾT QUẢ NGHIÊN CỨU 9
2.1 Nghiên cứu, tìm hiểu hệ mã khóa công khai 9
2.1.1 Khái niệm: 9
2.1.2 Cách hoạt động: 9
2.1.3 Các thuật toán: 9
2.1.4 Ứng dụng: 9
2.2 Nghiên cứu tìm hiểu về mật mã ElGamal 10
2.2.1 Giới thiệu chung về hệ mã ElGamal 10
2.2.2 Mã hóa và giải mã ElGamal 10
2.2.3 Độ an toàn 12
2.2.4 Ưu và nhược điểm của hệ mã ElGamal 12
2.3 Nội dung thuật toán 13
2.4 Thiết kế chương trình, cài đặt thuật toán 15
2.4.1 Ngôn ngữ C++ 15
2.4.2 Ngôn Ngữ C# 26
CHƯƠNG 3: KẾT LUẬN VÀ BÀI HỌC KINH NGHIỆM 38
3.1 Kiến thức kỹ năng đã học được trong quá trình thực hiện đề tài 38
3.2 Bài học kinh nghiệm 39
3.3 Đề xuất về tính khả thi của chủ đề nghiên cứu, những thuận lợi, khó khăn 39
Trang 4Lời nói đầu
Trước đây khi công nghệ máy tính chưa phát triển, khi nói đến vấn đề
an toàn bảo mật thông tin, chúng ta thường hay nghĩ đến các phương phápnhằm đảm bảo cho thông tin được trao đổi hay cất giữ một cách an toàn và bímật, chẳng hạn như các phương pháp: đóng dấu và ký niêm phong một bứcthư để biết rằng lá thư có được chuyển nguyên vẹn đến người nhận haykhông, dùng mật mã hoá thông điệp để chi có người gửi và người nhận hiểuđược thông điệp, lưu giữ tài liệu trong các két sắt có khoá tại nơi được bảo vệnghiêm ngặt
Ngày nay với sự phát triển của khoa học công nghệ, đặc biệt là sự pháttriển của Internet, việc sử dụng máy tính và điện thoại cá nhân trở nên rộngrãi, dẫn dắt đến càng nhiều thông tin được lưu trữ trên máy tính và gửi đi trênmạng Internet Do đó nhu cầu về an toàn và bảo mật thông tin trên máy tínhcàng nhiều và việc sử dụng mật mã mã hoá càng được phổ biến Trong thực tếcác hacker, các dạng virus luôn tấn công và là mối đe dọa của các nguồn tàinguyên thông tin Những vấn đề đảm bảo an toàn thông tin trong các hệ thốngmáy tính là rất quan trọng
Hiểu được điều đó, nhóm chúng em đã thực hiện xây dựng chươngtrình mã hóa và giải mã ElGamal Từ những kiến thức đã được học cùng vớiviệc nghiên cứu các tài liệu trên Internet, và nhất là nhờ sự hướng dẫn, chỉbảo tận tình của thầy Phạm Văn Hiệp, nhóm chúng em đã hoàn thành đề tàinày Trong quá trình hoàn thành đề tài, chúng em còn gặp nhiều khó khăn, và
sự hiểu biết của chúng em còn hạn hẹp nên kết quả vẫn còn nhiều thiếu sót
Kính mong thầy nhận xét và đóng góp ý kiến để nhóm chúng em có thẻhoàn thiện bài tập lớn này
Chúng em xin chân thành cảm ơn!
Trang 5CHƯƠNG 1: TỔNG QUAN 1.1 Tổng quan về An toàn bảo mật thông tin
An toàn thông tin là bảo vệ các đặc tính riêng tư (confidentialy),toàn vẹn (intergrity) và khả dụng (availabity) của thông tin
● C: (Confidentialy) bảo vệ tính riêng tư của dữ liệu thông qua các
cơ chế chứng thực và mã hóa, ngăn ngừa những người không hợp
lệ sẽ không được đọc những thông tin Giống như các bì thư khiphát lương thưởng được dán chữ Confidentialy, chúng ta có thểhình dung trong môi trường công nghệ thông tin là một người chưađăng nhập vào Domain sẽ không được truy cập những dữ liệu chỉchia sẻ cho các Domain User
● I: (Intergrity) bảo vệ tính toàn vẹn của dữ liệu thông qua các thuật
toán RSA, SHA, MD5 ngăn ngừa attacker thay đổi các thông tinnhạy cảm trong quá trình truyền
● A: (Available) bảo đảm dữ liệu luôn ở trong trạng thái sẵn sằng
đáp ứng nhu cầu của người dùng
● Non-Repudiation: Tính không thể chối bỏ, nghĩa là dữ liệu người
nào gửi đi thì họ phải có trách nhiệm với các thông tin của mìnhthông qua các xác nhận nguồn gốc như chữ kí điện tử
Để đảm bảo việc truyền tin an toàn và kiểm tra tính toàn vẹn của thông tin,người ta thường mã hóa thông tin trước khi truyền đi bằng các một sổ các hệmật như DES, Triple DES (3DES), RC4, AES, RSA, Rabin, Diffle-Hellman,Elgamal,
Qua dự án lần này nhóm sinh viên chúng em đã đi sâu tìm hiểu về xây dựng
và phát triển mã hóa giải mã Elgamal , nắm được những kiến thức cơ bảntrong phương pháp mã hóa và giải mã cũng như là các thuật toán cần thiếtbằng các ngôn ngữ như: Java, Python,
1.2 Lý do chọn đề tài
Trước đây khi công nghệ máy tính chưa phát triển, khi nói đến vấn đề an toànbảo
Trang 6mật thông tin, chúng ta thường hay nghĩ đến các biện pháp nhằm đảm bảo chothông tin được trao đổi hay cất giữ một cách an toàn và bí mật, chẳng hạn làcác biện pháp như:
Đóng dấu và ký niêm phong một bức thư để biết rằng lá thư có được chuyểnnguyên vẹn đến người nhận hay không, dùng mật mã mã hóa thông điệp đểchỉ có người gửi và người nhận hiểu được thông điệp, lưu giữ tài liệu trongcác két sắt có khóa tại nơi được bảo vệ nghiêm ngặt
Ngày nay với sự phát triển của khoa học công nghệ, đặc biệt là sự phát triểncủa Internet, việc sử dụng máy tính và điện thoại cá nhân càng trở lên rộngrãi, dẫn đến càng nhiều thông tin được lưu trữ trên máy tính và gửi đi trênmạng Internet Do đó nhu cầu về an toàn và bảo mật thông tin trên máy tínhcàng nhiều và việc sử dụng mật mã mã hóa càng được phổ biến Do đó hiệnnay có rất nhiều kiểu mã hóa hiện đại và phức tạp ngày càng được sinh ra vàphát triển hơn
Chính vì lý do đó và dựa trên các kiến thức đã học Nhóm em đã chọn đề tài:
“Xây dựng chương trình mã hóa và giải mã ElGamal ” cho bài thi kết thúc
học phần An toàn và bảo mật thông tin
1.3 Nội dung nghiên cứu
● Tìm hiểu chung về hệ mã hóa công khai
- Khái niệm
- Cách hoạt động
- Các thuật toán
- Ứng dụng
● Nghiên cứu tìm hiểu về mật mã ElGamal
- Giới thiệu chung về hệ mã ElGamal
- Mã hóa và giải mã ElGamal
- Độ an toàn
- Ưu và nhược điểm của hệ mã ElGamal
● Áp dụng thực hiện xây dựng chương trình với các ngôn ngữ C#, C++…
Trang 71.4 Các kiến thức cần có
🙞 Các kiến thức về thuật toán, định lý:
o Nắm rõ các kiến thức cơ bản về ElGamal
o Nghiên cứu nội dung các thuật toán ( Kiểm tra số nguyên tố,Euclid tìm ước chung lớn nhất, Bình phương và nhân,…)
🙞 Các kiến thức ngôn ngữ lập trình:
+ C#
+ C++
Trang 8CHƯƠNG 2: KẾT QUẢ NGHIÊN CỨU 2.1 Nghiên cứu, tìm hiểu hệ mã khóa công khai
2.1.1 Khái niệm:
- Hệ mã khóa công khai, hay còn được gọi là mã khóa công khai, làmột hệ thống mã hóa sử dụng cặp khóa gồm khóa công khai và khóa bímật Hệ thống này được phát triển để giải quyết các vấn đề liên quanđến việc trao đổi thông tin an toàn trên mạng không đáng tin cậy
2.1.2 Cách hoạt động:
- Trong hệ mã khóa công khai, mỗi người dùng đều có một cặp khóagồm khóa công khai (public key) và khóa bí mật (private key) Khóacông khai được chia sẻ công khai, trong khi khóa bí mật được giữ bímật
- Khi một người dùng muốn gửi thông điệp cho người nhận, người gửi
sẽ sử dụng khóa công khai của người nhận để mã hóa thông điệp Chỉ
có khóa bí mật tương ứng với khóa công khai đó mới có thể giải mãthông điệp Điều này đảm bảo rằng chỉ người nhận thực sự có khóa bímật mới có thể đọc được nội dung
2.1.3 Các thuật toán:
- Hệ mã khóa công khai được xây dựng trên các thuật toán mã hóamạnh như RSA, Diffie-Hellman, ElGamal, và ECC (Elliptic CurveCryptography) Các thuật toán này dựa trên tính toán học phức tạp nhưphân tích nguyên tố, tính toán trên đường cong elliptic, hay bài toán rờirạc
2.1.4 Ứng dụng:
- Một trong những ứng dụng quan trọng của hệ mã khóa công khai làtrao đổi khóa bí mật an toàn Thông qua việc sử dụng mã khóa côngkhai, người dùng có thể trao đổi khóa bí mật mà không cần giao tiếptrực tiếp với nhau Điều này hữu ích trong việc thiết lập kênh liên lạc
an toàn trên mạng
Trang 9- Hệ mã khóa công khai cũng được sử dụng rộng rãi trong các ứngdụng bảo mật như chứng thực, ký số, và mã hóa thông tin Nó cung cấpmột cơ chế bảo mật mạnh mẽ và đáng tin cậy cho việc truyền tải thôngtin trên mạng công cộng.
2.2 Nghiên cứu tìm hiểu về mật mã ElGamal.
2.2.1 Giới thiệu chung về hệ mã ElGamal
Hệ mã ElGamal là một hệ mã khóa công khai được đặt theo tên của nhàtoán học người Mỹ Taher Elgamal Hệ mã này được sử dụng để mã hóa vàgiải mã các thông điệp bằng cách sử dụng một cặp khóa - khóa công khai vàkhóa bí mật
Khóa công khai được sử dụng để mã hóa thông điệp, trong khi khóa bímật được sử dụng để giải mã thông điệp Hệ mã ElGamal cũng được sử dụng
để tạo chữ ký điện tử, cho phép người dùng xác minh tính toàn vẹn và nguồngốc của thông điệp
Hệ mã ElGamal dựa trên việc tính toán một phần tử nguyên thủy trongmột nhóm số học modulo lớn Quá trình mã hóa và giải mã thông điệp của hệ
mã ElGamal rất phức tạp, nhưng nó có tính toán ngẫu nhiên giúp tăng tínhbảo mật của thông điệp
Hệ mã ElGamal được coi là một trong những hệ mã khóa công khai antoàn và hiệu quả, và nó đã được sử dụng trong nhiều ứng dụng bảo mật, baogồm giao tiếp mật, chữ ký điện tử và trao đổi khóa
2.2.2 Mã hóa và giải mã ElGamal
⮚ Quá trình mã hoá và giải mã
Trang 10Hình 1.2: Sơ đồ quá trình mã hoá và giải mã hệ mã Elgamal
- Bước 1: Tạo khóa
o Cho p là một số nguyên tố sao cho bài toán logarit rời rạc trong Zp làkhó giải
Trang 11● Logarithm rời rạc là sự kết nối của phép tính logarithm 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 # 0, nếu ax – y = 0 được gọi là logarithm cơ số a của y
ký hiệu: x = logay
● Logarithm rời rạc là bài toán khó (chưa biế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ụngthuật toán bình phương và nhân)
2.2.3 Độ an toàn
● Hệ mã Elgamal dựa trên bài toán logarithm 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 logarithm
● Trong bài toán về hệ mã Elgamal:
o p là số nguyên tố, alpha là phần tử nguyên thuỷ của Z*p
o Bài toán logarithm rời rạc có thể được phát biểu như sau: Tìmmột số mũ a duy nhất (1 < x < p – 1) sao cho beta = alphaa mod
p, với y thuộc Z*p cho trước
o Bài toán có thể giải được bởi phương pháp vét cạn (tức là duyệttất cả phần tử a) để tìm a thoả mãn Khi đó độ phức tạp là sẽ làO(p) Vấn đề đặt ra là nêu p lớn, rất lớn thì để thực hiện phươngpháp này cần thời gian rất lớn -> không khả thi
● Đánh giá độ an toàn của hệ mã Elgamal:
o Hệ mã Elgamal áp dụng bài toán logarithm rời rạc, chính vì vậy
độ an toàn của hệ mã Elgamal là rất lớn vì bài toán logarith rờirạc chưa có phương pháp hiệu quả để giải
o Với một số nguyên tố p đủ lớn thì thuật toán Elgamal không cóphương pháp thám mã hiệu quả
2.2.4 Ưu và nhược điểm của hệ mã ElGamal
🙞 Ưu điểm:
● Tính bảo mật cao: Hệ mã ElGamal có tính bảo mật cao, đặc biệt là trong việc chống lại các cuộc tấn công bằng phân tích số học
Trang 12● Không cần sử dụng tính chất nguyên tố: Khác với hệ mã RSA, hệ
mã ElGamal không cần sử dụng tính chất nguyên tố của số nguyên
tố lớn để đảm bảo tính bảo mật, giúp giảm độ phức tạp tính toán
● Khả năng ký và xác thực chữ ký điện tử: Hệ mã ElGamal cũng cungcấp khả năng ký và xác thực chữ ký điện tử, giúp đảm bảo tính toàn vẹn của thông tin
🙞 Nhược điểm:
● Tốc độ mã hóa và giải mã chậm: Hệ mã ElGamal có tốc độ mã hóa
và giải mã chậm hơn so với một số hệ mã khóa công khai khác như RSA, đặc biệt là khi sử dụng đường cong Elliptic Curve
● Đòi hỏi kích thước khóa lớn hơn: Hệ mã ElGamal đòi hỏi kích thước khóa lớn hơn so với hệ mã khóa công khai khác để đảm bảo tính bảo mật
● Khó khăn trong việc triển khai: Hệ mã ElGamal có độ phức tạp trong việc triển khai và tích hợp vào các ứng dụng bảo mật
2.3 Nội dung thuật toán.
2.3.1 Kiểm tra số nguyên tố
- Bước 1: Kiểm tra xem số đó có nhỏ hơn 2 hay không, nếu phải thì nó không phải là số nguyên tố
- Bước 2: Tìm căn bậc hai của số đó và làm tròn lên đến số nguyên gần nhất Chẳng hạn nếu số đó là 17 thì căn bậc hai của nó là 4.12, lấy số nguyên là 5
- Bước 3: Kiểm tra xem số đó có chia hết cho các số từ 2 đến căn bậc haicủa số đó không Nếu có, thì nó không phải là số nguyên tố
- Bước 4: Nếu không có số nào từ 2 đến căn bậc hai của số đó chia hết cho nó, thì nó là số nguyên tố
Ví dụ: Để kiểm tra số 17 có phải là số nguyên tố không?
● 17 > 2, qua bước 1
● Căn bậc hai của 17 là 4.12, lấy số nguyên là 4, qua bước 2
● Kiểm tra xem 17 có chia hết cho các số từ 2 đến 5 không Nếu 17 không chia hết cho số nào, qua bước 3, ngược lại thì 17 không phải
là số nguyên tố
Trang 13● Vậy 17 là số nguyên tố, qua bước 4.
2.3.2 Thuật toán Euclid tìm ước chung lớn nhất
- Thuật toán Euclid tìm ước chung lớn nhất của hai số nguyên không âm GCD(a, b)
o Nếu a = 0 thì GCD(a, b) = b return b
o Nếu b = 0 thì GCD(a, b) = a return a
o Nếu a # 0, b # 0 Giả sử A > B:
▪ Viết a dưới dạng: a = q * b + r
▪ Theo thuật toán Euclid ta có:
GCD(a, b) = GCD(b, r) = GCD(b, a mod b)
2.3.3 Thuật toán bình phương và nhân tính x^n mod m
- Giải thuật đệ quy: để tính luỹ thừa tự nhiên bậc n của x như sau:
o Với n = 0 thì x^n = 1Với n > 0 ta có công thức bình phương và nhân
- Giải thuật không đệ quy:
o Nhận xét: trong giải thuật đệ quy, có xét tính chẵn lẻ của n
và liên tục chia n cho 2, lấy phần nguyên đến khi n = 0 Thực chất quá trình này chính là tìm các bit của n hay chính
là thực hiện chuyển đổi n sang số nhị phân sau đó tính luỹ thừa theo quy tắc bình phương và nhân
Trang 142.4 Thiết kế chương trình, cài đặt thuật toán.
2.4.1 Ngôn ngữ C++
2.4.1.1 Giới thiệu ngôn ngữ C++
Ngôn ngữ lập trình C++ là một ngôn ngữ lập trình hướng đối tượng(OOP –Object-oriented programming) được phát triển bởi Bjarne Stroustrup C++ làngôn ngữ lập trình được phát triển trên nên tảng của ngôn ngữ lập trình C Do
đó, C++ có song song cả 2 phong cách(style) lập trình hướng cấu trúc giống C
và có thêm phong cách hướng đối tượng Trong nhiều trường hợp, C++ sửdụng kết hợp cả 2 style trên Do đó, nó được xem là một ngôn ngữ “laitạo”.Ngôn ngữ C++ là một ngôn ngữ lập trình cấp trung Bởi vì nó có các tínhchất của cả ngôn ngữ lập trình bậc thấp(Pascal, C…) và ngôn ngữ lập trìnhbậc cao(C#, Java, Python…)
Ngôn ngữ lập trình C++ có đuôi mở rộng là cpp
2.4.1.2 Hướng dẫn cài đặt và chạy chương trình
● Đối với C++ : Dùng phần mềm Qt để chạy chương trình
Bước 1:Trước tiên chúng ta cài đặt Qt cho máy:
https://www.qt.io/download-open-source
Trang 15Bước 2: Sau khi download về xong Bạn hãy click đúp chuột vào file setup
vừa download về để chạy qt
Bước 3: Đây chính là giao diện cũng như một vài option để các bạn có thể lựa
chọn trước khi cài đặt
Lưu ý : Bạn cần có tài khoản để đăng nhập Qt
Bước 4: Sau khi đăng nhập ,bạn chọn như hình bên dưới
Trang 16Bước 5: Chọn vị trí thư mục mà Qt sẽ được cài đặt
Bước 6: Sau khi chọn xong, cài đặt các phiên bản cần cho chương trình
Trang 17Bước 7: Quá trình cài đặt có thể diễn ra hơi lâu Bạn cần phải đợi một vài
phút
Trang 18Chạy chương trình demo :
Bước 1: Chọn thư mục demo sau khi giải nén
Bước 2: Nhấn “Run” để chạy chương trình
Bước 3: Đây là giao diện chương trình
Trang 19Thực hiện tạo khóa :
Cách 1: Kích vào “Tự động”, chương trình sẽ tự động sinh ra kết quả số
x ,alpha , p, d,k
Cách 2: Nhập từ bàn phím:
● Nhập thông số nguyên tố p , số x , số alpha, số d, số k để thực hiện quá trình ký số
● Ở đây thực hiện bắt lỗi nhập liệu :
✔ Chưa nhập đủ thông tin
✔ Kiểm tra số p đã là số nguyên tố chưa Hiển thị thông báo p không phải số nguyên tố
Hình ảnh minh họa về một số lỗi nhập liệu:
● Lỗi không nhập số P
Trang 20● Lỗi nhập số P không là số nguyên tố
● Lỗi không nhập số x