금방 비번을 알게되어 해커의 표적이 될 수 있다!ㄷㄷㄷ...
일련의 정보를 임의의 방식을 사용하여 다른 형태로 변환하여 해당 방식에 대한 정보를 소유한 사람을 제외하고 이해할 수 없도록 알고리즘을 이용해 정보를 관리하는 과정
ex)
(before)
(after)
어떠한 문자열에 임의의 연산을 적용하여 다른 문자열로 변환하는 것
1 . 모든 값에 대해 해시 값을 계산하는데 오래걸리지 않아야 한다.
2 . 최대한 해시 값을 피해야 하며, 모든 값은 고유한 해시 값을 가진다.
3 . 아주 작은 단위의 변경이라도 완전히 다른 해시 값을 가져야 한다.
ex)
암호화해야 하는 값에 어떠한 별도의 값을 추가하여 결과를 변형하는 것
1 . 암호화만 해놓는다면 해시된 결과가 늘 동일하기 때문에 해시된 값과 원래 값을 레인보우 테이블로 만들어서 decoding 해버리는 경우도 생긴다.
2 . 원본값에 임의로 약속된 별도의 문자열을 추가하여 해시를 진행한다면 기존 해시값과 전혀 다른 해시값이 반환되어 알고리즘이 노출되더라도 원본값을 보호할 수 있도록 하는 안전 장치 역할을 한다.
3 . 기존에 (암호화 하려는 값) => (hash 값) 이라면
salt를 사용하면 (암호화 하려는 값) + (Salt 값) => (hash 값)이 되어 전혀 다른 hash 값이 된다.
1 . 유저와 패스워드 별로 유일한 값을 가져야 한다.
2 . 사용자 계정을 생성할 때와 비밀번호를 변경할 때 마다 새로운 임의의 Salt를 사용해서 해싱해야 한다.
3 . 절대로 재사용 불가!
4 . DB의 유저 테이블에 값이 저장되어야 한다.