관련 데이터로 인증 암호화 (AEAD)

연관 데이터로 암호화 인증 (AEAD) 기본은 데이터 암호화에 가장 일반적인 기본이며 대부분의 요구사항에 적합합니다.

AEAD에는 다음과 같은 속성이 있습니다.

  • Secrecy: 길이 외에는 일반 텍스트에 대해 알려진 것이 없습니다.
  • 진위성: 암호화된 암호문의 기본 일반 텍스트를 감지되지 않고 변경하는 것은 불가능합니다.
  • 대칭: 일반 텍스트를 암호화하고 암호문을 복호화하는 데 동일한 키가 사용됩니다.
  • 무작위화: 암호화가 무작위로 지정됩니다. 동일한 일반 텍스트를 가진 두 메시지는 서로 다른 암호 텍스트를 생성합니다. 공격자는 어떤 암호문이 특정 일반 텍스트에 해당하는지 알 수 없습니다. 이를 방지하려면 결정적 AEAD를 대신 사용하세요.

관련 데이터

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

연결된 데이터는 선택사항입니다. 지정된 경우 동일한 연결된 데이터가 암호화 및 복호화 호출 모두에 전달되어야만 복호화가 성공합니다.

키 유형 선택

대부분의 용도에는 AES128_GCM이 권장되지만 다양한 요구사항에 맞는 다양한 키 유형이 있습니다. AES128은 128비트 보안을 제공하고 AES256은 256비트 보안을 제공합니다.

모드를 선택할 때 주목할 만한 두 가지 보안 제약 조건은 다음과 같습니다.

  1. QPS: 동일한 키로 암호화된 메시지는 몇 개입니까?
  2. 메일 크기: 메일 크기는 얼마나 되나요?

일반적으로:

  • 16바이트 초기화 벡터 (IV)가 있는 AES-CTR-HMAC (AES128_CTR_HMAC_SHA256, AES256_CTR_HMAC_SHA256)는 경계가 적절한 가장 보수적인 모드입니다.
  • AES-EAX (AES128_EAX, AES256_EAX)는 AES128_CTR_HMAC_SHA256보다 약간 덜 보수적이고 약간 빠릅니다.
  • AES-GCM (AES128_GCM, AES256_GCM)은 일반적으로 메시지 수와 메시지 크기에 가장 엄격한 제한이 있는 가장 빠른 모드입니다. 일반 텍스트 및 연결된 데이터 길이 (아래)에 대한 이러한 제한을 초과하면 AES-GCM이 심각하게 실패하고 키 자료가 유출됩니다.
  • AES-GCM-SIV (AES128_GCM_SIV, AES256_GCM_SIV)는 AES-GCM과 거의 동일한 속도입니다. 메시지 수와 메시지 크기에 관한 제한은 AES-GCM과 동일하지만 이러한 제한을 초과하면 덜 심각한 방식으로 실패합니다. 두 메시지가 동일하다는 사실만 유출될 수 있습니다. 따라서 AES-GCM보다 안전하게 사용할 수 있지만 실제로는 덜 널리 사용됩니다. Java에서 이를 사용하려면 Conscrypt를 설치해야 합니다.
  • XChaCha20-Poly1305 (XCHACHA20_POLY1305)는 AES-GCM보다 메시지 수와 메시지 크기에 훨씬 큰 제한이 있지만 실패할 경우(매우 드물지만) 키 자료도 유출됩니다. 하드웨어 가속이 아니므로 하드웨어 가속을 사용할 수 있는 상황에서는 AES 모드보다 느릴 수 있습니다.

보안 보장

AEAD 구현은 다음을 제공합니다.

  • CCA2 보안
  • 80비트 이상의 인증 강도
  • 총 250바이트의 메시지를 최소 232개 암호화할 수 있어야 합니다. 선택한 일반 텍스트 또는 선택한 암호 텍스트가 최대 232개인 공격의 성공 확률이 2-32보다 크지 않습니다.

사용 사례

데이터를 암호화하고 암호문을 컨텍스트에 바인딩하고 싶습니다를 참고하세요.