인증 블록 암호 (Authenticating Block Cipher)
인증 블록 암호(Authenticating Block Cipher)는 블록 암호 자체에 인증 값 또는 인증 필드를 내재적으로 포함시키는 방식입니다. 평문 블록의 일부를 정해진 값(예: 고정 패턴, 일련번호, 해시값)으로 채운 뒤 통째로 암호화하고, 복호화 후 그 필드가 기대한 값과 일치하는지 확인해 메시지가 바뀌지 않았음을 검증합니다.
자세히 알아보기
좋은 블록 암호는 입력의 1비트만 바뀌어도 출력 전체가 예측할 수 없게 바뀝니다(애벌랜치 효과). 따라서 공격자가 암호문을 조금이라도 건드리면 복호화된 평문 전체가 무작위처럼 망가지고, 그 안에 있던 인증 필드도 기대값과 달라집니다. 이 성질을 이용하면 별도의 메시지 인증 코드(MAC) 없이도 변조를 탐지할 수 있습니다. 학계에서는 이를 '인코딩 후 암호화(encode-then-encipher)' 방식으로 정리했습니다.
이 방식이 안전하려면 조건이 있습니다. 인증 필드가 충분히 길어야 무작위로 맞을 확률이 무시할 만큼 작아지고, 블록 전체가 하나의 강한 의사난수 순열처럼 동작해야 합니다. 그래서 일반적인 128비트 블록보다 메시지 전체를 하나의 블록으로 다루는 넓은 블록(wide-block) 암호와 함께 논의되는 경우가 많습니다. 반대로 ECB나 CBC처럼 작은 블록을 이어 붙이는 운용 모드에 단순히 필드를 넣는 것만으로는 충분한 무결성을 보장하지 못합니다.
현대 실무에서는 같은 목적을 인증 암호화(AEAD) 방식으로 달성하는 것이 표준입니다. AES-GCM, ChaCha20-Poly1305는 암호화와 인증 태그 생성을 한 번에 처리하며, TLS 1.3 등 주요 프로토콜이 이를 사용합니다. 직접 인증 블록 암호를 설계해 쓰기보다는 검증된 AEAD 구성을 사용하는 것이 권장됩니다.
인증 블록 암호와 AEAD의 차이를 정리하면 이렇습니다. 인증 블록 암호는 인증 정보를 평문 블록 안에 넣어 암호문 길이를 늘리지 않거나 조금만 늘리는 대신, 블록 전체가 강한 순열이어야 한다는 엄격한 조건이 붙습니다. AEAD는 암호문 뒤에 보통 128비트의 인증 태그를 붙이며, 헤더처럼 암호화하지 않는 데이터까지 함께 인증할 수 있습니다. 어느 쪽이든 복호화 후 검증에 실패하면 결과를 버리고 오류만 알리는 것이 원칙입니다.
블록체인·암호화폐에서는
블록체인 자체는 전자서명과 해시로 무결성을 보장하지만, 지갑 앱이 개인 키나 키스토어 파일을 암호화해 저장할 때는 무결성 확인이 필수입니다. 비밀번호가 틀렸거나 파일이 손상되었을 때 이를 감지하지 못하면 잘못된 키가 복원될 수 있기 때문입니다. 이 때문에 최신 지갑과 하드웨어 장치는 AEAD나 MAC을 결합한 암호화 방식을 사용합니다.
쉽게 말하면
봉투 안 편지에 미리 정한 도장을 함께 넣어 밀봉하는 것과 같습니다. 누군가 봉투를 열어 내용을 바꾸면 도장이 망가져 있어 바로 알아챌 수 있습니다.
이 글은 학습을 위한 일반 정보이며 투자 권유나 법률 자문이 아닙니다. 가상자산은 가격 변동이 크고 원금 손실 위험이 있습니다.