Trong các hệ thống an ninh, thuật toán băm thƣờng đƣợc sử dụng và giữ một vai trò quan trọng trong các hệ thống mật mã. Một hàm băm H ánh xạ xâu dữ liệu có độ dài hữu hạn tùy ý thành một xâu khác đƣợc gọi là mã băm có độ dài cố định n, chiều dài cố định n phụ thuộc vào hàm băm H. Mã băm của một thông điệp đƣợc băm bởi hàm H có đặc điểm là khi thay đổi, dù chỉ là 1 bit dữ liệu đầu vào, thì mã băm bị thay đổi hoàn toàn mà không tuân theo một quy luật logic nào, so với mã băm trƣớc khi bị thay đổi.
Một hàm băm H có những đặc điểm sau:
Có thể áp dụng với thông báo M có độ dài bất kỳ.
Tạo ra giá trị băm có độ dài cố định.
H(M) có thể đƣợc tính dễ dàng với bất cứ thông báo M nào.
Từ mã băm h rất khó tìm lại đƣợc thông điệp M thỏa mã H(M)=h. Đây là
tính một chiều của hàm băm.
Từ thông báo M1, rất khó để tìm đƣợc thông điệp M2 thỏa mãn
H(M1)=H(M2). Tức hàm băm có tính chống xung đột yếu.
Rất khó để tìm đƣợc 2 thông điệp ( M1, M2 ) thỏa mãn H(M1)=H(M2). Tức hàm băm có tính chống xung đột mạnh.
Hiện nay có rất nhiều loại hàm băm khác nhau nhƣ MD5, SHA-1, SHA-256, SHA-512. Độ an toàn của hàm băm phụ thuộc vào loại hàm băm, cũng nhƣ chiều dài kết quả băm.
Ví dụ: Xét hàm băm SHA-256 SHA(“”)= e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 SHA(“mobile”)=d524c1a0811da49592f841085cc0063eb62b3001252a94542795d1ca9824a941 SHA(“mobilz”) = “0617a2dd1e4d7c1e00b15bf723c6a77baa7c2a74e1bbb8a97b817ba5a870cbb3” SHA(“mobil”)=”403b42efc1997638d33da8f5282c7579d00a885c3e7bd0193fd2d26fd7ef72e0” 1.4. Xác thực và các các mô hình xác thực
Xác thực là quá trình nhằm xác nhận định danh của một thực thể truyền thống, cũng nhƣng các thông tin quan trọng đi kèm khác nhƣ tên, mật khẩu, và một số
thông tin khác. Thực thể cần xác thực ở đây có thể là ngƣời sử dụng cuối, thiết bị di động, máy tính, ứng dụng, một dịch vụ, hoặc một hệ thống.
Quá trình xác thực bao gồm 2 bên: Bên cần xác thực (claimant) và bên xác thực (verifier). Bên cần xác thực sẽ khai báo định danh và các thông tin để bên xác thực có thể xác thực lại định danh đó. Khái niệm “xác thực” ( authentication) là một khái niệm đặc biệt, nó có ý nghĩa khác hẳn với khái niệm “định danh” (identification) – Là việc xác định danh tính của thực thể đang giao tiếp – Khái niệm xác thực cũng khác với khái niệm “quyền truy cập” ( authorization) - là việc xác định quyền truy cập dữ liệu và tài nguyên của một thực thể đã đƣợc “xác thực” (authentication)
Ta cần phân biệt 2 khái niệm xác thực, là xác thực thực thể (entity authentication) và xác thực thông điệp (message authentication). Xác thực thực thể là quá trình xác thực danh tính của một thực thể, xem liệu thực thể đang đƣợc xác thực có đúng với danh tính của nó, ví dụ là xác thực ngƣời dùng đăng nhập vào hệ thống, và đó là một quá trình thời gian thực. Ngƣợc lại xác thực thông điệp là một quá trình không là quá trình thời gian thực, nó đảm bảo việc thông điệp đƣợc xác thực không bị thay đổi và thông điệp đó đƣợc gửi bởi một thực thể đã xác định danh tính.
Trong xã hội thông tin ngày nay, việc xác thực thông báo trở thành một vấn đề quan trọng trên nhiều lĩnh vực, đặc biệt là lĩnh vực kinh doanh và lĩnh vực quân sự. Đã có rất nhiều phƣơng pháp, nhiều công nghệ đƣợc phát minh cung cấp nhiều kỹ thuật, nhiều dịch vụ xác thực an toàn và tiện lợi. Tuy nhiên, có thể phân loại kỹ thuật xác thực thành 3 nhóm:
Xác thực dựa trên mã hóa thông điệp: Là kỹ thuật sử dụng phƣơng pháp
mã hóa để mã hóa toàn bộ thông điệp, sau đó làm căn cứ để xác thực.
Xác thực mật mã kiểm tra : Sử dụng 1 hàm tổng kiểm tra công khai, với
1 khóa bí mật sẽ đƣợc mã hóa thành 1 xâu giá trị có độ dài cố định, làm căn cứ xác thực.
Xác thực dựa trên hàm băm: Sử dụng các hàm băm một chiều, mã hóa
thông điệp có độ dài bất kỳ thành xâu có độ dài cố định, làm căn cứ xác thực.
Nhƣ đã nêu ở trên, xác thực thực thể là một quá trình thời gian thực, các giao thức xác thực thực thể (entity authentication protocol) phải đảm bảo đƣợc những tiêu chí sau:
Không có một bên thứ ba nào có thể giả mạo đƣợc.
Bên xác thực không thể tái sử dụng đƣợc các thông tin xác thực cũ của
thực thể cần xác thực để cung cấp khả năng giả mạo cho một bên thứ ba.
Thông báo đƣợc ký không thể đƣợc khôi phục lại từ mã của chữ ký trong
suốt quá trình xác thực.
Trong phần này, ta sẽ xét lần lƣợt các các mô hình xác thực và các đặc điểm của các mô hình đó.
1.4.1. Mô hình xác thực yếu
Mô hình xác thực yếu là một mô hình xác thực, nhƣng nó không cung cấp một giải pháp xác thực hiệu quả và đầy đủ về tổng thể. Có hai loại hình xác thực yếu rất đƣợc quan tâm bởi đó là các phƣơng pháp xác thực tự nhiên và rất phổ biến hiện này, đó là mô hình xác thực dựa trên mật khẩu (Password-based Authentication) và mô hình xác thực dựa trên mã cá nhân (PIN-based Authentication)
1.4.1.1. Xác thực dựa trên mật khẩu
Xác thực dựa trên mật khẩu là phƣơng pháp xác thực ngƣời dùng phổ biến nhất hiện nay. Hệ xác thực dựa trên mật khẩu đƣợc xây dựng trên mô hình chia sẻ mật khẩu giữa ngƣời sử dụng và hệ thống, hệ thống sẽ lƣu các bản ghi chứa mật khẩu chia sẻ của ngƣời dùng, mật khẩu này sẽ đƣợc ngƣời sử dụng dùng để cung cấp cùng với tên định danh khi đăng nhập trong bƣớc xác thực.
Các hệ xác thực dựa trên mật khẩu thƣờng đƣợc phân biệt bởi phƣơng thức lƣu trữ mật khẩu trong hệ thống. Ở các hệ thống thế hệ trƣớc, mật khẩu thƣờng đƣợc lƣu dƣới dạng bản rõ (plaintext) trên hệ thống file hoặc trong một cơ sở dữ liệu. Việc lƣu nhƣ vậy khá nguy hiểm, bởi ai có thẩm quyền truy cập hệ thống (Quản trị viên, hoặc hacker khi chiếm đƣợc quyền kiểm soát) đều có thể lấy cắp đƣợc mật khẩu và thông tin của ngƣời dùng. Để khắc phục nhƣợc điểm này, các hệ thống ngày nay thƣờng lƣu mật khẩu dƣới dạng mã băm sử dụng hàm băm 1 chiều (Ví dụ là MD5, SHA-256) của mật khẩu ngƣời dùng. Theo đó, khi ngƣời dùng nhập mật khẩu đăng nhập, mật khẩu đó sẽ đƣợc băm thành mã băm, sau đó hệ thống sẽ so sánh mã băm đó với mã băm mật khẩu đƣợc lƣu trong hệ thống. Biện pháp này đảm bảo rằng mật khẩu nguyên gốc của ngƣời dùng không bị lộ, ngay cả khi ngƣời quản trị hay hacker xem đƣợc bản chứa mật khẩu đƣợc lƣu trong hệ thống.
Mô hình xác thực dựa trên mật khẩu hiện nay đã bộc lộ một số yếu điểm về an ninh. Kẻ tấn công có nhiều phƣơng pháp chiếm quyền kiểm soát của ngƣời sử dụng bằng cách đánh cắp mật khẩu. Phƣơng pháp đơn giản nhất là kẻ tấn công sẽ sử dụng
phƣơng pháp nghe lén đƣờng truyền, nếu mật khẩu không đƣợc mã hóa trên đƣờng truyền, kẻ tấn công có thể dễ dàng lấy đƣợc mật khẩu của ngƣời sử dụng. Nếu mật khẩu đã đƣợc mã hóa trên đƣờng truyền, kẻ tấn công có phƣơng pháp khác là sử dụng tấn công bằng từ điển (Dictionary attack – Là cách tấn công sử dụng 1 từ điển các mật khẩu thƣờng đƣợc sử dụng – Hoặc sử dụng phƣơng pháp tấn công ngày sinh (Birthday attack) [31] để tìm ra điểm xung đột của thuật toán băm.
Tuy nhiên, có một kỹ thuật để cải tiến nâng cao độ an toàn trong hệ thống xác thực dựa trên mật khẩu, đó là sử dụng mật khẩu một lần (One time password). Nguyên lý của hệ mật khẩu một lần là mỗi mật khẩu đƣợc chỉ có hiệu lực 1 lần, trong một khoảng thời gian nhất định. Mật khẩu một lần đảm bảo việc cho dù kẻ tấn công có lấy đƣợc mật khẩu trên đƣờng truyền, thì kẻ đó cũng không sử dụng lại mật khẩu đó. Mật khẩu một lần đƣợc hệ thống sinh ra theo một thuật toán ngẫu nhiên, hoặc giả ngẫu nhiên, có kích thƣớc cố định và đƣợc thông báo lại cho ngƣời sử dụng bằng một kênh truyền thông nào đó nhƣ qua tin nhắn di động, qua internet, hoặc qua các thiết bị chuyên dụng. , ví dụ nhƣ thiết bị Secure ID của hãng bảo mật RSA, hay OTP token của hãng VeriSign.
1.4.1.2. Xác thực dựa trên mã định danh cá nhân (PIN-based Authentication) Authentication)
Mô hình xác thực dựa trên mã định danh cá nhân sử dụng các thiết bị vật lý để lƣu trữ mã định danh cá nhân nhƣ thẻ SmartCard, hay USB Token. Mỗi ngƣời sử dụng đƣợc cấp một mã cá nhân (PIN) có chiều dài từ 4-10 chữ số, mã cá nhân đƣợc bảo vệ trong thiết bị vật lý bằng mật khẩu tự đặt của ngƣời sử dụng. Khi đăng nhập vào hệ thống, ở bƣớc xác thực, ngƣời dùng phải cắm thiết bị vào máy tính để nhập mã PIN, thông thƣờng khi đó thiết bị sẽ yêu cầu ngƣời sử dụng nhập mật khẩu để có thể kích hoạt mã PIN đƣợc lƣu trong thiết bị. Để đảm bảo mã PIN của ngƣời sử dụng đƣợc an toàn ngay cả trong trƣờng hợp ngƣời sử dụng bị mất, thiết bị token sẽ khóa hoặc tự hủy nếu kẻ tấn công nhập sai mật khẩu sử dụng trong một số lần liên tiếp (Thƣờng là 3 lần hoặc 5 lần).
1.4.2. Mô hình xác thực mạnh
Thông thƣờng, mô hình xác thực mạnh thƣờng sử dụng các giao thức xác thực dựa trên việc hỏi và trả lời (Challenge-Response), các giao thức đó có thể đƣợc mô tả nhƣ sau: Một ngƣời sử dụng khi muốn truy cập vào một dịch vụ hay một hệ thống, anh ta phải chứng minh đƣợc danh tính của mình với hệ thống bằng những
Comment [u9]: William Stalling (2005) “Cryptography and Network Security”, Prentice Hall Publisher, pp 338
những kiến thức của anh ta về một thông tin bí mật, có liên quan tới anh ta và chỉ anh ta mới có thể tạo ra câu trả lời chính xác mà không cần tiết lộ thông tin bí mật
đó cho bên xác thực. Ta gọi chung các giao thức xác thực đó là giaothức hỏi trả lời
(challenge-Response Protocol )
Các giao thức xác thực thƣờng đƣợc xây dựng trên hệ mã hóa chia sẻ khóa, hoặc hệ mã hóa khóa công khai, hoặc các kỹ thuật zero-knowledge – là kỹ thuật đƣợc sử dụng để chứng minh danh tính dựa trên thông tin bí mật của chủ thể mà không cần tiết lộ bí mật đó của chủ thể - Giao thức xác thực thƣờng sử dụng các tham số thời gian, hoặc kỹ thuật đánh số thông điệp để nhận biết thông điệp nào là thông điệp mới, thông điệp nào là thông điệp đã đƣợc gửi rồi, để tránh tấn công lặp lại, kỹ thuật này đƣợc gọi là kỹ thuật đóng dấu thời gian. Kỹ thuật đóng dấu thời gian đƣợc thực hiện nhƣ sau: Khi 1 thông điệp đƣợc gửi từ bên gửi, bên gửi sẽ chèn 1 con dấu thời gian (timestamp) đi kèm thông điệp và nó đƣợc mã hóa cùng thông điệp. Khi bên nhận nhận đƣợc thông điệp, bên nhận sẽ giải mã thông điệp và sẽ thu
đƣợc con dấu thời gian đó, bên nhận sẽ tính toán độ lệch thời gian so thời điểm
nhận, tính theo đồng hồ của máy nhận. Nếu độ lệch thời gian nằm trong một giới hạn cho phép thì thông điệp đó là hợp lệ qua bƣớc kiểm chứng con dấu thời gian. Khi thực thi phƣơng pháp này, cần chú ý tính đồng bộ của đồng hồ bên gửi và đồng hồ bên nhận.
Các hệ xác thực mạnh đƣợc xây dựng theo 3 loại sau: Giao thức xác thực trên hệ mật mã , giao thức xác thực lời dựa trên các kỹ thuật zero-knowledge, và xác thực dựa trên thiết bị hỗ trợ
1.4.2.1. Giao thức xác thực dựa trên hệ mật mã
Là các giao thức sử dụng các hệ mã hóa để bảo mật và xác thực, có hai hệ mã hóa tƣơng ứng với 2 hệ giao thức xác thực đó là: Giao thức xác thực dựa trên mật mã đối xứng (Hay mật mã khóa chung), và giao thức xác thực dựa trên mật mã khóa công khai.
a. Giao thức xác thực dựa trên mật mã khóa đối xứng
Với giao thức xác thực sử dụng mật mã khóa đối xứng, các bƣớc đƣợc thực hiện có thể đƣợc mô tả nhƣ sau: Xét một phiên xác thực giữa ngƣời dùng A và hệ thống B sử dụng giao thức xác thực mật mã khóa đối xứng, do sử dụng mật mã
khóa đối xứng, nên A và B cùng thống nhất sử dụng khóa chung k và hệ mã hóa Ek.
Để bắt đầu phiên, bên A sẽ gửi yêu cầu xác thực sang bên B
Bên B sẽ sinh ra 1 số ngẫu nhiên r, sau đó dùng hàm mã hóa với khóa
phục vụ cho việc định danh hoặc chống tấn công lặp lại, tức B sẽ gửi lại cho A thông điệp Ek(r || m) (Ký hiệu || là ký hiệu nối giữa các thông điệp nhỏ trong 1 thông điệp tổng)
Bên A nhận đƣợc thông điệp Ek(r || m) từ bên B gửi, do A và B cùng chia
sẻ 1 khóa chung k, nên chỉ có A mới có thể giải mã thông điệp B gửi để nhận đƣợc số ngẫu nhiên r và thông điệp tùy chọn m. Sau đó bên A sẽ gửi lại cho bên B một thông điệp có chứa số ngẫu nhiên r kèm 1 thông
điệp tùy chọn m’ đƣợc mã hóa bởi hàm mã tức thông điệp Ek(r || m’)
Bên B nhận lại thông điệp bên A gửi, bên B sẽ giải mã thông điệp và nhận lại số ngẫu nhiên r, B sẽ so sánh số r nhận đƣợc với số r trƣớc đó B đã gửi cho A. Nếu trùng nhau thì A đƣợc xác thực và ngƣợc lại.
Trong trƣờng hợp A cũng cần xác thực lại B, ở bƣớc yêu cầu xác thực A sẽ gửi định danh của A (IDA) cho B, B sẽ gửi kèm lại số ngẫu nhiên r và IDA trong
đƣợc mã hóa bởi Ek. Ta có thể tóm tắt lại quá trình xác thực nhƣ sau:
(1)A → B : IDA
(2)B → A : Ek( IDA || r || m) (3)A → B : Ek(r || m’)
Chú ý thông điệp m và m’ là các thông điệp tùy chọn đƣợc B và A sinh ra nhằm phục vụ các mục đích khác nhƣ chống tấn công lặp lại.
b. Giao thức xác thực dựa trên mật mã công khai
Giao thức xác thực dựa trên mật mã công khai cũng tƣơng tự nhƣ giao thức dựa trên mật khẩu khóa đối xứng, chỉ khác ở điểm là hệ mật mã sử dụng là mật mã công khai. Nguyên lý chung của giao thức vẫn là bên B sẽ gửi cho bên A một số ngẫu nhiên r, nhƣng thay vì sử dụng mật mã khóa đối xứng, B sẽ mã hóa số r và thông điệp tùy chọn m bằng khóa công khai của A, và gửi cho A. A nhận đƣợc sẽ giải mã bằng khóa bí mật, rồi gửi lại cho B số r và thông điệp m’, sử dụng khóa công khai của B. B sẽ dùng khóa bí mật của B để lấy ra số r, so sánh với số ngẫu nhiên B đã gửi cho A, nếu trùng thì A đƣợc xác thực và ngƣợc lại.
Nếu A và B cần xác thực nhau, ta áp dụng kỹ thuật tƣơng tự với trƣờng hợp xác thực khóa đối xứng, ta có quá trình xác thực nhƣ sau:
(1)A → B : IDA
(3)A → B : E(PUB, r || m’)
1.4.2.2. Giao thức xác thực dựa trên kỹ thuật zero-knowledge
Nhƣ đã đề cập ở phần trên, các phƣơng pháp xác thực thƣờng bên cần xác thực phải công bố hoặc tiết lộ một phần hoặc những thông tin liên quan tới những bí mật của họ để đƣợc xác thực. Sẽ rất nguy hiểm nếu bên xác thực có ý đồ xấu muốn khôi phục lại những thông tin bí mật của ngƣời cần xác thực dựa trên những thông tin bên cần xác thực cung cấp cho ở những phiên xác thực trƣớc. Ví dụ với giao thức xác thực dùng mật mã khóa đối xứng, bên A sẽ bị tổn thƣơng nếu bên B cố tình tiết lộ khóa chia sẻ của A và B cho một bên thứ ba khác. Kỹ thuật xác thực zero-knowledge đƣợc đề xuất cho phép ngƣời cần xác thực vẫn có thể xác thực