공부 일지/네트워크 & 보안

암호화 - Hashing / Salt

Joshbla 2022. 9. 22. 15:45

암호화

암호화란 일련의 정보를 임의의 방식을 사용하여 다른 형태로 변환하여

해당방식에 대한 정보를 소유한 사람을 제외하고 이해할 수 없도록 '알고리즘'을 이용해 정보를 관리하는 과정이다.


Hashing

 Hashing은 원본 문자열을 임의의 연산을 통해

알아볼 수 없는 난해한 문자열로 정의하는 과정이다.

 

규칙

1. 모든 값에 대해 해시 값을 계산하는데 오래걸리지 않아야 한다.

2. 최대한 해시 값을 피해야 하며, 모든 값은 고유한 해시값을 가진다.

3. 아주 작은 단위의 변경이라도 완전히 다른 해시 값을 가져야 한다.

 

예시

SHA1, SHA256, CRC, MD 등이 있다.


 

Salt

암호화해야하는 데이터에 어떤 별도의 값을 추가하여 결과를 변형시킨다.

 

특징

1. 암호화만 해놓는다면 해시된 결과가 늘 동일하다.

2. 만약 알고리즘이 노출되어 해시값이 유출된다고 하더라도

원본이 아닌 별도의 값이 추가된 해시 값이 노출되어 원본을 보호 할 수 있다.

3. 기존 해싱 방식 : (암호화 하려는 값) => (hash 값)

    Salt 사용 방식 : (암호화 하려는 값) + (Salt용 값) => (hash 값)

규칙

1. Salt는 유저와 패스워드 별로 유일한 값을 가져야한다.

2. 사용자 계정을 생성할 때와 비밀번호를 변경할 때 마다 새로운 임의의 Salt를 사용해서 해싱해야 한다.

3. Salt는 절대 재사용하지 말아야한다.

4. Salt는 DB의 유저 테이블에 같이 저장되어야 한다.