방 안에 23명만 모여도 그중에 생일이 같은 두 사람이 있을 확률이 50%를 훌쩍 넘어섭니다. 1년 365일 중 하루를 맞히는 일인데 왜 이렇게 쉽게 겹칠까요?
비밀번호나 디지털 서명을 지키는 해시 함수도 마찬가지입니다. 수조 개의 서로 다른 열쇠가 있는데 왜 그 절반의 제곱근만큼만 시도해도 똑같은 열쇠가 부딪힐까요?

앞서 생일 문제를 보았습니다. 스물세 명이면 생일이 겹칠 확률이 절반을 넘었습니다.
이 성질이 암호를 깨는 데 쓰입니다.
디지털 서명은 문서를 해시 값이라는 짧은 숫자로 줄여서 서명합니다. 이때 서로 다른 두 문서가 같은 해시 값을 갖게 만들 수 있다면, 하나에 받은 서명을 다른 하나에 붙일 수 있습니다.
해시 값이 n비트라면 경우의 수는 가지입니다. 하나를 정해 놓고 맞추려면 번쯤 시도해야 합니다.
그런데 아무 두 개나 겹치면 된다면? 생일 문제처럼 번이면 충분합니다. 제곱근만큼으로 줄어듭니다.
128비트 해시라면 번입니다. 어마어마해 보이지만 에 견주면 아무것도 아닙니다.
그래서 지금 쓰는 해시는 256비트입니다. 안전 여유를 절반으로 계산해서 정한 것입니다.
2017년 구글의 연구진이 이것을 실제로 보였습니다. 오랫동안 쓰이던 SHA-1이라는 방식에서 서로 다른데 지문이 같은 파일 두 개를 만들어 낸 것입니다. 그들은 겉모습이 다른 PDF 두 장을 공개했는데, 두 파일의 지문이 한 글자도 다르지 않았습니다.
그 뒤로 SHA-1은 은퇴했습니다. 「깨질 수 있다」와 「깨졌다」 사이에는 이렇게 큰 차이가 있습니다.
MD5와 SHA-1이 폐기된 까닭입니다. 충돌이 실제로 발견되어 위조 서명이 가능해졌습니다.
지금 쓰는 SHA-256은 생일 공격을 견디려고 길이를 두 배로 잡은 것입니다. 블록체인과 전자서명이 여기 기대고 있습니다.
교실에서 같은 생일을 찾는다
한 반에 친구들이 30명 모여 있을 때 생일이 같은 짝이 있는지 확인해 봅니다. 놀랍게도 대부분의 교실에서 같은 생일인 짝이 나옵니다.
나 한 사람과 생일이 같을 확률은 낮지만, 친구들끼리 서로서로 짝지어 비교할 수 있는 쌍의 수가 수백 개나 되기 때문입니다.
생일 문제로 견주기
생일이 겹치지 않을 확률을 계산해 봅니다. 두 번째 사람은 , 세 번째 사람은 … 사람이 늘어날수록 이 분수들을 계속 곱하게 됩니다.
23명이 모이면 비교할 수 있는 쌍의 수가 쌍이나 됩니다. 곱셈이 누적되면서 모두가 다를 확률은 50% 밑으로 뚝 떨어지고, 겹칠 확률이 절반을 넘어서게 됩니다.
충돌 확률 어림
가능한 경우의 수가 개인 해시 공간에서 개의 값을 무작위로 추출할 때 충돌이 발생하지 않을 확률은 입니다.
충돌 확률이 50% 이상이 되는 임계점은 에서 로 도출됩니다. 즉 전체 공간 이 아니라 그 제곱근인 번의 시도만으로 충돌을 일으킬 수 있습니다.
해시와 보안
이 원리는 암호학에서 해시 함수의 충돌 저항성을 무너뜨리는 생일 공격(Birthday Attack)의 기초입니다. 64비트 해시 함수는 번이 아니라 단 (약 40억) 번의 대입만으로 위조가 가능해집니다.
이 때문에 현대 블록체인과 전자서명 표준은 안전성을 확보하기 위해 출력 길이를 256비트(SHA-256) 또는 512비트로 대폭 늘려 생일 공격의 위협을 원천 봉쇄합니다.
생일 역설과 암호학적 충돌. 다음 물음에 답하시오.
(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년대 후반 해시 함수와 공개키 암호 체계의 충돌 안전성을 분석하면서 체계화되었습니다.