연결된 데이터를 사용한 인증 암호화 (AEAD) 프리미티브는 데이터 암호화에 가장 일반적인 프리미티브이며 대부분의 요구사항에 적합합니다.
AEAD에는 다음과 같은 속성이 있습니다.
- 보안: 일반 텍스트에 길이 외에는 알려진 것이 없습니다.
- 진위성: 암호문의 기초가 되는 암호화된 일반 텍스트를 감지되지 않고 변경할 수 없습니다.
- 대칭: 동일한 키로 일반 텍스트를 암호화하고 암호문을 복호화합니다.
- 무작위 순서 지정: 암호화가 무작위로 이루어집니다. 일반 텍스트가 동일한 두 메시지는 서로 다른 암호문을 생성합니다. 공격자는 주어진 일반 텍스트에 해당하는 암호문을 알 수 없습니다. 이를 방지하려면 대신 확정적 AEAD를 사용하세요.
관련 데이터
AEAD를 사용하여 암호문을 특정 관련 데이터에 연결할 수 있습니다. user-id
및 encrypted-medical-history
필드가 있는 데이터베이스가 있다고 가정해 보겠습니다. 이 시나리오에서는 encrypted-medical-history
를 암호화할 때 user-id
를 관련 데이터로 사용할 수 있습니다. 이렇게 하면 공격자가 의료 기록을 한 사용자에서 다른 사용자로 이동하는 것을 방지할 수 있습니다.
키 유형 선택
대부분의 경우 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과 거의 비슷하며 대량의 메시지에 대한 경계는 매우 양호하지만 약간 덜 확립되어 있습니다. 자바에서 이 기능을 사용하려면 Conscrypt를 설치해야 합니다.
- XChaCha20Poly1305는 AES128_GCM보다 메시지 수와 메시지 크기에 훨씬 더 큰 제한을 두지만 오류가 발생하면 키 자료도 유출됩니다. 하드웨어 가속을 사용하지 않으므로 하드웨어 가속을 사용할 수 있는 경우 AES 모드보다 느릴 수 있습니다.
보안 보장
AEAD 구현은 다음을 제공합니다.
- CCA2 보안
- 인증 강도가 80비트 이상이어야 합니다.
- 최소 232개의 메시지를 총 250바이트로 암호화하는 기능 최대 232개의 선택된 일반 텍스트 또는 선택한 암호문을 사용하는 공격에서는 성공 확률이 2-32보다 큽니다.
사용 사례 예시
데이터를 암호화하고 암호문을 컨텍스트에 결합하려고 합니다.