'해시 Hash' 는 데이터를 다루는 기법 중 하나로,
일정한 규칙이나 기준이 없는 데이터를 고정된 길이의 데이터로 매핑하는 것을 말합니다.
매핑 : 어떤 값을 다른 값에 대응시키는 과정을 총칭
이러한 매핑을 수행하는 특정 방법을 '해시 알고리즘' (해시 함수) 이라고 하는 것이구요.
예를 들어, '어떤 수를 10 으로 나누고 나머지를 구하는 함수'도 아주 낮은 단계의 '해시 함수'입니다.
아무리 큰 숫자를 매핑해도 항상 "0~9 사이의 숫자 하나", 그러니까 '고정된 길이의 데이터'로 바꿔주기 때문이죠.
'해시'의 개념이 조금은 이해가 되시나요?
이렇듯 임의의 데이터를 일정한 길이의 데이터로 바꿔주는 해시 함수는 아주 다양할 수 있습니다.
하지만 해시를 수행하는 '해시 알고리즘'이 얼마나 효율적이고 견고하게 잘 짜여졌느냐는 다른 문제입니다.
그렇다면 잘 짜여진 '해시 알고리즘'이 무엇인지를 이해해 보기 위해,
'해시'가 가지고 있는 몇가지 중요한 속성/기능에 대해서 먼저 알아보도록 하겠습니다.
첫번 째, '고유성'
해시를 통해 입력하는 특정 '입력 값'은 그 '출력 값(해시 값)'이 항상 동일합니다.
예를 들어 "hello" 라는 데이터가 어떠한 해시함수를 통해 "512" 라는 해시값으로 나왔다면,
그 해시함수는 "hello"를 백번, 천번 입력해도 "512" 라는 동일한 출력값을 준다는 것입니다.
특정 해시 알고리즘이 정해지면 '입력값'마다 '고유한 출력값'을 가지는 것이죠.
여기서 주의할 점은 그렇다고 입력값과 출력값이 1대1로 서로의 유일한 값을 가지는 것은 아니라는 것인데요.
무슨 얘기인지 두 번째 특징을 빨리 알아보겠습니다.
두번 째, '충돌가능성'
해시는 결국 임의의 데이터, 그러니까 무한한 종류의 데이터를 '고정된 길이', 그러니까 유한한 종류의 데이터로 바꾸는 개념입니다.
삐에로가 풍선으로 만들 수 있는 모양은 5개 인데, 풍선이 6개 라면,
결국 어떠한 두 풍선의 모양은 같을 수 밖에 없겠죠?
서로 다른 입력값에서 동일한 출력값이 나오는, 이러한 현상을 '충돌 collision' 이라고 하며,
해시는 필연적으로 '충돌가능성'을 내포하고 있습니다.
이제 이해가 되시나요?
첫번 째 와 두번 째 특징을 정리하자면,
특정 입력값은 자신의 고유한 해시값을 갖지만 그것이 자신만의 유일한 해시값은 아닐 수도 있는 것입니다.
세번 째, '단방향성'
그렇다면 해시를 통해 얻은 해시값을 가지고, 반대로 원래의 값을 구할 수 있을까요?
그런데 이것은 틀렸습니다^^
해시는 이미 만들어진 해시값에서 원래의 값을 역산하는 것이 불가능한 '단방향성'을 가집니다.
네번 째, '눈사태 효과'
해시는 입력값이 아주 조금만 변해도 결과값은 아주 크게, 완전히 달라지는 특성을 가집니다.
작은 눈덩이가 거대한 눈사태를 만들어 산 전체를 뒤집어 버리는 것과 비슷하죠?
그래서 이를 '눈사태 효과'라고 부릅니다.
무엇보다 보안 분야에서 해시를 활용할 때 이런 눈사태 효과가 핵식점인 보안 기능으로 작용합니다.
지금까지 컴퓨터 공학에서의 큰 개념으로써 'Hash'에 대해 알아보았는데요.
다음에는 이러한 해시가 적극 활용되고 있는 두 분야인
암호학에서의 Hash 와 자료구조로써 활용되는 Hash 에 대해서 더 알아보도록 하겠습니다.
암호학에서의 ' Hash ' 알아보러 가기
자료구조로써 활용되는 ' Hash ' 알아보러 가기
'Computer Science' 카테고리의 다른 글
CPU 의 구조와 작동을 이해하기 위한 간단한 그림 (0) | 2024.03.18 |
---|---|
계산 복잡도 이론 이해를 위한 간단한 그림 (0) | 2024.03.11 |
자료구조로써의 Hash (해시) 개념 이해를 위한 간단한 그림 (0) | 2024.02.29 |
정보 시스템의 핵심에 대한 간단한 그림 (0) | 2024.01.25 |
UI와 API 이해를 위한 단순한 그림 (0) | 2024.01.10 |