본문 바로가기

네트워크/기초

Hashing

hash는 부수다는 뜻으로 (hashbrown) 다이제스트라고도 합니다.

암호화에서 해시란 원본 데이터를 잘게 부숴서 결과를 변형하는 것을 의미합니다.

원래 값을 잘게 부숴서 알아볼 수 없게 결과를 변형하는 것입니다.

암호화의 기본으로, 어떠한 문자열에 '임의의 연산'을 적용하여 다른 문자열로 변환하는 것으로, 항상 똑같은 결과를 내며, 사실상 복호화가 불가능합니다. 하지만 뻔한 password같이 레인보우 테이블에 기록된 경우에는 값을 알 수 있습니다.

해시 충돌: 경우에 따라 다른 input임에도 똑같은 해시 값이 나올 수 있습니다.

대표적인 hashing: SHA1, SHA256

적용: 비밀번호에 대한 해시 값이 데이터베이스에 저장됩니다.

조건

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

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

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

Salt

암호화해야 하는 값에 어떤 별도의 값을 추가하여 결과를 변형하는 것으로 암호화만 해놓는다면 해시된 결과가 늘 동일하기 때문에 해시된 값과 원래 값을 테이블(레인보우 테이블)로 만들어 decoding 해버리는 경우가 생겨 원본값에 임의로 약속된 별도의 문자열을 추가해 해싱 진행 시 기존 해시 값과 전혀 다른 해시 값이 반환되어 알고리즘이 노출되더라도 원본 값을 보호할 수 있도록 하는 안전장치입니다.

 

주의 사항

salt는 유저와 패스워드 별로 유일한 값을 가져야 합니다

사용자 계정을 생성할 때와 비밀번호를 변경할 때마다 새로운 임의의 salt를 사용하여 해싱해야 합니다

salt는 절대 재사용하지 말아야 합니다

salt는 DB의 유저 테이블에 같이 저장되어야 합니다

(유저가 비밀번호 입력 시 해당 유저의 salt와 비밀번호를 이용해 다시 해싱해 줄 수 있습니다)

 

반응형

'네트워크 > 기초' 카테고리의 다른 글

Session  (0) 2021.09.11
Cookie  (0) 2021.09.11
HTTPS  (0) 2021.09.10
URL & URI  (0) 2021.08.20
[HTTP/네트워크] 클라이언트 - 서버  (0) 2021.08.20