길이확장 공격 (Length Extension Attack)

정보보안학
한 줄 정의: 길이확장 공격은 Merkle-Damgård 구조를 사용하는 해시 함수에서, 원본 메시지의 해시값만 알고 있어도 원본 메시지 뒤에 임의의 내용을 덧붙인 새로운 메시지의 유효한 해시값을 원본 메시지 없이 계산할 수 있는 공격입니다.

쉽게 풀면

MD5나 SHA-1, SHA-2 같은 해시 함수는 메시지를 블록 단위로 나눠 순차적으로 처리하면서 중간 결과를 계속 이어받는 방식으로 동작합니다. 그런데 이 중간 결과가 곧 최종 해시값이기 때문에, 공격자가 최종 해시값만 알아도 마치 이어달리기 바통을 이어받듯 그 뒤에 원하는 내용을 추가로 이어붙여 새로운 유효한 해시값을 계산할 수 있습니다. 원본 메시지의 정확한 내용을 몰라도, 그 길이만 알면 이런 확장이 가능하다는 것이 문제입니다.

왜 중요한가

단순히 "비밀키 + 메시지"를 이어붙여 해시하는 방식으로 메시지 인증을 구현하면 이 공격에 취약해질 수 있기 때문에, 정보보안학 분야에서는 웹 API 서명, 세션 토큰 검증 등에서 안전한 메시지 인증 코드 설계 원칙을 설명할 때 이 공격 사례를 자주 인용합니다.

논문에서는 이렇게 쓰입니다

"과거 일부 API 서명 방식이 secret||message 형태로 SHA-256 해시를 계산한 결과, 길이확장 공격에 취약하다는 것이 지적되었다."

잘못된 메시지 인증 설계로 인한 취약점 사례를 설명하는 문맥입니다.

"HMAC 구조는 내부적으로 두 번의 해시 연산을 중첩함으로써 길이확장 공격에 대한 저항성을 확보하도록 설계되었다."

HMAC이 이 공격을 방어하도록 설계된 원리를 설명하는 문맥입니다.

조금 더 깊게 보면

이 공격은 Merkle-Damgård 구조의 해시 함수(MD5, SHA-1, SHA-256 등)에서 발생할 수 있으며, 스펀지 구조를 사용하는 SHA-3(Keccak)는 이 공격에 구조적으로 강하다고 알려져 있습니다. 이 문제를 피하기 위해 HMAC은 키를 두 번 다른 방식으로 섞어 넣는 이중 해시 구조를 사용하며, 이는 RFC 2104에 표준화되어 있습니다.

주의할 점

단순히 해시 함수 앞뒤에 비밀키를 붙이는 방식(prefix/suffix)으로 메시지 인증을 직접 구현하는 것은 안전하지 않으며, HMAC과 같이 검증된 표준 구조를 사용하는 것이 권장됩니다.

관련 용어