Thuật toán RSA ra đời vào năm 1977 và nó đã trở thành một trong những phương pháp mã hóa phổ biến nhất được sử dụng rộng rãi trong bảo mật thông tin.. Nhờ sự kết hợp giữa lý thuyết toán
Trang 1TRƯỜNG ĐẠI HỌC CÔNG THƯƠNG TP HỒ CHÍ MINH
KHOA CÔNG NGHỆ THÔNG TIN
Báo cáo Mã hóa và Ứng dụng
Đề tài:
Tìm hiểu về giải thuật mã hóa RSA
GVHD: Vũ Đức Thịnh Nhóm 7:
Lê Anh Duy – 2033220707 Nguyễn Phú Thuận - 2033225037 Lưu Tấn Phúc– 2033223741
Võ Minh Phú - 2033223692
Trang 2LỜI MỞ ĐẦU
1 Cơ sở toán học
1.1 Phép toán Modulo
1.2 Số nguyên tố lớn và tích của chúng
1.3 Tính phi hàm Carmichael λ(n)n)
1.4 Hàm mũ và nghịch đảo modulo
1.5 Khóa công khai và khóa bí mật
2 Phân tích bài toán
2.1 Mục đích của bài toán
2.2 Cách làm
3 Ngôn ngữ sử dụng
3.1 Tổng quan về ngôn ngữ lập trình C#:
3.2 Đặc điểm nổi bật của C#:
3.3 Ứng dụng thực tiễn:
Các thuật toán sử dụng trong thuật toán mã hóa RSA
Giao diện và kết quả chạy chương trình
Tài liệu tham khảo
2
Trang 3Bảng phân công
thành
100%
Trang 4LỜI MỞ ĐẦU
Trong thời đại số hóa và sự phát triển mạnh mẽ của internet, việc bảo mật thông tin đã trở thành một yêu cầu cấp bách đối với hệ thống và người dùng Dữ liệu cá nhân, giao dịch tài chính và nhiều thông tin khác cần được bảo vệ khỏi các mối đe dọa từ cuộc tấn công mạng
Thuật toán RSA ra đời vào năm 1977 và nó đã trở thành một trong những phương pháp mã hóa phổ biến nhất được sử dụng rộng rãi trong bảo mật thông tin Thuật toán này được phát minh bởi 3 nhà khoa học, Ron Rivest Adi Shamir và Len Adleman RSA mã hóa bằng cách sử dụng hai khóa riêng biệt: khóa công khai(n)public key) và khóa bí mật(n)private key) Nhờ tính chất dựa trên các phép toán số học và tính chất khó phân tích của việc tích số nguyên lớn, RSA giúp đảm bảo an toàn cho việc truyền thông tin trên các kênh không an toàn
Nhờ sự kết hợp giữa lý thuyết toán học và ứng dụng thực tiễn, thuật toán RSA đã trở thành nền tảng quan trọng trong nhiều giao thức an ninh hiện đại, bao gồm HTTPS, chữ ký số và hệ thống xác thực
1
Trang 51 Cơ sở toán học
Thuật toán RSA dựa trên các nguyên lý toán học liên quan đến số học mô-đun và lý thuyết số Dưới đây là những cơ sở toán học chính được sử dụng trong RSA:
1.1 Phép toán Modulo
Phép toán module là một phần cơ bản của RSA Nó liên quan đến việc tính toán phần dư khi chia hai số nguyên Trong RSA, các phép toán này giúp mã hóa và giải mã dựa trên các khóa công khai và khóa bí mật
Với a mod n, ta sẽ lấy phần dư khi chia a cho n
1.2 Số nguyên tố lớn và tích của chúng
Thuật toán RSA sử dụng hai số nguyên tố p và q, để tạo ra một số n:
n=p × q
1.3 Hàm Euler và phi Euler ϕ(n)n)
Hàm Eulerϕ(n)n) (n)hay còn gọi là hàm phi Euler) là một khái niệm trong
lý thuyết số được sử dụng trong RSA để sinh khóa riêng Hàm này được định nghĩa là số các số nguyên dương nhỏ hơn nnn mà nguyên tố cùng nhau với nnn
Trong trường hợp n = p×q với p và q là các số nguyên tố, hàm phi Euler được tính là:
ϕ(n)=(p−1)×(q−1)n)=(p−1)×(q−1))=(n)=(p−1)×(q−1)p−1)×(q−1))×(n)=(p−1)×(q−1)q−1)×(q−1)) Hàm Euler có tính chất quan trọng đối với RSA, vì nó được dùng để tính khóa riêng tư ddd từ khóa công khai e
Trang 61.4 Hàm mũ và nghịch đảo modulo
Một phần quan trọng trong việc sinh khóa riêng tư ddd là tìm số nghịch đảo
của e theo modulo ϕ(n)n) Nghịch đảo của e theo modulo ϕ(n)n) là một số d sao
cho:
d×e≡ 1 mod ϕ(n)dn)d)dd
Điều này có nghĩa là d×e chia cho ϕ(n)n) sẽ dư 1 Để tính d, người ta sử dụng
thuật toán Euclid mở rộng (n)Extended Euclidean Algorithm), giúp tìm ra số
nghịch đảo modulo của e một cách hiệu quả
1.5 Khóa công khai và khóa bí mật
Thuật toán RSA sử dụng hàm mũ và nghịch đảo modulo để mã hóa và giải mã
dữ liệu:
Mã hóa: Để mã hóa một thông điệp M, người dùng tính C, là thông điệp đã mã
hóa:
Với e là khóa công khai
Giải mã : Để giải mã thông điệp C, người dùng tính lại M, là thông điệp ban
đầu :
Với d là khóa bí mật
1.6 Khóa công khai và khóa bí mật
3
Trang 72 Phân tích bài toán
2.1 Mục đích của bài toán
Mục đích của thuật toán RSA là để đảm bảo an toàn và bảo mật thông tin trong quá trình truyền tải dữ liệu Cụ thể, các mục đích chính bao gồm:
- Bảo mật thông tin: Đảm bảo rằng chỉ người nhận dự định mới có thể đọc được thông tin đã mã hóa
- Xác thực: Xác minh danh tính của người gửi thông qua chữ ký số, đảm bảo rằng thông tin đến từ nguồn đáng tin cậy
- Toàn vẹn dữ liệu: Đảm bảo rằng thông tin không bị thay đổi trong quá trình truyền tải
- Chống chối bỏ: Người gửi không thể phủ nhận việc đã gửi thông tin, nhờ vào chữ ký số
2.2 Cách làm
Hoạt động của RSA dựa trên các bước sau:
a) Quy trình sinh khóa
Quá trình sinh khóa gồm các bước sau:
1) Chọn hai số nguyên tố lớn p và q:
Đây là hai số bí mật mà chỉ người tạo khóa mới biết.
2) Tính toán n:
Ta sẽ tính n bằng cách nhân p và q lại với nhau:
n = p x q Giá trị n này sẽ được dùng trong cả quá trình mã hóa và giải mã
3) Tính hàm Euler:
Hàm Euler được tính dựa trên q và q:
ϕ (n)=( p−1) ×(q−1)
Trang 84) Chọn số tự nhiên e:
Chọn số tự nhiên e sao cho 1<ⅇ<ϕ( n) sao cho gcd(ⅇ , ϕ(n))= 1
5) Tính số d:
Tính số d sao cho d×e≡ 1 mod ϕ(n)n)
Lưu ý: Nếu ϕ (n) quá lớn thì sẽ sử dụng thuật toán Euclid mở rộng để tính toán
Về thuật toán Euclid thì chúng ta sẽ có công thức như sau:
6) Xuất cặp khóa:
Khóa công khai gồm: (n)e, n) Khóa này có thể chia sẻ công khai
Khóa riêng tư gồm: (n)d,n) Khóa này sẽ được giữ bí mật
b) Mã hóa và giải mã
1) Mã hóa:
Bước 1: Biến đổi thông điệp thành số nguyên
Khi có một thông điệp M (n)biểu diễn dưới dạng số nguyên), người gửi sẽ
mã hóa thông điệp bằng khóa công khai của người nhận
Bước 2: Tính toán mã hóa
Sử dụng khóa công khai (n)e, n) để mã hóa:
C=Mⅇmod n
Trong đó:
C: là bản mã hóa của thông điệp
M: là thông điệp gốc
5
Trang 92) Giải mã :
Người nhận, với khóa bí mật, sẽ thực hiện giải mã để khôi phục thông điệp ban đầu
Sử dụng khóa bí mật để giải mã
Sử dụng khóa bí mật (n)d, n) để tính toán:
M=C d mod n
Trong đó:
M: thông điệp gốc
C: là bản mã hóa nhận được
Trang 10Ví dụ :
Giả sử: cho p = 5, q = 7
- Tính n: n=p × q=5 ×7=35
- Tính ϕ (n)= (n)d5− 1)d × (n)d7 − 1)d = 24
- Chọn e = 5 (n)thỏa mãn GCD(n)5,24) =1)
- Tính d sao cho d ×5 ≡ 1 mod 24 thì ta sẽ có được d = 29
Ta sẽ có cặp khóa:
Khóa công khai :(n)e, n) = (n)5, 35)
Khóa riêng tư : (n)d, n) = (n)29, 35)
Giả sử ta có thông điệp M = 32
Mã hóa: C=Mⅇmod 35 = 32^5 mod 35 = 2
Giải mã: M=C d mod 35 = 2^29 mod 35= 32
7
Trang 113 Ngôn ngữ sử dụng
3.1 Tổng quan về ngôn ngữ lập trình C#:
Ngôn ngữ lập trình C# (n)C-Sharp) được phát triển bởi Microsoft vào đầu những năm
2000 C# được thiết kế với mục tiêu tạo ra một ngôn ngữ đơn giản, mạnh mẽ và an toàn, hỗ trợ lập trình hướng đối tượng và nhiều mô hình lập trình khác nhau
3.2 Đặc điểm nổi bật của C#:
- Hướng đối tượng: C# hỗ trợ lập trình hướng đối tượng với các tính năng như kế thừa, đa hình và đóng gói
- Quản lý bộ nhớ: C# tự động quản lý bộ nhớ thông qua Garbage Collection, giảm thiểu lỗi liên quan đến bộ nhớ
- Cú pháp dễ hiểu: Cú pháp của C# đơn giản, dễ học và tương tự như C và C++, phù hợp cho cả người mới và lập trình viên có kinh nghiệm
- Tính tương thích: C# có thể chạy trên nhiều nền tảng nhờ vào NET Core và NET 5+
- Hệ sinh thái phong phú: C# hỗ trợ nhiều thư viện và framework, phục
vụ cho phát triển ứng dụng đa dạng từ desktop đến web và di động
3.3 Ứng dụng thực tiễn:
- Phát triển ứng dụng doanh nghiệp: Nhờ tính ổn định và khả năng mở rộng
- Phát triển game: Thông qua Unity, C# là ngôn ngữ chính cho nhiều trò chơi
- Phát triển web: Với ASP.NET, C# cho phép xây dựng các ứng dụng web mạnh mẽ và linh hoạt
Trang 12Các thuật toán sử dụng trong thuật toán mã hóa RSA
Trong đoạn code này, có các thuật toán liên quan đến việc mã hóa và giải mã RSA Cụ thể gồm:
1) Thuật toán kiểm tra số nguyên tố:
Hàm IsPrime(n)BigInteger number) được sử dụng để kiểm tra xem một số lớn có phải là số nguyên tố hay không Nó dựa trên việc loại bỏ các số chẵn và lặp lại việc chia thử cho các số nhỏ hơn căn bậc hai của số đó
2) Thuật toán tính UCLN (n)Ước chung lớn nhất - Greatest Common Divisor):
Hàm GCD(n)BigInteger a, BigInteger b) là thuật toán Euclid để tìm UCLN của hai số Nó tiếp tục tính toán cho đến khi phần dư bằng 0
3) Thuật toán tìm số nguyên công khai e:
Hàm FindE(n)BigInteger phi) được sử dụng để tìm số e thỏa mãn 1 < e < φ(n)n) và GCD(n)e, φ(n)n)) = 1 e là một thành phần quan trọng trong khóa công khai của RSA
4) Thuật toán Euclid mở rộng (n)Extended Euclidean Algorithm):
Hàm ModInverse(n)BigInteger e, BigInteger phi) tính nghịch đảo modulo của e theo phi, đây là giá trị d trong khóa riêng của RSA Thuật toán này
là biến thể của Euclid để giải phương trình dạng ax + by = gcd(n)a, b)
5) Thuật toán mã hóa RSA:
Hàm Encrypt(n)BigInteger M, BigInteger e, BigInteger n) sử dụng phép lũy thừa theo modulo để mã hóa thông điệp M Cụ thể, nó thực hiện C = M^e mod n, trong đó M là thông điệp gốc, e là khóa công khai và n là tích của hai số nguyên tố p và q
6) Thuật toán giải mã RSA:
Hàm Decrypt(n)BigInteger C, BigInteger d, BigInteger n) sử dụng phép lũy thừa theo modulo để giải mã bản mã C Nó thực hiện M = C^d mod
n, trong đó C là bản mã, d là khóa riêng và n là tích của p và q
Như vậy, các thuật toán chính bao gồm:
- Kiểm tra số nguyên tố (n)Prime Checking)
- Tính UCLN (n)GCD)
- Tìm e thỏa mãn điều kiện
- Thuật toán Euclid mở rộng (n)Extended Euclidean)
9
Trang 13- Mã hóa và giải mã RSA (n)RSA Encryption/Decryption)
Giao diện và kết quả chạy chương trình
Sau khi code thì sẽ có giao diện như sau:
Ở giao diện này ta sẽ có:
1 Message: Trường để nhập thông điệp cần mã hóa hoặc giải mã.
2 P và Q: Các trường nhập hai số nguyên tố (n)P và Q), cần thiết để tạo ra
khóa RSA
3 Action (n)Encrypt/Decrypt): Tùy chọn để chọn hành động mã hóa
(n)Encrypt) hoặc giải mã (n)Decrypt)
4 D: Trường nhập khoá riêng tư để giải mã
5 Result: Hiển thị kết quả sau khi mã hóa hoặc giải mã.
6 Encrypt Message: Nút bấm để thực hiện hành động mã hóa (n)hoặc có
thể là giải mã tùy thuộc vào tùy chọn)
Trang 14Tài liệu tham khảo
(n)eca.com.vn)
[3] RSA là gì? Cách thức hoạt động, ứng dụng RSA - Tạo chữ ký số (n)vietnix.vn)
11