연관 데이터로 암호화 인증 (AEAD) 기본은 데이터 암호화에 가장 일반적인 기본이며 대부분의 요구사항에 적합합니다.
AEAD에는 다음과 같은 속성이 있습니다.
- Secrecy: 길이 외에는 일반 텍스트에 대해 알려진 것이 없습니다.
- 진위성: 암호화된 암호문의 기본 일반 텍스트를 감지되지 않고 변경하는 것은 불가능합니다.
- 대칭: 일반 텍스트를 암호화하고 암호문을 복호화하는 데 동일한 키가 사용됩니다.
- 무작위화: 암호화가 무작위화됩니다. 동일한 일반 텍스트를 가진 두 메시지는 서로 다른 암호 텍스트를 생성합니다. 공격자는 어떤 암호문이 특정 일반 텍스트에 해당하는지 알 수 없습니다. 이를 방지하려면 결정적 AEAD를 대신 사용하세요.
관련 데이터
AEAD는 암호문을 특정 연관 데이터에 연결하는 데 사용할 수 있습니다. user-id 및 encrypted-medical-history 필드가 있는 데이터베이스가 있다고 가정해 보겠습니다. 이 시나리오에서는 user-id을 encrypted-medical-history을 암호화할 때 연결된 데이터로 사용할 수 있습니다. 이렇게 하면 공격자가 한 사용자의 의료 기록을 다른 사용자로 이동할 수 없습니다.
연결된 데이터는 선택사항입니다. 지정된 경우 동일한 연결된 데이터가 암호화 및 복호화 호출 모두에 전달되어야만 복호화가 성공합니다.
키 유형 선택
대부분의 용도에는 AES128_GCM이 권장되지만 다양한 요구사항에 맞는 다양한 키 유형이 있습니다 (256비트 보안의 경우 아래에서 AES128을 AES256으로 대체). 일반적으로:
- 16바이트 초기화 벡터 (IV)가 있는 AES128_CTR_HMAC_SHA256은 경계가 적절한 가장 보수적인 모드입니다.
- AES128_EAX는 AES128_CTR_HMAC_SHA256보다 약간 덜 보수적이고 약간 더 빠릅니다.
- AES128_GCM은 일반적으로 가장 빠른 모드이며 메시지 수와 메시지 크기에 가장 엄격한 제한이 있습니다. 일반 텍스트 및 관련 데이터 길이 (아래)에 대한 이러한 한도를 초과하면 AES128_GCM이 실패하고 키 자료가 유출됩니다.
- AES128_GCM_SIV는 AES128_GCM과 거의 동일한 속도입니다. 메시지 수와 메시지 크기에 관해 AES128_GCM과 동일한 제한이 있지만 이러한 제한을 초과하면 덜 심각한 방식으로 실패합니다. 두 메시지가 동일하다는 사실만 유출될 수 있습니다. 따라서 AES128_GCM보다 안전하지만 실제로는 덜 널리 사용됩니다. Java에서 이를 사용하려면 Conscrypt를 설치해야 합니다.
- XChaCha20Poly1305는 AES128_GCM보다 메시지 수와 메시지 크기 제한이 훨씬 크지만 실패할 경우 (매우 드물지만) 키 자료도 유출됩니다. 하드웨어 가속이 적용되지 않으므로 하드웨어 가속을 사용할 수 있는 상황에서는 AES 모드보다 느릴 수 있습니다.
보안 보장
AEAD 구현은 다음을 제공합니다.
- CCA2 보안
- 80비트 이상의 인증 강도
- 총 250바이트의 메시지를 최소 232개 암호화할 수 있어야 합니다. 선택한 일반 텍스트 또는 선택한 암호 텍스트가 최대 232개인 공격의 성공 확률이 2-32보다 크지 않습니다.
사용 사례
데이터를 암호화하고 암호문을 컨텍스트에 바인딩하고 싶습니다를 참고하세요.