ETC

해시 함수 (hash function)

SongMinu 2020. 12. 31. 23:09
728x90

임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수.

소프트웨어의 성능과 보안을 책임지는 중요한 요소 중 하나이다.

해시 함수를 사용하면 데이터양이 많아져도 일괄된 성능을 보장하는 구조로 설계할 수 있고, 민감한 데이터의 변조를 막을 수 있다.

 

- 처리 방식

변환 전 변환 변환 후
변환 하기 전 데이터 값을
입력값이라 부름
변환 하는 걸 해싱 이라 부름
(해시 함수를 사용)
변환 된 데이터 값을
해시값이라 부름
입력값으로
문자, 숫자, 바이너리 등을 사용
- 입력값을
바이너리 형태로 반환

알아두기!

1. 입력값이 동일하면 변환된 해시 값이 동일하다.

2. 입력값의 길이와 상관없이 변환된 해시 값의 길이는 항상 동일하다.

3. 서로 다른 입력값으로 동일한 해시 값을 만들 확률은 낮다.

4. 출력된 해시값으로 입력값을 유추할 수 없다.

- 해시 함수의 종류

MD5 1990년대 이후부터 사용해온 해시 알고리즘
오래된 만큼 해시 충돌에 필요한 컴퓨터 연산량이 많지 않아 쉽게 해시 충돌을 만들 수 있어서 현재는 많이 사용하지는 않고 있다.
해시 값 길이 : 32
SHA-1 Secure Hash Algorithm - 1
미국 국가안보북 (NSA)에서 설계한 표준 해시 함수
입력값으로 최대 약 200테라 바이트를 사용할 수 있고, 고정된 160비트(20바이트)의 해시값을 생성한다.
해시 값 길이 : 40
2017년에 구글과 네덜란드 국립 정보연구소에서 서로 다른 입력값으로 해시 충돌 방법을 찾았는데.
MD5보다는 훨씬 더 많은 연상량을 필요로해서 희박하긴하다.
하지만 발견된 이상 많이 사용하지는 않는 추세이다.
SHA-2 해시 함수 하나를 지칭하지 않으며 SHA-224, SHA-256, SHA-384, SHA-512 등 여러 해시 함수를 가리킨다.
현재 가장 많이 사용하고 있고, SHA-256 이상을 권장한다.
해시 값 길이는
SHA-256 : 64
SHA-512 : 128

해시 충돌이란 ? 

서로 다른 두 입력값으로 같은 해시 값을 만드는 상황.

 

비밀번호와 민감한 데이터에 사용하기 용이하다.

하지만 조심해야 할 부분이 있는데, 입력값의 길이와 상관없이 고정된 해시값이 나오기 때문에 무차별 대입 공격이나 서비스 거부 공격(DDOS)과 같이 매우 많은 요청을 동시에 보낼 경우 쉽게 서비스 장애가 발생할 수 있다.

 

비밀번호의 경우 입력값을 그대로 받아서 해시값으로 변환하는 것보다는 솔트(salt)를 추가하여 사용하는 것이 더 안전하다.

(클라이언트에서 입력값을 전달 후 입력값에 솔트를 친후 해시 값으로 변환)

 

민감한 데이터에 사용하기 용이한 이유는 입력값의 조금만 변경되어도 해시 값은 완전 다른 결과 값이 나오기 때문에

정보가 변조 됐다는 것을 알 수 있다.

 

반응형

'ETC' 카테고리의 다른 글

2021년 그리고 2022년  (2) 2022.01.01
MongoDB와 ElasticSearch 테스트 (용량, 속도)  (0) 2021.03.25
HTTPS  (0) 2021.01.15
RESTful API  (0) 2021.01.15
UUID - 범용 고유 식별자  (0) 2020.12.28