암호학에서 솔트(salt)는 데이터, 비밀번호, 통과암호를 해시 처리하는 단방향 함수의 추가 입력으로 사용되는 랜덤 데이터이다. 솔트는 스토리지에서 비밀번호를 보호하기 위해 사용된다. 역사적으로 비밀번호는 시스템에 평문으로 저장되지만 시간이 지남에 따라 추가적인 보호 방법이 개발되어 시스템으로부터 사용자의 비밀번호 읽기를 보호한다. 솔트는 이러한 방식의 하나이다.
솔트는 레인보 테이블과 같은 미리 계산된 테이블을 사용하는 공격을 방어한다.[1]
사용 예시
비밀번호 저장을 위한 솔트 값의 불완전한 예시이다. 최초 테이블은 2개의 사용자 이름과 비밀번호 조합을 갖는다. 비밀번호는 저장되지 않는다.
사용자 이름
|
비밀번호
|
user1
|
password123
|
user2
|
password123
|
솔트값은 랜덤으로 생성되며 길이는 어느 것이든 될 수 있다. 이 경우 솔트값은 8바이트 길이이다. 솔트값은 평문 암호에 추가되며 여기서 결과는 해시 처리되는데 이를 해시된 값으로 부른다. 솔트값과 해시된 값 모두 저장된다.
사용자 이름
|
솔트값
|
해시될 문자열
|
해시된 값 = SHA256 (비밀번호 + 솔트값)
|
user1
|
E1F53135E559C253
|
password123E1F53135E559C253
|
72AE25495A7981C40622D49F9A52E4F1565C90F048F59027BD9C8C8900D5C3D8
|
user2
|
84B03D034B409D4E
|
password12384B03D034B409D4E
|
B4B6603ABC670967E99C7E7F1389E40CD16E78AD38EB1468EC2AA1E62B8BED3A
|
위 표에서 각기 다른 솔트값들은 완전히 다른 해시 처리된 값을 만들어내며 이는 평문 비밀번호가 완전히 동일하더라도 마찬가지이다.
같이 보기
각주
외부 링크