연결된 데이터를 사용한 스트리밍 인증 암호화 (스트리밍 AEAD)

스트리밍 AEAD 프리미티브는 스트리밍 데이터에 대해 인증된 암호화를 제공합니다. 암호화할 데이터가 너무 커서 한 번에 처리할 수 없는 경우에 유용합니다. 일반적인 사용 사례에는 대용량 파일 또는 실시간 데이터 스트림의 암호화가 포함됩니다.

암호화는 암호문 내의 위치에 바인딩된 세그먼트에서 수행되며 삭제하거나 순서를 변경할 수 없습니다. 한 암호문의 세그먼트는 다른 암호문에 삽입할 수 없습니다. 기존 암호문을 수정하려면 전체 데이터 스트림을 다시 암호화해야 합니다.1

한 번에 하나의 암호문만 복호화되고 인증되므로 복호화 속도가 빠릅니다. 전체 암호문을 처리하지 않고도 부분 일반 텍스트를 가져올 수 있습니다.

스트리밍 AEAD 구현은 AEAD 정의를 충족하며 OAE2 보안입니다. 다음과 같은 속성이 있습니다.

  • 보안: 일반 텍스트에 길이 외에는 알려진 것이 없습니다.
  • 진위성: 암호문의 기초가 되는 암호화된 일반 텍스트를 감지되지 않고 변경할 수 없습니다.
  • 대칭: 동일한 키로 일반 텍스트를 암호화하고 암호문을 복호화합니다.
  • 무작위 순서 지정: 암호화가 무작위로 이루어집니다. 일반 텍스트가 동일한 두 메시지는 서로 다른 암호문을 생성합니다. 공격자는 주어진 일반 텍스트에 해당하는 암호문을 알 수 없습니다.

관련 데이터

스트리밍 AEAD를 사용하여 암호문을 특정 관련 데이터에 연결할 수 있습니다. user-idencrypted-medical-history 필드가 있는 데이터베이스가 있다고 가정해 보겠습니다. 이 시나리오에서는 encrypted-medical-history를 암호화할 때 user-id를 관련 데이터로 사용할 수 있습니다. 이렇게 하면 공격자가 의료 기록을 한 사용자에서 다른 사용자로 이동하는 것을 방지할 수 있습니다.

키 유형 선택

대부분의 경우 AES128_GCM_HKDF_1MB를 권장합니다. 일반:

  • AES128_GCM_HKDF_1MB (또는 AES256_GCM_HKDF_1MB)가 더 빠른 옵션입니다. 각각 최대 264바이트의 264개 파일을 암호화할 수 있습니다. 암호화 및 복호화 프로세스 중에는 최대 1MB의 메모리가 소비됩니다.
  • AES128_GCM_HKDF_4KB는 최대 4KB의 메모리를 사용하므로 시스템에 메모리가 많지 않은 경우 적합합니다.
  • AES128_CTR_HMAC_SHA256_1MB (또는 AES256_CTR_HMAC_SHA256_1MB)는 좀 더 보수적인 옵션입니다.

보안 보장

스트리밍 AEAD 구현은 다음을 제공합니다.

  • CCA2 보안
  • 인증 강도가 80비트 이상이어야 합니다.
  • 최소 264개의 메시지3를 총 251바이트2로 암호화할 수 있는 기능 최대 232개의 선택된 일반 텍스트 또는 선택한 암호문을 사용하는 공격에서는 성공 확률이 2-32보다 큽니다.

사용 사례

대용량 파일 또는 데이터 스트림을 암호화하고 싶음을 참고하세요.


  1. 이렇게 제한하는 이유는 AES-GCM 암호화를 사용하기 때문입니다. 동일한 위치에서 다른 일반 텍스트 세그먼트를 암호화하는 것은 IV를 재사용하는 것과 동일하며, 이는 AES-GCM의 보안 보장에 위배됩니다. 또 다른 이유는 이렇게 하면 공격자가 감지 없이 이전 버전의 파일을 복원하려고 하는 롤백 공격을 방지하기 때문입니다. 

  2. 232개의 세그먼트가 지원되며 각 세그먼트에는 segment_size - tag_size바이트의 일반 텍스트가 포함됩니다. 1MB 세그먼트의 경우 총 일반 텍스트 크기는 232 * (220-16) ~= 251바이트입니다.

  3. 파생 키 (128비트)와 nonce 접두사 (독립적인 임의의 7바이트 값) 조합이 반복되면 AEAD 스트리밍이 안전하지 않게 됩니다. 184비트 충돌 방지 기능이 있습니다. 성공 확률이 2-32 미만이 되도록 하려면 대략 264개의 메시지로 변환됩니다.