Trao đổi với tôi

http://www.buidao.com

12/10/09

[Security] Authentication

Cốc cốc cốc
Ai gọi đó
Tôi là thỏ
Nếu là thỏ
Cho xem tai
Cốc cốc cốc
Ai gọi đó
Tôi là nai
Nếu là nai
Cho xem gạc
Cốc cốc cốc
Ai gọi đó
Tôi là gió
Nếu là gió
Xin mời vào

Bạn có đang nhớ về tuổi thơ của mình như tôi? Ừh, nhớ thật đó. Nhưng mà tôi vô cái blog này không phải để đọc đồng dao, đây là blog bảo mật thông tin kia mà? Ấy bạn đừng nóng, nào hãy cùng ngồi xuống với tôi, uống một ngụm trà (và vài con nghêu hấp xã chẹp chẹp) rồi ta cùng đi vào chủ đề chính nào.


Bạn thấy tiêu đề của bài viết này không? Authentication, tạm dịch là xác thực. Authentication là chữ A đầu tiên trong bộ tứ Authentication, Authorization, Availability và Authenticity như bốn trụ chống trời nâng đỡ thế giới bảo mật. Hôm nay chúng ta sẽ bàn về chữ A đầu tiên, nghĩa là đi tìm câu trả lời (hay tìm cách hỏi) cho câu hỏi: bạn có phải là người mà bạn tự nhận không?


Bạn và tôi mỗi ngày đều xác thực ít nhất vài lần, có khi là chúng ta xác thực người khác, có khi người khác xác thực chúng ta. Ví dụ như khi bạn đi gửi xe chẳng hạn, người ta sẽ cho bạn một mẩu giấy, mà thuật ngữ gọi là token, trên đó thường có ghi thông tin về chiếc xe của bạn (biển số chẳng hạn). Mẫu giấy này chính là một thứ gì đó mà bạn sở hữu (something you have) giúp bạn chứng minh với người giữ xe rằng: bạn chính là người chủ của chiếc xe. Chỉ có những người có mẩu giấy đó mới được phép lấy chiếc xe của bạn ra ngoài. Nhiệm vụ của bạn là phải giữ nó an toàn, mất là rất phiền toái đấy nhé.
Một ví dụ khác chính là bài đồng dao ở trên. Nếu bạn là thỏ ư, chắc hẳn tai bạn phải dài lắm, cho tôi xem đi nào rồi tôi mới tin. Ở đây, tôi xác thực bằng một đặc điểm trên cơ thể của bạn (something you are). Dấu vân tay, võng mạc hay giọng nói là những đặc điểm thường được sử dụng. Còn có một cách xác thực khác khá phổ biến, đó là dựa trên những điều mà bạn biết (something you know). Bạn đang chat trên Yahoo! Messenger? Thế làm sao bạn đăng nhập vào đó được? Bạn phải biết mật khẩu, chính mật khẩu là thông tin giúp Yahoo! xác thực bạn là chủ nhân của tài khoản đang đăng nhập. Tất cả những ai biết mật khẩu đều có thể đăng nhập vào tài khoản của bạn.


Ngoài ra còn một cách xác thực nữa là dựa vào sự tin tưởng (something you trust). Cách xác thực này thường được áp dụng trong các trường hợp những cá nhân đơn lẻ có nhu cầu xác thực danh tính lẫn nhau. Khi đó họ sẽ dựa vào một bên thứ ba mà cả hai cùng tin tưởng để làm trung gian. Ví dụ như người ta tin tưởng vào thông tin trong chứng minh thư của bạn không phải vì họ tin tưởng bạn mà vì họ tin tưởng vào tổ chức cấp chứng minh thư đó cho bạn, ở đây là cơ quan công an. Cũng có trường hợp họ áp dụng tính bắt cầu trong niềm tin để xác thực. Ví dụ như anh A tin chị B, chị B tin anh C, nên anh A sẽ tin anh C (vì anh A tin rằng chị B đã xác thực danh tính anh C trước đó rồi).


Cách xác thực bằng mật khẩu là cách thông dụng nhất vì tính đơn giản và dễ triển khai của nó. Tuy nhiên, qua thời gian cách này bộc lộ nhiều điểm yếu mà dễ thấy nhất là: mật khẩu rất dễ bị đánh cắp. Sự thực là bất kì thứ gì lưu trữ trên máy tính đều rất dễ bị đánh cắp. Nhưng tôi đâu có lưu mật khẩu trên máy tính đâu? Tôi nhớ chúng trong não và chỉ khi nào cần thiết tôi mới gõ chúng ra kia mà? Bạn có lưu đấy. Có thể bạn không lưu xuống ổ cứng nhưng khi bạn gõ ra nghĩa là bạn đang lưu mật khẩu của mình vào RAM. Và chỉ trong tích tắc, mật khẩu "tối mật" của bạn sẽ được chuyển đến tay một kẻ khác! Nhưng bạn an tâm, đã có rất nhiều giải pháp cho vấn đề này, trọn vẹn hay không trọn vẹn.


Tôi có mở tài khoản ở một ngân hàng, chủ yếu để nhận tiền lương từ công ty mà tôi làm chuyển vào. Tôi thường rút tiền thông qua máy ATM. Làm thế nào tôi chứng minh cho ngân hàng biết tôi là chủ tài khoản? Tôi phải trình ra được thẻ ATM của mình (something you have) và nhập vào đúng số PIN gắn với thẻ ATM đó (something you know). Rõ ràng cách làm này an toàn hơn việc chỉ sử dụng mật khẩu. Muốn đánh cắp tiền của tôi, kẻ trộm phải vừa chôm được thẻ ATM, vừa biết được mã PIN của tôi. Nói cách khác hắn phải chôm được hai yếu tố mới xác thực được.


Đây chính là ý tưởng chủ đạo của việc nâng câo tính an toàn khi xác thực: kết hợp nhiều yếu tố khác nhau (multi-factor authentication), mà thông dụng nhất là xác thực hai yếu tố (two-factor authentication) và xác thực ba yếu tố (three-factor authentication). Người ta sẽ gộp 4 yếu tố ở trên (thông thường là 3 yếu tố đầu), để tạo ra các tổ hợp yếu tố dùng để xác thực. Thông dụng nhất là sự kết hợp giữa something you know và something you have như cách làm của thẻ ATM. Dĩ nhiên bạn hoàn toàn có thể làm n-factor authentication với n > 3 nhưng lúc đó hệ thống của bạn sẽ chẳng có người nào sử dụng cả bởi vì nó quá bất tiện. Bảo mật bao giờ cũng phải là sự cân bằng giữa an toàn và tiện dụng. Vả lại, không có gì là an toàn tuyệt đối. Two-factor hay n-factor đi chăng nữa cũng chỉ giúp bạn giảm xác suất bị tấn công xuống một mức nào đó, nhưng không bao giờ là zero.
-mrro