2.5.1. Giải pháp
Phần này, tôi ứng dụng hàm băm MD5 để biến mật khẩu người dùng thành một chuỗi có độ dài 128 bit (gồm 32 ký tự hecxa). Và từ chuỗi này không thể nào lần trở lại mật khẩu. Có nghĩa là việc giải mã là không thể hoặc phải mất một khoảng thời gian vô tận.
Giải pháp này nhằm mã hóa để đảm bảo an toàn cho mật khẩu của người dùng sử dụng hệ thống. Tức là, khi có ai đó xâm nhập vào cơ sở dữ liệu của hệ thống thì
Chọn 2 số nguyên tố p và q
M
Khoá công khai KU = {e,n} Khoá bí mật KR = {d,n} Tính n = pq Tính Φ(n) = (p-1)(q-1) Chọn e < n C = Me mod n M = Cd mod n Tính d = e-1 mod Φ(n) M
- 26 -
cũng không thể nào biết được mật khẩu người dùng vì chuỗi mật khẩu đó đã được biến đổi thành một chuỗi khác.
2.5.2. Vận dụng vào hệ thống
Khi tạo mật khẩu người sử dụng, chuỗi mật khẩu đó được mã hóa bằng hàm MD5 (có sẵn trong VS 2008) để tạo thành chuỗi gồm dãy các byte. Sau đó, chuyển các byte trên thành các ký tự hecxa; các ký tự này chính là mật khẩu đã được mã hóa bằng MD5 và lưu vào cơ sở dữ liệu.
Khi đăng nhập vào hệ thống, người sử dụng gõ mật khẩu của mình. Hệ thống sẽ kiểm tra mật khẩu người dùng đó bằng cách dùng MD5 mã hóa mật khẩu đó thành chuỗi ký tự hecxa và so sánh với chuỗi ký tự hecxa trong cơ sở dữ liệu của người dùng đó. Nếu trùng khớp thì được đăng nhập vào hệ thống, nếu sai thì không đúng mật khẩu và phải đăng nhập lại.
Sau đây là đoạn mã chương trình thể hiện quá trình mã hóa chuỗi đầu vào dùng hàm MD5:
2.6. ỨNG DỤNG CHỮ KÝ ĐIỆN TỬ
public string Mahoa(string text) {
// chuyển chuỗi đầu vào thành dãy các byte
System.Text.UTF8Encoding ue = new System.Text.UTF8Encoding(); byte[] bytes = ue.GetBytes(text);
// mã hóa ra thành dãy các byte
System.Security.Cryptography.MD5CryptoServiceProvider md5 =
new System.Security.Cryptography.MD5CryptoServiceProvider(); byte[] hashBytes = md5.ComputeHash(bytes);
// chuyển dãy các byte thành các ký tự hecxa (hệ 16)
string hashString = "";
for (int i = 0; i < hashBytes.Length; i++) {
hashString += Convert.ToString(hashBytes[i], 16).PadLeft(2, '0');
}
return hashString.PadLeft(32, '0'); }
- 27 -
2.6.1. Giải pháp
Phần này tôi đề xuất giải pháp ứng dụng chữ ký điện tử trong hệ thống thể hiện qua quá trình gửi và nhận file dựa vào thuật toán băm MD5 và thuật toán mã hóa RSA.
43. Quá trình ký và gửi file văn bản
- Từ file cần gửi ban đầu, chương trình sẽ sử dụng hàm băm MD5 để mã hóa thành chuỗi ký tự dài 128 bit, hash value (gọi là bản tóm lược).
- Chương trình sử dụng thuật toán RSA để mã hóa khóa riêng (private key) của người gửi và bản tóm lược hash value thành một dạng khác (giá trị băm ở dạng mật mã) gọi là chữ ký điện tử.
- Kết hợp file ban đầu với chữ ký điện tử thành một thông điệp đã ký và gửi đi cho người nhận.
Hình 1.1. Sơ đồ mô tả quá trình ký và gửi file văn bản
44. Quá trình nhận file văn bản
File ban đầu
Bản tóm lược (M) Hàm băm MD5
Khóa bí mật
của người gửi
Mã hóa RSA Kết hợp file và CKĐT Thông điệp đã ký Chữ ký điện tử S = Md mod n Gửi đi KR(d,n)
- 28 -
Sau khi người nhận đăng nhập vào hệ thống và nhận file. Hệ thống sẽ tách thông điệp đã ký thành ra file và chữ ký điện tử. Lúc này sẽ có 2 quá trình kiểm tra:
45. Kiểm tra thông điệp đến có đúng người gửi hay không?
- Sử dụng thuật toán RSA để giải mã chữ ký điện tử bằng khóa công khai của người gửi.
- Nếu giải mã không được thì file nhận được không đúng người gửi. - Ngươc lại thì file nhận được đúng người gửi và có được Bản tóm lược 1.
46. Kiểm tra file có bị thay đổi hay không?
- Từ file được tách ra, sử dụng hàm băm MD5 mã hóa thành Bản tóm lược 2. - Kiểm tra Bản tóm lược 1 và Bản tóm lược 2 có giống nhau hay không? Nếu giống nhau thì file nhận được là vẹn toàn (không bị thay đổi hay tác động), ngược lại là file đã bị thay đổi.
Hình 1.2. Sơ đồ mô tả quá trình nhận file văn bản
2.6.2. Vận dụng vào hệ thống
Tách file và CKĐT Thông điệp nhận
Hàm băm MD5
Bản tóm lược 2 (M) File ban đầu
Giải mã được? Khóa công khai
của người gửi Giải mã RSA
Không đúng người gửi Chữ ký điện tử
Bản tóm lược 1
M = Se mod n Giống nhau? Đúng người gửi Không Có Có Không File là toàn vẹn
File bị thay đổi
- 29 -
Để vận dụng giải pháp này trong quá trình gửi và nhận file của hệ thống, tôi giới thiệu tổng quan một số bước để xây dựng các hàm và thuật toán chính như sau:
- Để xử lý kích thước khóa có độ đài đủ lớn và trong thuật toán RSA có cả hàm mũ... nên cần xây dựng các hàm xử lý số lớn với các phép toán cơ bản: cộng, trừ, nhân, chia, modulo…
- Xây dựng thuật toán phát sinh số nguyên tố, thuật toán chọn e, chọn d - Sử dụng khóa riêng (n, d) để tính toán chữ ký S = Md mod n
- Sử dụng khóa công khai của người gửi (n, e) để tính toán lại M = Se mod n - Xây dựng các hàm gửi và nhận file...
2.7. ĐÁNH GIÁ KẾT QUẢ
Việc ứng dụng vấn đề mã hóa trên vào hệ thống phục vụ quản lý tại khoa Công nghệ Thông tin, trường Đại học Bách khoa, đại học Đà Nẵng có thể đáp ứng được các yêu cầu sau:
-Tính bảo mật: Hệ thống có thể kiểm tra dữ liệu đăng nhập bằng thuật toán mã hóa MD5 đảm bảo độ tin cậy tuyệt đối. Mật khẩu được mã hóa và lưu vào cơ sở dữ liệu nên không thể biết được mật khẩu của các thành viên sử dụng hệ thống.
-Tính toàn vẹn: Hệ thống luôn đảm bảo được tính toàn vẹn của file truyền đi trên đường truyền; vì khi nhận, file được giải mã bằng thuật toán MD5 để so sánh sự trùng khớp với giá trị băm ban đầu.
-Tính xác thực: Trước khi nhận file hệ thống sử dụng thuật toán RSA để giải mã với khóa công khai của người gửi nhằm xác định đúng người gửi hay không.
-Tốc độ: Do sử dụng các thuật toán mã hóa để kiểm tra dữ liệu nên tốc độ của hệ thống có phần hạn chế hơn, nhưng vì hệ thống có thể cài đặt trong mạng LAN, phạm vi đường truyền gần nên điều này không ảnh hưởng nhiều về mặt tốc độ.
- 30 -
Trong chương này tôi vận dụng các kiến thức liên quan để khảo sát hiện trạng; phân tích và nhận định về hệ thống; phân tích thiết kế hệ thống thông tin để làm nền tảng, cơ sở xây dựng hệ thống eOffice.