Mã hoá được xác thực bằng dữ liệu liên kết (GDCD)

Dữ liệu gốc Mã hoá được xác thực với dữ liệu liên kết (AEAD) là phương thức gốc phổ biến nhất để mã hoá dữ liệu và phù hợp với hầu hết các nhu cầu.

AEAD có các thuộc tính sau:

  • Bảo mật: Không có thông tin nào về văn bản thuần tuý, ngoại trừ độ dài của văn bản thuần tuý.
  • Tính xác thực: Bạn không thể thay đổi văn bản thuần tuý đã mã hoá nằm dưới bản mật mã nếu không được phát hiện.
  • Symmetric (Đối xứng): Quá trình mã hoá văn bản thuần tuý và giải mã bản mật mã được thực hiện bằng cùng một khoá.
  • Sắp xếp ngẫu nhiên: Mã hoá được chọn ngẫu nhiên. 2 thông điệp có cùng văn bản thuần tuý mang lại các bản mật mã khác nhau. Kẻ tấn công không thể biết được văn bản mật mã nào tương ứng với một văn bản thuần tuý nhất định. Nếu bạn muốn tránh tình trạng này, hãy sử dụng Deterministic AEAD (Hàm AEAD xác định).

Dữ liệu liên quan

Bạn có thể sử dụng AEAD để liên kết văn bản mật mã với dữ liệu liên quan cụ thể. Giả sử bạn có một cơ sở dữ liệu với các trường user-idencrypted-medical-history. Trong trường hợp này, bạn có thể dùng user-id làm dữ liệu liên kết khi mã hoá encrypted-medical-history. Nhờ đó, kẻ tấn công không thể di chuyển bệnh án từ người dùng này sang người dùng khác.

Chọn một loại khoá

Mặc dù bạn nên dùng AES128_GCM cho hầu hết các trường hợp sử dụng, nhưng vẫn có nhiều loại khoá cho các nhu cầu khác nhau (để bảo mật 256 bit, hãy thay thế AES128 bằng AES256 bên dưới). Thông thường:

  • AES128_CTR_HMAC_SHA256 với Vectơ khởi tạo (IV) 16 byte là chế độ thận trọng nhất với giới hạn tốt.
  • AES128_EAX ít nghiêm ngặt hơn một chút và nhanh hơn một chút so với AES128_CTR_HMAC_SHA256.
  • AES128_GCM thường là chế độ nhanh nhất, có giới hạn nghiêm ngặt nhất về số lượng tin nhắn và kích thước tin nhắn. Khi vượt quá các giới hạn này về độ dài văn bản thuần tuý và độ dài dữ liệu được liên kết (bên dưới), AES128_GCM sẽ không thành công và rò rỉ tài liệu chính.
  • AES128_GCM_SIV có tốc độ gần bằng AES128_GCM, với giới hạn rất phù hợp cho một số lượng lớn tin nhắn, nhưng ít được thiết lập hơn. Để dùng tính năng này trong Java, bạn phải cài đặt Conscrypt.
  • XChaCha20Poly1305 có giới hạn về số lượng và kích thước thông báo lớn hơn nhiều so với AES128_GCM nhưng khi không thành công (rất khó xảy ra), XChaCha20Poly1305 cũng sẽ làm rò rỉ tài liệu chính. Chế độ này không được tăng tốc phần cứng, nên có thể chậm hơn so với chế độ AES trong các trường hợp có thể tăng tốc phần cứng.

Đảm bảo tính bảo mật

Ưu đãi triển khai AEAD:

  • Bảo mật CCA2.
  • Độ mạnh xác thực tối thiểu là 80 bit.
  • Khả năng mã hoá ít nhất 232 thông báo với tổng cộng 250 byte. Không có cuộc tấn công nào có tối đa 232 văn bản thuần tuý đã chọn hoặc bản mật mã đã chọn có xác suất thành công lớn hơn 2-32.

Các trường hợp sử dụng mẫu

Xem tôi muốn mã hoá dữ liệu và tôi muốn liên kết bản mã với ngữ cảnh của dữ liệu đó.