Tải bản đầy đủ (.pdf) (3 trang)

Đảm bảo an toàn cho mật khẩu đăng nhập

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (231.23 KB, 3 trang )

Tuyển tập Hội nghị Khoa học thường niên năm 2019. ISBN: 978-604-82-2981-8

ĐẢM BẢO AN TOÀN CHO MẬT KHẨU ĐĂNG NHẬP
Phạm Thanh Bình
Trường Đại học Thuỷ lợi, email:

1. GIỚI THIỆU CHUNG

Xác thực bằng mật khẩu là một phương
thức hay được sử dụng khi đăng nhập hệ
thống. Người dùng sẽ nhập một cặp dữ liệu
gồm tên và mật khẩu tại cửa sổ đăng nhập,
cặp dữ liệu đó sẽ được dùng để so sánh với
cặp dữ liệu tương ứng đã lưu trong file dữ
liệu người dùng. Nếu hai cặp dữ liệu giống
nhau thì quá trình đăng nhập được chấp nhận.
Việc bảo mật cho file dữ liệu chứa mật
khẩu rất quan trọng, vì nếu thơng tin trong
file bị lộ ra ngồi thì bất cứ ai cũng có thể giả
dạng người dùng để đăng nhập vào hệ thống.
Giải pháp thường được sử dụng là mã hoá dữ
liệu trong file này. Vấn đề là chọn kỹ thuật
mã hố nào để đảm bảo an tồn. Sự kiện 500
triệu tài khoản Yahoo bị lộ thông tin, rồi tới
160 triệu tài khoản Zing bị lộ cả mật khẩu…
cho thấy trên thực tế vấn đề này vẫn chưa
được quan tâm đúng mức.
Trong khuôn khổ bài viết này chúng tôi sẽ
đề cập tới các giải pháp đảm bảo an toàn cho
mật khẩu và các kỹ thuật thực hiện cụ thể.


liệu, vấn đề chính là quy trình sử dụng các kỹ
thuật mã hố đó như thế nào. Việc kết hợp
nhiều kỹ thuật mã hoá với nhau sẽ giúp tạo ra
những giải pháp bảo mật khác nhau, phù hợp
với những điều kiện khác nhau.
3. KẾT QUẢ NGHIÊN CỨU

3.1. Mã hoá mật khẩu
Một số hệ thống cũ thường cất file chứa
mật khẩu trên đĩa mà khơng mã hố. Điều
này rất nguy hiểm vì nếu ai đó lấy được file
này (do lợi dụng lỗ hổng bảo mật, hoặc do
tình cờ dùng nhờ máy đồng nghiệp…), anh ta
sẽ nắm trong tay số phận của hệ thống đó. Vì
thế, một ngun tắc bắt buộc đối với các hệ
thống máy tính hiện nay là phải mã hố file
chứa mật khẩu. Thơng thường mật khẩu sẽ
được mã hố bằng một thuật tốn nào đó rồi
cất vào file. Khi người dùng đăng nhập, mật
khẩu họ nhập vào sẽ được mã hố bằng thuật
tốn nói trên, rồi đem so sánh với mật khẩu
đã mã hoá cất trong file. Nếu hai mật khẩu
giống nhau thì đăng nhập thành cơng.

2. PHƯƠNG PHÁP NGHIÊN CỨU

3.2. Lựa chọn giải pháp mã hoá

Để lựa chọn giải pháp phù hợp cho bảo
mật mật khẩu, trước tiên chúng tơi tiến hành

nghiên cứu và phân tích nhiều thuật tốn mã
hố khác nhau, từ đó đánh giá ưu nhược điểm
của từng thuật toán.
Sau khi lựa chọn được loại thuật tốn mã
hố phù hợp với mục đích, bước tiếp theo là
đánh giá độ an toàn của chúng, các khả năng
chúng có thể bị tấn cơng, từ đó đưa ra
phương án sửa đổi, cải tiến để hạn chế các
nguy cơ tấn cơng đó.
Bảo mật mật khẩu khơng chỉ đơn giản là
dùng kỹ thuật mã hố phù hợp để mã hố dữ

Có nhiều kỹ thuật mã hoá khác nhau, hai
kỹ thuật phổ biến nhất là mật mã đối xứng
dùng khố bí mật và mật mã khố cơng khai.
Chúng được dùng để biến đổi dữ liệu ban đầu
sang một dạng mới không thể đọc được nếu
khơng có khố. Trước đây có một số hệ
thống sử dụng các kỹ thuật mật mã này để
mã hoá file chứa mật khẩu. Tuy nhiên vấn đề
đặt ra là ai sẽ quản lý khố? Người quản lí
khố (thường là quản trị hệ thống) sẽ có tồn
quyền giải mã file, và biết được mật khẩu của
tất cả người dùng. Nếu anh ta lợi dụng điều
đó cho ý đồ xấu thì sao?

183


Tuyển tập Hội nghị Khoa học thường niên năm 2019. ISBN: 978-604-82-2981-8


Để tránh hiện tượng trên, có một kỹ thuật
đã từng được áp dụng trên UNIX: Người ta
khơng mã hố mật khẩu mà dùng mật khẩu
đó làm khố để mã hoá một khối dữ liệu cố
định. Dữ liệu sau khi mã hoá được lưu vào
file, đây là cơ sở để so sánh trong q trình
đăng nhập của người dùng. Khơng ai có thể
giải mã dữ liệu đó, ngồi người sở hữu khoá
(mật khẩu). Tất nhiên thuật toán mã hoá phải
đủ phức tạp để khơng thể tính được khố khi
biết bản mã và bản rõ.
Trên thực tế, người ta thường sử dụng kỹ
thuật hash để mã hoá mật khẩu. Hash là một kỹ
thuật mã hố một chiều, nó biến mỗi mật khẩu
thành một dãy bít duy nhất có chiều dài cố định
(gọi là mã hash) và không thể biến ngược lại.
Nhờ vậy quản trị hệ thống cũng không thể biết
được mật khẩu của những người dùng khác.
Khi người dùng đăng nhập, mã hash mật khẩu
họ nhập vào sẽ được so sánh với mã hash mật
khẩu đã lưu trong file. Mã hash mật khẩu
thường được kí hiệu là H(pass), trong đó pass
là mật khẩu, cịn H là hàm hash.

khẩu có trong danh sách, số lượng mật khẩu có
trong file, và độ phức tạp của thuật toán hash.
b) Giải pháp sử dụng Salt
Để chống lại kỹ thuật tấn cơng nói trên cần
phải có một giải pháp khiến cho q trình đó

tiêu tốn một lượng thời gian khổng lồ, vượt
quá khả năng xử lí của kẻ tấn cơng và máy
tính của anh ta. Giải pháp đó như sau:
Trước khi cất mật khẩu vào file, người ta
sẽ ghép vào mỗi mật khẩu đó một số ngẫu
nhiên dài n bít, gọi là salt. Số ngẫu nhiên này
sẽ thay đổi mỗi khi người dùng thay đổi mật
khẩu. Salt được cất trong file chứa mật khẩu
mà không cần mã hố nên bất cứ ai cũng có
thể đọc được. Mật khẩu ghép với salt sẽ được
mã hoá bằng hàm hash, rồi mới cất vào file.
Khi đó định dạng file sẽ như sau:
Tên đăng nhập
Binhpt
Thaont
Phuongnh
Trangtt


3.3. Các nguy cơ và giải pháp
a) Nguy cơ
Mặc dù không dịch ngược được mã hash,
nhưng nếu kẻ tấn công lấy được file chứa mật
khẩu (đã mã hố), anh ta vẫn có thể dị được
mật khẩu ban đầu bằng cách sau đây:
- Đầu tiên anh ta sẽ chuẩn bị một danh
sách chứa các mật khẩu có thể gặp phải. Đó
là những cụm từ thường gặp trong cuộc sống
hàng ngày như tên người, năm sinh, địa danh,
các từ có trong từ điển, các dãy số, dãy kí tự

đơn giản… Đa số người dùng có thói quen
lựa chọn mật khẩu bằng những cụm từ như
vậy. (Một số nghiên cứu cho thấy có tới 86%
mật khẩu thường dùng xuất hiện trong các
danh sách loại này [1]).
- Tiếp theo anh ta sẽ mã hoá các mật khẩu
trong danh sách bằng thuật toán hash, rồi lần
lượt so sánh chúng với các mật khẩu đã mã
hoá trong file chứa mật khẩu của hệ thống. Khi
tìm được một cặp giống nhau, anh ta sẽ biết
mật khẩu ban đầu là gì, và tất nhiên sẽ biết cả
tên đăng nhập cùng các thông tin khác của
người dùng đó. Q trình nói trên có thể tốn
nhiều thời gian, tuỳ thuộc vào số lượng mật

Salt
9753
1328
3097
4129


Mã hash
H(pass||9753)
H(pass||1328)
H(pass||3097)
H(pass||4129)


Mỗi bản ghi của file sẽ ứng với một người

dùng. Trường đầu tiên là tên đăng nhập,
trường thứ hai chứa số ngẫu nhiên salt, còn
trường thứ ba là mã hash của mật khẩu + salt.
Lúc này, để dò mật khẩu, kẻ tấn công sẽ
phải ghép thêm vào mỗi mật khẩu trong danh
sách đã chuẩn bị những con số có chiều dài n
bít, sau đó mới mã hố chuỗi vừa ghép. Có
tới 2n số như vậy, tức là một mật khẩu ban
đầu sẽ lần lượt được ghép với 2n số khác
nhau. Ví dụ mật khẩu ban đầu là “pass” thì
sẽ sinh thêm 2n mật khẩu khác có dạng
“pass0000”, “pass0001”, “pass0002”…
Nói cách khác, kích thước danh sách mà kẻ
tấn công chuẩn bị sẽ tăng lên 2n lần. Điều đó
sẽ làm tăng chi phí thời gian chuẩn bị, thời
gian tính tốn mã hash và so sánh.
c) Sử dụng thuật toán hash chậm
Trong các lĩnh vực chứng thực, chữ kí số…
người ta thường sử dụng các thuật toán hash
SHA, Whirlpool, MD5… Chúng được sử dụng
rộng rãi vì có tốc độ thực hiện khá nhanh. Tuy
nhiên trong lĩnh vực bảo mật mật khẩu thì
“nhanh” lại là một nhược điểm, vì nó giúp kẻ
tấn cơng tiết kiệm được thời gian, trong khi ta

184


Tuyển tập Hội nghị Khoa học thường niên năm 2019. ISBN: 978-604-82-2981-8


đang muốn họ phải tốn càng nhiều thời gian
càng tốt. Trường hợp 160 triệu tài khoản Zing
bị lộ do dùng hash MD5 là một ví dụ điển
hình. Trên thực tế, người ta thường sử dụng
một số thuật toán hash chậm để mã hoá mật
khẩu như Bcrypt, PBKDF2, Scrypt…
d) Sử dụng thêm Pepper
Kẻ tấn cơng có thể dị tìm mật khẩu vì anh
ta biết thuật tốn hash, rồi dùng nó để mã hoá
các mật khẩu trong danh sách mà anh ta đã
chuẩn bị. Có một kỹ thuật tương tự như hash,
nhưng địi hỏi phải sử dụng một mật khố K
thì mới triển khai được thuật tốn - đó là
HMAC [2]. Có thể dùng HMAC để mã hố
mật khẩu và salt: HMAC(pass||satl, K). Lúc
này kẻ tấn cơng khơng thể mã hố được danh
sách đã chuẩn bị sẵn vì khơng biết khố K,
tức là khơng có cách nào dị ra mật khẩu của
người dùng. Khố K đó được gọi là pepper,
nó cần được bảo vệ cẩn thận và phải được
lưu trữ ở một nơi an tồn. Có thể dùng chung
một pepper cho tất cả các mật khẩu.
Một giải pháp khác để sử dụng pepper là
ghép mật khẩu với salt và pepper, rồi mã hố
bằng hàm hash: H(pass||satl||pepper). Khi đó
kẻ tấn cơng khơng thể chuẩn bị được danh
sách dữ liệu vì khơng biết pepper.
3.4. Một số giải pháp kết hợp
a) Kết hợp hash chậm với hash nhanh
Việc sử dụng thuật toán hash chậm có thể

dẫn tới một nguy cơ khác: Kẻ tấn cơng có thể
đăng nhập vào hệ thống với một mật khẩu
cực dài, và do thuật toán hash thi hành rất
chậm nên hệ thống phải tốn rất nhiều thời
gian để kiểm tra đăng nhập. Kết quả là hệ
thống có thể bị quá tải và khơng cịn thời gian
để thực hiện các cơng việc khác. Đây là một
hình thức tấn cơng DoS (Denial of Service),
mục đích là làm q tải server chứ khơng
phải là đột nhập hệ thống .
Để ngăn chặn hình thức tấn cơng này ta có
thể sử dụng một phương pháp hash nhanh (ví
dụ SHA) tác động lên mật khẩu nhằm thu
ngắn độ dài mật khẩu, sau đó mới áp dụng
hash chậm: H(SHA(pass)||salt). Do tốc độ
của SHA nhanh nên server sẽ khơng bị ảnh
hưởng nhiều, đầu ra của nó là một chuỗi
khơng q 512 bít nên cũng khơng tốn q
nhiều thời gian khi tiến hành hash lần hai.

b) Kết hợp hash với mật mã đối xứng.
Việc sử dụng HMAC với khoá pepper giúp
nâng cao độ an toàn trong bảo mật mật khẩu.
Tuy nhiên giải pháp này không cho phép thay
đổi pepper, nên nếu vì một lý do nào đó mà
pepper bị lộ thì sẽ khơng có biện pháp khắc
phục (Một khi đã áp dụng HMAC để mã hoá
mật khẩu và salt thì khơng thể khơi phục dữ
liệu về trạng thái ban đầu, do đó khơng thể
đổi được pepper).

Một giải pháp cho vấn đề này là thực hiện
mã hoá mật khẩu và salt bằng hash chậm
trước, sau đó đem kết quả thu được mã hố
bằng mật mã đối xứng (ví dụ AES) với khoá
là pepper: AES(H(pass||satl), pepper). Hiệu
quả thu được tương tự như dùng HMAC,
nhưng quản trị hệ thống có thể thay thế
pepper bất cứ khi nào.
4. KẾT LUẬN

Có rất nhiều giải pháp kỹ thuật khác nhau
để bảo mật mật khẩu, nhưng nhìn chung đều
dựa trên các nguyên tắc cơ bản sau:
- Mã hố mật khẩu bằng hàm một chiều
(để khơng thể dịch ngược lại). Nên dùng hàm
hash chậm để chống tấn cơng dị mật khẩu.
- Sử dụng salt để tăng khối lượng tính tốn
và tiêu tốn thời gian của kẻ tấn cơng.
- Dùng thêm pepper để tăng khả năng bảo mật.
Ngồi ra cịn có thể kết hợp nhiều giải
pháp khác nhau, tuỳ thuộc vào nhu cầu thực
tế và nền tảng từng hệ thống.
Người dùng cũng có thể tham gia vào q
trình bảo mật mật khẩu bằng cách đặt mật
khẩu đủ dài, có chứa nhiều loại kí tự khác
nhau (như chữ hoa, chữ thường, số, kí tự đặc
biệt), sử dụng các mật khẩu khó đốn, khơng
dùng những cụm từ có trong từ điển, tên
người, địa danh, ngày sinh… Nếu tuân thủ
đầy đủ những nguyên tắc trên thì danh sách

dữ liệu mà kẻ tấn cơng sử dụng sẽ trở nên vơ
dụng (vì danh sách đó thường chứa những dữ
liệu quen thuộc có sẵn).
5. TÀI LIỆU THAM KHẢO
[1] Andrew S. Tanenbaum, 2001, Modern
Operating Systems, Prentice Hall.
[2] William Stallings, 2006, Cryptography and
Network Security, Prentice Hall.

185



×