별과 정리
별과 정리 · 제141장 · 3부 · 멀리 보이는 것

같은 열쇠가 겹칠 확률

The Birthday Attack
생일 문제가 암호를 깨는 데 쓰인다

암호를 깨뜨리는 생일의 역설

방 안에 23명만 모여도 그중에 생일이 같은 두 사람이 있을 확률이 50%를 훌쩍 넘어섭니다. 1년 365일 중 하루를 맞히는 일인데 왜 이렇게 쉽게 겹칠까요?

비밀번호나 디지털 서명을 지키는 해시 함수도 마찬가지입니다. 수조 개의 서로 다른 열쇠가 있는데 왜 그 절반의 제곱근만큼만 시도해도 똑같은 열쇠가 부딪힐까요?

이야기

같은 열쇠가 겹칠 확률
서로 다른 열쇠인데 같은 자물쇠가 열리는 일이 생긴다

앞서 생일 문제를 보았습니다. 스물세 명이면 생일이 겹칠 확률이 절반을 넘었습니다.

이 성질이 암호를 깨는 데 쓰입니다.

디지털 서명은 문서를 해시 값이라는 짧은 숫자로 줄여서 서명합니다. 이때 서로 다른 두 문서가 같은 해시 값을 갖게 만들 수 있다면, 하나에 받은 서명을 다른 하나에 붙일 수 있습니다.

해시 값이 n비트라면 경우의 수는 가지입니다. 하나를 정해 놓고 맞추려면 번쯤 시도해야 합니다.

그런데 아무 두 개나 겹치면 된다면? 생일 문제처럼 번이면 충분합니다. 제곱근만큼으로 줄어듭니다.

128비트 해시라면 번입니다. 어마어마해 보이지만 에 견주면 아무것도 아닙니다.

그래서 지금 쓰는 해시는 256비트입니다. 안전 여유를 절반으로 계산해서 정한 것입니다.

2017년 구글의 연구진이 이것을 실제로 보였습니다. 오랫동안 쓰이던 SHA-1이라는 방식에서 서로 다른데 지문이 같은 파일 두 개를 만들어 낸 것입니다. 그들은 겉모습이 다른 PDF 두 장을 공개했는데, 두 파일의 지문이 한 글자도 다르지 않았습니다.

그 뒤로 SHA-1은 은퇴했습니다. 「깨질 수 있다」와 「깨졌다」 사이에는 이렇게 큰 차이가 있습니다.

오늘 이것이 하는 일

MD5와 SHA-1이 폐기된 까닭입니다. 충돌이 실제로 발견되어 위조 서명이 가능해졌습니다.

지금 쓰는 SHA-256은 생일 공격을 견디려고 길이를 두 배로 잡은 것입니다. 블록체인과 전자서명이 여기 기대고 있습니다.

계단 넷 — 같은 사실을 네 깊이로

초4 · 초5 — 손으로 해 본다

교실에서 같은 생일을 찾는다

한 반에 친구들이 30명 모여 있을 때 생일이 같은 짝이 있는지 확인해 봅니다. 놀랍게도 대부분의 교실에서 같은 생일인 짝이 나옵니다.

나 한 사람과 생일이 같을 확률은 낮지만, 친구들끼리 서로서로 짝지어 비교할 수 있는 쌍의 수가 수백 개나 되기 때문입니다.

같은 열쇠가 겹칠 확률

열쇠 수를 밀어 보세요.
겹칠 확률 % 모든 열쇠 만든 개수
32 비트면 10 만 개만 만들어도 거의 확실히 겹칩니다.
생일 문제와 똑같은 셈입니다.
중1 · 중2 — 까닭을 찾는다

생일 문제로 견주기

생일이 겹치지 않을 확률을 계산해 봅니다. 두 번째 사람은 , 세 번째 사람은 … 사람이 늘어날수록 이 분수들을 계속 곱하게 됩니다.

23명이 모이면 비교할 수 있는 쌍의 수가 쌍이나 됩니다. 곱셈이 누적되면서 모두가 다를 확률은 50% 밑으로 뚝 떨어지고, 겹칠 확률이 절반을 넘어서게 됩니다.

제곱근만큼이면 됩니다

비트를 밀어 보세요.
필요한 개수 2^(b/2) 전체 몇 분의 1
견줄 자리에서는 몇 배
2^(b/2) — 비트 수의 절반만큼의 보안밖에 안 됩니다.
그래서 128 비트 보안을 원하면 해시를 256 비트로 만듭니다.
고1 · 고2 — 넓혀 본다

충돌 확률 어림

가능한 경우의 수가 개인 해시 공간에서 개의 값을 무작위로 추출할 때 충돌이 발생하지 않을 확률은 입니다.

충돌 확률이 50% 이상이 되는 임계점은 에서 로 도출됩니다. 즉 전체 공간 이 아니라 그 제곱근인 번의 시도만으로 충돌을 일으킬 수 있습니다.

MD5 가 깨진 이야기

해시를 밀어 보세요.
해시 비트 실제 보안 깨졌나
MD5 는 2004년, SHA-1 은 2017년에 실제로 충돌이 만들어졌습니다.
2⁶⁴ 는 이제 컴퓨터가 감당할 수 있는 수입니다.
대학 — 어디까지 가나

해시와 보안

이 원리는 암호학에서 해시 함수의 충돌 저항성을 무너뜨리는 생일 공격(Birthday Attack)의 기초입니다. 64비트 해시 함수는 번이 아니라 단 (약 40억) 번의 대입만으로 위조가 가능해집니다.

이 때문에 현대 블록체인과 전자서명 표준은 안전성을 확보하기 위해 출력 길이를 256비트(SHA-256) 또는 512비트로 대폭 늘려 생일 공격의 위협을 원천 봉쇄합니다.

비트코인의 작업증명

난이도를 밀어 보세요.
시도 횟수 0 의 개수 비트로
견줄 자리에서는 몇 배
16 진수 앞에 0 이 20 개 나오려면 2⁸⁰ 번 시도해야 합니다.
운으로만 되는 일 — 그것이 작업증명입니다.

풀어 보기

중학교 · 고등학교 수준  ·  답은 검산을 마쳤습니다

생일 역설과 암호학적 충돌. 다음 물음에 답하시오.

(1) 23명의 모임에서 서로 비교할 수 있는 가능한 두 사람 쌍의 총 개수를 조합 기호 로 계산하시오.
(2) 출력 가능한 해시 값의 총 가짓수가 일 때, 생일 공격을 통해 50%의 확률로 충돌하는 쌍을 찾기 위해 필요한 대략적인 시도 횟수 를 계산하시오.
(3) 128비트 보안 강도를 갖는 해시 함수가 생일 공격에 대해 안전하려면 해시 출력 비트 길이가 적어도 몇 비트 이상이어야 하는지 쓰시오.

(1) 개입니다. (2) 번입니다. (3) 비트입니다.

답과 풀이 보기

(1) 쌍입니다.
사람은 23 명뿐인데 견주어 볼 자리는 253 군데입니다. 쌍의 수는 — 사람 수의 제곱으로 자랍니다.

(2)1,180,000 번(118 만 번)입니다.

⛔ 경우의 수가 1 조 인데 백만 번만 해 보면 반반입니다. 이 아니라 이 잣대입니다.
⭐ 이것이 생일 공격입니다 — 특정한 값을 맞히려는 것이 아니라 아무 둘이나 겹치기만 하면 되므로 훨씬 쉽습니다.

(3) 256 비트 이상이어야 합니다.
출력이 비트면 경우의 수가 이고, 생일 공격에 드는 힘은 입니다.

그래서 SHA-256 이 128 비트 보안이라 불립니다 — 길이의 절반이 실제 강도입니다.

생일 문제는 파티 이야기로 끝나지 않습니다. 1994 년 이후 이 셈 하나가 해시 함수의 길이를 정해 왔습니다.
실제로 MD5(128 비트)는 면 뚫린다는 것이 밝혀져 2004 년에 무너졌고, SHA-1(160 비트)도 2017 년에 실제 충돌이 만들어졌습니다.
파티에서 시작한 확률 문제가 인터넷의 자물쇠 크기를 정합니다.

여기 「풀어 보기」는 기본 한 벌입니다. 더 풀어 보고 싶으면 행복수학의 그 단원으로 건너가세요.

만지는 수학으로 손에 쥐어 보기

이 장과 이어지는 「만지는 수학」 칼럼입니다. 손끝으로 직접 끌고 눌러 보며 같은 생각을 몸으로 겪을 수 있습니다.

더 멀리

학교 교실의 문제가 그대로 암호의 안전선이 됩니다.

이어지는 장

스물셋만 모여도 생일이 겹치듯, 해시 함수도 경우의 수의 제곱근만큼만 대조하면 같은 값이 튀어나옵니다 — 제120장 의 생일 역설이 디지털 암호의 허점을 파고드는 강력한 공격법으로 쓰입니다.

영감을 받은 곳

암호학자 위드필드 디피(Whitfield Diffie)와 마틴 헬만(Martin Hellman) 등이 1970년대 후반 해시 함수와 공개키 암호 체계의 충돌 안전성을 분석하면서 체계화되었습니다.

올린 그림 — 크게 보고 고치기

✏️ 손으로 풀어보세요
문제 크기 105%
▼ 문제가 더 있습니다
6