:어떠한 문자열에 임의의 연산을 적용하여 다른 문자열로 변환하는 것
:key 값 해쉬 함수(Hash Function)라는 수식에 대입시켜 계산한 후 변환
Hash Function :값을 바꾸기 위한 수식
Hashing은 보안에서도 사용되지만 자료구조에서도 사용이 된다.
기존에는 Client 서버에 요청 서버에서는 db에서 가져와서 클라이언트에 응답한다.이렇게되면 보안상 이슈가 발생할 수 있다.그래서 간단하게 비밀번호를 넣어서 한다면 서버에서 db에서 비밀번호를 비교해보고 맞으면 반환하는 방식으로 한다.하지만 이 것만으로는 부족하다. 왜나하면 해커가 db에 접근해서 유저의 비밀번호를 알아 낼 수 있다.그래서 DB에 암호화하여 비밀번호를 저장한다면 그런 일을 발생하지 않을 수 있다.이 암호화하는 방법을 Hashing이라 한다.
*암호화(Encryption)
:일련의 정보를 임의의 방식을 사용하여 다른 형태로 변환하여 해당 방식에 대한 정보를 소유한 사람을 제외하고 이해할 수 없도록 '알고리즘'을 이용해 정보를 관리하는 과정
(1) 모든 값에 대해 hash 값을 계산하는데 오래걸리지 않아야 한다.
-너무 오래 걸린다면 사용할 유저가 없기 때문
(2) 최대한 hash 값을 피해야 하며,모든 값은 고유한 hash 값을 가진다.
-전혀다른 값인데 매우 드물게 똑같은 hash값을 가질 수 있다. 이것을 피할 수 있도록 알고리즘을 만들어야한다.
(3) 아주 작은 단위의 변경이라도 완전히 다른 hash 값을 가져야 한다.
-예를들어 aaab aab같은경우 비슷한 문자열이지만 완전 다른 hash값을 가져야 hash값을 보고 유추할 수 없게 된다.
:암호화해야 하는 값에 어떤 '별도의 값'을 추가하여 결과를 변형하는 것
암호화하려는 값 + salt 용 값 ->hash 값
-사용하는 이유
1.암호화만 해놓는다면 hash된 결과가 늘 동일하여 hash된 값과 원래 값을 테이블로 만들어서 decoding을 할 수도 있다.(rainbow table)
2.원본 값에 임의로 약속된 별도의 문자열을 추가하여 해시를 진행한다면 기존 hash값과 전혀 다른 hash값이 반환되어 알고리즘이 노출되더라도 원본값을 보호할 수 있도록 하는 안전 장치
-주의할 점
1.user와 password 별로 유일한 값을 가져야 한다.
2.user 계정을 생성할때와 바밀번호를 변경할 때 마다 새로운 임의의 Salt 사용하여 hashing을 해야한다.
3.Salt는 절대 재사용하지 말아야 한다.
4.Salt는 DB의 유저 테이블에 같이 저장되어야 한다