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

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

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

  • Secrecy: 일반 텍스트의 길이를 제외하고는 일반 텍스트에 관해 알려진 것이 없습니다.
  • 신뢰성: 암호문 기본의 암호화된 일반 텍스트 를 감지되지 않고 변경할 수 없습니다.
  • 대칭: 일반 텍스트 암호화 및 암호문 복호화는 동일한 키로 실행됩니다.
  • 랜덤화: 암호화가 랜덤화됩니다. 일반 텍스트가 동일한 두 메시지는 암호문이 다릅니다. 공격자는 지정된 일반 텍스트에 해당하는 암호문을 알 수 없습니다. 이를 방지하려면 결정적 AEAD를 대신 사용하세요.

관련 데이터

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

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

키 유형 선택

대부분의 용도에 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보다 약간 덜 보수적이고 약간 더 빠릅니다.
    • 키 커밋 MLGR이 아님.
  • AES-GCM (AES128_GCM, AES256_GCM)은 일반적으로 메시지 수 (232) 및 메시지 크기 (메시지당 ~64GB)에 가장 엄격한 제한이 있는 가장 빠른 모드입니다. 이러한 제한을 초과하면 AES-GCM은 일반 텍스트와 AES-GCM 내부 키의 인증 부분을 유출하여 치명적으로 실패합니다.
    • AES-GCM은 강력하지 않으며[ABN] 키 커밋[GLR]도 아닙니다. 두 개의 서로 다른 키로 복호화할 수 있는 암호문을 생성할 수 있습니다. 이로 인해 실제 공격 [DGRW]이 발생할 수 있습니다. 상대가 키를 선택하는 경우 위협 모델을 신중하게 검토하세요.
  • 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보다 크지 않습니다.

사용 사례

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