CÁC VẤN ĐỀ VỀ XÁC THỰC

Một phần của tài liệu Giáo trình bảo mật thông tin (Trang 100)

Mơ hình xác thực tổng quát đƣợc mơ tả bằng hình vẽ sau:

Hình 8.1 Xác thực thơng điệp

Trong mơ hình này, giả sử Alice gửi một thơng điệp xác thực cho Bob thì ngồi thơng điệp M, Alice cần gửi thêm một giá trị xác thực Auth

(authentication) kèm theo để xác thực. Giá trị Auth đƣợc tính nhƣ sau: Giữa Alice và Bob đã chia sẻ với nhau trƣớc một giá trị bí mật k. Auth đƣợc tính theo cơng thức: Auth = A(k, M), trong đĩ A là một hàm số đƣợc

đến cho Bob. Để xác thực thơng điệp, Bob sẽ tính giá trị xác thực mới AuthB = A(k, M), sau đĩ Bob sẽ so sánh giá trị này với Auth để đối chứng. Nếu Auth = AuthB thì cĩ thể khẳng định thơng điệp khơng bị thay đổi trên đƣờng truyền và thơng điệp đƣợc gửi từ Alice. Lý do ở đây là hai giá trị Auth và AuthB đều đƣợc tạo nên bởi hàm A và giá trị k. Giá trị k chỉ cĩ Alice và Bob biết nên kẻ gian khơng thể tính đƣợc các giá trị tƣơng ứng nếu khơng cĩ chúng. Hơn nữa, nếu thơng điệp M bị thay đổi trên đƣờng truyền thì giá trị AuthB tính đƣợc sẽ khơng cịn giống nhƣ Auth nữa. Tuy nhiên, hệ thống này cĩ thể bị tấn cơng bằng cách thay đồng thời M  M‟ và Auth 

Auth‟ sao cho A(k, M‟) = Auth‟. Hàm cơng khai A cần phải đƣợc thiết kế để tránh tấn cơng dạng này. Trong nhiều trƣờng hợp, ngƣời ta hay sử dụng một hàm băm thay cho hàm A và khơng sử dụng giá trị bí mật k.

Vấn đề xác thực cần đƣợc đặt ra cùng với yêu cầu xác thực cao hay thấp của dữ liệu. Ngƣời ta thƣờng sử dụng các cơ chế xác thực thơng điệp sau:

̶ Mã hĩa thơng điệp (Message encryption): Bản thân việc mã hố đã cĩ

sử dụng khố mã hố và đĩ chính là thơng tin dùng để xác thực

̶ Mã xác thực thơng điệp (Message Authentication Code – MAC): Sử dụng hàm cơng khai của thơng điệp và khĩa bí mật tạo ra một giá trị cĩ độ dài cố định cho phép xác thực thơng điệp.

̶ Hàm băm (Hash function): Sử dụng hàm băm cơng khai biến đổi thơng điệp ban đầu độ dài tùy ý thành một chuỗi bit cĩ độ dài cố định (giá trị băm) và dùng nĩ để xác thực thơng điệp ban đầu.

8.1.1. Xác thực thơng điệp bằng mã hố

Trƣờng hợp mã hĩa đối xứng sử dụng khĩa phiên mà chỉ cĩ ngƣời gửi và ngƣời nhận biết, thơng điệp cũng đã đƣợc xác thực. Lý do là ở đây chỉ cĩ ngƣời gửi và ngƣời nhận mới cĩ khố bí mật và mới cĩ khả năng tạo ra thơng điệp. Mọi sự can thiệp đều làm thay đổi thơng điệp và cĩ thể đƣợc phát hiện trong quá trình giải mã thơng điệp. Tuy nhiên, ở đây khơng thể tạo ra đƣợc tính khơng chối cãi (non-repudiation) do khơng thể xác nhận đƣợc chính xác ngƣời tạo ra thơng điệp.

Mơ hình sẽ bảo đảm đƣợc tính bí mật vì chỉ cĩ A và B cĩ khĩa K dùng để giải thơng điệp mã. Mơ hình trên cũng bảo đảm đƣợc tính xác thực vì khi B giải mã và đọc đƣợc nội dung thơng điệp thì B cĩ thể khẳng định chỉ cĩ thể là A mã hố, vì ngồi B chỉ A cĩ khố mật mã. Tuy nhiên, cần cĩ quy ƣớc bổ sung (ví dụ nhƣ thơng điệp nguồn M là văn bản cĩ nghĩa để B cĩ thể biết đƣợc là mình đã giải mã đúng).

Hình 8.2 Xác thực bằng mật mã đối xứng

Trƣờng hợp mật mã bất đối xứng (mật mã khố cơng khai) sẽ xảy ra hai trƣờng hợp: (1) ngƣời gửi dùng khố cơng khai của ngƣời nhận mã hố thơng điệp; ngƣời nhận dùng khố cá nhân của mình để giải mã (mã hố xuơi), (2) ngƣời gửi dùng khố cá nhân của mình mã hố thơng điệp và ngƣời nhận sẽ dùng khố cơng khai của ngƣời gửi để giải mã (mã hố nghịch). Trƣờng hợp đầu ta cĩ:

Hình 8.3 Xác thực bằng mật mã khố cơng khai (thuận)

Mơ hình trên sẽ bảo đảm đƣợc tính bí mật vì chỉ B cĩ khĩa KRB dùng để giải thơng điệp mã đƣợc mã hố bằng khố KUB. Mơ hình trên khơng bảo đảm đƣợc tính xác thực bởi vì khơng chỉ A mà mọi ngƣời khác cũng cĩ khố KUB để tạo ra thơng điệp mã.

Trƣờng hợp mã hố nghịch:

Hình 8.4 Xác thực bằng mật mã khố cơng khai (nghịch)

hố bằng khố KRA. Mơ hình trên bảo đảm đƣợc tính xác thực vì khi B dùng khố KUA giải mã và đọc đƣợc nội dung thơng điệp thì B cĩ thể khẳng

định chủ nhân thơng điệp chính là A vì chỉ A mới cĩ khố KRA để mã hố

thơng điệp. Tuy nhiên, cũng giống nhƣ trên, cần cĩ quy ƣớc bổ sung để B cĩ thể biết đƣợc là mình đã giải mã đúng (ví dụ nhƣ thơng điệp nguồn M là văn bản cĩ nghĩa).

Trong thực tế, ngƣời ta sử dụng kết hợp mã hố xuơi và nghịch để bảo đảm cả tính bí mật lẫn tính xác thực thơng điệp:

Hình 8.5 Mơ hình kép của mật mã khố cơng khai

Mơ hình kép nhƣ trên sẽ bảo đảm đƣợc cả tính bí mật lẫn tính xác thực thơng điệp. Tuy nhiên, quá trình mã hố và giải mã phải thực hiện nhiều lần bằng mật mã khố cơng khai nên sẽ rất chậm. Do vậy, mơ hình này thƣờng dùng để mã hố những dữ liệu bé nhƣ các loại khố mật mã, giá trị băm,…

8.1.2. Mã xác thực thơng điệp

Mã xác thực thơng điệp (MAC) là một chuỗi bit đƣợc gửi kèm với thơng điệp. Chuỗi bit này đƣợc tạo ra bởi một hàm của thơng điệp và khĩa bí mật, chỉ cĩ ngƣời gửi và ngƣời nhận biết. Độ dài thơng điệp cĩ thể tùy ý, cịn MAC thƣờng cĩ độ dài cố định (ví dụ 128 bit).

Để tạo ra MAC, ngƣời ta cĩ thể sử dụng hàm băm (hash function) thu gọn thơng điệp đến kích thƣớc cần thiết và dùng giá trị băm này kiểm sốt tính tồn vẹn của thơng điệp. Các hàm băm khơng sử dụng giá trị bí mật chia sẻ giữa ngƣời gửi và ngƣời nhận nên cĩ ứng dụng rộng rãi hơn.

Nhƣ vậy, mã xác thực thơng điệp chính là một kỹ thuật sử dụng khĩa bí mật để tạo ra một khối bit độ dài cố định, gọi là checksum hoặc MAC, sau đĩ, khối này đƣợc ghép vào thơng điệp để gửi cho ngƣời nhận nhằm xác thực thơng điệp đính kèm.

Giả sử A và B cĩ chung một khĩa bí mật K. Khi A cần gửi thơng điệp xác thực M cho B, A tính: MAC = CK(M), với CK là hàm cơng khai sử dụng khố K. Sau đĩ, MAC đƣợc gửi kèm với thơng điệp M cho B.

B nhận đƣợc MAC và thơng điệp M‟. B tính MAC‟ = CK(M‟); và so sánh, nếu MAC = MAC‟ thì B cĩ thể khẳng định M = M‟, tức là M đã khơng bị thay đổi trên đƣờng truyền và A là ngƣời gửi thơng điệp M (Ở đây ta giả sử chỉ cĩ A và B biết khĩa K). Mơ hình đơn giản sử dụng mã xác thực thơng điệp đƣợc minh hoạ nhƣ sau:

Hình 8.6 Mã xác thực thơng điệp

Trong trƣờng hợp trên, nội dung của thơng điệp M đƣợc truyền dƣới dạng plaintext nên cĩ thể bị kẻ gian đọc đƣợc. Để bảo đảm tính bí mật cho thơng điệp, ta cĩ thể thực hiện việc mã hố tồn bộ giá trị thơng điệp đính kèm với MAC bằng một khố bí mật dùng chung giữa ngƣời gửi và ngƣời nhận. Điều đĩ đƣợc minh hoạ trong hình dƣới đây:

Hình 8.7 Mã xác thực và thơng điệp được giữ bí mật

Trong mơ hình trên cĩ hai khố bí mật chia sẻ giữa A và B đã đƣợc sử dụng: Khố K1 dùng để tạo mã xác thực thơng điệp, cịn khố K2 dùng để giữ bí mật thơng điệp và mã xác thực thơng điệp đính kèm.

8.1.3. Xác thực bằng hàm băm

Nhƣ đã trình bày ở trên, hàm băm là trƣờng hợp đặc biệt của mã xác thực thơng điệp MAC. Hàm băm là hàm một chiều, đƣợc cơng bố cơng khai, sử dụng để “nén” một thơng điệp M từ độ dài tùy ý thành giá trị cĩ độ dài cố định. Hàm băm đƣợc ký hiệu là H(M). Giá trị H(M) đƣợc gọi là bản tĩm tắt (message digest) hoặc giá trị băm (hash value) của thơng điệp M. Khác với mã xác thực thơng điệp MAC, hàm băm H(M) khơng sử dụng

khĩa. Hàm băm H(M) phụ thuộc vào tất cả các bit của M, cĩ khả năng kiểm tra tính tồn vẹn của M. Độ dài của giá trị băm phải đủ lớn để chịu đƣợc các tấn cơng. Thơng thƣờng, độ dài của giá trị băm 64 bit đƣợc coi là quá nhỏ và giá trị khoảng 128 - 512 bit đƣợc coi là thích hợp. Mơ hình xác thực đơn giản sử dụng hàm băm nhƣ sau:

Hình 8.8 Xác thực thơng điệp bằng hàm băm

Trong mơ hình trên, thơng điệp M đƣợc băm thành một giá trị H(M) và giá trị này đƣợc gắn kèm với thơng điệp M; tất cả đƣợc mã hố bởi khố bí mật K và đƣợc gửi cho ngƣời nhận B. Sau khi nhận đƣợc thơng điệp, B giải mã thơng điệp bằng khố K. Từ đĩ, B tách ra thơng điệp M, băm nĩ thành giá trị H và so sánh với giá trị H(M) đƣợc đính kèm trong thơng điệp nhận đƣợc. Nếu hai giá trị này bằng nhau thì thơng điệp đƣợc xác định là tồn vẹn và đồng thời chủ nhân của nĩ đƣợc xác thực. Một biến thể quan trọng của việc sử dụng hàm băm trong xác thực thơng điệp là sử dụng quy trình mật mã khố cơng khai nhƣ minh hoạ trong sơ đồ sau:

Hình 8.9 Xác thực bằng hàm băm kết hợp mật mã khố cơng khai

Trong mơ hình trên, giá trị băm H(M) đƣợc mã hố bằng khố cá nhân của ngƣời gửi và sau đĩ gắn kèm với thơng điệp M và đƣợc gửi cho ngƣời nhận B. Sau khi nhận đƣợc thơng điệp, B tách ra thơng điệp M và giá trị EKRA(H(M). B băm phần thứ nhất thành giá trị H(M); phần thứ giải B giải mã bằng khố KUA. Tiếp theo, B so sánh hai kết quả tính đƣợc. Nếu chúng bằng nhau thì thơng điệp đƣợc xác định là tồn vẹn và đồng thời chủ nhân

của nĩ cũng đƣợc xác thực. Đây cũng là mơ hình chữ ký số đơn giản mà ta sẽ xem xét kỹ hơn ở phần sau.

8.2. HÀM BĂM

Ở phần trên ta đã xem xét việc xác thực thơng điệp cĩ sử dụng hàm băm. Vậy hàm băm là gì? Chúng cĩ những đặc tính hay yêu cầu gì trong sử dụng? Trên thực tế chúng đƣợc sử dụng ra sao? Sau đây, chúng ta sẽ xem xét chi tiết hơn về các hàm băm.

Nhƣ đã nĩi ở trên, hàm băm là một hàm biến đổi thơng điệp cho trƣớc từ độ dài tuỳ ý thành độ dài cố định và dùng để xác thực thơng điệp. Hàm băm H cần nĩ cĩ đƣợc các tính chất sau:

1. Đầu vào hàm băm cĩ thể cĩ độ dài tùy ý cịn đầu ra cĩ độ dài cố định 2. Hàm băm H cần đƣợc tính trong tồn thể khối thơng điệp

3. Tính H(x) tƣơng đối dễ

4. Hàm băm H là hàm 1 chiều (one-way): tính H-1(x) rất khĩ 5. Hàm băm H là khơng xung đột (collision-free), gọi là:

- khơng xung đột yếu nếu với thơng điệp x cho trƣớc rất khĩ tìm đƣợc thơng điệp y  x sao cho: H(y) = H(x)

- khơng xung đột mạnh nếu rất khĩ tìm đƣợc cặp hai thơng điệp nào đĩ x  y sao cho: H(x) = H(y)

Các yêu cầu 1-4 là các yêu cầu tối thiểu cho một hàm băm, yêu cầu 5 là để đánh giá một hàm băm là mạnh hay yếu. Trên thực tế, khơng gian của các giá trị băm là hữu hạn (ví dụ hàm băm cho độ dài 128 bit thì khơng gian các giá trị băm khác nhau cĩ độ lớn là: 2128), cịn số lƣợng các thơng điệp khác nhau là vơ hạn, do đĩ luơn tìm đƣợc hai thơng điệp khác nhau cĩ cùng giá trị băm. Vấn đề ở đây là việc tìm ra những thơng điệp cĩ cùng giá trị băm cĩ dễ dàng hay khơng. Khi độ dài của giá trị băm tăng lên thì cơ hội tìm đƣợc thơng điệp cĩ cùng giá trị băm với thơng điệp cho trƣớc càng nhỏ. Tuy nhiên, việc tăng độ dài giá trị băm cũng làm tăng thời gian tính tốn và , hơn nữa, nếu chỉ tăng độ dài giá trị băm một cách cơ học thì cũng khơng tăng đƣợc độ an tồn lên bao nhiêu (do việc này cĩ thể khơng ảnh hƣởng nhiều tới quy trình để tìm ra các giá trị xung đột). Sau đây là ví dụ một hàm băm đơn giản:

Hình 8.10 Hàm băm đơn giản n-bit

Thơng điệp đầu vào đƣợc chia thành các khối n-bit để tạo ra giá trị băm n-bit: M = block1 || block 2 || … || block m. Các bit trong từng khối sẽ đƣợc XOR với nhau để cĩ n bit của giá trị băm:

Ci = bi1 bi2 …  bim

Trong đĩ:

Ci : bit thứ i của giá trị băm, 1 ≤ i ≤ n m : số các khối n-bit của đầu vào bij : bit thứ i của khối thứ j

Rõ ràng là hàm băm này thoả các yêu cầu tối thiểu 1-4 cho một hàm băm: 1/ Hàm băm này biến đổi thơng điệp cĩ độ dài tuỳ ý thành chuỗi bit cĩ độ dài cố định là n; 2/ Khi thay đổi một bit bất kỳ của hàm băm thì sẽ ảnh hƣởng ngay đến giá trị băm; 3/ Quy trình tính H là dễ và rõ ràng; 4/ Từ giá trị băm khĩ cĩ thể khơi phục đƣợc chính xác thơng điệp ban đầu. Tuy nhiên, hàm băm đơn giản này khơng thoả tính chất 5: khơng xung đột. Ta rất dễ dàng tìm đƣợc hai thơng điệp khác nhau cĩ cùng giá trị băm. Ví dụ trong thơng điệp ban đầu, ta chỉ cần hốn vị đi hai block khác nhau của nĩ là nhận đƣợc một thơng điệp mới mà giá trị băm của nĩ vẫn khơng thay đổi.

Cấu trúc phổ biến của một hàm băm cĩ dạng:

Ở đây: IV - Initial Value là giá trị khởi tạo, f - function là hàm biến đổi, CVi - Chaining Variable là các biến trung gian, L là số khối đầu vào, Yi

là các khối đầu vào, b là độ dài khối đầu vào, và n là độ dài của giá trị băm. Trong quá trình băm cần phải xử lý thơng điệp: khối cuối cùng sẽ đƣợc bổ sung giá trị độ dài thơng điệp và đƣợc bổ sung các bit 0 cho thành bội của b. Để tránh xung đột, cần chọn giá trị b > n. Quá trình biến đổi nhƣ sau:

Thơng điệp M = Y0 || Y1 || … || YL-1

CV0 = IV = giá trị khởi tạo n-bit CVi = f(CVi-1, Yi-1) với 1  i  L

H(M) = CVL

Những năm trƣớc đây, hàm băm MD5 - Message-Digest Algorithm (Ronald Rivest, 1992) đƣợc sử dụng khá rộng rãi. Hàm băm này cho độ dài 128 bit. Đến năm 1996, ngƣời ta đã phát hiện ra những lỗi nhỏ của thuật tốn. Từ sau năm 2004, các lỗi về xung đột ngày càng lộ ra nhiều và sau đĩ, năm 2008, US-CERT đã khuyến cáo khơng nên sử dụng MD5 nữa.

Tại thời điểm hiện nay, các hàm băm sử dụng phổ biến là SHA (Secure Hash Algorithm). SHA đƣợc NIST phát triển và đƣợc coi là chuẩn từ năm 1993 (FIPS 180). Sau đĩ năm 1995, SHA đƣợc cải tiến thành SHA-1 (FIPS 180-1). SHA-1 cho giá trị băm cĩ độ dài 160 bit. Vào năm 2002, NIST phát triển thành SHA-2 (FIPS 180-2) cĩ thể cho các độ dài giá trị băm là 256, 384 hay 512 bit, cĩ ký hiệu tƣơng ứng là SHA-256, SHA-384 và SHA-512. Sau đĩ NIST cũng đã bổ sung thêm SHA-224 (FIPS 180-3).

Các hàm băm SHA-1 và SHA-2 cĩ thể coi nhƣ chƣa bị bẻ khố (vì chƣa cĩ ai chỉ đƣợc quá trình tạo xung đột trong thời gian ít hơn thời gian vét cạn) nhƣng các hàm băm này cĩ cấu trúc và các phép tính tốn học giống nhƣ MD5 - là hàm băm đã bị bẻ khố. Do đĩ, cĩ thể dự đốn việc các hàm băm SHA-1 và SHA-2 bị bẻ khố sẽ xảy ra trong thời gian khơng xa.

NIST quyết định bắt đầu quá trình phát triển chuẩn cho các hàm băm

Một phần của tài liệu Giáo trình bảo mật thông tin (Trang 100)