본문 바로가기
IT/Security

[Cryptography] Salt

by 물통꿀꿀이 2019. 2. 23.

왠 소금을 알아보나 하겠지만 여기서 Salt는 암호학에서 말하는 양념장같은 값이다. 그럼 지금부터 살펴보려고 한다.


한 마디로 Salt는 랜덤 데이터로 Hash와 같은 단일 방향 (one-way) 함수에서 사용하는 추가적인 입력값이다.

이 랜덤 데이터는 일반적으로 비밀번호를 관리할 때 사용하는데, 이전에는 시스템에 비밀번호를 Plain Text 형태로 저장했다면 지금은 각 사용자의 비밀번호마다 Salt의 랜덤데이터를 포함하여 Hashing 값을 저장한다. (저장하는 방식은 다양하다.)


간단한 예시를 확인해보자.

UsernamePassword
user1password123
user2password123

위의 테이블은 각 사용자의 이름과 비밀번호가 담겨있다. 물론 그대로 사용해도 되지만 보안상 굉장히 취약하기에 사용하면 안된다.

그래서 Salt를 사용하여 좀 더 안전하게 만들어야 한다.

Username

Salt value

String to be hashed

Hashed value = SHA256 (Salt value + Password)

user1E1F53135E559C253password123E1F53135E559C25372AE25495A7981C40622D49F9A52E4F1565C90F048F59027BD9C8C8900D5C3D8
user284B03D034B409D4Epassword12384B03D034B409D4EB4B6603ABC670967E99C7E7F1389E40CD16E78AD38EB1468EC2AA1E62B8BED3A

Salt의 랜덤 데이터 크기는 상관없지만 여기서는 8 바이트로 고정하여 생성한다. 그리고 "String to be hash" 를 보면 Plain Text와 Salt 값이 문자열 그대로 합쳐진 것을 확인 할 수 있다. 이 후에 해당 값을 Hashing 하면 각 사용자 비밀번호의 Hash 값을 얻을 수 있다.


이렇듯 사용하기 간편한 Salt를 사용하는 이유는 바로 보안 때문이다. Salt를 통해 Dictionary Attack이나 Rainbow Table Attack의 위험을 경감시킬 수 있다. 

그 이유는 위에서도 언급했듯이 Salt는 랜덤 데이터를 사용해서 기존 값에 덧붙이기 때문에 사용자는 랜덤 데이터를 알 수가 없다. 


그러나 한 가지 명심해야 할 점은 원본 비밀번호가 쉽게 만들어진다면 이러한 기술자체가 의미가 없어진다. (추측해서 패스워드를 입력하면 되기 때문에)


참조

https://en.wikipedia.org/wiki/Salt_%28cryptography%29

'IT > Security' 카테고리의 다른 글

[Cryptography] PKCS  (0) 2019.02.24

댓글