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

Nguyên thuỷ Mã hoá đã xác thực với dữ liệu liên kết (AEAD) là nguyên thuỷ phổ biến nhất để mã hoá dữ liệu và phù hợp với hầu hết nhu cầu.

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

  • Secrecy: 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 đó.
  • Tính xác thực: Không thể thay đổi văn bản thuần tuý đã mã hoá bên dưới văn bản mã hoá mà không bị phát hiện.
  • Tính đối xứng: Việc mã hoá văn bản thuần tuý và giải mã văn bản mã hoá được thực hiện bằng cùng một khoá.
  • Sắp xếp ngẫu nhiên: Quá trình mã hoá là ngẫu nhiên. Hai thông báo có cùng văn bản thuần tuý sẽ tạo ra các văn bản mã hoá khác nhau. Kẻ tấn công không thể biết văn bản mã hoá 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 điều này, hãy sử dụng AEAD thuật toán tất định thay thế.

Dữ liệu liên kết

Bạn có thể dùng AEAD để liên kết văn bản mã hoá với dữ liệu liên kết cụ thể. Giả sử bạn có một cơ sở dữ liệu với các trường user-id và encrypted-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. Điều này giúp ngăn kẻ tấn công di chuyển hồ sơ y tế từ người dùng này sang người dùng khác.

Dữ liệu liên kết là không bắt buộc. Nếu được chỉ định, quá trình giải mã chỉ thành công nếu cùng một dữ liệu liên kết được truyền cho cả lệnh gọi mã hoá và giải mã.

Chọn loại khoá

Mặc dù bạn nên dùng AES128_GCM cho hầu hết trường hợp, nhưng có nhiều loại khoá cho các nhu cầu khác nhau. AES128 cung cấp tính bảo mật 128 bit và AES256 cung cấp tính bảo mật 256 bit.

Hai ràng buộc bảo mật đáng chú ý khi chọn một chế độ là:

  1. QPS: Có bao nhiêu thông báo được mã hoá bằng cùng một khoá?
  2. Kích thước thông báo: Các thông báo có kích thước bao nhiêu?

Các loại khoá được hỗ trợ:

  • AES-CTR-HMAC (AES128_CTR_HMAC_SHA256, AES256_CTR_HMAC_SHA256) với Véc tơ khởi tạo (IV) 16 byte là chế độ bảo thủ nhất với các giới hạn tốt.
    • Cam kết khoá.
  • AES-EAX (AES128_EAX, AES256_EAX) ít bảo thủ hơn một chút và nhanh hơn một chút so với AES128_CTR_HMAC_SHA256.
    • Không cam kết khoá MLGR.
  • AES-GCM (AES128_GCM, AES256_GCM) thường là chế độ nhanh nhất với các giới hạn nghiêm ngặt nhất về số lượng thông báo (232) và kích thước thông báo (~64 GB cho mỗi thông báo). Khi vượt quá các giới hạn này, AES-GCM sẽ gặp lỗi nghiêm trọng bằng cách làm rò rỉ văn bản thuần tuý và phần xác thực của khoá nội bộ AES-GCM.
    • AES-GCM không mạnh mẽ [ABN] cũng không cam kết khoá [GLR]. Bạn có thể tạo một văn bản mã hoá có thể giải mã bằng 2 khoá khác nhau. Điều này có thể dẫn đến các cuộc tấn công thực tế [DGRW]. Hãy xem xét kỹ mô hình mối đe doạ nếu khoá do đối thủ chọn.
  • AES-GCM-SIV (AES128_GCM_SIV, AES256_GCM_SIV) [RFC8452] có khả năng chống lại việc sử dụng nonce ngẫu nhiên không đúng cách và có hiệu suất gần bằng AES-GCM. Các giới hạn về số lượng thông báo và kích thước thông báo cho AES-GCM-SIV với IV ngẫu nhiên cao hơn nhiều so với các giới hạn của AES-GCM. Khi vượt quá các giới hạn này, AES-GCM-SIV sẽ gặp lỗi ít nghiêm trọng hơn: chỉ làm rò rỉ rằng 2 thông báo bằng nhau. AES-GCM-SIV an toàn hơn khi sử dụng, nhưng ít được sử dụng rộng rãi trong thực tế.
    • Giới hạn cho nonce ngẫu nhiên:
      • 232 thông báo, trong đó mỗi văn bản thuần tuý có kích thước tối đa là 8 GiB
      • 248 thông báo, trong đó mỗi văn bản thuần tuý có kích thước tối đa là 32 MiB
      • 264 thông báo, trong đó mỗi văn bản thuần tuý có kích thước tối đa là 128 KiB
    • Để sử dụng trong Java, hãy cài đặt Conscrypt.
    • Không cam kết khoá ADGKLS.
  • XChaCha20-Poly1305 (XCHACHA20_POLY1305) có giới hạn cao hơn nhiều về số lượng thông báo và kích thước thông báo so với AES-GCM, nhưng khi gặp lỗi (rất khó xảy ra), thì cũng làm rò rỉ tài liệu khoá. Thuật toán này không được tăng tốc phần cứng, vì vậy, có thể chậm hơn các chế độ AES trong những trường hợp có tính năng tăng tốc phần cứng.
    • Không cam kết khoá LGR.

Tìm hiểu thêm về định dạng truyền dữ liệu của văn bản mã hoá AEAD.

Đảm bảo bảo mật

Các cách triển khai AEAD cung cấp:

  • Bảo mật CCA2.
  • Độ mạnh của chế độ xác thực ít nhất 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 với tối đa 232 văn bản thuần tuý đã chọn hoặc văn bản mã hoá đã chọn có xác suất thành công lớn hơn 2-32.

Trường hợp sử dụng minh hoạ

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