유니버설 해싱
1. 개요
유니버설 해싱은 해시 함수가 충돌하는 특정 입력값 집합을 만나지 않도록 하는 확률적 알고리즘으로, 어떤 입력값 집합에 대해서도 임의의 해시 값을 생성하는 해시 함수들의 집합을 만드는 방법이다. 유니버설 해싱은 해싱의 충돌 횟수를 줄이는 것을 목표로 하며, 해시 함수의 패밀리에서 함수를 무작위로 선택하는 방식으로 충돌 확률을 줄인다. 유니버설 해싱은 암호학, 해시 테이블 구현 등 전산학 분야에서 사용되며, 해시 충돌을 유발하는 공격에 대한 방어 수단으로 활용된다.
| 이름 | 유니버설 해싱 |
|---|---|
| 범주 | 해시 함수 |
| 분야 | 컴퓨터 과학 |
| 설명 | 임의로 선택된 해시 함수를 사용하여 입력 데이터를 해시 테이블에 분산시키는 해싱 알고리즘 |
| 목표 | 특정 키 집합이 항상 최악의 성능을 유발하는 것을 방지 |
|---|---|
| 방법 | 실행 시작 시 무작위로 해시 함수를 선택 |
| 장점 | 키가 해시 함수와 독립적으로 선택되는 경우, 예상되는 성능은 좋다. 공격자가 알고리즘을 알더라도 최악의 입력을 찾는 것을 어렵게 함 |
| 응용 분야 | 암호화 데이터 구조 |
-
해싱 -
해시 충돌
-
해싱 -
HMAC
HMAC(Keyed-Hash Message Authentication Code)는 공유된 비밀 키와 암호화 해시 함수를 사용하여 메시지의 무결성을 검증하는 메시지 인증 코드로서, IPsec, SSH, TLS, JSON 웹 토큰 등 다양한 보안 프로토콜에서 활용된다. -
암호화 해시 함수 -
RIPEMD
RIPEMD는 MD4를 기반으로 1992년 설계된 암호화 해시 함수로, 보안 취약점 보완을 위해 RIPEMD-128, RIPEMD-160, RIPEMD-256, RIPEMD-320 등의 변형이 개발되었으며, 특히 RIPEMD-160은 160비트 해시 값을 생성하고 다양한 라이브러리에서 지원되지만 보안성 우려가 제기되고 있다. -
암호화 해시 함수 -
MD5
MD5는 로널드 리베스트 교수가 개발한 128비트 해시 값 생성 암호화 해시 함수이나, 보안 취약점으로 인해 현재는 보안이 중요한 분야에서는 사용이 중단되었다. -
검색 알고리즘 -
유전 알고리즘
유전 알고리즘은 생물 진화 과정을 모방하여 최적해를 탐색하는 계산 최적화 기법으로, 해를 유전자로 표현하고 적합도 함수를 통해 평가하며 선택, 교차, 돌연변이 연산을 반복하여 최적해에 근접하는 해를 생성하며, 성능은 매개변수에 영향을 받고 초기 수렴 문제 해결을 위한 다양한 변형 기법과 관련 기법이 존재한다. -
검색 알고리즘 -
역색인
역색인은 단어와 해당 단어가 포함된 문서 간의 관계를 나타내는 자료 구조이며, 검색 엔진의 쿼리 속도를 최적화하는 데 사용된다.
2. 유니버설 해싱
해싱은 어떤 입력값(일반적으로 문자열)을 가지고 작은 값(원래 테이블 내의 인덱스를 조회하는 데 사용)을 생성하는 데 사용되어 왔다. 이후 해싱은 두 입력 값이 같은 값인지 확인하는 등 다른 용도로도 쓰이게 되었다.
해시 함수는 다대일(many-to-one) 대응이기 때문에, 비둘기집 원리에 의해 해시 함수값이 충돌하는 입력 값들의 집합이 반드시 존재한다. 대부분의 경우 충돌이 적게 발생하는 해시 함수를 사용하는 것이 바람직하지만, 수학적으로 해시 함수에 충돌을 일으키는 입력 값 집합이 들어오지 않는다고 보장할 수는 없다.
유니버설 해싱은 이러한 문제에 대한 해결책으로, 해시 함수 패밀리에서 함수를 무작위로 선택하여 해시 충돌을 최소화하는 방법이다.
2.1. 정의
확률적 알고리즘은 해시 함수가 충돌을 일으키는 특정 입력값 집합을 만나지 않게 될 것에 대한 증명 방법을 제공한다. 주어진 입력값의 집합에 대해 임의의 해시 값을 생성하는 해시 함수들의 유니버설 집합을 만들 수 있다. 여기서 중요한 것은 주어진 입력 값에 대해 랜덤한 해시 값을 내는 해시 함수를 선택해준다는 것이다. 따라서 단순히 유니버설 집합으로부터 적절한 랜덤 함수를 선택하는 것만으로 어떠한 입력값에 대해서도 해시 값의 기대값이 임의적으로 분포한다고 증명할 수 있다.
사실상 대부분 한쌍에 대한(pairwise) 충돌에 관심이 있다. 크기가 인 정의역에 대해 어떤 입력값 가 충돌할 확률은 이 된다는 것이다. 유니버설 집합 내의 해시 함수 중에는 주어진 입력값 에 대해 가 충돌할 경우 도 충돌하게 되는 함수도 있을지 모른다. 유니버설 집합에 대한 논의는 계속되고 있지만, 유니버설 해싱에서는 한쌍에 대한(pairwise) 충돌에 대해서만 서술한다.
키(입력 값)들의 집합 , 해시 값의 집합 , 키에 대한 해시 값의 맵핑을 제공하는 해시 함수의 패밀리 가 있다고 하자. 는 의 크기, 즉 가능한 해시 값의 개수를 나타낸다. 그러면 K에 존재하는 서로 다른 모든 키값 와 에 대해 다음 조건을 만족하는 를 2-유니버설 패밀리(2-universal family)에 속하는 해시 함수라고 한다.
: