Mã hóa kết hợp

Mã gốc Mã hoá kết hợp kết hợp hiệu quả của mã hoá đối xứng với sự tiện lợi của tiêu chuẩn mã hoá khoá công khai (bất đối xứng). Bất kỳ ai cũng có thể mã hoá dữ liệu bằng khoá công khai, nhưng chỉ người dùng có khoá riêng tư mới có thể giải mã dữ liệu.

Đối với tính năng Mã hoá kết hợp, người gửi tạo một khoá đối xứng mới để mã hoá văn bản thuần tuý của mỗi thông báo nhằm tạo ra bản mật mã. Khoá đối xứng đó được đóng gói bằng khoá công khai của người nhận. Đối với Giải mã kết hợp, khoá đối xứng được người nhận giải mã rồi dùng để giải mã bản mật mã nhằm khôi phục văn bản thuần tuý ban đầu. Xem Định dạng dây Mã hoá kết hợp của Tink để biết thông tin chi tiết về cách lưu trữ hoặc truyền văn bản mật mã cùng với việc đóng gói khoá.

Mã hoá kết hợp có các thuộc tính sau:

  • Bảo mật: Không ai có thể nhận được bất kỳ thông tin nào về văn bản thuần tuý đã mã hoá (ngoại trừ độ dài), trừ phi họ có quyền truy cập vào khoá riêng tư.
  • Không đối xứng: Bạn có thể mã hoá bản mật mã bằng khoá công khai, nhưng để giải mã thì cần có khoá riêng tư.
  • Sắp xếp ngẫu nhiên: Quá trình mã hoá sẽ ngẫu nhiên. 2 thông báo có cùng một văn bản thuần tuý sẽ không tạo ra cùng một bản mật mã. Điều này ngăn kẻ tấn công biết được thuật toán mật mã nào tương ứng với một văn bản thuần tuý nhất định.

Phương thức mã hoá kết hợp được biểu thị trong Tink dưới dạng một cặp dữ liệu nguyên gốc:

  • HybridEncrypt để mã hoá
  • HybridDecrypt để giải mã

Tham số thông tin về bối cảnh

Ngoài văn bản thuần tuý, Phương thức mã hoá kết hợp còn chấp nhận một tham số bổ sung, context_info, thường là dữ liệu công khai ngầm ẩn trong ngữ cảnh, nhưng phải được liên kết với bản mật mã thu được. Điều này có nghĩa là thuật toán mật mã cho phép bạn xác nhận tính toàn vẹn của thông tin về bối cảnh, nhưng không có gì đảm bảo tính bảo mật hoặc tính xác thực của thông tin đó. Thông tin ngữ cảnh thực tế có thể trống hoặc rỗng, nhưng để đảm bảo giải mã chính xác bản mật mã thu được, bạn phải cung cấp cùng một giá trị thông tin ngữ cảnh để giải mã.

Việc triển khai cụ thể tính năng Mã hoá kết hợp có thể liên kết thông tin ngữ cảnh với bản mật mã theo nhiều cách, chẳng hạn như:

  • Sử dụng context_info làm dữ liệu đầu vào liên quan cho tính năng mã hoá đối xứng AEAD (xem RFC 5116).
  • Sử dụng context_info làm dữ liệu đầu vào "CtxInfo" cho HKDF (nếu quá trình triển khai sử dụng HKDF làm hàm dẫn xuất chính, xem RFC 5869).

Chọn một loại khoá

Bạn nên dùng loại khoá DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_AES_256_GCM cho hầu hết các trường hợp sử dụng. Loại khoá này triển khai tiêu chuẩn Mã hoá khoá công khai kết hợp (HPKE) theo quy định trong RFC 9180. HPKE bao gồm cơ chế đóng gói khoá (KEM), hàm dẫn xuất khoá (KDF) và lớp mã hoá được xác thực bằng thuật toán dữ liệu liên kết (AEAD).

Cụ thể, DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_AES_256_GCM sử dụng:

  • KEM: Diffie–Hellman kết hợp Curve25519 bằng HKDF-SHA-256 để lấy khoá bí mật dùng chung.
  • KDF: HKDF-SHA-256 để lấy ngữ cảnh người gửi và người nhận.
  • AEAD: AES-256-GCM với số chỉ dùng một lần 12 byte được tạo theo tiêu chuẩn HPKE.

Các loại khoá HPKE được hỗ trợ khác bao gồm, nhưng không giới hạn ở các loại sau:

  • DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_AES_128_GCM
  • DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_CHACHA20_POLY1305
  • DHKEM_P256_HKDF_SHA256_HKDF_SHA256_AES_128_GCM
  • DHKEM_P521_HKDF_SHA512_HKDF_SHA512_AES_256_GCM

Hãy xem RFC 9180 để biết thêm thông tin chi tiết về các lựa chọn thuật toán cho KEM, KDF và AEAD.

Mặc dù không còn được đề xuất, nhưng Tink cũng hỗ trợ một số biến thể của ECIES như mô tả trong tiêu chuẩn ISO 18033-2 của Victor Shoup. Dưới đây là một số loại khoá ECIES được hỗ trợ:

  • ECIES_P256_HKDF_HMAC_SHA256_AES128_GCM
  • ECIES_P256_COMPRESSED_HKDF_HMAC_SHA256_AES128_GCM
  • ECIES_P256_HKDF_HMAC_SHA256_AES128_CTR_HMAC_SHA256
  • ECIES_P256_COMPRESSED_HKDF_HMAC_SHA256_AES128_CTR_HMAC_SHA256

Thuộc tính tối thiểu

  • Thông tin văn bản thuần tuý và thông tin ngữ cảnh có thể có độ dài tuỳ ý (trong phạm vi 0,232 byte)
  • Bảo vệ chống lại các cuộc tấn công thích ứng bằng thuật toán mật mã đã chọn
  • Khả năng bảo mật 128 bit cho các sơ đồ dựa trên đường cong elip

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

Xem tôi muốn trao đổi dữ liệu.