Computer >> 컴퓨터 >  >> 프로그래밍 >> 프로그래밍

정보 보안에서 해싱(Hashing)이란? 개념부터 원리까지 한눈에 정리

해싱(Hashing)은 주어진 키를 고유한 코드로 변환하는 절차입니다. 해시 함수는 데이터를 새롭게 생성된 해시 코드로 대체하는 역할을 하며, 좀 더 구체적으로 말하면 문자열이나 입력 키를 알고리즘이 결정한 해시 값으로 정의하는 작업입니다. 이때 생성되는 해시 값은 원본 데이터보다 훨씬 짧은 고정 길이의 문자열입니다.

해시 테이블과 데이터 접근 방식

해시 테이블은 모든 값 쌍(value pair)이 저장된 목록을 만들고, 인덱스를 통해 손쉽게 접근할 수 있도록 합니다. 그 결과 데이터베이스 테이블에서 키 값을 효율적으로 조회하는 방법이 되며, 동시에 암호화를 통해 데이터베이스 자체의 보안성을 높이는 수단으로도 활용됩니다.

대표적인 해싱 알고리즘: MD5와 SHA

해시는 MD5(Message Digest 5)나 SHA(Secure Hash Algorithm)와 같은 해싱 알고리즘의 출력 결과입니다. 이러한 알고리즘은 어떤 정보나 메시지가 입력되더라도 고유하고 길이가 고정된 문자열, 즉 해시 값(hash value) 또는 메시지 다이제스트(message digest)를 생성하는 것을 목표로 합니다.

컴퓨터의 모든 파일은 결국 이진(binary) 형태로 표현되는 데이터이기 때문에, 해싱 알고리즘은 해당 정보를 받아 복잡한 연산을 수행한 뒤 고정 길이의 문자열을 결과로 출력합니다. 이 출력값이 바로 해당 문서의 해시 값, 즉 메시지 다이제스트입니다. 요약하자면, 해싱은 파일 내부의 데이터 블록을 해당 문자열을 대표하는 고정 길이의 짧은 값이나 키로 변환하는 알고리즘을 사용하는 기술입니다.

눈사태 효과(Avalanche Effect)와 데이터 무결성

생성된 해시 값은 파일 안에 담긴 각 문자열의 압축된 요약본과 같습니다. 중요한 특징은 파일 내 단 1바이트만 변경되어도 해시 값 전체가 완전히 달라져야 한다는 점인데, 이를 '눈사태 효과'라고 부릅니다. 이러한 성질 덕분에 해싱은 데이터 압축뿐 아니라 데이터 무결성 검증 측면에서도 큰 이점을 제공합니다.

해싱의 주요 활용 분야

해싱은 다양한 유형의 입력값에 대해 진위성(authenticity)과 무결성(integrity)을 검증할 수 있는 암호학적 절차입니다. 가장 널리 알려진 용도는 인증 시스템입니다. 해싱을 사용하면 데이터베이스에 평문(plaintext) 비밀번호를 저장하지 않고도 사용자를 인증할 수 있어, 유출 사고 발생 시 피해를 크게 줄일 수 있습니다. 이 외에도 파일, 문서, 각종 데이터의 변조 여부를 확인하는 용도로 폭넓게 활용됩니다.

해싱 사용 시 주의사항

해싱 함수를 부적절하게 사용하면 심각한 데이터 유출 사고로 이어질 수 있습니다. 그러나 그보다 더 위험한 것은 애초에 민감한 정보를 보호하기 위해 해싱을 적용하지 않는 것입니다. 해싱 데이터 구조는 배열이 정보를 효율적으로 탐색하고 저장할 수 있도록 지원하기 때문에, 보안과 성능 두 가지 측면에서 모두 필수적인 기술이라 할 수 있습니다.

해싱의 검색 효율성 예시

예를 들어 20,000개의 숫자로 된 목록에서 특정 숫자를 찾아야 한다고 가정해 봅시다. 일반적인 방식이라면 목록의 숫자를 처음부터 하나씩 스캔하며 입력한 값과 일치하는지 확인해야 합니다. 반면 해싱을 활용하면 해시 값을 기반으로 즉시 위치를 찾아낼 수 있어 탐색 시간이 획기적으로 단축됩니다.

정리

해싱 알고리즘은 수학적 공식을 활용해 특정 유형과 길이의 데이터 배열을 고정 길이의 비트 문자열로 변환합니다. 해시 테이블에 필요한 알고리즘은 어떤 입력이 들어오든 항상 일관된 형태의 메시지로 변환하므로, 데이터 검색의 효율성과 정보 보안이라는 두 가지 목표를 동시에 달성할 수 있게 해줍니다.