관련 데이터로 인증된 암호화 (AEAD) 프리미티브는 데이터 암호화에 가장 일반적인 프리미티브이며 대부분의 요구사항에 적합합니다.
AEAD에는 다음과 같은 속성이 있습니다.
- Secrecy: 일반 텍스트의 길이를 제외하고는 일반 텍스트에 대해 알려진 것이 없습니다.
- 신뢰성: 감지되지 않고 암호문 아래에 있는 암호화된 일반 텍스트를 변경할 수 없습니다.
- 대칭: 일반 텍스트 암호화 및 암호문 복호화는 동일한 키로 수행됩니다.
- 무작위 순서 지정: 암호화가 무작위로 추출됩니다. 일반 텍스트가 동일한 두 메시지는 서로 다른 암호문을 생성합니다. 공격자는 지정된 일반 텍스트에 해당하는 암호문을 알 수 없습니다. 이를 방지하려면 결정론적 AEAD를 대신 사용하세요.
관련 데이터
AEAD를 사용하여 암호문을 특정 연결 데이터에 연결할 수 있습니다. user-id 및 encrypted-medical-history 필드가 있는 데이터베이스가 있다고 가정해 보겠습니다. 이 시나리오에서는 encrypted-medical-history를 암호화할 때 user-id를 연결된 데이터로 사용할 수 있습니다. 이렇게 하면 공격자가 한 사용자의 병력을 다른 사용자에게 옮길 수 없습니다.
연결된 데이터는 선택사항입니다. 지정된 경우 동일한 연결된 데이터가 암호화 및 복호화 호출에 모두 전달되는 경우에만 복호화가 성공합니다.
키 유형 선택
대부분의 용도에는 AES128_GCM을 사용하는 것이 좋지만, 필요에 따라 다양한 키 유형이 있습니다. AES128은 128비트 보안을 제공하고 AES256은 256비트 보안을 제공합니다.
모드를 선택할 때 주목할 만한 두 가지 보안 제약 조건은 다음과 같습니다.
- QPS: 동일한 키로 암호화되는 메시지 수
- 메시지 크기: 메시지 크기는 얼마나 되나요?
지원되는 키 유형:
- 16바이트 초기화 벡터 (IV)가 있는 AES-CTR-HMAC (AES128_CTR_HMAC_SHA256, AES256_CTR_HMAC_SHA256)는 경계가 양호한 가장 보수적인 모드입니다.
- 키 커밋
- AES-EAX (AES128_EAX, AES256_EAX)는 AES128_CTR_HMAC_SHA256보다 약간 덜 보수적이고 약간 더 빠릅니다.
- 키 커밋이 아닌 MLGR
- AES-GCM (AES128_GCM, AES256_GCM)은 일반적으로 메시지 수 (232) 및 메시지 크기(메시지당 ~64GB)에 대한 가장 엄격한 제한이 있는 가장 빠른 모드입니다. 이러한 한도를 초과하면 AES-GCM은 일반 텍스트와 AES-GCM 내부 키의 인증 부분을 유출하여 심각한 오류를 일으킵니다.
- AES-GCM-SIV (AES128_GCM_SIV, AES256_GCM_SIV)[RFC8452] 는 우발적인 nonce 오용에 대한 내성이 있으며 AES-GCM과 거의 동일한 성능을 발휘합니다. 임의 IV가 있는 AES-GCM-SIV의 메시지 수 및 메시지 크기 한도는 AES-GCM의 한도보다 훨씬 높습니다. 이러한 한도를 초과하면 AES-GCM-SIV는 덜 치명적으로 실패합니다. 두 메시지가 동일하다는 것만 유출됩니다.
AES-GCM-SIV는 사용하기에 더 안전하지만 실제로는 널리 사용되지 않습니다.
- 무작위 nonce의 경계:
- 232 메시지(각 일반 텍스트는 최대 8GiB)
- 248 메시지(각 일반 텍스트는 최대 32MiB)
- 264 메시지(각 일반 텍스트는 최대 128KiB)
- Java에서 사용하려면 Conscrypt를 설치합니다.
- 키 커밋이 아닌 ADGKLS
- 무작위 nonce의 경계:
- XChaCha20-Poly1305 (XCHACHA20_POLY1305)는 AES-GCM보다 메시지 수와 메시지 크기에 대한 한도가 훨씬 크지만 실패할 경우(가능성이 매우 낮음) 키 자료도 유출됩니다. 하드웨어 가속이 아니므로 하드웨어 가속을 사용할 수 있는 상황에서는 AES 모드보다 느릴 수 있습니다.
- 키 커밋이 아닌 LGR
AEAD 암호문의 유선 형식에 대해 자세히 알아보세요.
보안 보장
AEAD 구현은 다음을 제공합니다.
- CCA2 보안
- 80비트 이상의 인증 강도
- 총 250바이트로 최소 232개의 메시지를 암호화하는 기능 최대 232개의 선택된 일반 텍스트 또는 선택된 암호문이 있는 공격은 성공 확률이 2-32보다 크지 않습니다.
사용 사례
데이터를 암호화하고 암호문을 컨텍스트에 바인딩하고 싶습니다.