Có an toàn không nếu tôi sử dụng cùng một khóa cho các tin nhắn khác nhau?
Chắc chắn rồi; sẽ không phải là một MAC tốt nếu một khóa có thể được sử dụng cho một tin nhắn.
và tại sao tôi cần IV cho GMAC?
Bởi vì CMAC và GMAC có nội bộ khác nhau.
Với CMAC, những gì bạn làm chủ yếu là tính toán giống như mã hóa chế độ CBC, ngoại trừ việc bạn chỉ giữ lại khối cuối cùng (và đó là MAC). Tôi đã nói chủ yếu bởi vì nếu bạn chỉ thực hiện thao tác này (được gọi là CBCMAC), điều này sẽ cho phép kẻ tấn công chơi một số trò chơi bằng cách mở rộng thông báo - để ngăn chặn điều đó, CMAC xor trong một số dữ liệu bí mật với khối cuối cùng, làm hỏng các trò chơi đó .
Lý do chúng tôi yêu cầu IV khác biệt (và không thể đoán trước) trong chế độ CBC là để khối ban đầu không bị rò rỉ thông tin; CMAC không xuất khối chế độ CBC ban đầu (trừ khi thông báo nằm gọn trong một khối và ngay cả khi vậy, xor của dữ liệu bí mật sẽ ngăn chặn bất kỳ rò rỉ nào như vậy) và vì vậy CMAC không chia sẻ mối lo ngại về IV.
Đối với GMAC, điều đó hoàn toàn khác; với điều đó, bạn chuyển đổi một cách hợp lý tin nhắn thành các hệ số của đa thức $M_k, M_{k-1}, ..., M_1$; sau đó bạn chuyển đổi IV thành thuật ngữ không đổi $M_0$ trong một khóa bí mật, sau đó đánh giá đa thức (trong trường hữu hạn) tại một điểm bí mật $H$, tức là bạn tính toán:
$$M_kH^k + M_{k-1}H^{k-1} + ... + M_1 H^1 + M_0$$
và đó là MAC. Lưu ý rằng kẻ tấn công biết mọi thứ, ngoại trừ các giá trị bí mật $H$ (là hằng số đối với một khóa nhất định) và $M_0$ (và cái sau phụ thuộc vào IV).
Bây giờ, nếu bạn có hai MAC cho hai thông báo khác nhau với cùng một IV, $M_0$ các giá trị sẽ giống nhau; bạn có thể trừ chúng ra và sau đó giải quyết $H$ - cung cấp cho bạn tất cả các bí mật và do đó bạn có thể tạo thông báo có giá trị MAC hợp lệ theo ý muốn.
Và, ở cấp độ khá cao mà tôi đã mô tả, Poly1305 cũng hoạt động theo cách tương tự (và do đó, có cùng điểm yếu đối với việc lặp lại IV).
Trong trường hợp của tôi, tôi không mã hóa bất kỳ tin nhắn nào, tôi chỉ tạo một MAC mà tôi đính kèm vào tin nhắn (văn bản gốc). Đây có phải là dễ bị tổn thương?
Bất kỳ MAC tốt nào cũng được - đó thực sự là trường hợp sử dụng mà MAC phải giải quyết [1]. CMAC vẫn ổn - GMAC và Poly1305 cũng sẽ ổn nếu bạn tránh lặp lại IV.
[1]: Tất nhiên, giả sử rằng người gửi và người nhận chia sẻ cùng một khóa bí mật - nếu bạn cần thứ gì đó mà người nhận không thể tạo các thông báo có vẻ hợp lệ, bạn sẽ cần xem xét chữ ký.