Tài liệu này cung cấp cái nhìn toàn diện về thuật toán RSA, chữ ký số, hàm băm MD5 và thuật toán Diffie-Hellman, bao gồm khái niệm, cách hoạt động, ví dụ minh họa và ứng dụng thực tế. Mục tiêu là giúp người dùng hiểu rõ cách các công nghệ này được sử dụng trong bảo mật thông tin, đặc biệt trong xác minh danh tính, bảo vệ dữ liệu và trao đổi khóa an toàn.
RSA là một thuật toán mã hóa khóa công khai, được sử dụng rộng rãi trong bảo mật thông tin như mã hóa dữ liệu và tạo chữ ký số.
p
và q
(ví dụ: p = 61
, q = 53
).n = p * q
(modulus): n = 61 * 53 = 3233
.φ(n) = (p-1) * (q-1)
: φ(n) = 60 * 52 = 3120
.e
(số mũ công khai) sao cho 1 < e < φ(n)
và e
nguyên tố cùng nhau với φ(n)
(nghĩa là ước chung lớn nhất của e
và φ(n)
là 1).
e
với thuật toán Euclide
:
1 < e < φ(n)
GCD(e, φ(n)) = 1
a
và b
(lần lượt là φ(n)
và e
).a
cho b
, lấy nguyên dư: a = b * q + r
(q
là thương nguyên của phép chia a / b
, r
là phần dư hay a % b
)a = b
, b = r
.r = 0
.b
cuối cùng (trước khi r
bằng 0).e
với φ(n) = 3120
:
Giá trị e thử |
Các bước tính GCD | GCD với φ(n) = 3120 |
Kết luận |
---|---|---|---|
3 |
Bước 1: 3120 = 3 * 1040 + 0 (dư = 0)
|
3 |
GCD(3, 3120) = 3 ≠ 1 , không thỏa mãn
|
17 |
Bước 1: 3120 = 17 * 183 + 9 (dư = 9)Bước 2: 17 = 9 * 1 + 8 (dư = 8)Bước 3: 9 = 8 * 1 + 1 (dư = 1)Bước 4: 8 = 1 * 8 + 0 (dư = 0)
|
1 |
GCD(17, 3120) = 1 , thỏa mãn
|
65537 |
Không cần tính GCD vì 65537 > 3120
|
- |
Không thỏa mãn e < φ(n) , không dùng được
|
Quyết định: Chọn e = 17
vì thỏa mãn cả hai điều kiện: 1 < 17 < 3120
và GCD(17, 3120) = 1
.
Giá trị e thử |
Điều kiện 1 < e < φ(n) |
GCD với φ(n) = 3120 |
Thỏa mãn? |
---|---|---|---|
3 |
Có | 3 |
Không |
17 |
Có | 1 |
Có |
65537 |
Không | - | Không |
e
nhỏ như 3
có thể dẫn đến các cuộc tấn công nếu thông điệp không được đệm (padding) đúng cách. Trong thực tế, e = 65537
là lựa chọn phổ biến vì tính an toàn và hiệu quả.d
với thuật toán Euclid mở rộngR1
= φ(n)
R2
= e
r
là số dư của phép chia R1/R2
q
là thương của phép chia R1/R2
T1
= 0
T2
= 1
t
= T1-q*T2
Để tìm d
(số mũ bí mật) sao cho 17 * d ≡ 1 mod φ(n)
với e = 17
và φ(n) = 3120
, ta sử dụng thuật toán Euclid mở rộng. Bảng dưới đây mô tả các bước tính GCD(3120, 17) và các hệ số T1
, T2
, t
để tìm d
.
q | R1 | R2 | r | T1 | T2 | t |
---|---|---|---|---|---|---|
183 | 3120 | 17 | 9 | 0 | 1 | -183 |
1 | 17 | 9 | 8 | 1 | -183 | 184 |
1 | 9 | 8 | 1 | -183 | 184 | -367 |
8 | 8 | 1 | 0 | 184 | -367 | 3120 |
- | 1 | 0 | - | -367 | 3120 | - |
Ta có T1 = -367
, nghĩa là d = -367
. Tuy nhiên, trong RSA, d
cần là số dương. Do đó, ta chuyển d
thành số dương bằng cách:
d = φ(n) + (-367) = 3120 + (-367) = 3120 - 367 = 2753
Kết quả: d = 2753
là số mũ bí mật.
(e, n) = (17, 3233)
.(d, n) = (2753, 3233)
.Thao tác | Công thức | Ví dụ |
---|---|---|
Mã hóa | c = m^e mod n |
123^17 mod 3233 = 855 |
Giải mã | m = c^d mod n |
855^2753 mod 3233 = 123 |
p
và q
phải là số nguyên tố rất lớn (thường 2048 bit hoặc hơn) để đảm bảo an toàn. Các số nhỏ trong ví dụ chỉ dùng cho mục đích minh họa.
Chữ ký số (digital signature) là một dạng chữ ký điện tử sử dụng thuật toán mã hóa (như RSA) để xác minh danh tính người gửi và đảm bảo tính toàn vẹn của thông điệp. Nó giúp ngăn chặn tấn công giả mạo (man-in-the-middle).
Chữ ký số sử dụng cặp khóa RSA với khóa bí mật dùng để ký và khóa công khai để xác minh.
Thao tác | Công thức | Ví dụ |
---|---|---|
Tạo chữ ký | s = m^d mod n |
6^2753 mod 3233 = 2902 |
Xác minh chữ ký | m = s^e mod n |
2902^17 mod 3233 = 6 |
MD5 (Message Digest Algorithm 5) là một hàm băm tạo ra giá trị băm 128-bit (thường biểu diễn dưới dạng 32 ký tự HEX) từ dữ liệu đầu vào bất kỳ.
MD5 xử lý dữ liệu đầu vào qua các bước sau:
3
:
eccbc87e4b5ce2fe28308fd9f2a7baf3
.Đầu vào | Giá trị băm MD5 |
---|---|
3 |
eccbc87e4b5ce2fe28308fd9f2a7baf3 |
Hello |
8b1a9953c4611296a827abf8c47804d7 |
Diffie-Hellman (DH) là một thuật toán trao đổi khóa, cho phép hai bên thiết lập một khóa bí mật chung qua một kênh không an toàn. Khóa này có thể được sử dụng cho mã hóa đối xứng (như DES).
Diffie-Hellman thực hiện trao đổi khóa qua các bước sau:
p
(modulus) và một số nguyên g
(cơ số, thường nhỏ) là tham số công khai mà cả hai bên biết.a
(cho Alice) và b
(cho Bob).A = g^a mod p
và gửi A
cho Bob.B = g^b mod p
và gửi B
cho Alice.K = B^a mod p
.K = A^b mod p
.B^a mod p = g^(b*a) mod p = g^(a*b) mod p = A^b mod p
, cả hai bên sẽ có cùng khóa bí mật K
.p = 23
, g = 5
, Alice chọn a = 6
, Bob chọn b = 15
:
A = 5^6 mod 23 = 8
và gửi cho Bob.B = 5^15 mod 23 = 19
và gửi cho Alice.K = 19^6 mod 23 = 2
.K = 8^15 mod 23 = 2
.K = 2
.Thao tác | Alice | Bob |
---|---|---|
Khóa riêng | a = 6 |
b = 15 |
Giá trị công khai | A = 5^6 mod 23 = 8 |
B = 5^15 mod 23 = 19 |
Khóa bí mật chung | K = 19^6 mod 23 = 2 |
K = 8^15 mod 23 = 2 |
p
và g
cần đủ lớn, và cần bảo vệ chống lại các cuộc tấn công như man-in-the-middle bằng cách sử dụng chữ ký số hoặc chứng chỉ.