본문 바로가기
카테고리 없음

양자 회로로 진짜 난수를 만들어 로또 번호를 뽑아보기

by 퀀텀크립토 2026. 7. 3.

큐비트를 중첩시켜 난수를 만드는 가장 단순한 양자 회로를 직접 짜서 돌리고 그 결과로 로또 번호까지 뽑아 봤습니다.

 

난수를 만든 단순한 양자 회로
난수를 만든 단순한 양자 회로

 

동전 대신 큐비트를 던지는 양자 난수의 원리

컴퓨터가 만들어 내는 난수에는 오래된 비밀이 하나 있습니다. 우리가 흔히 쓰는 프로그램의 무작위 숫자는 사실 완전한 우연이 아니라, 정해진 규칙을 빠르게 돌려 만든 그럴듯한 흉내라는 점입니다. 시작값만 같으면 언제 돌려도 똑같은 순서가 나오기 때문에, 엄밀히 말하면 예측이 가능합니다. 그래서 이런 숫자를 의사난수, 즉 가짜 난수라고 부릅니다. 반면 양자 세계의 무작위성은 성격이 다릅니다. 자연이 근본적으로 확률로 움직이기 때문에, 원리상 그 누구도 결과를 미리 알 수 없습니다. 저는 바로 이 차이가 궁금해서, 난수를 만드는 가장 단순한 양자 회로를 직접 짜 보기로 했습니다. 방법은 생각보다 간단합니다.

 

먼저 큐비트 하나를 준비합니다. 큐비트는 0과 1 중 하나로 정해져 있는 보통의 비트와 달리, 두 상태를 동시에 품을 수 있는 특별한 비트입니다. 여기에 하다마드 게이트라는 연산을 걸어 주면, 큐비트는 0일 가능성과 1일 가능성이 정확히 반반인 중첩 상태가 됩니다. 마치 완벽하게 균형 잡힌 동전을 공중에 띄워 둔 것과 같습니다. 이제 이 큐비트를 측정하는 순간, 중첩은 무너지고 0 또는 1 가운데 하나가 무작위로 결정됩니다. 큐비트를 여러 개 나란히 놓고 같은 일을 반복하면, 원하는 만큼 긴 난수의 흐름을 얻을 수 있습니다. 사실 무작위성은 우리 생활 곳곳에 숨어 있습니다. 인터넷에서 안전하게 주고받는 정보의 자물쇠도, 게임 속 확률도, 결국은 좋은 난수에 기대어 돌아갑니다. 그래서 얼마나 예측하기 어려운 난수를 만드느냐는 생각보다 중요한 문제입니다. 의사난수는 대부분의 경우 충분히 쓸 만하지만, 규칙에서 출발한다는 근본적인 한계가 있습니다. 반면 양자적인 무작위성은 자연의 근본 성질에서 곧바로 길어 올린다는 점에서 매력적입니다. 물론 저처럼 취미로 접근하는 사람에게 그 둘의 차이가 당장 실생활을 바꾸지는 않습니다. 다만 예측 불가능이라는 말의 무게가 이 둘 사이에서 완전히 다르다는 사실만큼은, 회로를 직접 만들어 보고서야 마음으로 이해가 됐습니다. 어쩌면 저는 난수 그 자체보다, 예측할 수 없다는 상태가 정확히 무엇인지 손으로 한번 만져 보고 싶었는지도 모릅니다. 아래 그림은 제가 만든 회로의 구조를 단순화한 것으로, 각 큐비트에 하다마드 게이트를 걸어 중첩을 만든 뒤 측정하는 과정을 보여 줍니다. 저는 이 그림을 그리고 나서야, 난수라는 것이 이렇게 물리적인 던지기로 만들어질 수 있다는 사실이 새삼 신기하게 느껴졌습니다.

 

직접 돌려 본 실험 결과

큐비트 측정 분포도
큐비트 측정 분포도

 

 

원리를 이해했으니 이제 진짜로 돌려 볼 차례였습니다. 저는 큐비트 세 개를 모두 중첩 상태로 만든 다음, 그 회로를 무려 2,000번 측정했습니다. 큐비트가 세 개이면 나올 수 있는 값은 0부터 7까지 여덟 가지입니다. 만약 무작위성이 완벽하다면 이 여덟 개의 값이 각각 250번쯤 고르게 나와야 합니다. 실제 결과는 어땠을까요. 아래 그림에서 보시다시피, 여덟 개의 막대가 250이라는 기준선 근처에서 오르락내리락했습니다. 가장 많이 나온 값은 267번, 가장 적게 나온 값은 229번으로, 완벽하게 똑같지는 않지만 어느 한쪽으로 크게 쏠리지도 않았습니다. 솔직히 처음에는 여덟 개가 자로 잰 듯 똑같이 나올 줄 알았는데, 이렇게 삐뚤빼뚤한 모습을 보니 오히려 무작위라는 말이 더 실감 났습니다. 진짜 우연이라면 매번 정확히 같을 수가 없으니까요. 다만 여기서 정직하게 밝혀 둘 것이 있습니다.

 

저는 이 회로를 실제 양자 컴퓨터가 아니라, 컴퓨터 안에서 양자 회로를 흉내 내는 시뮬레이터로 돌렸습니다. 그런데 이 시뮬레이터가 만들어 내는 무작위성은 결국 앞서 말한 의사난수에 기대고 있어서, 원리적으로는 진짜 양자 무작위라고 보기는 어렵습니다. 진짜 물리적 우연을 얻으려면 무료로 열려 있는 양자 클라우드에 회로를 제출해 실제 하드웨어에서 돌려야 하고, 그때는 기계 자체의 잡음까지 결과에 섞여 듭니다. 그 차이를 알고 나니, 오늘의 실습은 어디까지나 원리를 손으로 확인해 본 연습이라는 생각이 들었습니다. 조금 더 설명을 덧붙이자면, 여기서 2,000번이라는 숫자는 같은 회로를 2,000번 반복해 측정했다는 뜻입니다. 양자 측정은 한 번으로는 그저 하나의 값만 줄 뿐이라, 무작위성이 제대로 작동하는지 보려면 이렇게 여러 번 돌려 그 분포를 살펴봐야 합니다. 횟수를 늘릴수록 여덟 개의 막대는 조금씩 더 평평해질 것입니다. 반대로 몇 번만 돌리면 우연히 한쪽으로 쏠린 결과가 나올 수도 있는데, 그것 역시 무작위의 자연스러운 얼굴입니다. 저는 결과를 눈으로 확인하면서, 숫자를 그냥 받아 쓰는 것과 그 숫자가 어디서 어떻게 나왔는지 아는 것 사이에는 꽤 큰 차이가 있다는 생각을 했습니다. 막대들이 기준선을 아슬아슬하게 넘나드는 모습은, 무작위라는 말이 결코 반듯하고 얌전한 것이 아님을 조용히 보여 주고 있었습니다. 그래도 회로를 짜고, 돌리고, 분포를 눈으로 확인하는 과정 전체가 저에게는 충분히 값진 경험이었습니다.

 

 

 

양자 로또와 여섯 자리 비밀 숫자 — 장난스럽지만 진짜인 결과

재미로 보는 로또번호
재미로 보는 로또번호

기왕 난수를 만들었으니, 조금 장난스러운 일에도 써 보고 싶었습니다. 그래서 큐비트 여섯 개로 회로를 다시 짜서, 1부터 45까지의 숫자 가운데 여섯 개를 뽑아 보았습니다. 큐비트 여섯 개를 측정하면 0부터 63까지의 값이 나오는데, 그중 1과 45 사이에 들어오는 값만 골라 받고 나머지는 버리는 방식으로 로또 번호를 만들었습니다. 실제로 제가 돌렸을 때 나온 여섯 개의 숫자는 4, 12, 24, 30, 31, 43이었습니다. 아래 그림이 그 결과를 로또 공 모양으로 옮겨 본 것입니다. 같은 방법으로 큐비트 네 개를 써서 0부터 9까지의 숫자만 골라 여섯 자리 비밀 숫자도 하나 만들어 보았는데, 결과는 542835가 나왔습니다. 물론 여기서도 솔직해야겠습니다. 이렇게 뽑은 번호가 당첨 확률을 조금이라도 높여 주지는 않습니다. 로또는 애초에 완전한 우연이라, 양자로 뽑든 손으로 찍든 확률은 똑같습니다. 통계적으로 보아도 잘 만든 보통의 난수와 구별되지 않습니다. 그런데도 저는 이 실험이 이상하게 즐거웠습니다. 세상에서 가장 근본적인 우연이라는 양자 원리를 직접 불러내, 그 결과로 제 손안에 숫자 여섯 개를 쥐었다는 사실이 묘한 낭만처럼 다가왔기 때문입니다.

 

번호를 뽑는 과정에서 한 가지 사소한 장치를 더 뒀습니다. 큐비트 여섯 개로는 0부터 63까지 나오는데, 로또는 1부터 45까지만 필요하므로 그 범위를 벗어난 값은 그냥 버리고 다음 결과를 기다리는 방식이었습니다. 이렇게 필요 없는 값을 걸러 내는 작은 규칙 하나까지 직접 정하다 보니, 난수를 만든다는 일이 마냥 자동으로 툭 튀어나오는 것이 아니라 사람이 설계하는 과정이라는 점이 새삼 다가왔습니다. 결과로 나온 여섯 개의 숫자를 로또 공에 하나씩 얹어 놓고 보니, 별것 아닌 실험인데도 괜히 뿌듯한 마음이 들었습니다. 숫자 여섯 개가 화면에 떠오르던 순간, 저는 나도 모르게 작게 웃고 말았습니다. 다음에는 이 회로를 진짜 양자 하드웨어에 제출해서, 잡음이 섞인 결과가 시뮬레이터와 얼마나 다른지 직접 비교해 볼 생각입니다. 낯설게만 느껴지던 양자컴퓨터를, 이렇게 작은 실습 하나로 조금 더 가깝게 만난 하루였습니다.

 

이 글의 로또 번호와 여섯 자리 숫자는 양자 회로를 직접 돌려 나온 실제 결과이며, 오로지 재미와 학습을 위한 실험입니다. 당첨이나 보안을 보장하지 않습니다.