Bảo mật của MAC
Cũng giống như với các thuật toán mã hóa và hàm băm, chúng ta có thể chia các cuộc tấn công vào MAC thành hai loại: tấn công brute-force và tấn công giải mã mật mã.
Một cuộc tấn công brute-force vào MAC khó khăn hơn một cuộc tấn công brute- force vào hàm băm vì nó yêu cầu các cặp thông điệp-thẻ đã biết Chúng ta hãy xem lý do tại sao Để tấn công mã băm, chúng ta có thể tiến hành theo cách sau Với một thông điệp cố định x có mã băm n bit h = H(x), một phương pháp brute-force để tìm thấy một sự va chạm là chọn một chuỗi bit ngẫu nhiên y và kiểm tra xem H(y) = H(x) hay không Kẻ tấn công có thể thực hiện điều này lặp đi lặp lại ngoại tuyến Việc liệu một cuộc tấn công ngoại tuyến có thể được sử dụng trên một thuật toán MAC hay không phụ thuộc vào kích thước tương đối của khóa và thẻ. Để tiếp tục, chúng ta cần nêu rõ đặc tính bảo mật mong muốn của một thuật toán MAC, có thể được thể hiện như sau.
+ Khả năng chống lại các tính toán: Với một hoặc nhiều cặp văn bản-MAC [ x i ,MAC(K, x i )], việc tính toán bất kỳ cặp văn bản-MAC [x, MAC(K, x)] nào cho bất kỳ đầu vào mới x ≠ x i nào đều không khả thi về mặt tính toán.
Nói cách khác, kẻ tấn công muốn tìm ra mã MAC hợp lệ cho một thông điệp x nhất định Có hai cách tấn công có thể: tấn công vào không gian khóa và tấn công vào giá trị MAC Chúng ta hãy xem xét từng cái một.
Tấn công không gian khóa
Nếu kẻ tấn công có thể xác định được khóa MAC, thì có thể tạo ra giá trị MAC hợp lệ cho bất kỳ đầu vào x nào Giả sử kích thước khóa là k bit và kẻ tấn công có một cặp văn bản-thẻ đã biết Sau đó, kẻ tấn công có thể tính toán thẻ n bit trên văn bản đã biết cho tất cả các khóa có thể Ít nhất một khóa được đảm bảo để tạo ra thẻ chính xác, đó là khóa hợp lệ đã được sử dụng để tạo cặp văn bản-thẻ đã biết Giai đoạn tấn công này mất một lượng công sức tỷ lệ với 2 k (nghĩa là, một thao tác cho mỗi giá trị khóa có thể 2 k ) Tuy nhiên, như đã mô tả trước đó, vì MAC là một ánh xạ nhiều-đến-một, nên có thể có các khóa khác tạo ra giá trị chính xác Do đó, nếu tìm thấy nhiều hơn một khóa tạo ra giá trị chính xác, thì phải kiểm tra thêm các cặp văn bản-thẻ Có thể chỉ ra rằng lượng công sức giảm nhanh chóng với mỗi cặp văn bản-MAC bổ sung và tổng lượng công sức xấp xỉ bằng 2 k [MENE97].
Tấn công giá trị thẻ
Kẻ tấn công cũng có thể tấn công thẻ mà không cố gắng phục hồi khóa Tại đây, mục tiêu là tạo ra một thẻ hợp lệ cho một thông điệp nhất định hoặc tìm một thông điệp khớp với một thẻ nhất định Trong cả hai trường hợp, lượng công sức tương đương với lượng công sức để tấn công đặc tính chống va chạm một chiều hoặc yếu của mã băm, hoặc 2 n Trong trường hợp của MAC, cuộc tấn công không thể được thực hiện ngoại tuyến mà không có thêm đầu vào; kẻ tấn công sẽ yêu cầu các cặp văn bản-thẻ đã chọn hoặc biết khóa.
Tóm lại, lượng công sức cho một cuộc tấn công brute-force vào một thuật toán MAC có thể được biểu thị dưới dạng min(2 k , 2 n ) Đánh giá sức mạnh tương tự như đối với các thuật toán mã hóa đối xứng Có vẻ hợp lý khi yêu cầu độ dài khóa và độ dài thẻ phải thỏa mãn mối quan hệ như min(k, n) ≥ N, trong đó N có thể trong khoảng 128 bit.
Cũng giống như với các thuật toán mã hóa và hàm băm, các cuộc tấn công giải mã mật mã vào các thuật toán MAC tìm cách khai thác một số đặc tính của thuật toán để thực hiện một số cuộc tấn công khác ngoài việc tìm kiếm cạn kiệt Cách đo lường khả năng chống lại giải mã mật mã của một thuật toán MAC là so sánh sức mạnh của nó với lượng công sức cần thiết cho một cuộc tấn công brute-force. Nghĩa là, một thuật toán MAC lý tưởng sẽ yêu cầu một nỗ lực giải mã mật mã lớn hơn hoặc bằng nỗ lực brute-force.
Có nhiều sự đa dạng hơn trong cấu trúc của MAC so với hàm băm, vì vậy rất khó để khái quát về giải mã mật mã của MAC Hơn nữa, đã có rất ít công việc được thực hiện để phát triển các cuộc tấn công như vậy Một khảo sát hữu ích về một số phương pháp cho các MAC cụ thể là [PREN96].
MAC dựa trên hàm băm: HMAC
Ở phần sau của chương này, chúng ta xem xét các ví dụ về MAC dựa trên việc sử dụng cơ chế đối xứng khóa mật mã Đây truyền thống là cách tiếp cận phổ biến nhất để xây dựng MAC Trong những năm gần đây, đã có sự quan tâm ngày càng tăng đối với việc phát triển MAC được bắt nguồn từ hàm băm mật mã Động cơ thúc đẩy sự quan tâm này là:
1 Các hàm băm mật mã như MD5 và SHA thường thực thi nhanh hơn trong phần mềm so với các mã hóa khối đối xứng như DES.
2 Mã thư viện cho các hàm băm mật mã có sẵn rộng rãi.
Với sự phát triển của AES và tính sẵn có rộng rãi hơn của mã cho các thuật toán mã hóa, những cân nhắc này ít quan trọng hơn, nhưng MAC dựa trên băm vẫn tiếp tục được sử dụng rộng rãi.
Một hàm băm như SHA không được thiết kế để sử dụng làm MAC và không thể được sử dụng trực tiếp cho mục đích đó, vì nó không dựa trên khóa bí mật Đã có một số đề xuất về việc kết hợp khóa bí mật vào thuật toán băm hiện có Phương pháp nhận được nhiều sự ủng hộ nhất là HMAC [BELL96a, BELL96b] HMAC đã được ban hành dưới dạng RFC 2104, đã được chọn làm MAC bắt buộc phải triển khai cho bảo mật IP và được sử dụng trong các giao thức Internet khác, chẳng hạn như SSL HMAC cũng đã được ban hành dưới dạng tiêu chuẩn NIST (FIPS 198).
Các Mục tiêu Thiết kế HMAC
RFC 2104 liệt kê các mục tiêu thiết kế sau cho HMAC:
Sử dụng các hàm băm có sẵn mà không cần sửa đổi Đặc biệt, sử dụng các hàm băm hoạt động tốt trong phần mềm và có mã có sẵn và miễn phí.
Cho phép dễ dàng thay thế hàm băm được nhúng trong trường hợp tìm thấy hoặc yêu cầu các hàm băm nhanh hơn hoặc an toàn hơn.
Giữ nguyên hiệu suất ban đầu của hàm băm mà không gây suy giảm đáng
kể.Sử dụng và xử lý khóa một cách đơn giản.
Có phân tích mật mã được hiểu rõ về sức mạnh của cơ chế xác thực dựa trên các giả định hợp lý về hàm băm được nhúng.
Hai mục tiêu đầu tiên rất quan trọng đối với việc chấp nhận HMAC HMAC coi hàm băm là một “hộp đen” Điều này có hai lợi ích Đầu tiên, có thể sử dụng một triển khai hàm băm hiện có làm mô-đun trong việc triển khai HMAC Bằng cách này, phần lớn mã HMAC được đóng gói sẵn và sẵn sàng sử dụng mà không cần sửa đổi Thứ hai, nếu cần thay thế một hàm băm nhất định trong triển khai HMAC,tất cả những gì cần làm là gỡ bỏ mô-đun hàm băm hiện tại và thả vào mô-đun mới.Điều này có thể được thực hiện nếu cần hàm băm nhanh hơn Quan trọng hơn, nếu bảo mật của hàm băm được nhúng bị xâm phạm, bảo mật của HMAC vẫn có thể được duy trì bằng cách chỉ cần thay thế hàm băm được nhúng bằng hàm băm an toàn hơn (ví dụ: thay thế SHA-2 bằng SHA-3).
Mục tiêu thiết kế cuối cùng trong danh sách trước đó thực sự là ưu điểm chính của HMAC so với các lược đồ dựa trên băm khác được đề xuất HMAC có thể được chứng minh là an toàn nếu hàm băm được nhúng có một số điểm mạnh mật mã hợp lý Chúng tôi sẽ quay lại điểm này sau trong phần này, nhưng trước tiên chúng tôi hãy xem xét cấu trúc của HMAC.
Hình 12.5 minh họa hoạt động tổng thể của HMAC Xác định các thuật ngữ sau:
H = hàm băm nhúng (ví dụ: MD5, SHA-1, RIPEMD-160)
IV = giá trị ban đầu được nhập vào hàm băm
M = thông điệp được nhập vào HMAC (bao gồm cả padding được chỉ định trong hàm băm được nhúng)
L = số khối trong M b = số bit trong một khối n = độ dài của mã băm được tạo ra bởi hàm băm được nhúng
K = khóa bí mật; độ dài được khuyến nghị là >= n; nếu độ dài khóa lớn hơn b, khóa sẽ được nhập vào hàm băm để tạo ra khóa n bit
K +¿ ¿ = K được đệm bằng các số không ở bên trái để kết quả có độ dài b bit
Hình 12.5 Cấu trúc HMAC ipad = 00110110 (36 ở hệ thập lục phân) được lặp lại b/8 lần opad = 01011100 (5C ở hệ thập lục phân) được lặp lại b/8 lần
Sau đó, HMAC có thể được biểu diễn như sau:
HMAC(K, M) = H[( K +¿ ¿ ⊕ opad) || H[( K +¿ ¿ ⊕ ipad) || M]] trong đó || là toán tử nối chuỗi bit.
Chúng ta có thể mô tả thuật toán như sau:
1 Thêm các số không vào bên trái của K để tạo thành chuỗi b bit K +¿ ¿
2 XOR (bitwise exclusive-OR) K +¿ ¿ với ipad để tạo ra khối b bit S i
4 Áp dụng H vào luồng được tạo ra ở bước 3.
5 XOR K +¿ ¿ với opad để tạo ra khối b bit S o
6 Nối chuỗi kết quả băm từ bước 4 vào S o
7 Áp dụng H vào luồng được tạo ra ở bước 6 và xuất ra kết quả.
Lưu ý rằng XOR với opad dẫn đến việc lật một nửa số bit của K Tương tự,XOR với opad dẫn đến việc lật một nửa số bit của K, sử dụng một tập bit khác nhau Trên thực tế, bằng cách thông qua Si và So qua hàm nén của thuật toán băm, chúng ta đã tạo ra hai khóa ngẫu nhiên từ K.
HMAC sẽ thực thi trong khoảng thời gian xấp xỉ như hàm băm được nhúng cho các thông điệp dài HMAC bổ sung thêm ba lần thực thi hàm nén băm (cho S i , So và khối được tạo ra từ băm bên trong).
Có thể thực hiện triển khai hiệu quả hơn, như được hiển thị trong Hình 12.6. Hai giá trị được tính trước: f(IV, ( K +¿ ¿ ⊕ ipad)) f(IV, ( K +¿ ¿ ⊕ opad)) trong đó f(cv, block) là hàm nén cho hàm băm, lấy các tham số là biến xích của n bit và khối b bit và tạo ra biến xích của n bit Các giá trị này chỉ cần được tính một lần ban đầu và mỗi khi khóa thay đổi Trên thực tế, các giá trị được tính trước thay thế cho giá trị ban đầu (IV) trong hàm băm Với triển khai này, chỉ có một trường hợp bổ sung của hàm nén được thêm vào quá trình xử lý thường được tạo ra bởi hàm băm Triển khai hiệu quả hơn này đặc biệt có giá trị nếu hầu hết các thông điệp mà MAC được tính toán đều ngắn
Hình 12.6 Triển khai hiệu quả của HMAC
Tính bảo mật của HMAC
Tính bảo mật của bất kỳ hàm MAC nào dựa trên hàm băm nhúng đều phụ thuộc theo một cách nào đó vào độ mạnh mật mã của hàm băm cơ bản Điểm hấp dẫn của HMAC là các nhà thiết kế của nó đã có thể chứng minh được mối quan hệ chính xác giữa độ mạnh của hàm băm nhúng và độ mạnh của HMAC.
Tính bảo mật của hàm MAC thường được thể hiện dưới dạng xác suất thành công của việc giả mạo với một lượng thời gian nhất định mà kẻ giả mạo dành ra và một số lượng cặp tin nhắn-thẻ được tạo với cùng một khóa Về cơ bản, đã được chứng minh trong [BELL96a] rằng đối với một mức độ nỗ lực nhất định (thời gian, cặp tin nhắn-thẻ) trên các tin nhắn được tạo bởi người dùng hợp pháp và được kẻ tấn công nhìn thấy, xác suất tấn công thành công HMAC tương đương với một trong những cuộc tấn công sau đây đối với hàm băm nhúng:
1 Kẻ tấn công có thể tính toán kết quả của hàm nén ngay cả khi có IV ngẫu nhiên, bí mật và không được kẻ tấn công biết.
2 Kẻ tấn công tìm thấy va chạm trong hàm băm ngay cả khi IV ngẫu nhiên và bí mật.
Trong cuộc tấn công đầu tiên, chúng ta có thể xem hàm nén tương đương với hàm băm được áp dụng cho tin nhắn bao gồm một khối b bit duy nhất Đối với cuộc tấn công này, IV của hàm băm được thay thế bằng giá trị ngẫu nhiên, bí mật n bit Một cuộc tấn công vào hàm băm này yêu cầu một trong hai điều: tấn công brute-force vào khóa, là mức độ nỗ lực theo thứ tự 2 n , hoặc tấn công sinh nhật, là một trường hợp đặc biệt của cuộc tấn công thứ hai, được thảo luận tiếp theo.
Trong cuộc tấn công thứ hai, kẻ tấn công đang tìm kiếm hai tin nhắn M và M′ tạo ra cùng một băm: H(M) = H(M′) Đây là cuộc tấn công sinh nhật được thảo luận trong Chương 11 Chúng tôi đã chỉ ra rằng điều này yêu cầu mức độ nỗ lực của 2 n /2 đối với chiều dài băm của n Trên cơ sở này, tính bảo mật của MD5 bị nghi ngờ, vì mức độ nỗ lực của 2 64 có vẻ khả thi với công nghệ hiện nay Điều này có nghĩa là một hàm băm 128 bit như MD5 không phù hợp với HMAC? Câu trả lời là không, vì lý do sau Để tấn công MD5, kẻ tấn công có thể chọn bất kỳ tập tin nhắn nào và làm việc với chúng ngoại tuyến trên cơ sở máy tính chuyên dụng để tìm va chạm Bởi vì kẻ tấn công biết thuật toán băm và IV mặc định, kẻ tấn công có thể tạo mã băm cho mỗi tin nhắn mà kẻ tấn công tạo Tuy nhiên, khi tấn công HMAC, kẻ tấn công không thể tạo các cặp tin nhắn/mã ngoài tuyến vì kẻ tấn công không biết K Do đó, kẻ tấn công phải quan sát một chuỗi các tin nhắn được tạo bởi HMAC dưới cùng một khóa và thực hiện cuộc tấn công đối với các tin nhắn đã biết này Đối với chiều dài mã băm 128 bit, điều này yêu cầu 2 64 khối được quan sát (2 72 bit) được tạo bằng cùng một khóa Trên đường truyền 1 Gbps, người ta cần quan sát một luồng tin nhắn liên tục mà không thay đổi khóa trong khoảng 150.000 năm để thành công Do đó, nếu tốc độ là một mối quan tâm, thì việc sử dụng MD5 thay vì SHA-1 làm hàm băm nhúng cho HMAC là hoàn toàn chấp nhận được.
MAC dựa trên mã khối: DAA và CMAC
Trong phần này, chúng ta xem xét hai MAC dựa trên việc sử dụng chế độ hoạt động của mã khối Chúng ta bắt đầu với một thuật toán cũ hơn, Data Authentication Algorithm (DAA), hiện đã lỗi thời Sau đó, chúng ta xem xét CMAC, được thiết kế để khắc phục những thiếu sót của DAA.
Thuật toán xác thực dữ liệu (DAA)
Thuật toán xác thực dữ liệu (DAA), dựa trên DES, đã là một trong những MAC được sử dụng rộng rãi nhất trong nhiều năm Thuật toán này là cả ấn phẩm FIPS(FIPS PUB 113) và tiêu chuẩn ANSI (X9.17) Tuy nhiên, như chúng ta sẽ thảo luận sau, những điểm yếu bảo mật trong thuật toán này đã được phát hiện và nó đang được thay thế bằng các thuật toán mới hơn và mạnh hơn.
Thuật toán có thể được định nghĩa là sử dụng chế độ hoạt động chuỗi khối mã hóa (CBC) của DES (Hình 6.4) với vec tơ khởi tạo bằng 0 Dữ liệu (ví dụ: thông điệp, bản ghi, tệp hoặc chương trình) được xác thực được nhóm thành các khối 64 bit liên tiếp: D 1 , D 2 , , D N Nếu cần, khối cuối cùng được đệm bên phải bằng các số 0 để tạo thành một khối 64 bit đầy đủ Sử dụng thuật toán mã hóa DES E và khóa bí mật K, mã xác thực dữ liệu (DAC) được tính như sau (Hình 12.7).
Hình 12.7 Thuật toán xác thực dữ liệu (FIPS PUB 113) DAC bao gồm toàn bộ khối ON hoặc M bit bên trái của khối, với 16 ≤ M ≤ 64.
Mã xác thực thông điệp dựa trên mã hóa (CMAC)
Như đã đề cập, DAA đã được áp dụng rộng rãi trong chính phủ và công nghiệp. [BELL00] đã chứng minh rằng MAC này an toàn theo một tập tiêu chí bảo mật hợp lý, với hạn chế sau Chỉ các thông điệp có độ dài cố định mn bit đượ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 Ví dụ đơn giản, hãy lưu ý rằng cho trước CBC MAC của thông điệp một khối X, giả sử T
= MAC(K, X), kẻ thù ngay lập tức biết CBC MAC cho thông điệp hai khối
X || (X ⊕ T) vì đây một lần nữa là T.
Black và Rogaway [BLAC00] đã chứng minh rằng hạn chế này có thể được khắc phục bằng cách sử dụng ba khóa: một khóa K độ dài k được sử dụng ở mỗi bước của chuỗi khối mã hóa và hai khóa độ dài b, trong đó b là độ dài khối mã hóa. Cấu trúc được đề xuất này đã được Iwata và Kurosawa tinh chỉnh để hai khóa n bit có thể được suy ra từ khóa mã hóa, thay vì được cung cấp riêng biệt [IWAT03] Sự tinh chỉnh này, được NIST chấp nhận, là chế độ hoạt động Mã xác thực thông điệp dựa trên mã hóa (CMAC) để sử dụng với AES và triple DES Nó được quy định trong ấn phẩm đặc biệt NIST 800-38B.
Trước tiên, hãy định nghĩa hoạt động của CMAC khi thông điệp là số nguyên bội n của độ dài khối mã hóa b Đối với AES, b = 128 và đối với triple DES, b 64 Thông điệp được chia thành n khối ( M 1 ), M 2 , , M n ) Thuật toán sử dụng khóa mã hóa K độ dài k và hằng số độ dài b, K 1 ]) Đối với AES, kích thước khóa k là
128, 192 hoặc 256 bit; đối với triple DES, kích thước khóa là 112 hoặc 168 bit. CMAC được tính như sau (Hình 12.8).
T = mã xác thực thông điệp, cũng được gọi là thẻ
MSB s (X) là s bit bên trái của chuỗi bit X
Nếu thông điệp không phải là số nguyên bội của độ dài khối mã hóa, thì khối cuối cùng được đệm bên phải (bit ít quan trọng nhất) với một 1 và càng nhiều 0 càng cần thiết để khối cuối cùng cũng có độ dài b Quá trình hoạt động của CMAC sau đó tiếp tục như trước, ngoại trừ việc sử dụng khóa b-bit K 2 khác thay vì K 1
(a) Độ dài thông điệp là bội số nguyên của kích thước khối
(b)Message length is not integer multiple of block size Hình 12.8 Mã xác thực thông điệp dựa trên mã hóa (CMAC) Hai khóa b-bit được suy ra từ khóa mã hóa độ dài k như sau.
K 2 = L ⋅ x 2 = (L ⋅ x) ⋅ x trong đó phép nhân (⋅) được thực hiện trong trường hữu hạn GF(2 b ) và x và x 2 là đa thức bậc nhất và bậc hai là các phần tử của GF(2^b) Do đó, biểu diễn nhị phân của x bao gồm b - 2 số 0 theo sau là 10; biểu diễn nhị phân của x^2 bao gồm b - 3 số 0 theo sau là 100 Trường hữu hạn được định nghĩa theo một đa thức bất biến có thứ tự thứ tự đầu tiên trong số tất cả các đa thức như vậy với số lượng hạng không bằng 0 tối thiểu Đối với hai kích thước khối được phê duyệt, các đa thức là x 64 + x 4
+ x 3 + x + 1 và x 128 + x 7 + x 2 + x + 1. Để tạo K1 và K2, mã khối được áp dụng cho khối chỉ bao gồm tất cả các bit 0.Khóa con đầu tiên được suy ra từ văn bản mã hóa kết quả bằng cách dịch một bit sang trái và, tùy thuộc, bằng cách XOR một hằng số phụ thuộc vào kích thước khối Khóa con thứ hai được suy ra theo cách tương tự từ khóa con đầu tiên.
Tính chất này của các trường hữu hạn có dạng GF(2 b ) đã được giải thích trong phần thảo luận về MixColumns trong Chương 6.
Mật mã xác thực (AE)
Mật mã xác thực (AE) là một thuật ngữ được sử dụng để mô tả các hệ thống mã hóa bảo vệ đồng thời tính bảo mật và tính xác thực (tính toàn vẹn) của thông tin liên lạc Nhiều ứng dụng và giao thức yêu cầu cả hai loại bảo mật này, nhưng cho đến gần đây, hai dịch vụ này đã được thiết kế riêng biệt.
Có bốn cách phổ biến để cung cấp đồng thời tính bảo mật và mã hóa cho một thông điệp M.
- Băm theo sau mã hóa (H → E): Đầu tiên, tính toán hàm băm mật mã trên M là h = H (M) Sau đó mã hóa thông điệp cộng với hàm băm: E (K, (M||h)).
- Xác thực theo sau mã hóa (A → E): Sử dụng hai khóa Đầu tiên, xác thực văn bản rõ bằng cách tính giá trị MAC là T = MAC ( K 1 , M) Sau đó mã hóa thông điệp cộng với thẻ: E ( K 2 , [M || T]) Cách tiếp cận này được sử dụng bởi các giao thức SSL / TLS (Chương 17).
- Mã hóa theo sau xác thực (E → A): Sử dụng hai khóa Đầu tiên, mã hóa thông điệp để tạo ra văn bản mã C = E ( K 2, M) Sau đó xác thực văn bản mã với T = MAC ( K 1 , C) để tạo ra cặp (C, T) Cách tiếp cận này được sử dụng trong giao thức IPSec (Chương 20).
- Mã hóa và xác thực độc lập (E + A): Sử dụng hai khóa Mã hóa thông điệp để tạo ra văn bản mã C = E ( K 2 , M) Xác thực văn bản rõ bằng T = MAC ( K 1 , M) để tạo ra cặp (C, T) Các thao tác này có thể được thực hiện theo bất kỳ thứ tự nào Cách tiếp cận này được sử dụng bởi giao thức SSH (Chương 17).
Cả giải mã và xác minh đều đơn giản cho mỗi cách tiếp cận Đối với H → E,
A → E và E + A, giải mã trước, sau đó xác minh Đối với E → A, xác minh trước, sau đó giải mã Có lỗ hổng bảo mật với tất cả các cách tiếp cận này Cách tiếp cận
H → E được sử dụng trong giao thức WEP (Wired Equivalent Privacy) để bảo vệ mạng WiFi Cách tiếp cận này có những điểm yếu cơ bản và dẫn đến việc thay thế giao thức WEP [BLAC05] và [BELL00] chỉ ra rằng có những mối quan ngại bảo mật trong mỗi ba cách tiếp cận mã hóa / MAC được liệt kê ở trên Tuy nhiên, với thiết kế phù hợp, bất kỳ cách tiếp cận nào trong số này đều có thể cung cấp mức độ bảo mật cao Đây là mục tiêu của hai cách tiếp cận được thảo luận trong phần này, cả hai đều đã được NIST chuẩn hóa.
Mật mã xác thực khối với mã xác thực thông điệp xích khối (CCM)
Chế độ hoạt động CCM đã được NIST chuẩn hóa đặc biệt để hỗ trợ các yêu cầu bảo mật của mạng cục bộ không dây WiFi IEEE 802.11 (Chương 18), nhưng có thể được sử dụng trong bất kỳ ứng dụng mạng nào yêu cầu mã hóa xác thực CCM là một biến thể của phương pháp mã hóa và MAC để mã hóa xác thực Nó được định nghĩa trong NIST SP 800-38C.
Các thành phần thuật toán chính của CCM là thuật toán mã hóa AES (Chương
6), chế độ hoạt động CTR (Chương 7) và thuật toán xác thực CMAC (Phần 12.6). Một khóa duy nhất K được sử dụng cho cả thuật toán mã hóa và MAC. Đầu vào cho quá trình mã hóa CCM bao gồm ba yếu tố:
1 Dữ liệu sẽ được cả xác thực và mã hóa Đây là thông điệp văn bản rõ P của khối dữ liệu.
2 Dữ liệu liên quan A sẽ được xác thực nhưng không được mã hóa Một ví dụ là một tiêu đề giao thức phải được truyền dưới dạng văn bản rõ để hoạt động giao thức đúng nhưng cần được xác thực.
3 Một nonce N được gán cho tải trọng và dữ liệu liên quan Đây là một giá trị duy nhất khác nhau cho mọi phiên bản trong thời gian tồn tại của liên kết giao thức và được dùng để ngăn chặn các cuộc tấn công phát lại và một số loại tấn công khác.
Hình 12.9 minh họa hoạt động của CCM Để xác thực, đầu vào bao gồm nonce, dữ liệu liên quan và văn bản rõ Đầu vào này được định dạng thành một chuỗi các khối B 0 đến B r Khối đầu tiên chứa nonce cộng với một số bit định dạng chỉ ra độ dài của các phần tử N, A và P Tiếp theo là không hoặc nhiều khối chứa A, tiếp theo là không hoặc nhiều khối chứa P Chuỗi các khối kết quả được sử dụng làm đầu vào cho thuật toán CMAC, tạo ra giá trị MAC có độ dài Tlen, nhỏ hơn hoặc bằng độ dài khối (Hình 12.9a). Để mã hóa, một chuỗi các bộ đếm được tạo ra phải độc lập với nonce Thẻ xác thực được mã hóa ở chế độ CTR sử dụng bộ đếm duy nhất Ctr 0 Tlen bit có ý nghĩa nhất của đầu ra được XOR với thẻ để tạo ra thẻ được mã hóa Các bộ đếm còn lại được sử dụng cho mã hóa chế độ CTR của văn bản rõ (Hình 7.7) Văn bản rõ được mã hóa được ghép với thẻ được mã hóa để tạo thành đầu ra mã hóa (Hình 12.9b).
SP 800-38C định nghĩa quy trình xác thực/mã hóa như sau:
1 Áp dụng hàm định dạng cho (N, A, P) để tạo ra các khối B 0 , B 1 , … , B r ,.
3 Đối với i từ 1 đến r, thực hiện Y i = E(K, ( B i ⊕ Y i−1 )).
5 Áp dụng hàm tạo bộ đếm để tạo ra các khối bộ đếm Ctr 0 , Ctr 1 , , Ctr m trong đó m = ⌈ Plen/128 ⌉.
6 Đối với j từ 0 đến m, thực hiện Sj = E(K, Ctr j ).
8 Trả về C = (P ⊕ MSB Tlen (S)) || (T ⊕ ( S 0 )). Để giải mã và xác minh, người nhận cần các đầu vào sau: văn bản mã C, nonce
N, dữ liệu liên quan A, khóa K và bộ đếm ban đầu Ctr 0 Các bước như sau:
1 Nếu Clen ≤ Tlen, thì trả về INVALID. Áp dụng hàm tạo bộ đếm để tạo ra các khối bộ đếm Ctr 0 , Ctr 1 , , Ctr m , trong đó m = ⌈ Clen/128 ⌉.
2 Đối với j từ 0 đến m, thực hiện S j = E(K, Ctr j ). a) Xác thực b) Mã hóa
Hình 12.9 minh họa các bước của quá trình xác thực/mã hóa CCM.
4 Đặt P = MSB Clen−Tlen (C) ⊕ MSB Clen −Tlen (S).
5 Đặt T = LSB Tlen (C) ⊕ MSB Tlen
6 Áp dụng hàm định dạng cho (N, A, P) để tạo ra các khối B 0 , B 1 , … , B r ,.
8 Đối với i từ 1 đến r, thực hiện Y i = E(K, ( B i ⊕ Y i−1 )).
9 Nếu T ≠ MSB Tlen ( Y r ), thì trả về INVALID, nếu không trả về P.
CCM là một thuật toán tương đối phức tạp Lưu ý rằng nó yêu cầu hai lần duyệt qua văn bản rõ hoàn chỉnh, một lần để tạo giá trị MAC và một lần để mã hóa Hơn nữa, các chi tiết của thông số kỹ thuật yêu cầu phải có sự cân bằng giữa độ dài của nonce và độ dài của thẻ, đây là một hạn chế không cần thiết Ngoài ra, lưu ý rằng khóa mã hóa được sử dụng hai lần với chế độ mã hóa CTR: một lần để tạo thẻ và một lần để mã hóa văn bản rõ cộng với thẻ Liệu những phức tạp này có làm tăng thêm tính bảo mật của thuật toán hay không thì không rõ ràng Tuy nhiên, hai phân tích về thuật toán ([JONS02] và [ROGA03]) kết luận rằng CCM cung cấp mức độ bảo mật cao.
Chế độ Galois/Counter (GCM)
Chế độ hoạt động GCM, được NIST chuẩn hóa trong NIST SP 800-38D, được thiết kế để có thể song song hóa để có thể cung cấp thông lượng cao với chi phí thấp và độ trễ thấp Về cơ bản, thông điệp được mã hóa ở chế độ CTR biến thể. Văn bản mã kết quả được nhân với tài liệu khóa và thông tin độ dài thông điệp trên GF(2 128 ) để tạo ra thẻ xác thực Tiêu chuẩn cũng quy định một chế độ hoạt động chỉ cung cấp MAC, được gọi là GMAC.
Chế độ GCM sử dụng hai hàm: GHASH, là một hàm băm có khóa, và GCTR, về cơ bản là chế độ CTR với các bộ đếm được xác định bởi một hoạt động tăng đơn giản bằng một.
GHASH H (X) lấy đầu vào là khóa băm H và một chuỗi bit X sao cho len(X) 128m bit đối với một số nguyên dương m và tạo ra giá trị MAC 128 bit Hàm có thể được chỉ định như sau (Hình 12.10a).
1 Gọi X 1 , X 2, , X m là chuỗi khối duy nhất sao cho
2 Cho Y 0 là khối gồm 128 số không, được ký hiệu là 0 128
3 Đối với i = 1, … , m, cho Y 1 = ( Y i−1 ⊕ X i ) ∙ H, trong đó ∙ biểu thị phép nhân trong GF(2 128 ).
Hàm GHASH H (X) có thể được biểu diễn như sau:
Gói khóa
Chế độ hoạt động mật mã khối gần đây nhất được định nghĩa bởi NIST là chế độ Key Wrap (KW) (SP 800-38F), sử dụng AES hoặc Triple DEA (3DES) như thuật toán mã hóa cơ sở Phiên bản sử dụng AES cũng được mô tả trong RFC3394.
Mục đích của việc gói khóa (key wrapping) là để an toàn trao đổi một khóa đối xứng để được chia sẻ bởi hai bên, bằng cách sử dụng một khóa đối xứng đã được chia sẻ bởi các bên đó Khóa sau này được gọi là khóa mã hóa khóa (KEK). Ở điểm này, có hai câu hỏi cần được xem xét Trước hết, tại sao chúng ta cần sử dụng một khóa đối xứng đã biết đối với hai bên để mã hóa một khóa đối xứng mới? Yêu cầu này được tìm thấy trong nhiều giao thức mô tả trong cuốn sách này, chẳng hạn như phần quản lý khóa của IEEE 802.11 và IPsec Thường xuyên, một giao thức yêu cầu một cấu trúc khóa phân cấp, với các khóa ở mức thấp hơn trên cấu trúc sử dụng thường xuyên hơn và thay đổi thường xuyên hơn để đối phó với các cuộc tấn công Một khóa mức cao hơn, được sử dụng ít thường xuyên và do đó khó bị phân tích, được sử dụng để mã hóa một khóa mức thấp mới được tạo ra để trao đổi giữa các bên chia sẻ khóa mức cao hơn.
Câu hỏi thứ hai là, tại sao chúng ta cần một chế độ mới? Mục đích của chế độ mới này là hoạt động trên các khóa có độ dài lớn hơn kích thước khối của thuật toán mã hóa Ví dụ, AES sử dụng kích thước khối là 128 bit nhưng có thể sử dụng khóa có độ dài 128, 192 hoặc 256 bit Trong hai trường hợp cuối cùng, mã hóa của khóa liên quan đến nhiều khối dữ liệu Chúng ta xem xét giá trị của dữ liệu khóa cao hơn giá trị của dữ liệu khác, vì khóa sẽ được sử dụng nhiều lần, và việc tiết lộ khóa sẽ làm mất mật của tất cả dữ liệu được mã hóa bằng khóa đó Do đó, NIST mong muốn một chế độ mã hóa mạnh mẽ KW mạnh mẽ trong ý nghĩa rằng mỗi bit của đầu ra có thể được kỳ vọng phụ thuộc vào mỗi bit của đầu vào một cách không triviale Điều này không phải là trường hợp cho bất kỳ chế độ hoạt động nào khác mà chúng ta đã mô tả Ví dụ, trong tất cả các chế độ đã mô tả cho đến nay, khối cuối cùng của văn bản gốc chỉ ảnh hưởng đến khối cuối cùng của văn bản mã hóa. Tương tự, khối đầu tiên của văn bản mã hóa được xác định chỉ từ khối đầu tiên của văn bản gốc. Để đạt được hoạt động mạnh mẽ này, KW đạt được lưu lượng thông qua (throughput) thấp hơn đáng kể so với các chế độ hoạt động khác, nhưng sự đánh đổi này có thể thích hợp cho một số ứng dụng quản lý khóa Ngoài ra, KW chỉ được sử dụng cho lượng văn bản gốc nhỏ so với việc mã hóa một thông điệp hoặc một tệp.
Thuật toán gói khóa hoạt động trên các khối dữ liệu 64 bit Đầu vào của thuật toán bao gồm một hằng số 64 bit, sẽ được thảo luận sau, và một khóa văn bản được chia thành các khối dữ liệu 64 bit Chúng ta sử dụng các ký hiệu sau đây:
MSB 64 (W) là 64 bit đáng chú ý nhất của W.
LSB 64 (W) là 64 bit ít đáng chú ý nhất của W.
W là giá trị tạm thời; đầu ra của hàm mã hóa.
⊕ XOR bit (Phép XOR bit).
Dấu "||" để kết hợp các dữ liệu.
K là khóa mã hóa khóa. n là số lượng các khối dữ liệu khóa 64 bit. s là số lượng giai đoạn trong quá trình gói khóa; s = 6n.
P i là khối dữ liệu khóa văn bản thứ i; 1 ≤ i ≤ n.
C i là khối dữ liệu mã hóa thứ i; 0 ≤ i ≤ n.
A(t) là đăng ký kiểm tra tính toàn vẹn 64 bit sau giai đoạn mã hóa t;
A(0) là giá trị kiểm tra tính toàn vẹn ban đầu (ICV); ở dạng thập lục phân: A6A6A6A6A6A6A6A6.
R(t, i) là đăng ký 64 bit i sau giai đoạn mã hóa t; 1 ≤ t ≤ s; 1 ≤ i ≤ n. Bây giờ, chúng ta sẽ mô tả thuật toán gói khóa: Đầu vào:
Văn bản gốc, n giá trị 64 bit ( P 1 , P 2 , , P n ).
Khóa mã hóa khóa, K. Đầu ra:
Văn bản mã hóa, (n + 1) giá trị 64 bit ( C 0 , C 1 , , C n ).
2 Tính toán giá trị trung gian:
Lưu ý rằng văn bản mã hóa dài hơn một khối so với khóa văn bản gốc, để chứa ICV Khi giải mã, cả ICV 64 bit và khóa văn bản được khôi phục Nếu ICV khôi phục khác với giá trị đầu vào của hệ thập lục phân A6A6A6A6A6A6A6A6, thì một lỗi hoặc biến đổi đã được phát hiện và khóa văn bản bị từ chối Do đó, thuật toán gói khóa cung cấp không chỉ tính bảo mật mà còn tính toàn vẹn dữ liệu.
Hình 12.12 mô tả thuật toán gói khóa để mã hóa một khóa 256 bit Mỗi ô biểu thị một giai đoạn mã hóa (một giá trị t) Lưu ý rằng đầu ra A được sử dụng làm đầu vào cho giai đoạn tiếp theo (t + 1), trong khi đầu ra R bắt đầu tiến lên n giai đoạn (t + n), trong ví dụ này là n = 4 Để thực hiện việc bỏ qua các giai đoạn này, sử dụng một bộ đệm trượt, để đầu ra R từ giai đoạn t được dịch chuyển trong bộ đệm một vị trí cho mỗi giai đoạn, cho đến khi nó trở thành đầu vào cho giai đoạn t + n Điều này có thể rõ hơn nếu chúng ta mở rộng vòng lặp for bên trong cho một khóa 256 bit (n = 4) Khi đó, các gán cho các biến là như sau:
Ví dụ, xem xét rằng tại giai đoạn 5, đầu ra R có giá trị R(5, 4) = x Tại giai đoạn 6, chúng ta thực hiện R(6, 3) = R(5, 4) = x Tại giai đoạn 7, chúng ta thực hiện R(7, 2) = R(6, 3) = x Tại giai đoạn 8, chúng ta thực hiện R(8, 1) = R(7, 2) x Vì vậy, tại giai đoạn 9, giá trị đầu vào của R(t - 1, 1) là R(8, 1) = x.
Hình 12.13 mô tả hoạt động của giai đoạn t cho một khóa 256 bit Các đường kẻ đứt biểu thị việc gán các giá trị mới cho các biến giai đoạn.
Thuật toán gỡ gói khóa có thể được định nghĩa như sau:
Văn bản mã hóa, (n + 1) giá trị 64 bit ( C 0 , C 1 , , C n ).
Văn bản gốc, n giá trị 64 bit ( P 1 , P 2 , , P n ), ICV
Hình 12.12 Hoạt động Gói Khóa cho Khóa 256-Bit
2 Tính toán giá trị trung gian:
Hình 12.13 Hoạt Động Gói Khóa cho Khóa 256-Bit: Giai Đoạn t
If A(0) = A6A6A6A6A6A6A6A6 then for i = 1 to n P(i) = R(0, i) else return errorLưu ý rằng hàm giải mã được sử dụng trong thuật toán gỡ gói khóa.
Chúng ta bây giờ sẽ chứng minh rằng hàm gỡ gói là nghịch đảo của hàm gói, nghĩa là hàm gỡ gói khôi phục khóa văn bản và ICV Trước hết, lưu ý rằng vì biến chỉ số t đếm ngược từ s đến 1 cho việc gỡ gói, giai đoạn t của thuật toán gỡ gói tương ứng với giai đoạn t của thuật toán gói gói Các biến đầu vào của giai đoạn t của thuật toán gói gói được đánh chỉ mục t - 1 và các biến đầu ra của giai đoạn t của thuật toán gỡ gói được đánh chỉ mục t - 1 Do đó, để chứng minh rằng hai thuật toán là nghịch đảo của nhau, chúng ta chỉ cần chứng minh rằng các biến đầu ra của giai đoạn t của thuật toán gỡ gói bằng các biến đầu vào của giai đoạn t của thuật toán gói.
Phần chứng minh này được chia thành hai phần Trước hết, chúng ta chứng minh rằng việc tính toán các biến A và R trước vòng lặp for là nghịch đảo Để làm điều này, chúng ta đơn giản hóa ký hiệu một chút Định nghĩa giá trị 128 bit T là giá trị
64 bit t theo sau 64 bit 0 Sau đó, ba dòng đầu tiên của bước 2 của thuật toán gói gói có thể được viết lại thành một dòng duy nhất như sau:
Ba dòng đầu tiên của bước 2 của thuật toán gỡ gói có thể được viết lại thành:
Mở rộng phía bên phải bằng cách thay thế từ Phương trình 12.1, chúng ta có:
Bây giờ chúng ta nhận ra rằng T ⊕ T = 0 và rằng đối với bất kỳ x nào, x ⊕ 0 = x.
Phần thứ hai của chứng minh là để chứng minh rằng các vòng lặp for trong bước 2 của thuật toán gói gói và thuật toán gỡ gói là nghịch đảo Đối với giai đoạn k của thuật toán gói gói, các biến R(t - 1, 1) đến R(t - 1, n) là đầu vào R(t - 1, 1) được sử dụng trong việc tính toán mã hóa R(t - 1, 2) đến R(t - 1, n) được ánh xạ, tương ứng, thành R(t, 1) đến R(t, n - 1), và R(t, n) được đầu ra từ hàm mã hóa Đối với giai đoạn k của thuật toán gỡ gói, các biến R(t, 1) đến R(t, n) là đầu vào R(t, n) được đưa vào hàm giải mã để tạo ra R(t - 1, 1) Các biến còn lại R(t - 1, 2) đếnR(t - 1, n) được tạo ra bởi vòng lặp for, sao cho chúng được ánh xạ, tương ứng, từR(t, 1) đến R(t, n - 1)
Do đó, chúng ta đã chứng minh rằng các biến đầu ra của giai đoạn k của thuật toán gỡ gói bằng các biến đầu vào của giai đoạn k của thuật toán gói.
Sinh số giả ngẫu nhiên sử dụng hàm băm và MAC
Các thành phần cơ bản của bất kỳ trình tạo số giả ngẫu nhiên (PRNG) nào là giá trị hạt giống và thuật toán xác định để tạo ra một luồng các bit giả ngẫu nhiên. Nếu thuật toán được sử dụng như một hàm giả ngẫu nhiên (PRF) để tạo ra một giá trị yêu cầu, chẳng hạn như khóa phiên, thì chỉ người dùng PRF mới biết hạt giống. Nếu thuật toán được sử dụng để tạo ra một hàm mã hóa luồng, thì hạt giống có vai trò là khóa bí mật mà người gửi và người nhận phải biết.
Chúng tôi đã lưu ý trong Chương 8 và 10 rằng, vì thuật toán mã hóa tạo ra kết quả đầu ra có vẻ ngẫu nhiên, nên nó có thể được sử dụng làm cơ sở của một PRNG Tương tự, hàm băm hoặc MAC tạo ra kết quả đầu ra có vẻ ngẫu nhiên và có thể được sử dụng để xây dựng PRNG Cả tiêu chuẩn ISO 18031 (Tạo bit ngẫu nhiên) và NIST SP 800-90 (Đề xuất tạo số ngẫu nhiên sử dụng trình tạo bit ngẫu nhiên xác định) đều định nghĩa một phương pháp tạo số ngẫu nhiên sử dụng hàm băm mật mã SP 800-90 cũng định nghĩa trình tạo số ngẫu nhiên dựa trên HMAC. Chúng ta sẽ xem xét hai phương pháp này theo lượt.
PRNG dựa trên hàm băm
Hình 12.14a cho thấy chiến lược cơ bản cho một PRNG dựa trên hàm băm được quy định trong SP 800-90 và ISO 18031 Thuật toán nhận đầu vào sau:
V = hạt giống seedlen = độ dài bit của V ≥ K + 64, trong đó k là mức bảo mật mong muốn được thể hiện bằng bit n = số bit đầu ra mong muốn
(a) PRNG sử dụng hàm băm mật mã
(b) PRNG sử dụng HMAC Hình 12.14 Cấu trúc cơ bản của PRNG dựa trên hàm băm (SP 800-90)
Thuật toán sử dụng hàm băm mật mã H với đầu ra giá trị băm là outlen bit. Hoạt động cơ bản của thuật toán là: m = ⌈n/outlen⌉ data = V
W = the null string For i = 1 to m w i = H (data)
Do đó, luồng bit giả ngẫu nhiên là w 1 || w 2 ||…|| w m với khối cuối cùng được cắt ngắn nếu cần.
Thông số kỹ thuật SP 800-90 cũng cung cấp cho việc cập nhật V thường xuyên để tăng cường bảo mật Thông số kỹ thuật cũng chỉ ra rằng không có điểm yếu nào được biết đến hoặc nghi ngờ trong cách tiếp cận dựa trên hàm băm cho một thuật toán băm mật mã mạnh, chẳng hạn như SHA-2.
PRNG dựa trên hàm MAC
Mặc dù không có điểm yếu nào được biết đến hoặc nghi ngờ trong việc sử dụng hàm băm mật mã cho PRNG theo cách của Hình 12.14a, nhưng có thể đạt được mức độ tin cậy cao hơn bằng cách sử dụng hàm MAC Hầu hết mọi lúc,
HMAC được sử dụng để xây dựng PRNG dựa trên MAC Điều này là do HMAC là một hàm MAC được tiêu chuẩn hóa và được sử dụng rộng rãi trong nhiều giao thức và ứng dụng Như SP 800-90 chỉ ra, nhược điểm của cách tiếp cận này so với cách tiếp cận dựa trên hàm băm là thời gian thực thi lâu gấp hai lần, vì HMAC bao gồm hai lần thực thi hàm băm cơ bản cho mỗi khối đầu ra Ưu điểm của cách tiếp cận HMAC là nó cung cấp mức độ tin cậy cao hơn về bảo mật của nó, so với cách tiếp cận dựa trên hàm băm thuần túy. Đối với cách tiếp cận dựa trên MAC, có hai đầu vào: khóa K và hạt giống V. Trên thực tế, sự kết hợp của K và V tạo thành hạt giống tổng thể cho PRNG được quy định trong SP 800-90 Hình 12.14b cho thấy cấu trúc cơ bản của cơ chế PRNG và cột bên trái của Hình 12.15 cho thấy logic Lưu ý rằng khóa vẫn giữ nguyên cho mỗi khối đầu ra và dữ liệu đầu vào cho mỗi khối bằng với thẻ đầu ra của khối trước đó Thông số kỹ thuật SP 800-90 cũng cung cấp cho việc cập nhật K và V thường xuyên để tăng cường bảo mật.
Thật bổ ích khi so sánh khuyến nghị SP 800-90 với việc sử dụng HMAC cho PRNG trong một số ứng dụng và điều này được hiển thị trong Hình 12.15 Đối với tiêu chuẩn bảo mật LAN không dây IEEE 802.11i (Chương 18), dữ liệu đầu vào bao gồm hạt giống được nối với một bộ đếm Bộ đếm được tăng lên đối với mỗi khối wi của đầu ra Cách tiếp cận này dường như mang lại bảo mật cao hơn so với cách tiếp cận SP 800-90 Xem xét rằng đối với SP 800-90, dữ liệu đầu vào cho khối đầu ra wi chỉ là đầu ra wi-1 của lần thực thi HMAC trước đó Do đó, kẻ tấn công có thể quan sát đầu ra giả ngẫu nhiên biết cả đầu vào và đầu ra của HMAC. Mặc dù vậy, với giả định rằng HMAC là an toàn, việc biết đầu vào và đầu ra không nên đủ để thu hồi K và do đó không đủ để dự đoán các bit giả ngẫu nhiên trong tương lai.
Cách tiếp cận được thực hiện bởi giao thức Transport Layer Security(Chương 17) và Giao thức Wireless Transport Layer Security (Chương 18) liên quan đến việc gọi HMAC hai lần cho mỗi khối đầu ra w i Giống như IEEE 802.11,điều này được thực hiện theo cách mà đầu ra không cung cấp thông tin trực tiếp về đầu vào Việc sử dụng HMAC hai lần làm tăng gấp đôi gánh nặng thực thi và dường như là quá mức cần thiết về bảo mật.
Hình 12.15 Ba PRNG dựa trên HMAC
Các thuật ngữ chính, câu hỏi ôn tập và bài tập
Mã xác thực thông điệp dựa trên mã hóa (CMAC)
Mã xác thực thông điệp chuỗi khối với bộ đếm(CCM)
Tổng kiểm tra mật mã Hàm băm mật mã Thuật toán xác thực dữ liệu(DAA)
Chế độ Galois/Counter(GMC) HMAC
Khóa mã hóa khóa Chế độ gói khóa Gói khóa
Mã xác thực thông điệp(MAC)
12.1 Xác thực thông điệp giải quyết những loại tấn công nào?
12.2 Hai cấp độ chức năng nào tạo nên cơ chế xác thực thông điệp hoặc chữ ký số?
12.3 Có một số cách tiếp cận nào để tạo ra xác thực thông điệp?
12.4 Khi sử dụng kết hợp mã hóa đối xứng và mã kiểm soát lỗi để xác thực thông điệp, hai chức năng phải được thực hiện theo thứ tự nào?
12.5 Mã xác thực thông điệp là gì?
12.6 Sự khác biệt giữa mã xác thực thông điệp và hàm băm một chiều là gì?
12.7 Giá trị băm có thể được bảo mật theo những cách nào để cung cấp xác thực thông điệp?
12.8 Có cần phải thu hồi khóa bí mật để tấn công thuật toán MAC không?
12.9 Cần những thay đổi nào đối với HMAC để thay thế một hàm băm cơ bản bằng một hàm khác?
12.1 Nếu F là một hàm phát hiện lỗi, thì việc sử dụng bên trong hoặc bên ngoài (Hình 12.2) sẽ cung cấp khả năng phát hiện lỗi Nếu bất kỳ bit nào của thông điệp được truyền bị thay đổi, điều này sẽ được phản ánh trong sự không khớp của FCS nhận được và FCS được tính toán, cho dù chức năng FCS được thực hiện bên trong hay bên ngoài chức năng mã hóa Một số mã cũng cung cấp khả năng sửa lỗi. Tùy thuộc vào bản chất của hàm, nếu một hoặc một số bit nhỏ bị thay đổi trong quá trình truyền, mã sửa lỗi sẽ chứa đủ thông tin dự phòng để xác định bit hoặc các bit bị lỗi và sửa chúng Rõ ràng, mã sửa lỗi sẽ cung cấp khả năng sửa lỗi khi được sử dụng bên ngoài chức năng mã hóa Nó cũng sẽ cung cấp khả năng này nếu được sử dụng bên trong chức năng mã hóa?
12.2 Thuật toán xác thực dữ liệu, được mô tả trong Phần 12.6, có thể được định nghĩa là sử dụng chế độ hoạt động xích khối mã hóa (CBC) của DES với vectơ khởi tạo bằng 0 (Hình 12.7) Chứng minh rằng kết quả tương tự có thể thu được bằng cách sử dụng chế độ phản hồi mã hóa.
12.3 Ở đầu Phần 12.6, đã lưu ý rằng với MAC CBC của một thông điệp một khối X, chẳng hạn như T = MAC (K, X), kẻ tấn công ngay lập tức biết MAC CBC cho thông điệp hai khối X || (X ⊕ T) vì đây một lần nữa là T Giải thích cho tuyên bố này.
12.4 Trong bài toán này, chúng tôi chứng minh rằng đối với CMAC, một biến thể XOR khóa thứ hai sau khi áp dụng mã hóa cuối cùng không hoạt động. Hãy xem xét trường hợp thông điệp là bội số nguyên của kích thước khối Sau đó, biến thể có thể được biểu thị là VMAC (K, M) = CBC (K, M) ⊕ K 1 Bây giờ giả sử kẻ tấn công có thể yêu cầu MAC của ba thông điệp: thông điệp 0 = 0n, trong đó n là kích thước khối mã hóa; thông điệp 1 = 1 n và thông điệp 1 || 0 Kết quả của ba truy vấn này, kẻ tấn công nhận được T 0 = CBC (K, 0) ⊕ K 1 ; T 1 = CBC (K, 1) ⊕ K 1 và T 1 = CBC (K, [CBC (K, 1)]) ⊕ K 1 Chứng minh rằng kẻ tấn công có thể tính toán MAC chính xác cho thông điệp (chưa được truy vấn)
12.5 Trong phần thảo luận về việc tạo khóa phụ trong CMAC, có nói rằng mã khối được áp dụng cho khối gồm toàn bộ các bit 0 Khóa phụ thứ nhất được suy ra từ chuỗi kết quả bằng cách dịch trái một bit và, có điều kiện, bằng XOR một hằng số phụ thuộc vào kích thước khối Khóa phụ thứ hai được suy ra theo cách tương tự từ khóa phụ thứ nhất. a Những hằng số cần thiết cho kích thước khối 192-bit và 256-bit là gì? b Giải thích cách dịch trái và XOR thực hiện kết quả mong muốn.
12.6 Phần 12.7 liệt kê bốn cách tiếp cận chung để cung cấp tính bảo mật và mã hóa thông điệp: H → E, A → E, E → A và E + A. a Phương pháp nào trong số các phương pháp trên thực hiện giải mã trước khi xác minh? b Phương pháp nào trong số các phương pháp trên thực hiện xác minh trước khi giải mã?
12.8 Vẽ một hình tương tự như Hình 12.11 hiển thị giải mã xác thực.
12.9 Alice muốn gửi một bit thông tin (đồng ý hoặc không đồng ý) cho Bob thông qua một từ có độ dài 2 Alice và Bob có bốn khóa khả dụng để thực hiện xác thực thông điệp Bảng sau hiển thị từ 2 bit được gửi cho mỗi thông điệp dưới mỗi khóa: a Ma trận trước đó có dạng hữu ích cho Alice Xây dựng một ma trận có thông tin tương tự nhưng sẽ hữu ích hơn cho Bob. b Xác suất mà người khác có thể thành công trong việc giả mạo thành Alice là bao nhiêu? c Xác suất mà ai đó có thể thay thế một tin nhắn bị chặn bằng một tin nhắn khác một cách thành công là bao nhiêu?
12.10 Vẽ các hình tương tự như Hình 12.12 và 12.13 cho thuật toán unwrap.
12.11 Xem xét thuật toán gói khóa sau đây:
2.Tính giá trị trung gian.
C i = R(i) a So sánh thuật toán này về mặt chức năng với thuật toán được xác định trong SP 800-38F và mô tả trong Phần 12.8. b Viết thuật toán unwrap tương ứng
12.2 The data authentication algorithm, described in Section 12.6, can be defined as using the cipher block chaining (CBC) mode of operation of DES with an initialization vector of zero (Figure 12.7) Show that the same result can be produced using the cipher feedback mode.
The data authentication algorithm that can be defined as using the cipher block chaining (CBC) mode of operation of DES with an initialization vector of zero can also produce the same result using the cipher feedback mode.
What is a cipher block chaining?Cipher Block Chaining (CBC) is a block cipher mode of operation that uses an initialization vector (IV) to randomize the data before encryption It is referred to as a chained mode since each block is