레인보우 테이블 원리 이해
이 단계에서는 레인보우 테이블의 핵심 원리를 자세히 살펴보겠습니다. 레인보우 테이블은 암호화 해시 함수를 역으로 변환하는 데 사용되는 사전 계산된 테이블로, 주로 비밀번호 해시를 크래킹하는 데 사용됩니다. 가능한 모든 비밀번호 (무차별 대입) 나 사전의 모든 단어를 시도하는 대신, 레인보우 테이블은 사전 계산된 해시 값과 해당 평문 값의 체인 (chain) 을 저장합니다.
기본적인 아이디어는 계산 시간과 저장 공간을 맞바꾸는 것입니다. 시스템이 비밀번호를 저장할 때, 일반적으로 평문 비밀번호 자체가 아니라 해당 해시 값을 저장합니다. 예를 들어, 비밀번호가 password123이라면 시스템은 MD5 해시인 4d7d7e7e7e7e7e7e7e7e7e7e7e7e7e7e를 저장할 수 있습니다. 로그인 시도를 하면 입력한 비밀번호가 해시되고, 이 해시 값이 저장된 해시와 비교됩니다.
레인보우 테이블은 해시와 평문 값의 긴 "체인"을 생성하여 작동합니다. 평문으로 시작하여 해시하고, 해시에 "감소 함수 (reduction function)"를 적용하여 다른 평문을 얻은 다음, 그것을 해시하는 과정을 반복합니다. 이러한 체인의 시작점과 끝점만 테이블에 저장됩니다.
간단한 예시를 살펴보겠습니다.
- 평문
P1로 시작합니다.
P1을 해시하여 H1을 얻습니다.
H1에 감소 함수 R을 적용하여 P2를 얻습니다.
P2를 해시하여 H2를 얻습니다.
H2에 R을 적용하여 P3을 얻습니다.
...이하 사전 정의된 체인 길이만큼 반복합니다.
크래킹하려는 대상 해시 HT가 있을 때, 감소 함수 R을 HT에 적용하여 잠재적인 평문 P_temp를 얻습니다. 그런 다음 P_temp를 해시하고 다시 R을 적용하는 과정을 반복하여 레인보우 테이블에 저장된 끝점 중 하나와 일치하는 해시를 생성합니다. 일치하는 항목이 발견되면 테이블에서 해당 시작점을 검색하고 해당 시작점부터 체인을 다시 생성하여 대상 해시 HT를 생성한 평문을 찾습니다.
이 방법은 대부분의 무거운 작업 (해싱 및 감소) 이 테이블 생성 단계에서 미리 수행되기 때문에 크래킹 시점에 필요한 계산량을 크게 줄여줍니다.
이해를 확인하기 위해 레인보우 테이블 사용과 관련된 절충점을 고려해 보십시오.