Hashing

MihyunCho·2021년 5월 27일
0
post-thumbnail

Hashing

암호화의 기본.
키 값의 연산에 의하여 직접 접근 가능한 해시테이블(hash table)을 이용한 탐색을 해싱(hashing)이라고 한다.

어떠한 문자열에 임의의 연산을 적용하여 다른 문자열로 변환하는 것

조건

  1. 모든 값에 대해 해시 값을 계산하는데 오래 걸리지 않아야 한다.
  2. 최대한 해시 값을 피해야 하며, 모든 값은 고유한 해시 값을 가진다.
  3. 아주 작은 단위의 변경이라도 완전히 다른 해시값을 가져야 한다.

대표적인 해시 알고리즘 : SHA1 , SHA256...

Salt

암호화 해야 하는 값에 어떤 별도의 값을 추가하여 결과를 변형하는 것.

소금친다...말그대로다.

암호화만 해놓는다면 해시된 결과가 늘 동일하다.
그래서 해시된 값과 원래 값을 테이블(레인보우 테이블)로 만들어서 decoding 해버리는 경우도 생긴다.

원본값에 임의로 약속된 별도의 문자열을 추가하여 해시를 진행한다면 기존 해시값과 전혀 다른 해시값이 반환되어 알고리즘이 노출되더라도 원본값을 보호할 수 있다.

이러한 안전장치를 Salt라고 한다.

  1. 기존: (암호화 하려는 값) => (hash 값)
    Salt 사용: (암호화 하려는 값) + (Salt 값) => (hash 값)

Salt 사용 시 주의사항

  1. Salt는 유저와 패스워드 별로 유일한 값을 가져야 한다.
  2. 사용자 계정을 생성할 때와 비밀번호를 변경할 때 마다 새로운 임의의 Salt를 사용해서 해싱해야 한다.
  3. Salt는 절대 재사용하지 말아야 한다.
  4. Salt는 DB의 유저 테이블에 같이 저장되어야 한다.
profile
Sic Parvis Magna 🧩

0개의 댓글