1.3.4. Thuật toán băm
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 hồn tồn mà khơng tn 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à q 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 q trình khơng là q 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 tồ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 số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 tố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à giao thứ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 tố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ó q trình xác thực như sau:
(1) A → B : IDA
(2) B → A : E(PUA, IDA || r || m)
(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