스트리밍 AEAD 프리미티브는 스트리밍 데이터에 인증된 암호화를 제공합니다. 암호화할 데이터가 너무 커서 한 번에 처리할 수 없는 경우에 유용합니다. 일반적인 사용 사례로는 대용량 파일 또는 실시간 데이터 스트림 암호화가 있습니다.
암호화는 세그먼트 단위로 이루어지며, 세그먼트는 암호문 내 위치에 연결되어 있으며 삭제하거나 재정렬할 수 없습니다. 한 암호문의 세그먼트를 다른 암호문에 삽입할 수 없습니다. 기존 암호문을 수정하려면 전체 데이터 스트림을 다시 암호화해야 합니다.1
한 번에 암호문의 일부만 복호화되고 인증되므로 복호화 속도가 빠릅니다. 전체 암호문을 처리하지 않고도 부분 일반 텍스트를 가져올 수 있습니다.
스트리밍 AEAD 구현은 AEAD 정의를 충족하며 nOAE 보안을 제공합니다. 뷰에는 다음과 같은 속성이 있습니다.
- 비밀유지: 길이를 제외하고는 일반 텍스트에 관한 정보는 아무것도 알려지지 않습니다.
- 진위성: 감지되지 않으면 암호문 밑에 있는 암호화된 일반 텍스트를 변경할 수 없습니다.
- 대칭: 일반 텍스트를 암호화하고 암호문을 복호화하는 데 동일한 키가 사용됩니다.
- 무작위 순서 지정: 암호화가 무작위로 지정됩니다. 평문이 동일한 두 메시지는 서로 다른 암호문을 생성합니다. 공격자는 어떤 암호문이 특정 일반 텍스트에 해당하는지 알 수 없습니다.
관련 데이터
스트리밍 AEAD는 암호문을 특정 연결된 데이터에 연결하는 데 사용할 수 있습니다. user-id
및 encrypted-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비트 이상이어야 합니다.
- 총 251바이트2로 264개 이상의 메시지3를 암호화할 수 있는 기능입니다. 선택된 평문 또는 선택된 암호문이 최대 232개인 공격의 성공 확률은 2-32보다 큽니다.
사용 사례
대용량 파일 또는 데이터 스트림을 암호화하려면 어떻게 해야 하나요?를 참고하세요.
-
이러한 제한은 AES-GCM 암호를 사용하기 때문입니다. 동일한 위치에서 다른 일반 텍스트 세그먼트를 암호화하는 것은 IV를 재사용하는 것과 같으며 이는 AES-GCM의 보안 보장을 위반합니다. 또 다른 이유는 이렇게 하면 공격자가 감지되지 않도록 이전 버전의 파일을 복원하려고 시도하는 롤백 공격을 방지할 수 있기 때문입니다. ↩
-
232개의 세그먼트가 지원되며 각 세그먼트는
segment_size - tag_size
바이트의 일반 텍스트를 포함합니다. 세그먼트 1MB의 총 일반 텍스트 크기는 232 * (220-16) ~= 251바이트입니다. ↩ -
파생 키(128비트)와 nonce 접두사(독립적인 임의의 7바이트 값) 조합이 반복되면 스트리밍 AEAD가 안전하지 않게 됩니다. 184비트 충돌 저항이 있으며, 성공 확률을 2-32 미만으로 하려면 대략 264 메시지로 변환됩니다. ↩