레인보우 테이블 공격 (Rainbow Table Attack)

정보보안학
한 줄 정의: 레인보우 테이블 공격은 미리 계산해둔 평문-해시 값 쌍의 표를 이용해 유출된 해시 값으로부터 원래 비밀번호를 빠르게 역추적하는 공격 기법입니다.
레인보우 테이블 공격레인보우 테이블 공격 단계 순서: 해시 사전계산 → 테이블 구축, 테이블 구축 → 유출 해시 조회, 유출 해시 조회 → 비밀번호 획득.해시 사전계산평문-해시 쌍테이블 구축감소 함수·체인 구조유출 해시 조회표에서 일치 탐색비밀번호 획득원래 비밀번호 역추적1234+salt를 쓰면 사용자마다 해시가 달라져 표 하나로 공격 불가레인보우 테이블 공격레인보우 테이블 공격 단계 순서: 해시 사전계산 → 테이블 구축, 테이블 구축 → 유출 해시 조회, 유출 해시 조회 → 비밀번호 획득.해시 사전계산평문-해시 쌍테이블 구축감소 함수·체인 구조유출 해시 조회표에서 일치 탐색비밀번호 획득원래 비밀번호 역추적1234+salt를 쓰면 사용자마다 해시가 달라져 표 하나로공격 불가

쉽게 풀면

도둑이 자물쇠를 하나씩 따는 대신, 미리 만들어둔 만능 열쇠 목록을 들고 다니는 것과 비슷합니다. 공격자는 가능한 비밀번호 후보들을 미리 해시로 변환해 거대한 표를 만들어두고, 유출된 해시 값을 그 표에서 찾아보기만 하면 됩니다. 매번 새로 계산할 필요가 없어 공격 속도가 매우 빨라집니다. 이 공격은 salt 없이 저장된 해시에 특히 효과적입니다.

왜 중요한가

정보보안학에서는 비밀번호 저장 방식의 취약점을 분석할 때 레인보우 테이블 공격이 salt의 필요성을 설명하는 대표적 근거로 다뤄집니다. 이 공격 원리를 이해하면 왜 PBKDF2나 Argon2 같은 함수가 salt와 반복 연산을 요구하는지 논리적으로 설명할 수 있어, 인증 시스템 설계 논문에서 위협 모델로 자주 인용됩니다. 실제로 salt 없이 MD5나 SHA-1로 저장된 과거 시스템의 비밀번호 데이터베이스가 유출되었을 때, 공개된 레인보우 테이블만으로 대량의 계정이 순식간에 복원된 사례가 여러 차례 보고되었습니다.

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

"salt가 적용되지 않은 해시 저장 방식은 레인보우 테이블 공격에 취약함을 실험적으로 확인하였다."

salt 미적용 시스템의 취약점을 실증적으로 검증한 연구 예시입니다.

"본 연구에서는 사용자별 고유 salt를 적용하여 레인보우 테이블 공격을 원천적으로 차단하는 방식을 제안한다."

salt를 대응책으로 제시해 공격을 방어하는 설계를 다룬 사례입니다.

조금 더 깊게 보면

레인보우 테이블은 단순 조회 테이블보다 저장 공간을 절약하기 위해 감소 함수(reduction function)와 체인 구조를 사용해 계산-저장 공간의 트레이드오프를 최적화한 자료구조입니다. salt를 추가하면 사용자마다 다른 해시 결과가 나오므로 하나의 표로는 모든 계정을 공격할 수 없게 됩니다. 감소 함수는 해시값을 다시 후보 평문 형태로 되돌리는 역할을 하며, 이를 여러 번 반복해 체인을 이루면 중간 값들은 저장하지 않고 체인의 시작과 끝 값만 저장해도 전체 경로를 재계산으로 복원할 수 있습니다.

주의할 점

salt를 적용했다고 해서 무조건 안전한 것은 아니며, 반복 횟수가 낮거나 알고리즘 자체가 빠르면 여전히 개별 계정에 대한 무차별 대입 공격에 노출될 수 있습니다. 레인보우 테이블 방어는 여러 대책 중 하나일 뿐입니다.

관련 용어