생일 공격
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
생일 공격은 암호학적 해시 함수의 취약점을 이용하는 공격 방법으로, 해시 충돌을 활용하여 디지털 서명 등을 위조하는 데 사용될 수 있다. 해시 함수의 입력값에 대한 해시 충돌 확률을 계산하는 수학적 분석을 기반으로 하며, 특히 디지털 서명 위조에 악용될 수 있다. 이러한 공격을 방지하기 위해서는 해시 함수의 출력 길이를 충분히 길게 설정하고, 서명 시 문서에 무작위적인 변경을 가하는 등의 방법이 권장된다.
더 읽어볼만한 페이지
- 암호 공격 - 재전송 공격
재전송 공격은 유효한 데이터 전송을 가로채 재사용하여 권한 없는 접근을 시도하는 사이버 공격으로, 세션 ID, 일회용 비밀번호, 타임스탬핑 등을 통해 방지할 수 있으며, IoT 장치와 같은 시스템에서 보안 위험을 초래할 수 있다. - 암호 공격 - 랜섬웨어
랜섬웨어는 컴퓨터 시스템 접근을 제한하고 금전을 요구하는 악성 소프트웨어이며, 암호화 기술을 활용하여 파일 접근을 막고, 비트코인 등장 이후 피해가 급증했으며, 이중 갈취 및 서비스형 랜섬웨어 형태로 진화하여 기업과 기관을 대상으로 공격하고, 파일 암호화, 시스템 잠금, 데이터 유출 등의 피해를 발생시킨다.
생일 공격 | |
---|---|
암호학적 공격 | |
유형 | 암호학적 공격 |
공격 목표 | 해시 함수 |
공격 특징 | 충돌을 찾는 것을 이용함 |
상세 정보 | |
공격 이름 | 생일 공격 (Birthday attack) |
어원 | 생일 문제에서 유래함 |
공격 원리 | 생일 문제의 확률적 특성을 이용 |
복잡도 | O(√N), 여기서 N은 가능한 해시 값의 수 |
성공 확률 | 해시 값 범위 크기에 따라 달라짐 |
예시 | |
해시 함수 | MD5, SHA-1 |
공격 대상 | 디지털 서명, 메시지 인증 |
추가 설명 | 주어진 해시 함수에 대한 충돌을 찾는 데 사용될 수 있음. 더 긴 해시 값을 사용하는 것이 생일 공격에 대한 기본적인 방어 방법임. |
대책 | |
주요 방법 | 해시 함수 출력 크기 증가 암호학적으로 안전한 해시 함수 사용 (예: SHA-256, SHA-3) |
추가 설명 | 충분히 큰 해시 값을 사용하면 공격 복잡도를 높여 방어할 수 있음. 솔트(Salt) 추가, 키 해시 메시지 인증 코드(Keyed-Hash Message Authentication Code, HMAC) 사용 |
관련 개념 | |
생일 문제 | 임의로 선택된 n명의 사람들 중 생일이 같은 두 명이 있을 확률 |
비둘기집 원리 | n개의 아이템을 m개의 상자에 넣을 때, n > m이면 적어도 하나의 상자에는 두 개 이상의 아이템이 들어 있다는 원리 |
암호학적 해시 함수 | 임의의 크기의 데이터를 고정된 크기의 값으로 변환하는 함수 |
2. 이론
암호학적 해시 함수 가지 값을 가지는 에 대해, 이고 ≠인 두 입력값 를 찾는 것이 해시 충돌의 목표이다.
가지의 입력값을 임의로 선택한 후 해시 값을 비교한다고 할 때, 해시 충돌을 찾을 확률은 다음과 같이 근사할 수 있다.[6]
:
해시 충돌을 찾을 확률이 이상이기 위한 입력값의 가짓수를 라고 하면, 위 식에서 다음 근사값을 얻을 수 있다.
:
충돌 확률 로 두면 를 얻는다.
해시 충돌을 찾을 때까지 여러 입력값을 대입하여 계산할 경우, 계산 횟수의 기댓값은 다음과 같이 근사할 수 있다.[13]
:
따라서, 비트 해시 함수의 충돌을 발견하기 위해서는 평균적으로 가지의 입력값만 조사하면 되며, 이것은 모든 가능한 가짓수가 인 것에 비교하여 차수를 크게 감소시킨 것이다.
64비트 해시를 예로 들면, 약 1.8 × 1019개의 서로 다른 출력이 존재한다. 이들이 모두 동일한 확률을 갖는 경우(최상의 경우), 무차별 대입을 통해 충돌을 생성하는 데 '단지' 약 51억 번의 시도가 필요하다.[7] 이 값은 '''생일 경계'''[8]라고 불리며, ''l''비트 코드의 경우 2''l''/2로 근사할 수 있다.[9]
다음 표는 다양한 비트 수에 대해 특정 충돌 확률을 달성하기 위해 필요한 해시 연산 횟수를 보여준다. (모든 해시가 동일하게 발생한다고 가정)
비트 | 가능한 출력 (H) | 무작위 충돌의 원하는 확률 (p) | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
10−18 | 10−15 | 10−12 | 10−9 | 10−6 | 0.1% | 1% | 25% | 50% | 75% | ||
16 | 216 (~6.5 x 104) | <2 | <2 | <2 | <2 | <2 | 11 | 36 | 190 | 300 | 430 |
32 | 232 (~4.3 × 109) | <2 | <2 | <2 | 3 | 93 | 2900 | 9300 | 50,000 | 77,000 | 110,000 |
64 | 264 (~1.8 × 1019) | 6 | 190 | 6100 | 190,000 | 6,100,000 | 1.9 × 108 | 6.1 × 108 | 3.3 × 109 | 5.1 × 109 | 7.2 × 109 |
96 | 296 (~7.9 × 1028) | 4.0 × 105 | 1.3 × 107 | 4.0 × 108 | 1.3 × 1010 | 4.0 × 1011 | 1.3 × 1013 | 4.0 × 1013 | 2.1 × 1014 | 3.3 × 1014 | 4.7 × 1014 |
128 | 2128 (~3.4 × 1038) | 2.6 × 1010 | 8.2 × 1011 | 2.6 × 1013 | 8.2 × 1014 | 2.6 × 1016 | 8.3 × 1017 | 2.6 × 1018 | 1.4 × 1019 | 2.2 × 1019 | 3.1 × 1019 |
192 | 2192 (~6.3 × 1057) | 1.1 × 1020 | 3.7 × 1021 | 1.1 × 1023 | 3.5 × 1024 | 1.1 × 1026 | 3.5 × 1027 | 1.1 × 1028 | 6.0 × 1028 | 9.3 × 1028 | 1.3 × 1029 |
256 | 2256 (~1.2 × 1077) | 4.8 × 1029 | 1.5 × 1031 | 4.8 × 1032 | 1.5 × 1034 | 4.8 × 1035 | 1.5 × 1037 | 4.8 × 1037 | 2.6 × 1038 | 4.0 × 1038 | 5.7 × 1038 |
384 | 2384 (~3.9 × 10115) | 8.9 × 1048 | 2.8 × 1050 | 8.9 × 1051 | 2.8 × 1053 | 8.9 × 1054 | 2.8 × 1056 | 8.9 × 1056 | 4.8 × 1057 | 7.4 × 1057 | 1.0 × 1058 |
512 | 2512 (~1.3 × 10154) | 1.6 × 1068 | 5.2 × 1069 | 1.6 × 1071 | 5.2 × 1072 | 1.6 × 1074 | 5.2 × 1075 | 1.6 × 1076 | 8.8 × 1076 | 1.4 × 1077 | 1.9 × 1077 |
비교를 위해, 일반적인 하드 디스크의 수정 불가능한 비트 오류율은 10−18에서 10−15 정도이다.[10] 이론적으로, MD5 해시 또는 UUID와 같이 약 128비트인 경우, 가능한 출력이 훨씬 많더라도 약 8,200억 개의 문서까지 그 범위 내에 있어야 한다.
2. 1. 용어
암호학적 해시 함수에서 가지의 값을 가질 때, 이고 ≠인 두 입력값 를 찾는 것이 해시 충돌의 목표이다.이를 찾기 위해서 가지의 입력값을 임의로 선택한 후 해시 값을 비교한다고 할 때, 해시 충돌을 찾을 확률은 다음과 같다.
:
를 해시 충돌을 찾을 확률이 이상이기 위한 입력값의 가짓수라고 하면 의 식에서부터 다음의 값이 유도된다.
:
여기에서 로 두면 를 얻는다.
해시 충돌을 찾을 때까지 여러 입력값을 대입하여 계산할 경우, 계산 횟수의 기댓값은 다음과 같다.
:
따라서, 비트 해시 함수의 충돌을 발견하기 위해서는 평균적으로 가지의 입력값만 조사하면 되며, 이것은 모든 가능한 가짓수가 인 것에 비교하여 차수를 크게 감소한 것이다.
생일 공격의 맥락에서 핵심 변수는 확률론의 잘 알려진 '''공과 상자 문제'''와 관련이 있다.
- 변수 ''n''은 입력(또는 시도) 횟수를 나타낸다. 공과 상자 문제에서 ''n''은 무작위로 ''H''개의 상자에 던져지는 공의 수를 나타낸다. 각 입력은 상자 중 하나(해시 값)에 공을 던지는 것에 해당한다.
- 변수 ''H''는 해시 함수의 가능한 총 출력 수를 나타낸다. 이는 공이 들어갈 수 있는 고유한 "빈"의 수이다. 총 해시 출력 수는 종종 로 표현되며, 여기서 ''l''은 해시 출력의 비트 길이이다. 공과 상자 문제에서 ''H''는 각 고유한 해시 값에 해당하는 빈의 수를 나타낸다.
- 변수 ''l''은 해시 함수 출력의 비트 길이를 나타낸다. 비트 길이 ''l''의 해시 함수는 개의 고유한 출력을 생성할 수 있으므로, 가능한 해시 값(또는 빈)의 수는 이다.
- 변수 ''p''는 충돌이 발생할 확률, 즉 두 개 이상의 입력(공)이 동일한 출력(상자)에 할당될 확률을 나타낸다. 생일 공격에서 ''p''는 충돌할 확률이 50%가 되기 위해 얼마나 많은 입력이 필요한지 추정하기 위해 종종 0.5 (50%)로 설정된다.
생일 공격은 '''공과 상자 문제'''의 변형으로 모델링될 수 있다.
- '''공'''은 해시 함수의 입력을 나타낸다.
- '''상자'''는 해시 함수의 가능한 출력(해시 값)을 나타낸다.
- 두 개 이상의 공이 같은 상자에 떨어질 때 '''충돌'''이 발생한다(즉, 두 개의 입력이 동일한 해시 출력을 생성함).
2. 2. 수학적 분석
암호학적 해시 함수 가지 값을 가지는 에 대해, 이고 ≠인 두 입력값 를 찾는 것이 해시 충돌의 목표이다. 가지의 입력값을 임의로 선택한 후 해시 값을 비교한다고 할 때, 해시 충돌을 찾을 확률은 다음과 같다.[6]:
를 해시 충돌을 찾을 확률이 이상이기 위한 입력값의 가짓수라고 하면 의 식에서부터 다음의 값이 유도된다.
:
여기에서 로 두면 를 얻는다.
해시 충돌을 찾을 때까지 여러 입력값을 대입하여 계산할 경우, 계산 횟수의 기댓값은 다음과 같다.[13]
:
따라서, 비트 해시 함수의 충돌을 발견하기 위해서는 평균적으로 가지의 입력값만 조사하면 되며, 이것은 모든 가능한 가짓수가 인 것에 비교하여 차수를 크게 감소한 것이다.
함수 가 주어졌을 때, 공격의 목표는 를 만족하는 서로 다른 두 개의 입력 를 찾는 것이다. 이러한 쌍 를 충돌이라고 한다. 충돌을 찾는 데 사용되는 방법은 무작위 또는 의사 난수로 선택될 수 있는 서로 다른 입력 값에 대해 함수 를 평가하여 동일한 결과가 두 번 이상 발견될 때까지 계속하는 것이다. 생일 문제로 인해 이 방법은 상당히 효율적일 수 있다. 구체적으로, 함수 가 개의 서로 다른 출력을 동일한 확률로 생성하고 가 충분히 크다면, 평균적으로 약 개의 서로 다른 인수에 대해 함수를 평가한 후에 인 서로 다른 인수 쌍 과 를 얻을 것으로 예상할 수 있다.
예를 들어, 64비트 해시가 사용되는 경우 약 1.8 × 1019개의 서로 다른 출력이 있다. 이들이 모두 동일한 확률을 갖는 경우(최상의 경우), 무차별 대입을 사용하여 충돌을 생성하는 데 '단지' 약 51억 번의 시도가 걸릴 것이다.[7] 이 값을 '''생일 경계'''[8]라고 하며, ''l''비트 코드의 경우 2''l''/2로 근사할 수 있다.[9]
다음 표는 다양한 비트 수에 대해, 특정 확률로 해시 충돌을 찾기 위해 필요한 해시 연산 횟수를 나타낸다.
비트 수 | 가능한 출력 (H) | 충돌 발생 확률 (p) | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
10−18 | 10−15 | 10−12 | 10−9 | 10−6 | 0.1% | 1% | 25% | 50% | 75% | ||
32 | 약 4.3 × 109 | 2 | 2 | 2 | 2.9 | 93 | 2,900 | 9,300 | 50,000 | 77,000 | 110,000 |
64 | 약 1.8 × 1019 | 6.1 | 190 | 6,100 | 190,000 | 6,100,000 | 190,000,000 | 610,000,000 | 3,300,000,000 | 5,100,000,000 | 7,200,000,000 |
128 | 약 3.4 × 1038 | 2,600,000,000 | 820,000,000,000 | 26,000,000,000,000 | 820,000,000,000,000 | 2.6 × 1016 | 8.3 × 1017 | 2.6 × 1018 | 1.4 × 1019 | 2.2 × 1019 | 3.1 × 1019 |
256 | 약 1.2 × 1077 | 4.8 × 1029 | 1.5 × 1031 | 4.8 × 1032 | 1.5 × 1034 | 4.8 × 1035 | 1.5 × 1037 | 4.8 × 1037 | 2.6 × 1038 | 4.0 × 1038 | 5.7 × 1038 |
384 | 약 3.9 × 10115 | 8.9 × 1048 | 2.8 × 1050 | 8.9 × 1051 | 2.8 × 1053 | 8.9 × 1054 | 2.8 × 1056 | 8.9 × 1056 | 4.8 × 1057 | 7.4 × 1057 | 1.0 × 1058 |
512 | 약 1.3 × 10154 | 1.6 × 1068 | 5.2 × 1069 | 1.6 × 1071 | 5.2 × 1072 | 1.6 × 1074 | 5.2 × 1075 | 1.6 × 1076 | 8.8 × 1076 | 1.4 × 1077 | 1.9 × 1077 |
참고로, 10−18에서 10−15는 일반적인 하드 디스크에서 수정할 수 없는 비트 오류가 발생하는 확률이다.[10] 이론적으로, MD5 해시 또는 UUID는 약 128비트이므로, 가능한 출력이 훨씬 많더라도 약 8,200억 개의 문서까지는 하드 디스크에서의 오류 발생 확률 범위 내에 있다고 할 수 있다.
함수의 출력이 고르지 않게 분산되면 충돌을 훨씬 더 빠르게 찾을 수 있다는 것을 쉽게 알 수 있다. 해시 함수의 '균형'이라는 개념은 생일 공격에 대한 함수의 저항력을 정량화한다.[11]
2. 3. 근사
가지의 값을 가지는 암호학적 해시 함수 에 대해, 이고 ≠인 두 입력값 를 찾는 것이 해시 충돌의 목표이다. 이를 찾기 위해 가지의 입력값을 임의로 선택한 후 해시 값을 비교한다고 할 때, 해시 충돌을 찾을 확률은 다음과 같이 근사할 수 있다.[6]:
여기서 은 선택된 값(입력)의 개수이고, 는 가능한 결과(가능한 해시 출력)의 개수이다.
해시 충돌을 찾을 확률이 이상이기 위한 입력값의 가짓수를 라고 하면, 위 식에서 다음 근사값을 얻을 수 있다.
:
여기서 충돌 확률 로 두면 를 얻는다.
해시 충돌을 찾을 때까지 여러 입력값을 대입하여 계산할 경우, 계산 횟수의 기댓값은 다음과 같이 근사할 수 있다.
:
따라서, 비트 해시 함수의 충돌을 발견하기 위해서는 평균적으로 가지의 입력값만 조사하면 되며, 이것은 모든 가능한 가짓수가 인 것에 비교하여 차수를 크게 감소시킨 것이다.
64비트 해시를 예로 들면, 약 1.8 × 1019개의 서로 다른 출력이 존재한다. 이들이 모두 동일한 확률을 갖는 경우(최상의 경우), 무차별 대입을 통해 충돌을 생성하는 데 '단지' 약 5.1 × 109번의 시도가 필요하다.[7] 이 값은 '''생일 경계'''[8]라고 불리며, ''l''비트 코드의 경우 2''l''/2로 근사할 수 있다.[9]
다음 표는 다양한 비트 수에 대해 특정 충돌 확률을 달성하기 위해 필요한 해시 수를 보여준다. 모든 해시가 동일하게 발생한다고 가정한다.
비트 | 가능한 출력 (H) | 무작위 충돌의 원하는 확률 (p) | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
10−18 | 10−15 | 10−12 | 10−9 | 10−6 | 0.1% | 1% | 25% | 50% | 75% | ||
16 | 216 (~6.5 x 104) | <2 | <2 | <2 | <2 | <2 | 11 | 36 | 190 | 300 | 430 |
32 | 232 (~4.3 × 109) | <2 | <2 | <2 | 3 | 93 | 2900 | 9300 | 50,000 | 77,000 | 110,000 |
64 | 264 (~1.8 × 1019) | 6 | 190 | 6100 | 190,000 | 6,100,000 | 1.9 × 108 | 6.1 × 108 | 3.3 × 109 | 5.1 × 109 | 7.2 × 109 |
96 | 296 (~7.9 × 1028) | 4.0 × 105 | 1.3 × 107 | 4.0 × 108 | 1.3 × 1010 | 4.0 × 1011 | 1.3 × 1013 | 4.0 × 1013 | 2.1 × 1014 | 3.3 × 1014 | 4.7 × 1014 |
128 | 2128 (~3.4 × 1038) | 2.6 × 1010 | 8.2 × 1011 | 2.6 × 1013 | 8.2 × 1014 | 2.6 × 1016 | 8.3 × 1017 | 2.6 × 1018 | 1.4 × 1019 | 2.2 × 1019 | 3.1 × 1019 |
192 | 2192 (~6.3 × 1057) | 1.1 × 1020 | 3.7 × 1021 | 1.1 × 1023 | 3.5 × 1024 | 1.1 × 1026 | 3.5 × 1027 | 1.1 × 1028 | 6.0 × 1028 | 9.3 × 1028 | 1.3 × 1029 |
256 | 2256 (~1.2 × 1077) | 4.8 × 1029 | 1.5 × 1031 | 4.8 × 1032 | 1.5 × 1034 | 4.8 × 1035 | 1.5 × 1037 | 4.8 × 1037 | 2.6 × 1038 | 4.0 × 1038 | 5.7 × 1038 |
384 | 2384 (~3.9 × 10115) | 8.9 × 1048 | 2.8 × 1050 | 8.9 × 1051 | 2.8 × 1053 | 8.9 × 1054 | 2.8 × 1056 | 8.9 × 1056 | 4.8 × 1057 | 7.4 × 1057 | 1.0 × 1058 |
512 | 2512 (~1.3 × 10154) | 1.6 × 1068 | 5.2 × 1069 | 1.6 × 1071 | 5.2 × 1072 | 1.6 × 1074 | 5.2 × 1075 | 1.6 × 1076 | 8.8 × 1076 | 1.4 × 1077 | 1.9 × 1077 |
비교를 위해, 일반적인 하드 디스크의 수정 불가능한 비트 오류율은 10−18에서 10−15 정도이다.[10] 이론적으로, MD5 해시 또는 UUID와 같이 약 128비트인 경우, 가능한 출력이 훨씬 많더라도 약 8,200억 개의 문서까지 그 범위 내에 있어야 한다.
좋은 경험 법칙은 암산에 사용할 수 있으며, 다음과 같은 관계를 가진다.
:
이는 다음과 같이 쓸 수도 있다.
:.
또는
:.
이 근사 방식은 확률이 0.5 이하일 때 잘 작동한다.
2. 4. 증명
암호학적 해시 함수 가지의 값을 가지는 에 대해, 이고 ≠인 두 입력값 를 찾는 것이 해시 충돌의 목표이다. 이를 찾기 위해서 가지의 입력값을 임의로 선택한 후 해시 값을 비교한다고 할 때, 해시 충돌을 찾을 확률은 다음과 같다.:
를 해시 충돌을 찾을 확률이 이상이기 위한 입력값의 가짓수라고 하면 의 식에서부터 다음의 값이 유도된다.
:
여기에서 로 두면 를 얻는다.
해시 충돌을 찾을 때까지 여러 입력값을 대입하여 계산할 경우, 계산 횟수의 기댓값은 다음과 같다.
:
따라서, 비트 해시 함수의 충돌을 발견하기 위해서는 평균적으로 가지의 입력값만 조사하면 되며, 이것은 모든 가능한 가짓수가 인 것에 비교하여 차수를 크게 감소한 것이다.
생일 공격은 ''n''개의 공(입력)을 ''H''개의 통(가능한 해시 출력)에 던지는 것으로 모델링할 수 있다. 충돌 확률은 다음 방정식에 의해 제한된다.
이 방정식은 적어도 하나의 충돌이 발생할 확률에 대한 상한을 제공하는 합집합 경계에서 파생된다. i번째 공이 이전 공 중 하나와 충돌하는 이벤트를 라고 표시한다. i번째 공의 충돌 확률은 다음과 같다.
따라서 모든 ''n''개의 공을 던진 후의 총 충돌 확률은 다음과 같이 제한된다.
이것은 해시 함수에서 충돌 확률에 대한 상한을 제공한다.
충돌 확률의 하한은 서로 다른 상자를 모두 차지해야 하는 ''i''개의 공을 던진 후 충돌이 없다고 가정하여 유도할 수 있다. (i+1)번째 공을 던진 후 충돌이 없을 확률은 다음과 같다.
''n''개의 모든 공을 던진 후 충돌이 없을 총 확률은 이러한 항의 곱이다.
부등식 를 사용하여 다음과 같이 근사할 수 있다.
따라서, 적어도 하나의 충돌이 발생할 확률은 다음과 같이 하한이 정해진다.
이는 충돌 확률의 하한을 제공한다.
위의 논의에서 적어도 한 번의 충돌이 발생할 확률은 다음과 같은 경계 내에 있다.
로 두면, 거의 확실한 충돌은 시도 횟수 ''n''이 다음과 같을 때 발생한다.
이것은 충돌에 필요한 입력의 수가 해시 출력의 비트 길이의 함수로 어떻게 증가하는지를 보여준다.
3. 응용 및 사례
생일 공격은 여러 분야에서 응용 및 사례를 찾아볼 수 있다.
디지털 서명은 생일 공격에 취약하다. 공격자는 원본 메시지에 다양한 변형을 가해 동일한 해시 값을 갖는 두 개의 다른 메시지를 찾아 서명된 메시지를 위조한다. 이러한 공격을 방지하기 위해, 서명자는 서명 전 문서에 무작위적이고 무해한 변경을 가하고, 서명한 계약서 사본을 보관하여 법정에서 자신의 서명이 사기 계약이 아닌 해당 계약과 일치함을 입증할 수 있다.
폴라드 로 알고리즘은 이산 대수 계산에 생일 공격을 사용하는 알고리즘의 예시다.[5]
BIND 구현 상의 문제로 인해, 생일 공격을 이용한 DNS의 DNS 캐시 포이즈닝 가능성이 제기되기도 한다.[16]
3. 1. 디지털 서명 공격
디지털 서명은 생일 공격에 취약할 수 있다. 메시지 은 일반적으로 먼저 을 계산하여 서명되는데, 여기서 는 암호화 해시 함수이고, 그런 다음 일부 비밀 키를 사용하여 에 서명한다. 맬러리가 밥이 사기 계약에 서명하도록 속이려 한다고 가정해 보자. 맬러리는 공정한 계약 과 사기 계약 을 준비한다. 그런 다음 맬러리는 쉼표 삽입, 빈 줄, 문장 뒤의 공백 하나 또는 두 개, 동의어 교체 등 의미를 변경하지 않고 을 변경할 수 있는 여러 위치를 찾는다. 이러한 변경 사항을 결합하여 공정한 계약인 의 엄청난 수의 변형을 만들 수 있다.마찬가지로 맬러리는 사기 계약 에 대한 엄청난 수의 변형을 만든다. 그런 다음 공정한 계약과 사기 계약의 버전이 동일한 해시 값 을 가질 때까지 해시 함수를 이러한 모든 변형에 적용한다. 그녀는 밥에게 서명을 위해 공정한 버전을 제시한다. 밥이 서명한 후 맬러리는 서명을 가져와 사기 계약에 첨부한다. 이 서명은 밥이 사기 계약에 서명했음을 "증명"한다.
확률은 맬러리가 동일한 해시를 가진 두 개의 공정한 계약 또는 두 개의 사기 계약을 찾는 것으로 아무것도 얻지 못하기 때문에 원래 생일 문제와 약간 다릅니다. 맬러리의 전략은 하나의 공정한 계약과 하나의 사기 계약 쌍을 생성하는 것이다. 주어진 해시 함수에 대해 은 가능한 해시의 수이며, 여기서 은 해시 출력의 비트 길이이다. 생일 문제 방정식은 여기에 정확히 적용되지 않는다. 충돌 확률이 50%일 경우 맬러리는 약 개의 해시를 생성해야 하는데, 이는 고전적인 생일 문제에서 단순한 충돌에 필요한 수의 두 배이다.
이러한 공격을 피하려면 서명 체계에 사용되는 해시 함수의 출력 길이를 생일 공격이 계산상 실행 불가능해질 정도로 충분히 크게 선택할 수 있다. 즉, 일반적인 무차별 대입 공격을 방지하는 데 필요한 비트 수의 약 두 배이다.
폴라드 로 알고리즘은 이산 대수 계산을 위해 생일 공격을 사용하는 알고리즘의 예이다.[5]
3. 2. 역공격
생일 공격은 암호학에서 해시 함수의 충돌 가능성을 이용하는 공격 방식이다. 이를 이해하기 위해 생일 문제의 예를 들어 설명할 수 있다.30명의 학생이 있는 반에서, 두 학생의 생일이 같을 확률은 직관적으로 낮아 보이지만, 실제로는 약 70%에 달한다. 이는 ()으로 계산된다.[5] 반면, 특정 날짜(예: 9월 16일)에 생일인 학생이 있을 확률은 으로 약 7.9%이다.
생일 공격은 이러한 확률적 특성을 이용한다. 공격자는 무해한 계약과 악성 계약 각각에 대해 다양한 변형을 준비하고, 각 변형에 디지털 서명을 한다. 목표는 동일한 서명을 가진 무해한 계약과 악성 계약 쌍을 찾는 것이다. 예를 들어, 계약의 SHA-256 해시의 첫 번째 바이트를 디지털 서명으로 사용한다고 가정하면, 공격자는 무해한 계약과 악성 계약 각각의 변형들을 생성하여 동일한 서명을 갖는 쌍을 찾는다.
공격자는 피해자가 무해한 계약에 서명하도록 유도한 후, 동일한 서명을 가진 악성 계약으로 바꿔치기한다. 피해자는 자신이 무해한 계약에 서명했다고 생각하지만, 실제로는 악성 계약에 서명한 셈이 된다.
이러한 공격은 서명자가 맬러리(공격자)인 경우에도 가능하다. 맬러리는 밥에게 공정한 계약을 제안하고, 밥의 계약을 약간 수정한 무해한 버전과 악성 계약을 만든다. 두 계약은 동일한 디지털 서명을 갖도록 조작된다. 맬러리는 수정된 무해한 계약에 서명하여 밥에게 주고, 나중에 동일한 서명을 가진 악성 계약을 제시하며 그것이 진짜 계약이라고 주장한다.
이 공격의 진행 과정은 다음과 같다.
1. 계약 제안: 밥은 맬러리에게 공정한 계약을 제안한다.
2. 계약 위조: 맬러리는 밥의 계약을 약간 수정한 무해한 버전과 악성 계약, 두 가지 버전을 만든다. 두 버전은 동일한 디지털 서명을 갖는다.
3. 서명 전달: 맬러리는 수정된 무해한 계약에 서명하여 밥에게 전달한다.
4. 위험 발생: 밥이 수정된 계약 사본을 보관하지 않으면, 맬러리는 나중에 악성 계약을 제시하며 서명된 계약이라고 주장할 수 있다.
5. 결과:
- 밥이 수정된 계약 사본을 보관하지 않으면 맬러리의 사기는 완벽하게 성공한다.
- 밥이 수정된 계약 사본을 보관하더라도, 맬러리는 밥이 계약을 변경했다고 주장하며 책임을 회피할 수 있다.
3. 3. DNS 캐시 포이즈닝
BIND 구현 상의 문제 등으로 인해, 생일 공격을 이용한 DNS의 DNS 캐시 포이즈닝 가능성이 논의되고 있다.[16]참조
[1]
웹사이트
Avoiding collisions, Cryptographic hash functions
https://cs.wellesley[...]
[2]
간행물
Recommendation for applications using approved hash algorithms
http://dx.doi.org/10[...]
National Institute of Standards and Technology
2012
[3]
웹사이트
Cost analysis of hash collisions : Will quantum computers make SHARCS obsolete?
http://cr.yp.to/hash[...]
2017-10-29
[4]
서적
LATIN'98: Theoretical Informatics
Springer, Berlin, Heidelberg
1998-04-20
[5]
웹사이트
Birthday Problem
https://brilliant.or[...]
Brilliant_(website)
2023-07-28
[6]
서적
Introduction to Modern Cryptography
https://web.cs.ucdav[...]
2023-03-31
[7]
서적
Advances in Cryptology — EUROCRYPT '89
Springer
1990
[8]
문서
See [[upper and lower bounds]].
[9]
학술지
Benes and Butterfly schemes revisited
http://eprint.iacr.o[...]
Université de Versailles
2007-03-15
[10]
arXiv
Empirical Measurements of Disk Failure Rates and Error Rates
2007-01-25
[11]
웹사이트
CiteSeerX
http://citeseer.ist.[...]
2006-05-02
[12]
웹사이트
Compute log(1+x) accurately for small values of x
http://www.mathworks[...]
2017-10-29
[13]
논문
Benes and Butterfly schemes revisited
http://eprint.iacr.o[...]
Université de Versailles
2005
[14]
웹사이트
Empirical Measurements of Disk Failure Rates and Error Rates
https://arxiv.org/ab[...]
[15]
웹사이트
Hash Function Balance and its Impact on Birthday Attacks
http://citeseer.ist.[...]
2002
[16]
웹사이트
DNS Cache Poisoning - The Next Generation
http://www.securewor[...]
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com