[알고리즘] 해시 함수

silver0·2022년 8월 1일
0

Algorithm

목록 보기
11/14

해시 함수?
주어진 데이터를 고정 길이의 불규칙한 숫자로 변환하는 함수

해시 함수는 믹서기를 생각해보면 이해하기 쉽다고 한다.

데이터를 해시 함수에 넣으면 고정 길의 불규칙한 숫자를 출력한다.
해시 함수는 데이터를 분리하는 기계라고 생각하면 이해하기 쉽고,
이 불규칙한 숫자를 '해시값' 이라고 한다.
해시값은 숫자이지만 16진수로 표기하는 경우가 많다.

16진수
0~9 숫자와 A~F의 알파벳으로 이루어진 16개의 문자를 사용해서 숫자를 표현

컴퓨터는 모든 데이터를 2진수로 관리한다.
해시값도 데이터의 일종이므로 표기는 16진수로 하지만, 내부에서는 2진수로 관리된다. 실제로 해시 함수는 컴퓨터 내부에서 수치를 계산한다.

특징

  1. 출력하는 값의 데이터 길이가 바뀌지 않는다.

매우 큰 데이터를 입력해도 출력되는 해시값의 데이터 길이는 바뀌지 않는다.
매우 작은 데이터를 입력해도 출력되는 해시값의 데이터 길이는 바뀌지 않는다.

  1. 입력이 같으면 출력도 반드시 같다.
  1. 비슷한 데이터를 입력해도 1비트라도 다른 데이터라면 출력이 크게 달라진다.

비슷한 데이터를 입력한다고 해서 해시값도 비슷해지지 않는다.

  1. 전혀 다른 데이터를 입력해도 같은 해시값이 나올 수 있는 경우가 낮은 확률로 존재한다.
    • 해시값 충돌
  1. 해시값으로부터 원 데이터를 역산하는 것이 사실상 불가능하다.

데이터 입력과 출력의 흐름이 단방향으로 이루어지며, 이것은 '암호화' 크게 다른 점이다.

  1. 해시값을 결정하는 계산이 비교적 간단하다.

해시함수 알고리즘

  1. MD5(Message Digest Algorithm)

    • 임의의 길이의 값을 입력 받아서 128비트 길이의 해시값을 출력하는 알고리즘
    • 패스워드 암호화에 많이 사용되고, 패스워드를 MD5로 해시해서 나온 값을 저장해 두는 것
    • 현재는 안정성의 문제로 사용을 권장하지 않으며, 심각한 보안 문제를 야기할 수도 있다.
  2. SHA(Secure Hash Algorithm)

    • 1993년부터 미국 NSA가 제작하고 미국 국립표준기술연구소(NIST)에서 표준으로 채택한 암호학적 해시 함수이다.
    • 표준으로 SHA-0을 발표되었으나 위험성이 발견되어 개선하며 SHA-1을 발표했지만 해시 충돌을 이용한 위험성이 발견되어 사용 권장하지 않는다.
    • SHA-2는 이를 개선한 버전이고 SHA-225, SHA-256, SHA-384, SHA-512비트를 선택해서 사용할수 있고, 해시 길이가 길수록 더 안전하다.
    • 2012년 10월에는 더욱더 안정성이 높은 방식으로 설계된 SHA-3가 정식 발표되었다.

해시 생성

https://www.convertstring.com/ko/Hash/SHA256

  • SHA-256
  • SHA-384
  • SHA-512
  • SHA-1

알고리즘에 따라 계산 방법이 다른데, 알고리즘이 다르면 같은 데이터를 입력해도 해시값은 달라진다.

활용 예

'메시지 인증 코드', '해시 테이블'에서 해시 함수를 이용한다.

  1. 서버에 패스워드 저장

사용자가 입력한 패스워드를 서버에 저장할 때도 해시 함수가 사용된다.
패스워드를 그대로 서버에 저장하면 제삼자가 저장된 패스워드를 훔쳐볼 수 있지만,
패스워드의 해시값을 생성해서 그 값만 저장해두고 사용자가 패스워드를 입력했을 때
입력한 값의 해시값을 찾아서 데이터베이스의 해시값과 비교한다.
설령 해시값이 노출됐다고 해도 해시값으로부터 원 데이터를 역산하는 것이 불가능하므로
원래의 패스워드를 알아낼 수 없다.

  1. 복제 문서 판별
    버전관리나 문서 복제 등을 체크하기 위해서 해시 함수를 사용하는 경우가 꽤 많다.
    해시는 모든 문자열을 일정 크기로 변환하기 때문에 모든 단어를 비교하는 것보다
    속도가 비약적으로 빠르다.

  2. 검색 용도
    문자를 숫자나 저장되는 주소로 치환하여 검색에 사용되는 예도 있다.




Reference

profile
작은 일이라도 꾸준히 노력하면 큰 뜻을 이룰 수 있다

0개의 댓글