AE, AEAD / (Authenticated Encryption, Authenticated Encryption with Associated Data)
AE (Authenticated Encryption)
Encryption Data | MAC |
기밀성과 무결성 제공
비밀키(대칭키) 암호화와 MAC을 이용
- Encryption then MAC
- Encryption and MAC
- MAC then Encryption
- IPSEC, TLS, SSHv2
- SSH
SSL/TLS 1.2 이하
AEAD (Authenticated Encryption with Associated Data)
- 기밀성 / 무결성 / 인증 보장 * AE도 인증 됨. 그냥 성능이 좋음
- Associated Data (추가 데이터)
- 암호화되지 않고 인증만 됨
- 네트워크 헤더 정보, 시퀀스 넘버, 프로토콜 버전 등
- tag
- 암호화된 데이터(Cipher Text)와 추가 데이터(Associated Data)를 기반으로 계산된 MAC
- error
- 복호화 및 무결성 검증 결과
AEAD 알고리즘 내에서 tag 해시 계산까지 다 돌아감
저기에 보통 Nonce까지 같이 포함됨, Associated Data는 암호문 외부에 별도로 붙여서 보냄
대표적인 AEAD 알고리즘
GCM(Galois/Counter Mode)
- GHASH 함수 사용
- 병렬 처리 가능
CCM(Counter with CBC-MAC)
- CBC-MAC과 CTR 모드 결합
- 2번 암호화, 병렬 처리에 제한적
ChaCha20-Poly1305
- ChaCha20 스트림 암호 + Poly1305
- 소프트웨어 구현에 최적화
- 구글이 TLS spec에 도입
GCM(Galois/Counter Mode)
- CTR 모드를 사용해서 데이터 암호화.. 오히려 CBC보다 많이 씀
- GHASH를 사용하여 연관 데이터와 암호문의 무결성 및 인증
- 0번째 키 스트림은 보관해뒀다 마지막에 사용(초기 카운터 블록, J0), 1번째 키 스트림부터 평문 암호화에 적용
- additional data에 GHASH
- 1번째 인크립션의 결과, 즉 첫번째 암호문과 이전 GHASH 결과를 XOR 후 GHASH, 반복
- 마지막 암호문까지 XOR후 GHASH, additional data, ciphertext 길이를 붙이고 최종 블록과 XOR, GHASH
- 초기 카운터 블록과 XOR 후 다시 GHASH
=> Authentication Tag
ChaCha20-Poly1305
ChaCha20 스트림 암호
- 키와 난수를 이용하여 암호화 키 생성
- 암호화 키와 평문 XOR 연산 -> 암호문 생성
- 복호화 동일
ChaCha20-Poly1305
- ChaCha20을 이용하여 암호문 생성
- ChaCha20을 이용하여 Poly1305 키 값 생성
- 생성된 키와 암호문을 입력값으로 Poly1305 수행
- Poly1305 출력 값을 인증 tag로 사용