티스토리 뷰

Development/Network

[Network]해싱(Hashing)

Vagabund.Gni 2022. 9. 20. 17:53
728x90
반응형

해싱은 특정 대상에게 해시 함수(Hash Function)를 적용하는 행위를 가리킨다.

 

계속해서 해시 함수임의의 길이를 갖는 임의의 데이터를 받아 고정된 길이의 데이터를 리턴하는 단방향 함수를 말한다.

 

예를 들어 자바에서 입력받은 숫자를 10으로 나눈 뒤 나머지를 리턴하는 '%10' 연산자도 해시함수라 할 수 있다.

 

나올 수 있는 해시값이 정해진 범위(0~9) 사이에 있기 때문이다.

 

또한 단방향이기 때문에 앞선 글에서 알아봤던 양방향 암호화/복호화와 달리 해싱은 암호화만을 가리키는 말이 된다.

 

해시값은 해시 함수와 함께 정확한 정보를 입력했는지 검증만 하는 용도이기 때문에 복호화 할 필요가 없기 때문이다.

 

해시 함수의 특징은 아래와 같으며,

 

  • 비교적 간단한 알고리즘으로 시스템 자원을 덜 소모한다, 즉 해시값 생성에 많은 시간이 들지 않는다.
  • 해시값을 해독할 때는 많은 시간이 든다.
  • 같은 입력 값에 대해선 같은 출력 값이 보장되며, 출력 값은 고르게 분포한다.
  • 입력값이 아주 조금만 변해도(abcd1 → abcd2) 출력 값은 크게 달라진다(이를 눈사태 효과라 한다).

    • MD5("The quick brown fox jumps over the lazy dog") = 9e107d9d372bb6826bd81d3542a419d6
    • MD5("The quick brown fox jumps over the lazy dog.") = e4d909c290d0fb1ca068ffaddf22cbd0
  • 다른 입력 값에 대해서 같은 값이 출력될 확률(이를 충돌이라 부른다)은 0에 가깝다.
  • 충돌을 의도적으로 계산하는 방법은 존재하지 않는다.

함수에 대한 정보가 없다면 제삼자는 물론 DB 관리자조차 원래 데이터가 무엇인지 추측조차 할 수 없다.

 

따라서 회원가입 시 비밀번호 등의 정보를 DB에 저장할 때 암호화하는 수단으로 사용된다.

 

추가로 해싱에서 입력값에 별도의 값을 추가하는 것을 소금을 치는 것에 빗대어 Salting이라고 하며,

 

완전 탐색이나 레인보우 테이블 전략 혹은 알고리즘 노출의 위험에서 정보를 보호하는 안전장치 역할을 한다.

 

예를 들면, Salting을 적용하게 되면 복수의 클라이언트가 같은 비밀번호를 사용하더라도 다른 해시값을 가지게 된다.

 

마지막으로 Salting을 적용하는 데에는 아래와 같은 몇 가지 원칙이 있다.

 

  • Salt는 유저와 패스워드 별로 유일한 값을 가져야 한다.
  • 계정 생성 및 비밀번호 변경시마다 임의의 Salt를 새로 배정해야 한다.
  • Salt는 절대 재사용하지 않는다.
  • Salt는 DB의 유저 테이블에 함께 저장한다.
반응형

'Development > Network' 카테고리의 다른 글

[Network]세션 기반 인증 vs. 토큰 기반 인증  (0) 2022.09.23
[Network]세션(Session)  (4) 2022.09.20
[Network]쿠키(Cookie)  (1) 2022.09.20
[Network]TLS, HTTPS  (1) 2022.09.20
[네트워크]REST API  (1) 2022.08.04
[네트워크]AJAX  (0) 2022.08.04
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/06   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
글 보관함