Hashing
Hashing(해싱)
- 가장 많이 쓰이는 암호화 방식 중 하나
- 복호화가 가능한 다른 암호화 방식들과 달리 해싱은 암호화만 가능!
Hashing의 동작법 및 특징
- 해싱은 해시 함수(Hash Function)을 사용하여 암호화를 진행함
- 항상 같은 길이의 문자열을 리턴함
- 서로 다른 문자열에 동일한 해시 함수를 사용하면 반드시 다른 결과 값이 나옴
- 동일한 문자열에 동일한 해시 함수를 사용하면 항상 같은 결과 값이 나옴
📎 : 대표적인 해시 함수 중 하나인 SHA1에 값 넣어보기
레인보우 테이블과 솔트(Salt)
- 항상 같은 결과 값이 나온다는 특성을 이용해 해시 함수를 거치기 이전의 값을 알아낼 수 있도록 기록해 놓은 표인 레인보우 테이블이 존재
- 레인보우 테이블에 기록된 값의 경우에는 유출 되었을 때 해싱을 했더라도 해싱 이전의 값을 알아낼 수 있으므로 보안에 위협이 됨
- 이 때 사용하는 것이 솔트(Salt)
- 솔트는 소금이라는 뜻 말 그대로 소금을 치듯 해싱 이전의 값에 임의의 값을 더해 데이터가 유출되더라도 해싱 이전의 값을 알아내기 더 어렵게 만드는 방법
- 솔트를 사용하면 해싱값이 유출되더라도 솔트가 함께 유출된 것이 아니라면 암호 이전의 값을 알아내는 것이 불가능에 가까움
해싱의 목적
- 데이터 그 자체를 사용하는 것이 아니라 동일한 값의 데이터를 사용하고 있는지 여부만 확인하면 되서 복호화가 안되도 관계가 없기 때문에 해싱을 사용
- 사이트 관리자는 사용자의 비밀번호를 알고 있을 필요가 없음
- 그래서 비밀번호를 데이터베이스에 저장할 때 복호화가 불가능하도록 해싱하여 저장하게 됨
- 서버측에서 비밀번호를 모르는 상태로 해싱한 값끼리 비교 일치하는 지만 확인함
- 정확한 비밀번호는 몰라도 일치하면 로그인 처리하면 됨