왠 소금을 알아보나 하겠지만 여기서 Salt는 암호학에서 말하는 양념장같은 값이다. 그럼 지금부터 살펴보려고 한다.
한 마디로 Salt는 랜덤 데이터로 Hash와 같은 단일 방향 (one-way) 함수에서 사용하는 추가적인 입력값이다.
이 랜덤 데이터는 일반적으로 비밀번호를 관리할 때 사용하는데, 이전에는 시스템에 비밀번호를 Plain Text 형태로 저장했다면 지금은 각 사용자의 비밀번호마다 Salt의 랜덤데이터를 포함하여 Hashing 값을 저장한다. (저장하는 방식은 다양하다.)
간단한 예시를 확인해보자.
Username | Password |
user1 | password123 |
user2 | password123 |
위의 테이블은 각 사용자의 이름과 비밀번호가 담겨있다. 물론 그대로 사용해도 되지만 보안상 굉장히 취약하기에 사용하면 안된다.
그래서 Salt를 사용하여 좀 더 안전하게 만들어야 한다.
Username | Salt value | String to be hashed | Hashed value = SHA256 (Salt value + Password) |
user1 | E1F53135E559C253 | password123E1F53135E559C253 | 72AE25495A7981C40622D49F9A52E4F1565C90F048F59027BD9C8C8900D5C3D8 |
user2 | 84B03D034B409D4E | password12384B03D034B409D4E | B4B6603ABC670967E99C7E7F1389E40CD16E78AD38EB1468EC2AA1E62B8BED3A |
Salt의 랜덤 데이터 크기는 상관없지만 여기서는 8 바이트로 고정하여 생성한다. 그리고 "String to be hash" 를 보면 Plain Text와 Salt 값이 문자열 그대로 합쳐진 것을 확인 할 수 있다. 이 후에 해당 값을 Hashing 하면 각 사용자 비밀번호의 Hash 값을 얻을 수 있다.
이렇듯 사용하기 간편한 Salt를 사용하는 이유는 바로 보안 때문이다. Salt를 통해 Dictionary Attack이나 Rainbow Table Attack의 위험을 경감시킬 수 있다.
그 이유는 위에서도 언급했듯이 Salt는 랜덤 데이터를 사용해서 기존 값에 덧붙이기 때문에 사용자는 랜덤 데이터를 알 수가 없다.
그러나 한 가지 명심해야 할 점은 원본 비밀번호가 쉽게 만들어진다면 이러한 기술자체가 의미가 없어진다. (추측해서 패스워드를 입력하면 되기 때문에)
참조
'IT > Security' 카테고리의 다른 글
[Cryptography] PKCS (0) | 2019.02.24 |
---|
댓글