연관 데이터로 암호화 인증 (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)는 AES-GCM과 거의 동일한 속도입니다.
메시지 수와 메시지 크기에 관해 AES-GCM과 동일한 제한이 있지만 이러한 제한을 초과하면 덜 치명적인 방식으로 실패합니다. 두 메시지가 동일하다는 사실만 유출될 수 있습니다. 따라서 AES-GCM보다 안전하게 사용할 수 있지만 실제로는 널리 사용되지 않습니다. Java에서 이를 사용하려면 Conscrypt를 설치해야 합니다.
- 키 커밋 ADGKLS가 아님.
- XChaCha20-Poly1305 (XCHACHA20_POLY1305)는 AES-GCM보다 메시지 수와 메시지 크기에 훨씬 더 큰 제한이 있지만 실패하는 경우(매우 드물지만) 키 자료도 유출합니다. 하드웨어 가속화가 아니므로 하드웨어 가속화가 가능한 상황에서는 AES 모드보다 느릴 수 있습니다.
- 키 커밋 LGR이 아님.
AEAD 암호문의 와이어 형식에 관해 자세히 알아보세요.
보안 보장
AEAD 구현은 다음을 제공합니다.
- CCA2 보안.
- 최소 80비트 인증 강도.
- 총 250바이트로 최소 232개의 메시지를 암호화하는 기능. 최대 232개의 선택된 일반 텍스트 또는 선택된 암호문이 있는 공격의 성공 확률은 2-32보다 크지 않습니다.
사용 사례
데이터를 암호화하고 암호문을 컨텍스트에 바인딩 하고 싶음을 참고하세요.