Điểm:2

Xác thực thẻ xác thực AES GCM giữa hai lần triển khai khác nhau

lá cờ nl

Tôi hơi bối rối về cách xác thực thẻ xác thực giữa hai triển khai AES GCM khác nhau.

Một triển khai (về phần tôi) là bằng Java. Cái khác, tôi không biết.

Trong triển khai của tôi, bản rõ được mã hóa bằng doFinal chức năng. Tôi thêm vectơ khởi tạo vào kết quả.

Tôi hiểu rằng thẻ xác thực được thêm vào cuối thư được mã hóa và khi giải mã, Java sẽ tự động kiểm tra thẻ đó.

https://docs.oracle.com/javase/7/docs/api/javax/crypto/Cipher.html Nếu một chế độ AEAD như GCM/CCM đang được sử dụng, thẻ xác thực là được thêm vào trong trường hợp mã hóa hoặc được xác minh trong trường hợp giải mã.

Dữ liệu

IV: b943f312250e7fb1f29dea93
Bản mã (thẻ 128 bit nối thêm): 3745a778189b041b9c452359066a9a745715f214599d010790ee8866e531d5bfe6352e
Khóa: e08ef62a4908460742b4f80b14fb452d

Câu hỏi của tôi là: Liệu họ có thể xác minh thẻ từ bên kia, bất kể việc triển khai/nhà cung cấp tiền điện tử mà họ sử dụng là gì không?

Cảm ơn bạn

Điểm:2
lá cờ in

Có, thẻ xác thực được chỉ định đầy đủ trong thông số kỹ thuật của GCM. Mặt khác, nó được đặt ở đâu không quan trọng - vị trí không ảnh hưởng đến giá trị của các bit của thẻ xác thực.

Nếu thuật toán khác thực hiện tách biệt việc xử lý thẻ xác thực - vì nó có thể nên như vậy - thì điều này cần được xem xét trong quá trình mã hóa và giải mã.

  • Để tuân thủ việc triển khai Java, cần phải gắn thẻ vào bản mã sau khi mã hóa. Thông thường, có thể định cỡ bộ đệm một cách thông minh hoặc sử dụng triển khai phát trực tuyến để không cần sao chép thẻ.

  • Để xác minh, có thể phải trích xuất nó từ phần đuôi của bản mã. Thông thường có thể đơn giản chỉ ra nó mặc dù trong bộ đệm giữ bản mã; trong trường hợp đó không cần sao chép hoặc thay đổi kích thước.


Các tham số cấu hình GCM (loại và kích thước IV/nonce, kích thước thẻ xác thực) phải được thỏa thuận trước bởi cả hai bên, bằng cách chỉ định chúng trực tiếp trong giao thức hoặc bằng cách chọn một bộ tham số cấu hình được xác định trước trong thời gian chạy.

Điều đó có nghĩa là kích thước thẻ xác thực phải được biết trước. Vì vậy, có thể tìm thấy thẻ xác thực khi kích thước bản mã đã được thiết lập. Tất nhiên, không có gì ngăn cản bạn đưa kích thước bản mã vào giao thức; chẳng hạn, bạn có thể bao gồm chỉ báo kích thước 32 bit (thường là giá trị cuối lớn 32 bit không dấu) trong tiêu đề của giao thức của bạn. Bằng cách đó, có thể tìm thấy thẻ xác thực mà không cần có toàn bộ bản mã/bản rõ trong bộ nhớ hệ thống - giả sử rằng việc triển khai không yêu cầu người dùng thực hiện mã hóa/giải mã tất cả cùng một lúc.

Rõ ràng là cả hai bên cũng cần sử dụng cùng một dữ liệu xác thực bổ sung (AAD) cho thẻ để xác minh.


Thông thường nên giữ thẻ xác thực ở kích thước tối đa 128 bit (kích thước khối của thuật toán AES và kích thước của trường Galois của GHASH). Việc triển khai Oracle Java không mặc định ở kích thước đó. Vì vậy, trong trường hợp đó, 16 byte cuối cùng của bản mã (mở rộng) tạo thành thẻ xác thực.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.