Đồ án Bảo Mật Thông Tin - Thuật toán băm và thuật toán MAC

Người thực hiện: Võ Công Tâm Nguyễn Quang Kỳ Nội dung chính: Trong chương này ta sẽ tìm hiểu các thuật toán băm an toàn (SHA- Secure Hash Algorithm ) và các thông điệp xác thực (MAC- Message Authentication Codes )  Hàm Hash :  Nén mẩu tin vê kích thước cố định  Bằng cách xử lý mẩu tin theo từng khối  Theo một hàm nén nào đó  Sử dụng mã khối hoặc tuỳ chọn  Mã xác thực mẩu tin (MAC)  Phần xác thực mẩu tin có kích thước cố định  Để cung cấp tính xác thực cho mẫu tin  Bằng cách sử dụng mã khối với chế độ móc nối hoặc hàm Hash Các thuật toán băm an toàn được đề cập: SHA-512 Whirlpool Các thông điệp xác thực được đề cập: HMAC CMAC

docx32 trang | Chia sẻ: lvcdongnoi | Lượt xem: 3759 | Lượt tải: 3download
Bạn đang xem trước 20 trang tài liệu Đồ án Bảo Mật Thông Tin - Thuật toán băm và thuật toán MAC, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Đồ án Bảo Mật Thông Tin Người thực hiện: Võ Công Tâm Nguyễn Quang Kỳ Giáo viên hướng dẫn: thầy Đặng Trường Sơn Nội dung chính: Trong chương này ta sẽ tìm hiểu các thuật toán băm an toàn (SHA- Secure Hash Algorithm ) và các thông điệp xác thực (MAC- Message Authentication Codes ) Hàm Hash : Nén mẩu tin vê kích thước cố định Bằng cách xử lý mẩu tin theo từng khối Theo một hàm nén nào đó Sử dụng mã khối hoặc tuỳ chọn Mã xác thực mẩu tin (MAC) Phần xác thực mẩu tin có kích thước cố định Để cung cấp tính xác thực cho mẫu tin Bằng cách sử dụng mã khối với chế độ móc nối hoặc hàm Hash Các thuật toán băm an toàn được đề cập: SHA-512 Whirlpool Các thông điệp xác thực được đề cập: HMAC CMAC Chương 12: Thuật toán băm và thuật toán MAC Nội dung 12.1 Thuật toán băm an toàn SHA-512 Logic SHA-512 Round Function 12.2 Whirlpool Whirlpool Hash Structure Block Cipher W Performance of Whirlpool 12.3 HMAC HMAC Design Objectives HMAC Algorithm Security of HMAC 12.4 CMAC 12.5 Recommended Reading and Web Sites 12.6 Key Terms, Review Questions, and Problems Key Terms Review Questions Problems Những điểm chính: ● Hầu như tất cả các thuật toán băm an toàn có cấu trúc tổng quát thể hiện trong hình11,9. ● Các hàm nén được sử dụng trong các thuật toán băm an toàn rơi vào một trong hai loại: một hàm đặc biệt thiết kế cho các hàm băm hoặc một khối mã đối xứng. SHA và Whirlpool là những ví dụ của hai phương pháp tiếp cận, tương ứng. ● Thông điệp mã xác thực cũng rơi vào hai loại, dựa vào việc sử dụng của một thuật toán băm an toàn và dựa trên việc sử dụng một khối mã đối xứng. HMAC và CMAC là những ví dụ của hai phương pháp tiếp cận, tương ứng. Trong chương này, chúng ta nhìn vào ví dụ quan trọng của cả hai thuật toán băm an toàn và mã xác thực thông điệp (MAC). Hầu hết các hàm băm quan trọng  hiện đại theo cấu trúc cơ bản của hình 11,9. Điều này đã chứng tỏ là một cấu trúc âm thanh cơ bản và các thiết kế mới hơn chỉ cần tinh chỉnh cấu trúc và thêm vào độ dài mã băm. Trong cấu trúc cơ bản này, hai cách tiếp cận đã được theo sau trong việc thiết kế các hàm nén, là khối xây dựng cơ bản của hàm băm.Theo truyền thống, hầu hết các hàm băm đó đã được sử dụng rộng rãi dựa vào hàm nén đặc biệt thiết kế cho các hàm băm . Thông thường, hàm nén này sử dụng các modun số học và phép tính nhị phân logich. Một phương pháp khác là sử dụng một mã khối đối xứng như hàm nén. Trong chương này, chúng tôi kiểm tra có lẽ là ví dụ quan trọng nhất của mỗi phương pháp tiếp cận: các Thuật toán băm an toàn (SHA) và Whirlpool. MAC cũng thuận tiện chia thành hai loại dựa trên khối xây dựng cơ bản của chúng. Một cách tiếp cận phổ biến là sử dụng một thuật toán băm như SHA như là cốt lõi của thuật toán MAC. Một phương pháp khác là sử dụng một mã khối đối xứng trong phương thức khối mã trung gian. Một lần nữa, chúng ta nhìn vào ví dụ này có lẽ quan trọng nhất của  từng phương pháp tiếp cận: HMAC và CMAC. 12.1. Thuật toán băm an toàn: Các Secure Hash Algorithm (SHA) được phát triển bởi Viện Tiêu chuẩn và Công nghệ(NIST) và được xuất bản như là một tiêu chuẩn xử lý thông tin liên bang (FIPS 180) năm 1993, một phiên bản sửa đổi đã được ban hành như FIPS 180-1 vào năm 1995 và thường gọi là SHA-1. Các tài liệu tiêu chuẩn thực tế được đặt tên Thuật toán băm an toàn. SHA dựa trên hàm băm MD4 và thiết kế các mô hình chặt chẽ MD4. SHA-1cũng được quy định trong RFC 3174, mà thực chất là các bản sao các tài liệu trongFIPS 180-1, nhưng thêm một đoạn mã C thực hiện. SHA-1 tạo ra một giá trị băm 160 bit. Năm 2002, NIST sản xuất một phiên bản sửa đổitiêu chuẩn, FIPS 180-2, đã xác định ba phiên bản mới SHA, với độ dài giá trị băm 256,384, và 512 bit, được gọi là SHA-256, SHA-384 và SHA -512 (Bảng 12.1). Những phiên bản này mới có cùng một cấu trúc cơ bản và sử dụng cùng loại modun số học và phép tính nhị phân logich như SHA-1. Năm 2005, NIST công bố ý định ngưng phê duyệt SHA-1 và tin cậy vào các phiên bản SHA khác vào năm 2010. Ngay sau đó, một nhóm nghiên cứu đã mô tả một cuộc tấn công, trong đó hai thông điệp riêng biệt có thể được nhận thấy rằng thực hiện cùng một thuật SHA-1 bằng cách sử dụng 269 phép tính, ít hơn 280 phép tính như trước đây cần thiết để tìm thấy một dụng độ với một thuật toán băm SHA-1 [WANG05 ]. Kết quả này sẽ đẩy nhanh quá trình chuyển đổi đến các phiên bản khác của SHA. Bảng 12.1. So sánh thông số SHA SHA-1 SHA-256 SHA-384 SHA-512 Tóm tắt thông điệp 160 256 384 512 Độ dài thông điệp <264 <264 <2128 <2128 Độ dài khối 512 512 1024 1024 Độ dài WORD 32 32 64 64 Số bước 80 64 80 80 Độ an toàn 80 128 192 256 Ghi chú: 1. Tất cả kích thước được đo bằng bit. 2. Độ an toàn đề cập đến thực tế là một cuộc tấn công ngày sinh nhật vào tóm tắt thông điệp kích thước n tạo ra một đụng độ với chi phí khoảng 2n/2 SHA-512 Logic Thuật toán có đầu vào một thông điệp với một chiều dài tối đa nhỏ hơn 2128 bit và tạo ra tóm tắt thông điệp 512-bit. Đầu vào được xử lý trong khối 1024-bit.Hình 12.1 mô tả tổng thể xử lý của một thông điệp để tạo ra tóm tắt. Hình 12.1.Sự sinh ra tóm tắt thông điệp sử dụng SHA-512 Điều này tuân theo cấu trúc tổng quát mô tả trong hình 11,9. Xử lý bao gồm các bước sau: Bước 1: Nối bit đệm. Thông điệp này được đệm để chiều dài của nó là đồng dư với 896 modulo 1024 [chiều dài ≡ 896 (mod 1024)]. Đệm là luôn luôn thêm, ngay cả khi thông điệp  đã được chiều dài mong muốn. Như vậy, số lượng các bit đệm nằm trong khoảngtừ 1 đến 1024. Đệm bao gồm một bit đơn 1- tiếp theo là số cần thiết của bit 0-. Bước 2: Nối chiều dài. Một khối 128 bit được nối vào thông điệp. Khối này được coi là một số nguyên không dấu 128-bit (byte đầu tiên quan trọng nhất) và chứa độ dài của thông điệp ban đầu (trước khi đệm). Kết quả của hai bước đầu tiên mang lại một thông điệp là bội số nguyên của 1024 bit chiều dài. Trong hình 12,1, thông điệp mở rộng được biểu diễn như chuỗi khối 1024-bit M1, M2,..., MN, sao cho tổng chiều dài của thông điệp mở rộng là N x 1024 bit. Bước 3: Khởi tạo băm đệm. Một bộ đệm 512-bit được sử dụng để giữ kết quả trung gian và kết quả của hàm băm. Đệm này có thể được biểu diễn như là tám thanh ghi 64-bit (a, b, c, d, đ, e, g, h). Những thanh ghi được khởi tạo với các số nguyên 64-bit sau đây (giá trị ở hệ thập lục phân): a = 6A09E667F3BCC908 b = BB67AE8584CAA73B c = 3C6EF372FE94F82B c = A54FF53A5F1D36F1 e = 510E527FADE682D1 f = 9B05688C2B3E6C1F g = 1F83D9ABFB41BD6B h = 5BE0CDI9137E2179 Những giá trị này được lưu trữ ở định dạng big- endian, byte có trọng số lớn nhất trong word nằm ở địa chỉ thấp nhất (ngoài cùng bên trái). Những word này thu được bằng cách lấy 64-bit của phần thập phân của căn bậc hai của tám mươi số nguyên tố đầu tiên. Bước 4: Xử lý thông điệp trong các khối 1024-bit (128 word). Trái tim của thuật toán là một module bao gồm 80 vòng; module này được gắn nhãn F trong hình 12.1. Logic được minh họa trong hình 12.2. Hình 12.2. SHA-512 Xử lý một khối đơn 1024-Bit Mỗi vòng lấy giá trị đầu vào 512-bit đệm abcdefgh, và cập nhật nội dung của bộ đệm. Tại đầu vào vòng đầu tiên, bộ đệm có giá trị của các giá trị băm trung gian, Hi-1 . Mỗi vòng t sử dụng giá trị 64-bit Wt bắt nguồn từ khối 1024-bit hiện tại đang được xử lý (Mi). Những giá trị này được bắt nguồn bằng cách sử dụng một lịch trình thông điệp mô tả sau đó. Mỗi vòng cũng sử dụng một hằng số Kt phụ trong đó 0≤t≤79 cho biết một trong số 80 vòng. Những Word này biểu diễn 64-bit đầu tiên của phần thập phân của căn bậc ba 80 số nguyên tố đầu tiên. Các hằng số cung cấp một "ngẫu nhiên" tập các mẫu 64-bit, cần loại bỏ bất kỳ qui luật trong các dữ liệu đầu vào. Kết quả của vòng tám mươi được cộng vào đầu vào vòng đầu tiên (Hi-1) để tạo ra Hi. Việc cộng thêm được thực hiện độc lập cho mỗi tám word trong bộ đệm với nhau của các word tương ứng trong Hi-1 sử dụng modulo cộng 264. Bước 5: Kết quả. Sau khi tất cả N khối 1024-bit đã được xử lý, kết quả từ giai đoạn thứ N là thông điệp tóm tắt 512-bit. Chúng ta có thể tóm tắt các hoạt động của SHA-512 như sau: Trong đó: IV = giá trị ban đầu của bộ đệm abcd, được xác định trong bước 3 abcdefghi = kết quả của vòng xử lý cuối của khối thông điệp thứ i N = số lượng các khối trong thông điệp (bao gồm cả các vùng đệm và chiều dài) SUM64 = modulo cộng 264 thực hiện một cách riêng biệt trên mỗi word của các cặp đầu vào MD = giá trị tóm tắt thông điệp cuối cùng SHA-512 Hàm Vòng Chúng ta hãy xem xét chi tiết hơn tại logic trong mỗi của 80 bước của quy trình xử lý một khối 512-bit (Hình 12.3). Mỗi vòng được định nghĩa bởi các tập phương trình sau: Trong đó: t = số bước (0≤t≤79) ch(e,f,g) = (e AND f) (NOT e AND g) hàm có điều kiện If e then f else g Maj(a,b,c) = = (a AND b) (a AND c) (b AND c) hàm true chỉ khi phần lớn (2 hoặc 3) đối số là true Trong đó: ROTRn(x) = chỉ thị dịch phải (phép quay) của đối số x 64-bit n bit Wt = một word 64 bit bắt nguồn từ khối đầu vào hiện tại 512-bit Kt = một biến phụ 64-bit + = modulo cộng 264 Hình 12.3.  Hoạt động cơ bản của SHA 512 (một vòng) Nó vẫn còn để chỉ ra làm thế nào các giá trị word 64-bit Wt được bắt nguồn từ thông điệp 1024-bit. Hình 12.4 minh họa cho bản đồ. 16 giá trị đầu tiên của Wt được lấy trực tiếp từ trong 16 word của khối hiện hành. Các giá trị còn lại được quy định như sau: Trong đó: ROTRn(x) = chỉ thị dịch phải (phép quay) của đối số x 64-bit n bit SHRn(x) = dịch trái đối số 64-bit x n bit với đệm 0 về bên phải Hình 12.4. Sự tạo thành dãy 80 word đầu vào cho xử lý khối đơn giải thuật SHA-512 Như vậy,trong 16 bước xử lý đầu tiên giá trị của Wt bằng word tương ứng trong khối thông điệp. Đối với 64 bước còn lại, giá trị của Wt bao gồm chỉ thị dịch trái 1 bit của phép XOR bốn giá trị trước đó của Wtvới 2 trong số các gí trị đó tùy vào phép dịch và quay.Điều này mở đầu cho rất nhiều sự thừa thãi và phụ thuộc vào khối thông điệp được nén, làm phức tạp nhiệm vụ của việc tìm kiếm một khối thông điệp khác nhau mà vạch ra với cùng hàm nén đầu ra. 12.2. Whirlpool Trong phần này, chúng ta khảo sát hàm băm Whirlpool, một trong những người thiết kế cũng là đồng tác giả sáng chế của Rijndael, được thông qua là Advanced Encryption Standard (AES). Whirlpool là một trong hai hàm băm xác nhận bởi NESSIE (New châu Âu theo hệ thống các chữ ký, Integrity, và Mật mã). Các dự án NESSIE là một Liên minh châu Âu tài trợ nỗ lực để đưa ra một danh mục các nguyên thủy mạnh mật mã các loại. Whirlpool dựa trên việc sử dụng một thuật toán mã hóa khối cho hàm nén. Như đã đề cập trong chương 11, có truyền thống ít được quan tâm trong việc sử dụng các hàm băm dựa trên  mật mã khối vì những lỗ hổng bảo mật thể hiện của cấu trúc. Sau đây là những hạn chế tiềm năng: Khối mật mã không có các tính chất của hàm ngẫu nhiên. Ví dụ, họ khả nghịch. Điều nàythiếu tính ngẫu nhiên có thể dẫn đến những điểm yếu có thể khai thác. Khối mật mã thường thể hiện qui luật khác hoặc các điểm yếu. Ví dụ, cho thấy làm thế nào để thỏa hiệp nhiều chương trình băm dựa trên thuộc tính của các mã khối cơ bản. Thông thường, các hàm băm dựa trên mật mã khối chậm hơn so với hàm băm dựa trên hàm nén đặc biệt thiết kế cho các hàm băm. Một đánh giá chủ yếu về sức mạnh của một hàm băm là chiều dài của mã băm theo bit.Đối với mã băm dựa trên thuật toán mã hóa khối, thiết kế đề xuất có chiều dài mã băm không bằng chiều dài khối mã, hoặc hai lần chiều dài khối mã. Theo truyền thống, mật mã khối có chiều dài đã được hạn chế tới 64 bit (như DES, triple DES), kết quả là mã băm có vấn đề về chiều dài. Tuy nhiên, kể từ khi áp dụng AES, đã có nhiều đổi mới quan tâm đến việc phát triển một hàm băm an toàn dựa trên một mã khối mạnh mẽ thể hiện hiệu suất tốt. Whirlpool là một hàm băm dựa trên mã khối nhằm cung cấp bảo mật và hiệu suất có thể so sánh, nếu không tốt hơn, hàm băm không dựa vào mã khối, như SHA. Whirlpool có các tính năng sau đây: Độ dài mã hash là 512 bit, bằng mã băm dài nhất có sẵn với SHA. Cơ cấu tổng thể của hàm băm là một trong đó đã được thể hiện được khả năng chốngcác cuộc tấn công thông thường lên các mã băm dựa trên mật mã khối. Các mã khối cơ bản dựa trên AES và được thiết kế để cung cấp để triển khai ở cả hai phần mềm và phần cứng đó là đó là vừa nhỏ gọn vừa đạt hiệu suất tốt Thiết kế Whirlpool đặt các mục tiêu bảo mật sau: Giả sử chúng ta có kết quả băm giá trị của bất kỳ chuỗi n-bit của đầu ra Whirlpool đầy đủ. Khối lượng công việc dự kiến ​​sẽ tạo ra một đụng độ theo thứ tự 2n2 thi hành Whirlpool. Với một giá trị n-bit, các khối lượng công việc dự kiến ​​của việc tìm kiếm thông điệp đó băm giá trị đó theo thứ tự 2n thi hành Whirlpool. Với một tin nhắn và kết quả n-bit băm của nó, các khối lượng công việc dự kiến ​​sẽ tìm được một tin nhắn thứ hai với giá trị băm tương tự theo thứ tự 2n thi hành Whirlpool. Không khả thi để phát hiện mối tương quan có hệ thống giữa các tổ hợp tuyến tính bitđầu vào và sự kết hợp bất kỳ tuyến tính của các bit của kết quả băm, hoặc để dự đoánnhững gì bit của kết quả băm sẽ thay đổi giá trị khi một số bit đầu vào đảo ngược (điều này có nghĩa là đề kháng chống tuyến tính và tấn công). Các nhà thiết kế khẳng định sự tự tin của họ rằng các mục tiêu này đã được đáp ứngvới một ngưỡng an toàn đáng kể. Tuy nhiên, các mục tiêu không nhạy cảm với mộtchứng minh hình thức. Chúng ta bắt đầu với một cuộc thảo luận về cấu trúc của hàm băm tổng thể, và sau đókiểm tra mã khối được sử dụng như là khối xây dựng cơ bản. Cơ cấu Băm Whirlpool Bối cảnh Cấu trúc chung hàm băm lặp được đề xuất bởi Merkle (hình 11,9) được sử dụng trong hầu như tất cả các hàm băm an toàn. Tuy nhiên, như đã được chỉ ra, có khó khăn trong việc thiết kế một hàm băm lặp thực sự an toàn khi chức năng nén là một thuật toán mã hóa khối. Preneel biểu diễn một phân tích hệ thống về các hàm băm dựa trên mật mã khối, sử dụng mô hình mô tả trong Hình 12.5. Trong mô hình này, chiều dài mã băm bằng với chiều dài khối mã. Vấn đề an ninh bổ sung được giới thiệu và phân tích là khó khăn hơn nếu độ dài mã băm vượt quá chiều dài khối mã. Preneel nghĩ ra 64 hoán vị có thể có của mô hình cơ bản, trên cơ sở đó đầu vào phục vụ như khoá mật mã và được phục vụ như là bản nguồn và trên những gì nhập vào, nếu có, được kết hợp với bản mã để tạo ra mã bămtrung gian. Dựa trên phân tích của ông, ông kết luận rằng các quy trình, trong đó chỉ rõ được cho ăn về phía trước và kết hợp với bản mã đã được an toàn. Như một sắp xếp làm cho hàm nén khó đảo ngược. [BLAC02] xác nhận các kết quả này, nhưng chỉ ra các vấn đề an ninh của việc sử dụngmột thuật toán mã hóa khối được thiết lập như là AES: Các mã băm 128-bit giá trị thu được từ việc sử dụng AES hay quy trình khác với cùng một khối có kích thước có thểkhông đủ để bảo mật. Hình 12.5. Mô hình đơn lặp lại của hàm Hash (mã băm bằng độ dài khối) Lưu ý: hình thang cho biết đầu vào khóa mã hóa. Whirlpool Logic Với một thông điệp bao gồm một chuỗi các khối m1, m2,..., mt hàm băm Whirlpoolđược thể hiện như sau: H0 = giá trị ban đầu Hi = E(Hi-1, mi) Hi-1 mi = giá trị trung gian Ht = giá trị mã băm Về mô hình Hình 12.5, đầu vào mã hóa chính cho mỗi lần lặp là giá trị băm trung gian từlần lặp trước đó; bản nguồn là khối thông điệp hiện tại ; và giá trị trước là các phép XOR trên bit của khối thông điệp hiện tại và giá trị băm trung gian lần lặp trước đó. Thuật toán có đầu vào một thông điệp với một chiều dài tối đa nhỏ hơn 2256 bit và tạo ra đầu ra một thông điệp tóm tắt 512-bit. Đầu vào được xử lý trong khối 512-bit. Hình 12.6 mô tả các xử lý tổng thể của một thông điệp để tạo ra một tóm tắt. Điều này tuân theo cấu trúc chung mô tả trong hình 11,9. Xử lý bao gồm các bước sau: Bước 1: Thêm bit đệm. Thông điệp được đệm để chiều dài của tính bằng bit là bội lẻ 256. Đệm là luôn luôn thêm, ngay cả khi tin nhắn đã được chiều dài mong muốn. Ví dụ, nếu thông điệp này là 256x 3 = 768 bit dài, nó được đệm bằng 512 bit chiều dài 256 x 5 = 1280 bit. Như vậy, số lượng các bit đệm nằm trong khoảng từ 1 đến 512. Hình 12.6. Sự sinh ra Thông điệp tóm tắt Sử dụng Whirlpool Ghi chú:3 cổng vào đánh dấu đầu vào chủ chốt Đệm bao gồm một bit 1 tiếp theo là số cần thiết của bit 0. Bước 2: Thêm chiều dài. Một khối 256 bit được nối vào thông điệp. Khối này được coi là một số nguyên không dấu 256-bit (byte đầu tiên quan trọng nhất) và có chiều dài theo bit của thông điệp ban đầu (trước khi đệm). Kết quả của hai bước đầu tiên mang lại thông điệp là bội số của 512 bit chiều dài.Trong Hình 12.6, thông điệp mở rộng được biểu diễn như dãy của các khối 512-bit m1,m2,..., MT để tổng chiều dài của thông điệp mở rộng là tx 512 bit. Các khối được xem bên ngoài như là mảng các byte được tuần tự nhóm các bit trongkhối 8-bit. Tuy nhiên, nội bộ, các trạng thái băm Hi được xem như là một ma trận 8 x 8 /byte. Việc chuyển đổi giữa hai thứ được giải thích sau đó. Bước 3: Khởi tạo ma trận băm. Một ma trận  8 x 8 byte được sử dụng để giữ kết quả trung gian và cuối cùng của hàm băm. Các ma trận được khởi tạo bao gồm tất cả bit 0. Bước 4: Xử lý thông điệp trong khối 512 bit (64 byte). Trái tim của thuật toán là khối mã W. Khối Mã W Không giống như hầu hết tất cả các đề nghị khác cho một hàm băm dựa vào khối mã trên,Whirlpool sử dụng một khối mã được thiết kế để sử dụng trong các hàm băm và hàm đó không bao giờ được sử dụng như là một chức năng mã hóa độc lập. Lý do cho điều này là các nhà thiết kế muốn sử dụng một mã khối với sự an toàn và hiệu quả AES, nhưng với một chiều dài băm mà cung cấp khả năng bảo mật bằng SHA-512. Kết quả là các mã khối W, trong đó có một cấu trúc tương tự và sử dụng các chức năng cơ bản tương tự như AES, nhưng trong đó sử dụng một kích thước khối và kích thước một khóa là 512 bit. Bảng 12.2 so sánh AES và W. Mặc dù W cũng tương tự như AES, nó không chỉ đơn giản là một phần mở rộng. Hãy nhớ rằng các đề xuất của Rijndael để xác định một mã AES, trong đó chiều dài khối và chiều dài khóa có thể được độc lập quy định là 128, 192, hay 256 bit. Các đặc điểm kỹ thuật của AES sử dụng 3 khóa thay thế có cùng kích thước, nhưng giới hạn độ dài khối đến 128 bit. AES hoạt động trên một trạng thái 4 x 4 byte. Rijndael với độ dài 192 bit khối hoạt động trên một trạng thái 4 x 6 byte. Rijndael với độ dài 256 bit khối hoạt động trên một trạng thái 4 x 8 byte. W hoạt động trên một trạng thái8 x 8 byte. Càng nhiều đại diện trạng thái khác với hình vuông, khuếch tán càng chậm đi và càng nhiều các vòng mã cần. Đối với một chiều dài khối là 512 bit, các nhà phát triển Whirlpool có thể đã được xác định một hoạt động Rijndael trên một trạng thái 4 x 16 byte, nhưng mã sẽ cần nhiều vòng và nó hẳn đã rất chậm. Như Bảng 12.2 chỉ, W sử dụng một ma trận hàng trong khi AES sử dụng một ma trận. Không có lý do kỹ thuật để thích một trong những định hướng hang cột nào hơn, bởi vì một cách dễ dàng có thể xây dựng một mô tả tương đương của cùng một mã, chuyển đổi hàng với các cột. Bảng 12.2. So sánh Whirlpool Khối Mã W và AES W AES Kích thước khối (bit) 512 128 Kích thước khóa (bit) 512 128,192 hoặc 256 Định hướng ma trận Đầu vào là ma trận dòng Đầu vào là ma trận cột Số vòng 10 10,12 hoặc 14 Khóa mở rộng Hàm vòng W Thuật toán mở rộng chuyên dụng Đa thức GF(28) x8 + x4 + x3 + x2 + 1 (011D) x8 + x4 + x3 + x + 1 (011B) Nguồn gốc của S-Box Cấu trúc đệ quy Bội nghịch đảo trong GF (28) cộng với biến đổi phép chiếu Nguồn gốc của hằng số vòng Cổng tiếp theo của S-Box Phần tử 2i của GF(28) Lớp khuếch tán Nhân phải của ma trận vòng 8 x 8 MDS (1, 1, 4, 1, 8, 5, 2, 9) -trộn hàng Nhân trái của ma trận vòng MDS 4x4 Hoán vị Chuyển cột Chuyển dòng Cơ cấu tổng thể Hình 12,7 thể hiện cấu trúc tổng thể của W. Các thuật toán mã hóa lấy một khối 512-bit bản nguồn và khoá 512-bit làm đầu vào và sản xuất một khối 512-bit bản mã là đầu ra.Các thuật toán mã hóa liên quan đến việc sử dụng bốn hàm khác nhau, hoặc chuyển đổi: thêm khóa (AK), thay thế byte (NHNN), dịch cột (SC), và trộn hàng (MR),mà hoạt động được giải thích sau đó. W bao gồm một ứng dụng duy nhất của AK sau10 vòng có liên quan đến tất cả bốn hàm. Chúng ta có thể diễn tả chính xác hoạt động một vòng r như một hàm vòng RF đó là một thành phần của hàm: Phương trình 12-1 nơi Kr là ma trận khóa vòng cho vòng r. Các thuật toán tổng thể, với K đầu vào khóa, có thể được xác định như sau: nơi mà các vòng tròn lớn cho thấy sự lặp lại của các hàm thành phần với chỉ số r chạytừ 1 đến 10. Figure 12.7. Thuật toán mã Whirlpool W Các bản nguồn đầu vào  tới W là khối 512 bit đơn. Khối này được coi là một ma trận vuông 8 x 8 của byte, có nhãn CState. Hình minh họa 12.8 rằng thứ tự của byte trong một ma trận là bởi hàng. Vì vậy, ví dụ, trong tám byte đầu tiên của một đầu vào bản nguồn 512-bit tới thuật toán mã hóa chiếm hàng đầu tiên trong ma trận CState, tám byte thứ hai chiếm hàng thứ hai, và như vậy. Các biểu diễn của dòng byte tuyến tính là một ma trận vuông có thể được  thể hiện chính xác  là một hàm lập bản đồ m .Đối với một mảng byte tuyến tính X với các phần tử xk (0 ≤k ≤63),  ma trận A tương ứng với các yếu tố ai,j (0≤ i, j ≤7 ) chúng ta có sự tương ứng sau đây: A = m(X) ai,j = x8i + j Hình 12.8. Cơ cấu ma trận Whirlpool Tương tự như vậy, khóa 512-bit được mô tả như là một ma trận vuông KState byte.khóa này được sử dụng làm đầu vào tới hàm AK ban đầu. Khóa cũng mở rộng thànhmột bộ 10 khoá vòng, như được giải thích sau đó. Chúng ta bây giờ nhìn vào các hàmriêng lẻ mà là một phần của W. Lớp phi tuyến tính SB Hàm thay thế byte  (SB) là một bảng tra cứu đơn giản cung cấp một ánh xạ tuyến tính. W định nghĩa một ma trận 16 x 16  của các giá trị byte, được gọi là S-box (Bảng12.3), có chứa một hoán vị của tất cả 256 giá trị 8-bit có thể có. Mỗi byte riêng lẻ của CState được ánh xạ vào một byte mới theo cách sau: 4 bit tận cùng bên trái của byte được sử dụng như là một giá trị hàng và 4 bit ngoài cùng bên phải được sử dụng như là một giá trị của cột. Những giá trị hàng và cột dùng như là chỉ số vào S-box để chọn một giá trị 8-bit đầu ra duy nhất. Ví dụ, giá trị thập lục phân [3]{95} tham chiếu hàng 9, cột 5 của S-box, trong đó có giá trị {BA}. Theo đó, giá trị {95} được ánh xạ vào giá trị {BA}. hàm SB có thể được thể hiện bởi sự tương ứng sau, cho một đầu vào ma trận A và đầu ra một ma trận B: [3] Như chúng ta đã làm cho AES, một số thập lục phân được chỉ định bằng cách bao quanh nó trong dấu ngoặc nhọn khi điều này là cần thiết cho rõ ràng hơn. B = SB(A) bi,j = S[ai,j], 0 ≤ i,j ≤ 7 trong đó S [x] đề cập đến bản đồ của byte đầu vào x vào đầu ra byte S [x] bằng S-box. Bảng 12.3. Whirlpool S-Box S-box có thể được tạo ra bởi cấu trúc của hình 12.9. Nó bao gồm hai lớp phi tuyến tính,mỗi lớp chứa hai S-box 4 x 4 ngăn cách bởi một box 4 x 4 được tạo ra ngẫu nhiên . Mỗi bản đồ box có 4 - bit đầu vào thành đầu ra 4-bit. Box E được định nghĩa là E (u) = {B}u nếu {F} và E ({F}) = 0, trong đó tính toán được thực hiện trên trường hữu hạn GF (24) với đa thức tối giản f (x) = x4 + x + 1. Hình 12.9. Việc thực hiện Whirlpool S-box Hàm SB được thiết kế để đưa phi tuyến tính vào thuật toán. Điều này có nghĩa là hàmSB nên thể hiện không có mối tương quan giữa các kết hợp tuyến tính của một bit đầu vào và các kết hợp tuyến tính của một bit đầu ra. Ngoài ra, sự khác biệt giữa bộ củacác bit đầu vào không nên truyền vào sự khác biệt tương tự giữa bit đầu ra tương ứng;nói một cách khác, sự thay đổi đầu vào nhỏ nên gây ra thay đổi đầu ra lớn. Hai đặc tính giúp cho W chống lại các thuật thám mã tuyến tính và các thuật thám mã khác. Lớp hoán vị SC Lớp hoán vị (cột chuyển) gây ra một thỉ thị dịch cột xuống mỗi cột của CState trừ cột đầu tiên. Đối với cột thứ hai, một chỉ thị dịch xuống 1 byte được thực hiện; cho cột thứ ba, một chỉ thị dịch xuống 2 byte được thực hiện; và như vậy. Hàm SC có thể được thể hiện bởi sự tương ứng sau, cho một đầu vào ma trận A và đầu ra một ma trận B: B = SC(A) bi, j = a(i - j) mod 8, j 0 ≤ i, j ≤ 7 Việc chuyển đổi bằng phép dịch cột quan trọng hơn so với lần đầu tiên có thể hiển thị. Điều này là bởi CState được coi là một mảng của tám dòng 8-byte. Như vậy, về mã hóa, 8 byte đầu tiên của bản nguồn được sao chép sang hàng đầu tiên của CState, và như vậy. Một phép dịch cột di chuyển một byte riêng lẻ từ một hàng khác, đó là một khoảng cách tuyến tính của một bội số của 8 byte. Cũng lưu ý rằng sự chuyển đổi đảm bảo rằngtrong 8 byte của một hàng được trải ra tới tám hàng khác nhau. Lớp khuếch tán MR Nhớ lại từ chương 3 rằng đối với một hàm khuếch tán vật, cấu trúc thống kê của các đầu vào được xua tan tầm xa vào số liệu thống kê của đầu ra. Điều này đạt được bằng cách mỗi bit đầu vào ảnh hưởng đến giá trị của nhiều bit đầu ra, nói chung, kết quả nàytrong mỗi bit đầu ra bị ảnh hưởng nhiều bit đầu vào. Lớp khuếch tán (trộn hàng) đạt được khuếch tán trong mỗi dòng riêng. Mỗi byte của một hàng được ánh xạ thành một giá trị mới đó là một hàm của tất cả tám byte trong hàng đó. Chuyển đổi này có thể được xác định bởi phép nhân ma trận: B = AC Trong đó A là ma trận đầu vào, B là  ma trận đầu ra , và C là ma trận biến đổi: Mỗi phần tử trong các sản phẩm ma trận là tổng sản phẩm của các yếu tố của một hàngvà cột một. Trong trường hợp này, việc phép cộng riêng lẻ và phép nhân [4] được thực hiện trong GF (28) với các đa thức tối giản f (x) = x8 + x4 + x3 + x2 + 1. Như một ví dụ về các phép nhân ma trận có liên quan, các yếu tố đầu tiên của đầu ra các ma trận là [4] Như chúng ta đã làm cho AES, chúng ta sử dụng biểu tượng . để chỉ phép nhân trên trường hữu hạn GF (28) và  để cho thấy phép XOR trên bit, tương ứng với phép cộng trong GF (28) b0,0 = a0,0 (9 · a0,1) (2· a0,2) (5·a03) (8·a0,4) a0,5 (4·a0,6) a0,7 Lưu ý rằng mỗi hàng của C được xây dựng bằng một phép dịch phải chỉ thị của hàng trước đó. C được thiết kế để tối đa khoảng cách tách (MDS) ma trận. Trong lĩnh vực sửa lỗi mã, mã MDS lấy đầu vào là một chuỗi bit có độ dài cố định và tạo ra một chuỗi đầu ra mở rộng như vậy để có khoảng cách Hamming tối đa giữa các cặp chuỗi đầu ra. Với một mã MDS, thậm chí nhiều bit lỗi kết quả trong một mã mà gần với giá trị chính xác hơn là một số giá trị khác. Trong ngữ cảnh của mã khối, một ma trận chuyển đổi xây dựng bằng cách sử dụng một mã MDS cung cấp một mức độ cao của sự khuếch tán[JUNO04]. Việc sử dụng mã MDS cung cấp khuếch tán cao lần đầu tiên được đề xuấttrong [RIJM96]. C ma trận là một ma trận MDS có nhiều 1-yếu tố càng tốt (3 trong mỗi hàng). Nhìn chung, các hệ số trong C cung cấp phần cứng để thực hiện hiệu quả. Lớp thêm khóa AK Trong các lớp thêm khóa, các 512 bit của CState được XORed trên bit với 512 bit củakhóa vòng. Hàm AK có thể được thể hiện bởi sự tương ứng sau, cho vào một ma trậnA, B ra một ma trận, và một khóa vòng Ki: B = AK[Ki](A) bi, j = ai,j, Ki,j 0 ≤i,j ≤7 Khóa mở rộng cho các Khối Mã W Như trong hình 12,7, khóa mở rộng đạt được bằng cách sử dụng chính thuật toán mã hóa khối, với một hằng vòng phục vụ như là khóa vòng để mở rộng. Hằng số vòng cho vòng r (1 ≤r ≤10) là một ma trận RC [r], trong đó chỉ hàng đầu tiên là giá trị khác không, vàđược định nghĩa như sau: rc[r]0,j = S[8(r-1)+j], 0 ≤j ≤7,1 ≤r ≤10 rc[r]i,j = 0, 1 ≤i ≤7,0 ≤j ≤7,1 ≤r ≤10 Mỗi phần tử của hàng đầu tiên là một bản đồ sử dụng S-box. Như vậy, hàng đầu tiêncủa RC [1] là Sử dụng các hằng số vòng, tạo khóa mở rộng 512-bit khóa mã K vào một chuỗi các khóa vòng K0, K1,. . , K10: K0 = K Kr = RF[RC[r]](Kr-1) Trong đó RF là hàm vòng được xác định trong phương trình (12.1). Lưu ý rằng tronggiai đoạn AK của mỗi vòng, chỉ hàng đầu tiên của KState thay đổi. Hiệu suất của Whirlpool Như được nêu ra, đã có ít kinh nghiệm thực hiện với Whirlpool. Hãy nhớ rằng việc đánh giá của NIST của Rijndael xác định rằng nó thể hiện hiệu suất tốt trong cả phần cứng vàphần mềm và rằng nó rất phù hợp với yêu cầu về không gian hạn chế (thiếu bộ nhớ).Các tiêu chí này là quan trọng trong việc lựa chọn Rijndael cho AES. Vì Whirlpool sử dụng hàm xây dựng khối tương tự như AES và có cấu trúc giống nhau, chúng ta có thểmong đợi hiệu suất tương tự và đặc tính không gian. Một nghiên cứu đã được thực hiện được báo cáo trong [KITS04]. tác giả so Whirlpool với một số hàm băm an toàn khác, bao gồm tất cả các phiên bản của SHA. Các tác giảphát triển triển khai nhiều phần cứng của mỗi hàm băm và kết luận rằng, so với SHA-512, Whirlpool đòi hỏi nhiều tài nguyên phần cứng hơn nhưng thực hiện tốt hơn nhiều về mặt thông lượng. 12.3 HMAC: Trong chương 11, chúng ta đã xem qua một ví dụ về một mã xác thực thông điệp MAC ( Message Authentication Code) dựa trên khối mã hóa đối xứng (symmetric block cypher), cụ thể là Thuật toán xác thực dữ liệu ( The Data Authentication Algorithm) được định nghĩa trong FIPS PUB 113.Trong những năm gần đây, có nhiều quan tâm trong việc phát triển một MAC từ một hàm băm bằng mật mã ( a cryptographic hash function). Sự thúc đẩy cho hướng phát triển này là: Hàm băm bằng mật mã như MD5 và SHA-1 nhìn chung xử lí nhanh hơn khối mã hóa đối xứng ( symmetric block cyphers) trong phần mềm ( sotfware). Library code của hàm băm bằng mật mã có thể được mở rộng. Với sự phát triển của AES và việc có khả năng sử dụng rộng hơn của mật mã của các thuật toán mã hóa, những nhận xét này ít quan trọng, nhưng những MAC dựa trên hàm băm vẫn tiếp tục được sử dụng một cách rộng rãi. Một hàm băm như SHA không được thiết kế cho việc sử dụng như là một MAC và không thể được sử dụng trực tiếp cho mục đích này bởi vì nó không dựa vào một khóa bí mật. Có nhiều đề xuất việc sát nhập một khóa bí mật vào một thuật toán băm đã có. Thuật toán HMAC thích hợp nhất cho đề xuất này. HMAC được phát hành như là RFC 2104, và được chọn như là MAC bắt buộc để thi hành ( the mandatory-to-implement MAC) cho bảo mật IP, và được sử dụng cho những phương thức internet khác, như là SSL. HMAC cũng được phát hành như là một chuẩn NIST (FIPS 198). HMAC Design Objectives ( những mục đích thiết kế cho HMAC). RFC 2104 liệt kê những mục đích thiết kế sau cho HMAC: Sử dụng ( không cần cải tiến ) những hàm băm có sẳn. Cụ thể, những hàm băm hoạt động tốt trong phần mềm ,và những mã có khả năng mở rộng và miễn phí. Cho phép dễ dàng thay đổi những hàm băm thêm vào nếu có những hàm băm nhanh hơn hoặc bảo mật hơn được tìm ra hoặc đươc yêu cầu. Để duy trì hiệu suất ban đầu của hàm băm mà không bị một sự suy thoái đáng kể. Sử dụng và điều khiển các khóa theo một cách dễ dàng. Để có một bản phân tích mã hóa của sức mạnh của cơ chế xác thực dựa trên sự giả định hợp lý về hàm băm thêm vào. Hai tiêu chí đầu quan trọng cho một hàm HMAC có thể chấp nhận được, HMAC xem hàm băm như là một “hộp đen” . Điều này thì có hai lợi ích. Thứ nhất, việc sử dụng một hàm băm đã có có thể được sử dụng như là một modun trong việc thực thi một HMAC. Bằng cách này, kích thước mã HMAC được đóng gói lại và sẵn sàng để sử dụng mà không cần hiệu chỉnh. Thứ hai, nếu có bất kì sự mong muốn thay đổi một hàm băm trong việc thực thi một HMAC nào, chỉ cần thay thế hàm băm củ bằng một modun mới khi có một hàm băm nhanh hơn được mong muốn. Quan trọng hơn, nếu tính an toàn của hàm băm được nhúng vào bị suy giảm, thì tính an toàn của HMAC có thể được giữ lại bằng cách thay hàm băm củ bằng một hàm băm mới an toàn hơn( ví dụ: thay thế SHA bằng Whirlpool). THUẬT TOÁN HMAC: Ví dụ 12.10 chỉ ra tất cả các toán hạng (operation) trong HMAC. Được định nghĩa bên dưới: H = hàm băm được thêm vào ( ví dụ: MD5, SHA-1, RIPEMD-160,….). IV = giá trị đầu vào ban đầu của hàm băm. M = thông điệp đầu vào của hàm băm ( bao gồm cả the padding specificed trong hàm băm được thêm vào). Yi = khối thứ I của thông điệp M, 0<= I <= (L-1). L = số khối có trong M. b = số bit có trong một khối. n = chiều dài của mã băm từ hàm băm thêm vào. K = khóa bí mật được đề nghị có chiều dài >= n. Chiều dài khóa lớn hơn b . Khóa là đầu vào cho hàm băm để tạo ra khóa n bit. K+ = thêm 0 vào bên trái khóa K để có khóa K+ với chiều dài b bit. Ipad = 00110110 (36 trong hệ thập lục phân) được lặp lại b/8 lần. Opad = 01011100 (5C trong hệ thập lục phân) được lặp lại b/8 lần. VÍ Dụ 12.10. CẤU TRÚC HMAC. HMAC có thể được biểu diễn: Ta có: Thêm 0 vào cuối bên trái khóa K để được khóa K+ b bit chiều dài. ( ví dụ: nếu K dài 160 bit và b =512 thì ta sẽ thêm 44 byte 0 ( 0x00) vào khóa K). Thực hiện phép XOR K+ với ipad để có khối Si có b bit. Thêm M vào Si. Sử dụng H cho chuỗi được tạo ra ở bước 3. XOR K+ với opad để tạo ra khối S0 b bit. Thêm kết quả băm từ bước 4 vào S0. Áp dụng H cho chuỗi được tạo ra ở bước 6 và thu được kết quả. Chú ý rằng phép XOR với ipad cho kết quả chỉ một nữa bit chiều dài của K. Tương tự, phép XOR với opad cũng cho kết quả chiều dài nữa bit khóa K nhưng là một bộ bit khác. In effect, bằng cách cho Si và S0 đi qua hàm nén của thuật toán băm, chúng ta sẽ có hai khóa giả định ngẫu nhiên từ K. HMAC có thệ thực những thông điệp dài với cùng một khoảng thời gian với cùng một hàm băm. HMAC thêm vào ba việc thực hiện hàm nén ( compression function) ( cho Si, So, và khối trong hàm băm). Một thực thi hiệu quả hơn đươc đưa ra trong ví dụ 12.11. Hai đại lượng được tính trước: Trong đó, f(cv,block) là hàm nén cho hàm băm, nhận một tham số là biến dây chuyền n bit và một tham số là một khối b bit và cho ra một biến dây chuyền n bit. Những đại lượng này chỉ cần được tính lần đầu và mỗi lần khóa thay đổi. Để tăng thêm hiệu quả, những đại lượng được tính trước sẽ thay thế cho giá trị ban đầu (IV) trong hàm băm. Với sự thực thi này, chỉ một thời điểm thêm vào của hàm nén được thêm vào quá trình một cách bình thường được tạo ra bời hàm băm. Việc thực thi hiệu quả hơn này đặc biệt có có giá trị nếu hầu hết các thông điệp ngắn được dùng cho MAC tính toán Ví Dụ 12.11. EFFICIENT IMPLEMENTATION OF HMAC. SỰ AN TOÀN CỦA HMAC: Tính an toàn của bất cứ hàm MAC đều dựa trên hàm băm thêm vào, phụ thuộc vào sức mạnh mã hóa của hàm băm cơ sở. the appeal của HMAC là người thiết kế cần chứng minh được mối quan hệ chính xác giữa sức mạnh của hàm băm thêm vào và sức manh của HMAC. Tính an toàn của một hàm MAC nhìn chung được diễn đạt dựa vào khả năng giả mạo thành công với thời gian sử dụng của người giả mạo và số lượng cặp thông điệp-MAC được tạo ra với cùng một khóa. Về bản chất, nó được chứng minh trong [BELL96a] rằng với mức độ sự nổ lực cho trước ( về thời gian, các cặp thông điệp-MAC) trong thông điệp được tạo ra bởi người dùng chính đáng và cả người tấn công, thì khả năng có thể tấn công thành công tương đương với một trong hai cách tấn công vào hàm băm sau: Người tấn công có khả năng tính toán được một kết quả của hàm nén ngay cả với một giá trị đầu vào IV không bết, hoặc ngẫu nhiên hoặc bí mật. Người tấn công tìm đươc những sự đụng độ trong hàm băm ngay cả khi không giá trị đầu vào là bí mật và ngẫu nhiên. Trong lần tấn công đầu, chúng ta có thể xem hàm nén tương đương với hàm băm được sử dụng cho thông điệp một khối đơn n bit. Trong lần tấn công này, giá trị đầu vào của hàm băm được thế bằng một giá trị n bit ngẫu nhiên và bí mật. Một lần tấn công vào hàm băm này yêu cầu tấn công Brute-force vào khóa ( which is a level of effort on the order of 2n) hoặc tấn công Birthday, được giới thiệu ở phần tấn công thứ hai. Trong lần tấn công thứ hai, kẻ tấn công cần tìm hai thông điệp M và M’ có cùng H(M)=H(M’). Được gọi là tấn công Birthday được trình bày trong chương 11. Chúng ta đã biết độ phức tạp của nó là 2n/2 cho giá trị băm chiều dài n (requires a level of effort of 2n/2for a hash length of n). Vì vậy, độ an toàn của MD5 bị nghi ngờ, bởi vì độ phức tạp 264 có thể giải mã với công nghệ ngày nay. Điều này có nghĩa rằng một hàm băm 128 bit như MD5 không phù hợp với HMAC?. Câu trả lời là phù hợp, vì luận cứ sau. Để tấn công MD5, người tấn công có thể chọn một bộ thông điệp bất kì và cố gắng tìm ra sự đụng độ. Bởi vì khi biết thuật toán băm và giá trị đầu vào thì người tấn công có thể sinh ra mã băm cho mỗi thông điệp mà người tấn công tạo ra. Tuy nhiên khi tấn công HMAC, người tấn công không thể tạo ra cặp thông điệp/mã off line vì không biết khóa K. Vì vậy, người tấn công phải quan sát một dãy thông điệp được sinh ra bởi HMAC sử dụng cùng một khóa và thực hiện việc tấn công trên thông điệp đã biết. Với một mã băm 128 bit, điều này cần phải quan sát 264 khối ( 272 bit ) được sinh ra với cùng một khóa. Với một đường truyền 1Gbps, một người cần phải quan sát một luồng thông điệp liên tục với cùng một khóa trong khoảng 150.000 năm để thành công. Vì vậy, có thể sử dụng MD5 thay cho SHA-1 như là hàm băm được dùng cho HMAC. 12.4. CMAC Thuật toán xác định dữ liệu được định nghĩa trong FIPS PUB 113, cũng được biết như CBC-MAC ( Cipher block chaining message authentication code), được mô tả trong chương 11. Mã hóa dựa trên MAC này đã từng được phát triển rộng rãi trong chính phủ và công nghiệp. [BELL00] đã chứng tỏ rằng MAC này thì an toàn trên một bộ những tiêu chuẩn có lí, với những hạn chế sau. Chỉ những thông điệp có chiều dài cố định mn bit mới được xử lí, trong đó n là kích thước khối mã hóa và m là một số nguyên dương cố định. Lấy một ví dụ đơn giản, chú ý rằng CBC MAC của một thông điệp một khối X, ta nói rằng T=MAC(K,X), kẻ tấn công ngay lập tức biết được CBC MAC cho thông điệp hai khối X||(X XOR T) bởi vì lại là T lần nữa. Black and Rogaway [BLAC00] đã chỉ ra rằng có thể khắc phục được nhược điểm này bằng cách sử dụng 3 khóa: một khóa với chiều dài k được sử dụng tại mỗi bước của khối mã hóa và hai khóa chiều dài n, trong đó k là chiều dài khoá và n là chiều dài khối mã hóa. Cấu trúc được đề nghị này được cải tiến bởi Iwata và Kurosawa nên hai khóa n bit có thể được lấy từ khóa mã hóa, hơn là việc đang được cung cấp rời nhau [IWAT03]. Sự cải tiến này được tiếp tục phát triển bởi NIST cipher-based message authentication code (CMAC) mode of operation, sử dụng với AES và bộ ba DES. Nó là phần lý thuyết trong xuất bản NIST 800-38B. Đầu tiên hãy xem xét sự hoạt động của CMAC khi thông điệp là một bội số nguyên n của khối mã hóa b bit. Với AES b là 128 bit và triple DES b là 64. Thông điệp được chia thành n khối M1, M2,….,Mn. Thuất toán sử dụng một khóa mã hóa K bit và một khóa n bit cố định K1. Với AES, chiều dài khóa K có thể 128, 192, 256 bit. Triple DES khóa là 112, hoặc 168 bit. CMAC được tính như sau: Trong đó: T: mã xác nhận thông điệp. Tlen: chiều dài bit của T. MSBs(X): số bit leftmost của chuỗi bit X. Nếu thông điệp không phải là một bội số nguyên của khối mã hóa thì khối mã hóa cuối cùng sẽ được thêm vào bên phải ( bit trọng số nhỏ nhất) 1 và các số 0 sao cho chiều dài khối cũng bằng b. CMAC hoạt động như với thông điệp là bội số nguyên của b, nhưng khóa K1 được thay bằng khóa K2. Khóa K1 và K2 được tính như sau: 12.5. RECOMMANDED READING AND WEBSITES: [GILB03] xem xét sự an toàn của SHA-256 đến SHA-512. Tổng quát về HMAC thì có thể được tìm thấy trong [BELL96a] và [BELL96b]. CÁC WEB SITES ĐƯỢC ĐỀ NGHỊ: NIST Secure Hashing page: SHA FIPS và những tài liệu liên quan. Whirlpool: các thông tin trong Whirlpool. Block cipher modes of operation: trang NIST với đầy đủ thông tin về CMAC. 12.6. THUẬT NGỮ CHÍNH, CÂU HỎI VÀ CÁC VẤN ĐỀ: THUẬT NGỮ: Big endien. CMAC. Compression function. HMAC. Little endian. MD4. MD5. SHA-1. SHA-256. SHA-384. SHA-512. Whirlpool. CÂU HỎI ÔN TẬP: 12.1 Sự khác nhau về hai định dạng little endian và big endian? 12.2 Những hàm luận lí và số học cơ sở nào được sử dụng trong SHA? 12.3 Những hàm luận lí và số học cơ sở nào được sử dụng trong Whirlpool? 12.4 Tại sao lại có sự tập trung phát triển mã xác nhận thông điệp từ hàm băm mã hóa cũng như sự chống đối lại mã xác nhận thông điệp từ mã hóa đối xứng? 12.5 Cần thay đổi gì trong HMAC để có thể thay đổi một hàm băm cơ sở với một hàm băm khác?

Các file đính kèm theo tài liệu này:

  • docxĐồ án Bảo Mật Thông Tin-Thuật toán băm và thuật toán MAC (Bản dịch full từ Cryptography and Network Security).docx