레인보우 테이블 공격 (Rainbow Table Attack)
한 줄 정의: 레인보우 테이블 공격은 미리 계산해둔 평문-해시 값 쌍의 표를 이용해 유출된 해시 값으로부터 원래 비밀번호를 빠르게 역추적하는 공격 기법입니다.
쉽게 풀면
도둑이 자물쇠를 하나씩 따는 대신, 미리 만들어둔 만능 열쇠 목록을 들고 다니는 것과 비슷합니다. 공격자는 가능한 비밀번호 후보들을 미리 해시로 변환해 거대한 표를 만들어두고, 유출된 해시 값을 그 표에서 찾아보기만 하면 됩니다. 매번 새로 계산할 필요가 없어 공격 속도가 매우 빨라집니다. 이 공격은 salt 없이 저장된 해시에 특히 효과적입니다.
왜 중요한가
정보보안학에서는 비밀번호 저장 방식의 취약점을 분석할 때 레인보우 테이블 공격이 salt의 필요성을 설명하는 대표적 근거로 다뤄집니다. 이 공격 원리를 이해하면 왜 PBKDF2나 Argon2 같은 함수가 salt와 반복 연산을 요구하는지 논리적으로 설명할 수 있어, 인증 시스템 설계 논문에서 위협 모델로 자주 인용됩니다.
논문에서는 이렇게 쓰입니다
"salt가 적용되지 않은 해시 저장 방식은 레인보우 테이블 공격에 취약함을 실험적으로 확인하였다."
salt 미적용 시스템의 취약점을 실증적으로 검증한 연구 예시입니다.
"본 연구에서는 사용자별 고유 salt를 적용하여 레인보우 테이블 공격을 원천적으로 차단하는 방식을 제안한다."
salt를 대응책으로 제시해 공격을 방어하는 설계를 다룬 사례입니다.
조금 더 깊게 보면
레인보우 테이블은 단순 조회 테이블보다 저장 공간을 절약하기 위해 감소 함수(reduction function)와 체인 구조를 사용해 계산-저장 공간의 트레이드오프를 최적화한 자료구조입니다. salt를 추가하면 사용자마다 다른 해시 결과가 나오므로 하나의 표로는 모든 계정을 공격할 수 없게 됩니다.
주의할 점
salt를 적용했다고 해서 무조건 안전한 것은 아니며, 반복 횟수가 낮거나 알고리즘 자체가 빠르면 여전히 개별 계정에 대한 무차별 대입 공격에 노출될 수 있습니다. 레인보우 테이블 방어는 여러 대책 중 하나일 뿐입니다.