패스워드 암호화 기술
단방향 암호화를 위한 핵심 알고리즘
한번 암호화되면 복호화되기 어려운 특성
초창기 사용하던 MD2, MD4 해시 알고리즘의 결함을 보완한 알고리즘
단방향 알고리즘이지만 복호화가 된 사례가 종종 있어 거의 사용하지 않음
다이제스트 (Digest)
MD5의 결함을 보완한 해시 알고리즘
해시된 문자열을 만들기 위해 비트 회전 연산이 추가된 방식
패스워드로 사용할만한 문자열들을 Rainbow Table
로 만들어, 해당 목록에 있는 문자열을 동일한 알고리즘으로 암호화한 후, 탈취한 암호화된 문자열과 서로 비교하는 작업을 통해 원본 문자열을 구하는 공격
레인보우 공격을 100% 무력화할 순 없지만 컴퓨터가 다이제스트를 비교하는 작업의 횟수를 줄이는 키 스트레칭 방법과 솔트(Salt)라는 방법이 있다.
키 스트레칭: SHA 알고리즘처럼 해시된 다이제스트를 반복적으로 해시하는 방법이다. 해시 처리가 반복 될수록 다이제스트를 비교하는 횟수도 현저히 줄어든다.
솔트: 패스워드로 입력하는 원본 메시지에 임의의 문자열을 추가해 해시 처리하는 것을 말한다. 솔트를 추가하면 레인보우 테이블을 이용해 비교할 경우의 수가 늘어나므로 레인보우 공격에 대응할 수 있다.
레인보우 공격을 통해 해시된 메시지를 알아내려고 시도하더라도 최대한 많은 비용과 시간이 소요되도록 하는 알고리즘이다.
대표적으로 PBKDF2, bcrypt, scrypt이 있으며, Work Factor는 공격자가 해시 된 메시지를 알아내는 데 많은 비용과 시간이 들게 해주는 특정 요소를 의미한다.
PBKDF2와 bcrypt는 Work Factor로 솔트와 키 스트레칭을 기본적으로 사용하며 내부적으로 훨씬 복잡한 알고리즘을 이용한다.
scrypt는 다이제스트 생성 시, 메모리 오버헤드를 갖도록 설계되어 브루트 포스 공격을 시도하기 위해 병렬화 처리가 어렵도록 설계되어 있다.