1. 해시 함수란 무엇인가?
해시 함수(Hash Function)는 임의의 길이의 입력 데이터를 고정된 길이의 출력 값으로 변환하는 수학적 알고리즘이다. 특정 수학적 알고리즘을 사용하여 입력 데이터를 압축하고 변환한다. 이 과정은 단방향(입력값 → 출력값)으로 이루어지며, 출력값에서 원래 입력 데이터인 입력값을 복원할 수 없다는 대표적인 특징을 가지고 있다. 대표적인 해시 함수로는 SHA 시리즈와 MD5 등이 있다.
2. SHA-256 예시를 통한 해시 함수 설명
앞서 설명한 글로는 이해하기가 쉽지 않기 때문에, 자주 사용되는 'SHA-256'을 예시로 들어 설명하고자 한다. #링크에서 직접 실습해 볼 수 있다.
해시 함수에 입력값을 넣으면 다음과 같은 출력값을 획득할 수 있다.
입력값 (UTF-8) | 출력값 (Hex) |
안녕하세요 | 2c68318e352971113645cbc72861e1ec23f48d5baa5f9b405fed9dddca893eb4 |
안녕하세요. | 8b118d6741f7cfa1a7ee246d0dda39f2f00bf9fd207b4e6c7fad87a15434a513 |
안녕하세요. 해시 함수는 뭘까요? | f03a13d115c5640f0992cc36961a03fcc1d484e3e8ab1ff0a5233ef3cf418e98 |
세 가지 입력값에 대해 해시 함수를 적용한 결과는 위와 같다. 동일한 문장에 마침표만 추가해도 전혀 다른 결과가 나올 수 있으며, 출력값의 글자수가 항상 동일하다는 특이점을 확인할 수 있다.
3. 해시 함수의 주요 특징
- ❗️ 어떤 입력값을 넣든지 관계없이 출력값은 항상 고정된 길이의 데이터가 나온다.
출력값이 항상 고정된 길이라는 말은 SHA-256 해시 함수의 출력이 항상 64자라는 뜻이다. SHA-256의 출력값이 64글자인 이유는 256bit를 4bit씩 나누어 16진수로 표현한 결과이기 때문이다. ( 4 × 64 = 256 )
- ❗️ 같은 입력값을 넣으면 항상 동일한 출력값이 나온다.
누가 '안녕하세요'를 입력하든 해시 함수의 결과는 모두 '2c68318e352971...'로 동일하다는 의미이다.
- ❗️ 출력값을 보고 입력값을 유추하기 어렵다.
해커가 출력값을 탈취하더라도 해시 함수를 취하기 전인 입력값을 찾아내기가 매우 어렵다. 이를 '일방향성' 혹은 '단방향성'을 지닌다고 표현한다.
- ❗️ 같은 출력값을 가지는 입력값을 찾아내기 매우 어렵다.
동일한 출력값을 갖는 입력값이 존재할 수는 있지만 그 값을 찾아내기가 매우 어렵다. 지속적으로 입력값을 변경하여 넣어보며 같은 출력값을 찾아내야 하기 때문이다. 이를 '충돌 저항성'을 지닌다고 표현한다.
4. 해시 함수를 활용한 무결성 검증 과정
앞서 살펴보았듯이 해시 함수 그 특성이 명확하여 다양한 분야에서 활용된다. 아래는 CMS(Cryptographic Message Syntax)의 컨텐츠 유형 중 하나인 DigestedData를 통해 무결성을 확인하는 과정을 설명한 예시이다. 이를 통해 해시 함수가 어떤 방식으로 적용되는지 이해할 수 있다.
- 1️⃣ 닝닝이는 메시지를 작성한다.
- 2️⃣ 닝닝이는 메시지를 해시 함수에 입력하여 해시값 A를 생성한다.
- 3️⃣ 닝닝이는 다음의 요소들을 하나로 묶어 DigestedData를 생성한다.
- 메시지
- 해시값 A
- 사용된 해시 알고리즘 정보
- 4️⃣ 닝닝이는 생성된 DigestedData를 지젤에게 전송한다.
- 5️⃣ 지젤은 수신한 DigestedData에서 메시지를 추출한다.
- 6️⃣ 지젤은 추출한 메시지를 동일한 해시 함수에 입력하여 해시값 B를 생성한다.
- 7️⃣ 지젤은 전달받은 해시값 A와 자신이 계산한 해시값 B를 비교하여 일치여부를 확인한다.
- ∴ A = B, 메시지가 변조되지 않았음을 확인할 수 있다.
※ 참고 : CMS의 SignedData
SignedData는 CMS의 컨텐츠 유형 중 하나로, 전자 서명을 포함한 데이터를 구조화하여 전달하기 위한 표준 형식이다. 이 역시 해시 함수의 주요 특성을 활용하므로 #링크를 통해 참고한다.
5. 마무리
이번 글을 정리하면 다음과 같다.
- 임의의 데이터를 고정된 길이의 데이터로 매핑하는 함수를 해시 함수라고 한다.
- 해시 함수는 일방향성, 충돌 저항성 등의 특징을 가지고 있다. 따라서 무결성 확인 등에 많이 활용된다.
'보안 > 암호학' 카테고리의 다른 글
RSA 동작 원리의 이해: 수학적 원리부터 동작 예시까지 (0) | 2025.01.12 |
---|---|
RSA와 ECC 소개 및 비교 (0) | 2025.01.12 |
대칭 키 암호화 방식 정리 : 원리, 과정, 장단점까지 (0) | 2025.01.11 |
공개 키 암호화 방식 정리 : 원리, 과정, 키쌍 개념까지 (0) | 2025.01.11 |