레인보 테이블

레인보우 테이블 (Rainbow table)은 암호화 해시 함수를 사용하여 생성된 해시값을 미리 계산하여 저장해 둔 표이다. 이 표를 사용하여 해시값을 원래의 평문으로 되돌리는 크래킹 기법을 레인보우 테이블 공격이라고 한다. 레인보우 테이블은 시간-메모리 교환(time-memory trade-off) 기법의 한 종류로, 무작위 대입 공격(brute-force attack)이나 사전 공격(dictionary attack)보다 훨씬 효율적으로 암호를 해독할 수 있다.

레인보우 테이블은 해시 함수 자체의 취약점을 이용하는 것이 아니라, 미리 계산된 해시값을 저장해 둠으로써 해독 속도를 높이는 방식이다. 따라서 해시 함수가 강력하더라도 레인보우 테이블 공격에 취약할 수 있다. 레인보우 테이블의 크기가 클수록 더 많은 해시값을 저장할 수 있으므로 해독 성공률이 높아지지만, 저장 공간 또한 많이 필요하게 된다.

레인보우 테이블 공격을 방어하기 위해서는 솔트(salt)를 사용하는 것이 일반적이다. 솔트는 평문에 임의의 문자열을 추가하여 해시값을 생성하는 방식으로, 동일한 평문이라도 솔트가 다르면 해시값이 달라지기 때문에 레인보우 테이블 공격을 어렵게 만든다. 또한, 키 스트레칭(key stretching) 기법을 사용하여 해시 함수를 여러 번 반복적으로 적용하는 것도 방어에 도움이 될 수 있다. 키 스트레칭은 해시값을 계산하는 데 더 많은 시간을 소요하게 만들어 레인보우 테이블 공격의 효율성을 떨어뜨린다.

둘러보기

더 찾아볼 만한 주제