확률 · 무작위성 · 암호
무작위를 찾아서: 7이라는 착각부터 우주의 주사위까지
잠깐 멈추고, 1부터 10 사이에서 아무 숫자나 하나 떠올려 보자. 머릿속에 떠오른 그 숫자를 기억해 두자. 십중팔구 그것은 7이다.
이건 마술이 아니라 통계다. 사람들에게 1부터 10 중 하나를 고르게 하면 선택은 결코 고르게 흩어지지 않는다. 조사에 따라 수치는 달라지지만, 어느 조사를 보든 7이 가장 많이 선택되고 그다음이 3, 그리고 양 끝의 1과 10은 거의 선택되지 않는다는 경향은 한결같다. 어떤 실험에서는 응답자의 절반 가까이가 7을 골랐다.
왜 하필 7일까? 답은 우리가 무작위를 흉내 내는 방식에 있다. 1이나 10을 고르면 어쩐지 성의가 없어 보인다. 끝 숫자는 무작위처럼 느껴지지 않는다. 5는 한복판이라 너무 뻔하다. 2, 4, 6, 8 같은 짝수는 어딘가 정돈된 느낌이라 무작위답지 않다. 3으로 나누어떨어지는 9도 비슷한 이유로 밀린다. 이렇게 하나씩 지워 나가면 남는 것이 바로 7이다. 양 끝도 아니고, 한복판도 아니고, 짝수도 아니고, 작은 소수도 아닌, 절묘하게 '비뚤어진' 숫자.
심리학자들의 결론은 명쾌하다. 사람들이 7에 신비롭게 이끌리는 것이 아니라, 무작위로 고르는 사람을 흉내 내고 있을 뿐이라는 것이다. 우리는 무작위한 숫자를 떠올리는 대신, "무작위처럼 보이려면 어떤 답을 해야 할까"를 무의식적으로 계산한다. 흥미롭게도 같은 질문을 두 자리 범위(가령 1~20)로 바꾸면 사람들은 같은 논리로 27 자리에 해당하는 숫자를 고른다. 7 자체가 마법인 게 아니라, 그 위치가 마법인 셈이다.
이 편향은 인간만의 것이 아니다. 최근 여러 대규모 언어 모델(LLM, large language model)에게 1부터 10 중 하나를 고르라고 수백 번 물어본 실험에서, 챗봇들 역시 90% 안팎으로 7을 답했다. 사람의 글을 학습한 기계가 사람의 버릇까지 그대로 물려받은 것이다.
01무작위성은 숫자 하나에 있지 않다
여기서 한 가지 오해를 짚고 넘어가야 한다. "무작위한 숫자를 말해 봐"라는 요구 자체가 사실은 모순에 가깝다. 숫자 하나만 떼어 놓고 보면, 그것이 무작위인지 아닌지 판단할 방법이 없기 때문이다.
1이라는 숫자를 보자. 1은 무작위한가? 그것만으로는 알 수 없다. 그런데 누군가 1, 5, 2, 8, 7, 4라는 줄을 늘어놓고 그중 첫 번째가 1이라면, 이제 1은 그 줄 안에서 충분히 무작위해 보인다. 반대로 어떤 사람에게 무작위한 숫자를 계속 물었더니 5, 5, 5, 5가 나온다면, 다섯 번째 5는 도저히 무작위라고 부를 수 없다.
무작위성은 숫자 그 자체의 성질이 아니라, 숫자들이 늘어선 순서의 성질이다.
그래서 무작위성을 제대로 정의하려면 숫자 하나가 아니라 수열(數列), 즉 숫자들의 긴 줄을 봐야 한다. 좋은 무작위 수열의 핵심 조건은 단 하나다. 앞의 숫자들을 아무리 들여다봐도 다음에 무엇이 올지 도무지 예측할 수 없어야 한다는 것. 패턴이 없어야 하고, 규칙이 없어야 하며, 지름길이 없어야 한다.
잘 섞인 카드 한 벌을 떠올려 보자. 맨 위 카드가 하트 7이라고 해서 그 카드가 '무작위 카드'인 것은 아니다. 무작위한 것은 카드 한 장이 아니라 섞인 순서 전체다. 다음에 어떤 카드가 나올지 누구도 알 수 없을 때, 비로소 그 카드 묶음이 무작위라고 말할 수 있다. 만약 누군가 카드 순서의 규칙을 알아낸다면, 그 순간 그 묶음은 더 이상 무작위가 아니게 된다.
이 정의를 손에 쥐면 골치 아픈 질문 하나가 떠오른다. 그렇다면 무작위한 숫자들의 줄을 어떻게 '만들' 수 있을까? 인간은 방금 본 것처럼 7에 휘둘리는 형편없는 무작위 발생기다. 그렇다면 차갑고 논리적인 기계, 컴퓨터에게 맡기면 되지 않을까?
여기에 이 이야기의 가장 묘한 반전이 있다. 컴퓨터는 무작위를 만드는 데 인간보다 나을 게 없다. 오히려 더 못한다.
02컴퓨터가 굴리는 가짜 주사위
컴퓨터는 본질적으로 결정론적인 기계다. 같은 명령을 같은 조건에서 실행하면 언제나 똑같은 답을 토해 낸다. 바로 그 예측 가능성 덕분에 우리는 컴퓨터를 신뢰한다. 계산기가 2 더하기 2에 대해 매번 다른 답을 내놓는다면 아무도 쓰지 않을 것이다. 그런데 무작위성이란 정확히 그 반대, 예측 불가능성이다. 컴퓨터에게 무작위를 요구하는 것은 정직한 사람에게 거짓말을 시키는 것과 비슷한 데가 있다.
그래서 컴퓨터가 내놓는 '난수'는 진짜 무작위가 아니다. 무작위처럼 보이도록 정교하게 계산된 수열일 뿐이다. 충분히 가까이서 들여다보면 반드시 패턴이 드러난다. 이런 수를 우리는 진짜 난수와 구별해 의사난수(疑似亂數, pseudorandom number)라고 부른다. '무작위인 척하는 수'라는 뜻이다.
나머지를 이용한 마법
의사난수를 만드는 가장 오래되고 유명한 방법은 선형 합동 생성기(LCG, linear congruential generator)다. 이름은 거창하지만 원리는 초등학교 산수 수준이다. 먼저 시작이 될 숫자 하나를 정한다. 거기에 큰 수 하나를 곱하고, 또 다른 큰 수 하나를 더한다. 그리고 마지막으로 어떤 수로 나눈 나머지를 취한다. 이 나머지가 수열의 다음 숫자가 되고, 그 숫자를 다시 처음으로 가져와 같은 과정을 반복한다.
'나머지'라는 말이 낯설다면 벽시계를 떠올리면 된다. 시계는 12를 넘으면 다시 1로 돌아간다. 지금이 10시인데 5시간이 지나면 15시가 아니라 3시가 된다. 15를 12로 나눈 나머지가 3이기 때문이다. 나머지 연산은 이렇게 숫자를 일정한 범위 안에서 빙글빙글 돌게 만드는 장치다. 컴퓨터의 난수 생성기도 이 '숫자 시계'를 빠르게 돌려 다음 숫자를 뽑아낸다.
시작이 같으면 끝까지 같다
여기서 결정적인 문제가 드러난다. 시작 숫자가 같으면 그 뒤에 따라오는 수열 전체가 완전히 똑같아진다. 게임을 켤 때마다 적이 같은 자리에서 같은 방식으로 튀어나온다면 곤란하다. 그래서 프로그래머들은 시작 숫자를 매번 다르게 바꾸는 장치를 쓴다. 이 시작 숫자를 씨앗(seed)이라 부른다.
가장 흔한 방법은 현재 시각을 씨앗으로 쓰는 것이다. 정확히는 1970년 1월 1일 자정 이후 흘러간 시간을 초 단위로 센 숫자다. 프로그램을 실행하는 순간의 시각은 매번 다르므로, 매번 다른 수열이 시작된다. 시간이라는, 결코 같은 값을 두 번 갖지 않는 자원을 무작위의 출발점으로 빌려 오는 셈이다.
그러나 더 근본적인 한계가 있다. 나머지 연산으로 만들어 낼 수 있는 숫자의 종류는 유한하다. 그러니 충분히 오래 돌리면 언젠가 예전에 나왔던 숫자로 되돌아가고, 그 순간부터 똑같은 줄이 처음부터 끝까지 반복된다. a, b, m을 잘못 고르면 이 반복은 놀랄 만큼 빨리 찾아온다. 그래서 이 수들은 결코 진짜 난수가 아니다. 그저 '꽤 무작위처럼 보이는' 의사난수다.
1960~70년대에 한 거대 컴퓨터 회사가 널리 퍼뜨린 RANDU라는 난수 발생기가 있었다. 겉보기에는 멀쩡했다. 그러나 이 발생기가 만든 연속한 세 숫자를 3차원 공간의 좌표로 찍어 보면, 점들이 공간 전체에 골고루 흩어지는 대신 단 15개의 평면 위에만 칼같이 줄지어 박혔다. 무작위의 가면 뒤에 숨은 격자였던 것이다. 이 결함 있는 발생기로 돌린 그 시대 과학 계산 결과 상당수가 훗날 신뢰성을 의심받았다.
물론 기술은 발전했다. 오늘날 가장 널리 쓰이는 의사난수 발생기 가운데 하나인 '메르센 트위스터(Mersenne Twister)'는 1997년에 등장했는데, 같은 수열이 반복되기까지의 주기가 2의 19937제곱에서 1을 뺀 수에 이른다. 자릿수로만 6,000자리가 넘는, 우주의 나이로도 다 돌릴 수 없는 길이다. 사실상 영원히 반복되지 않는 셈이다. 그럼에도 이 발생기조차 출력값을 연속으로 624개만 관찰하면 그 뒤를 완벽하게 예측할 수 있다. 게임이나 시뮬레이션에는 충분하지만, 암호처럼 누군가 적극적으로 패턴을 캐려 드는 영역에서는 위험하다.
03고르게 나온다고 무작위는 아니다
무작위를 둘러싼 또 하나의 끈질긴 오해가 있다. 많은 사람이 '무작위'를 '모든 결과가 똑같은 확률로 나오는 것'과 같은 말로 여긴다. 하지만 둘은 전혀 다른 개념이다. 이 차이를 가장 분명하게 보여 주는 도구가 바로 주사위다.
주사위 하나를 던지면 1부터 6까지 각 눈이 정확히 6분의 1의 확률로 나온다. 어느 눈도 다른 눈보다 특별히 더 잘 나오지 않는다. 이렇게 모든 결과가 같은 확률을 갖는 것을 균등분포라 한다. 그런데 주사위를 둘로 늘리면 이야기가 완전히 달라진다.
주사위 두 개의 합은 2부터 12까지다. 그런데 이 합들은 결코 고르게 나오지 않는다. 7이 압도적으로 자주 나온다. 이유는 단순하다. 합이 2가 되려면 두 주사위가 모두 1이어야 하니 방법이 단 한 가지뿐이다. 반면 7은 1과 6, 2와 5, 3과 4, 그리고 그 반대 순서까지 무려 여섯 가지 방법으로 만들 수 있다. 만드는 경우의 수가 많을수록 더 자주 나온다. 그래서 합의 분포는 7을 꼭대기로 하는 삼각형 모양이 된다.
주사위를 셋, 넷, 그 이상으로 늘려 가면 이 삼각형은 점점 양옆이 부드럽게 휘어진 종 모양으로 변해 간다. 이것이 그 유명한 정규분포(正規分布), 또는 가우스 분포다. '정규(normal)'라는 이름이 붙은 이유는, 자연계의 거의 모든 것이 이 곡선을 그리기 때문이다. 사람의 키, 측정 오차, 시험 점수, 입자의 운동까지. 똑같은 조건에서 행동하는 수많은 요소가 모이면 어김없이 이 종 모양이 나타난다.
여러 개의 무작위한 값을 더하면, 원래 하나하나가 어떤 모양의 분포였든 그 합은 종 모양에 가까워진다. 큰 값과 작은 값이 서로 상쇄되면서 한복판으로 몰리는 경향이 생기기 때문이다. 수학에서는 이를 '중심극한정리(中心極限定理, central limit theorem)'라 부른다. 18세기 수학자 드무아브르가 동전 던지기를 연구하다 처음 실마리를 잡았고, 라플라스가 일반적인 정리로 다듬었다. 자연이 그토록 자주 종 모양을 그리는 이유가 바로 여기에 있다.
여기서 가장 중요한 깨달음이 나온다. 두 주사위의 합에서 7이 가장 자주 나온다고 해서, 그 합이 무작위가 아닌 것은 아니다. 다음에 어떤 합이 나올지는 여전히 누구도 알 수 없다. 단지 어떤 값이 더 자주 나올 뿐이다. 무작위성의 본질은 '모든 결과가 똑같이 나오는 것'이 아니라 '다음 결과를 예측할 수 없는 것'이다. 확률이 한쪽으로 쏠려 있어도, 결과를 미리 알 수 없다면 그것은 엄연히 무작위다.
04진짜 우연은 어디에 있는가
인간도 못 하고 컴퓨터의 알고리즘도 못 한다면, 진짜 무작위는 대체 어디서 구할 수 있을까? 답은 의외의 곳에 있다. 바로 물리적인 현실 세계, 그중에서도 우주가 본질적으로 예측을 거부하는 영역이다.
원자가 던지는 주사위
방사성 원자 하나를 지켜본다고 하자. 이 원자는 언젠가 붕괴하면서 입자를 내뱉는다. 그런데 그것이 정확히 언제일지는 누구도, 무엇으로도 알 수 없다. 1초 뒤일 수도, 백 년 뒤일 수도 있다. 이것은 우리가 아직 충분히 모르기 때문이 아니라, 양자역학의 세계가 근본적으로 그렇게 생겨 먹었기 때문이다. 자연이 던지는 진짜 주사위인 셈이다.
가이거 계수기는 이 붕괴를 하나하나 '딸깍' 소리로 잡아낸다. 붕괴와 붕괴 사이의 시간 간격은 매번 미세하게 다르고, 그 차이는 완벽하게 예측 불가능하다. 바로 이 간격을 숫자로 바꾸면 세상에서 가장 순수한 무작위 수를 얻을 수 있다.
흥미로운 점이 하나 있다. 일정 시간 동안 세어 본 붕괴 '횟수'는 앞서 본 주사위처럼 종형 분포를 그린다. 그러나 그렇다고 무작위가 아닌 것은 결코 아니다. 평균값 근처가 가장 자주 나올 뿐, 다음 측정에서 정확히 몇 번이 셀지는 아무도 모른다. 앞 절에서 본 교훈이 여기서 그대로 반복된다. 분포가 종 모양이어도 무작위는 무작위다.
번개와 용암 램프
물리적 무작위의 원천은 방사성 붕괴만이 아니다. 라디오를 아무 방송도 잡히지 않는 빈 주파수에 맞추면 '치직' 하는 잡음이 들린다. 이 잡음의 상당 부분은 지구 곳곳에서 끊임없이 치는 번개가 만든다. 어느 누리집 서비스는 1998년부터 이 대기 잡음을 받아 진짜 난수를 만들어 추첨, 연구, 온라인 게임에 공급해 왔다. 컴퓨터가 못 만드는 무작위를 하늘에서 길어 올리는 셈이다.
가장 기발한 사례는 어느 인터넷 보안 회사의 로비에 있다. 이 회사는 벽 한 면에 100개가 넘는 용암 램프를 세워 두고 카메라로 끊임없이 촬영한다. 램프 속을 떠다니는 왁스 덩어리는 결코 같은 모양을 두 번 만들지 않기 때문이다. 카메라가 찍은 사진은 그 자체로 거대한 무작위 숫자 덩어리가 되고, 이것이 인터넷 암호키를 만드는 씨앗으로 쓰인다. 사람들이 무심코 카메라 앞을 지나가며 시야를 가리는 것조차 무작위성을 더하는 재료가 된다. 같은 회사의 다른 지사들은 흔들리는 이중 진자, 천장에 매달린 무지개 모빌, 출렁이는 파도 기계로 같은 일을 한다. 우리가 매일 쓰는 인터넷의 안전 일부가, 이 우스꽝스러울 만큼 아날로그적인 장치들에 기대고 있는 것이다.
05무작위가 무너지면 자물쇠도 무너진다
왜 이토록 진짜 무작위에 공을 들일까? 무작위는 한가한 호기심이 아니라 디지털 세계의 안전을 떠받치는 기둥이기 때문이다. 우리가 쓰는 비밀번호, 은행 거래를 지키는 암호키, 누리집과 주고받는 보안 통신의 열쇠는 하나같이 무작위 수에서 출발한다. 만약 그 수를 누군가 예측할 수 있다면, 그 자물쇠는 종이로 만든 것이나 다름없다.
한 조직이 특정 회사의 슬롯머신에 들어간 의사난수 발생기를 역공학으로 완전히 해독한 사건이 있었다. 이들의 수법은 영화 같았다. 현장 요원이 휴대폰으로 기계가 돌아가는 장면을 수십 번 촬영해 멀리 떨어진 분석팀에 전송하면, 분석팀은 해당 기계의 난수 패턴을 계산해 '언제 돈이 쏟아질지'를 알아냈다. 그리고 그 타이밍 정보를 다시 요원의 휴대폰으로 보내, 버튼을 눌러야 할 순간보다 0.25초 앞서 휴대폰을 진동시켰다. 기계는 무작위인 척했지만, 실은 충분히 들여다본 사람에게는 훤히 들여다보였던 것이다.
그래서 보안이 중요한 곳에서는 두 가지를 영리하게 결합한다. 먼저 방사성 붕괴나 떠다니는 왁스 같은 물리적 무작위에서 진짜 예측 불가능한 출발점을 길어 온다. 그런 다음 그 씨앗을, 패턴을 캐내기가 사실상 불가능하도록 설계된 특수한 알고리즘으로 길게 늘린다. 이런 알고리즘을 '암호학적으로 안전한 의사난수 발생기(CSPRNG, cryptographically secure pseudorandom number generator)'라 부른다. 앞서 본 용암 램프 벽이 맡은 임무가 바로 이 '진짜 출발점 만들기'다.
무작위가 활약하는 무대는 보안만이 아니다. 기상학자는 수많은 무작위 시나리오를 돌려 내일의 날씨를 가늠하고, 제약 연구자는 분자의 무작위한 움직임을 흉내 내 신약을 설계하며, 금융 분석가는 무작위 변동을 수만 번 모의실험해 위험을 따진다. 무작위한 표본을 반복해 던져 답을 좁혀 가는 이 방식을 '몬테카를로 방법'이라 한다. 도박의 도시 이름을 딴 이 기법에서도, 난수의 질은 곧 결과의 신뢰성으로 직결된다.
06발견하는 우연
이제 처음의 작은 게임으로 돌아가 보자. 1부터 10 중 하나를 고르라는 말에 당신의 머릿속에 7이 떠올랐다면, 그것은 당신이 무작위에 유난히 서툴러서가 아니다. 무작위라는 것이 본래 그토록 손에 잡히지 않는 대상이기 때문이다.
이 여정에서 우리는 세 종류의 '무작위 발생기'를 만났다. 7에 휘둘리는 인간, 결정론에 갇혀 무작위인 척만 할 수 있는 컴퓨터, 그리고 자물쇠를 따이고 마는 어설픈 알고리즘. 셋 모두 무작위를 흉내 낼 수는 있어도, 진짜로 만들어 내지는 못했다. 진짜 우연을 얻으려면 결국 우리는 원자의 붕괴, 번개의 잡음, 떠다니는 왁스처럼 우주가 우리에게 허락한 예측 불가능성에 손을 내밀어야 했다.
진짜 무작위는 머리로 짜내는 것이 아니라, 세계 속에서 발견해 길어 오는 것이다.
그러니 다음에 누군가 "아무 숫자나 하나 말해 봐"라고 하거든, 입에서 7이 튀어나오려는 순간 잠시 멈춰 보자. 그 한순간의 멈칫거림이야말로, 우리가 얼마나 무작위와 거리가 먼 존재인지를, 그리고 진짜 우연이 얼마나 귀한 것인지를 일깨워 주는 가장 작은 증거다.