쇼어 알고리즘
이 Qiskit in Classrooms 모듈을 사용하려면 다음 패키지가 설치된 Python 환경이 필요합니다:
qiskitv2.1.0 이상qiskit-ibm-runtimev0.40.1 이상qiskit-aerv0.17.0 이상qiskit.visualizationnumpypylatexenc
위 패키지 설치 및 설정 방법은 Qiskit 설치 가이드를 참고하세요. 실제 양자 컴퓨터에서 작업을 실행하려면, IBM Cloud 계정 설정 가이드의 단계를 따라 IBM Quantum® 계정을 만들어야 합니다.
이 모듈은 테스트를 거쳤으며 QPU 시간을 3초 사용했습니다. 이는 추정치이며, 실제 사용량은 다를 수 있습니다.
# Added by doQumentation — required packages for this notebook
!pip install -q numpy qiskit qiskit-ibm-runtime
# Uncomment and modify this line as needed to install dependencies
#!pip install 'qiskit>=2.1.0' 'qiskit-ibm-runtime>=0.40.1' 'qiskit-aer>=0.17.0' 'numpy' 'pylatexenc'
소개
1990년대 초, 고전 컴퓨터가 풀기 어려운 문제를 양자 컴퓨터로 해결할 수 있을지도 모른다는 기대가 높아졌습니다. 몇몇 재능 있는 컴퓨터 과학자들이 일부 틈새적이고 인위적인 문제에서 양자 컴퓨팅의 강점을 보여주는 알고리즘을 고안하기는 했지만, 양자 컴퓨팅 분야를 확실하게 혁신할 "킬러 앱"을 찾아낸 사람은 없었습니다. 그러다가 1994 년, 피터 쇼어가 지금은 쇼어 알고리즘이라고 불리는 대형 수 인수분해 알고리즘을 고안해냈습니다.
당시 큰 수의 소인수를 찾는 것이 고전 컴퓨터에게 매우 어렵다는 사실은 잘 알려져 있었습니다. 실제로 인터넷 보안 프로토콜은 바로 이 어려움에 의존하고 있었습니다. 쇼어는 이론적인 미래의 양자 컴퓨터에 더 까다로운 단계 일부를 맡겨, 이 인수들을 지수적으로 더 효율적으로 찾는 방법을 발견했습니다.
이 모듈에서는 쇼어 알고리즘을 살펴봅니다. 먼저 알고리즘의 배경을 좀 더 설명하고, 풀고자 하는 문제를 명확히 정의하며, 사이버 보안과의 관련성을 설명합니다. 다음으로 모듈러 수학에 대한 기초 개념과 이를 인수분해 문제에 적용하는 방법을 소개하고, 인수분해가 "위수 찾기(order-finding)"라는 다른 문제로 어떻게 귀결되는지 보여줍니다. 이전 모듈에서 배웠던 양자 푸리에 변환과 양자 위상 추정이 어떻게 활용되는지, 그리고 이를 사용해 위수 찾기 문제를 어떻게 푸는지 설명합니다.
마지막으로 실제 양자 컴퓨터에서 쇼어 알고리즘을 실행해 봅니다! 다만, 이 알고리즘이 진정으로 유용해지려면 아직 몇 년은 더 걸릴 대형 내결함성 양자 컴퓨터가 필요하다는 점을 기억하세요. 따라서 알고리즘이 어떻게 작동하는지 보여주기 위해 작은 수를 인수분해해 보겠습니다.
인수분해 문제
인수분해 문제의 목표는 수 의 소인수를 찾는 것입니다. 일부 수 에 대해서는 이것이 꽤 쉽습니다. 예를 들어 이 짝수라면 소인수 중 하나는 2입니다. 이 소수의 거듭제곱, 즉 어떤 소수 에 대해 인 경우에도 를 찾기가 비교적 쉽습니다. 의 번째 근을 근사한 뒤 가 될 수 있는 근처의 소수를 찾으면 됩니다.
하지만 이 홀수이고 소수의 거듭제곱이 아닌 경우가 고전 컴퓨터가 어려움을 겪는 상황입니다. 쇼어 알고리즘이 다루는 경우도 바로 이것입니다. 이 알고리즘은 를 만족하는 두 인수 와 를 찾습니다. 모든 인수가 소수가 될 때까지 재귀적으로 적용할 수 있습니다. 다음 절에서 이 문제를 어떻게 해결하는지 살펴보겠습니다.
사이버 보안과의 관련성
오늘날 일반적으로 사용되는 RSA를 포함하여, 많은 암호화 방식이 큰 수를 인수분해하기 어렵다는 사실을 기반으로 구축되었습니다. RSA에서는 두 개의 큰 소수를 곱하여 를 구하는 방식으로 공개 키를 만듭니다. 그러면 누구든 이 공개 키를 사용하여 데이터를 암호화할 수 있습니다. 하지만 개인 키, 즉 와 를 가진 사람만이 그 데이 터를 복호화할 수 있습니다.
을 쉽게 인수분해할 수 있다면 누구든 와 를 알아내어 암호화를 깰 수 있을 것입니다. 하지만 그렇지 않습니다. 이것은 매우 어려운 문제로 잘 알려져 있습니다. 실제로 1024 비트, 309 자리 십진수로 이루어진 RSA1024라는 수의 소인수는 아직 발견되지 않았습니다. 1991년에 인수분해에 대한 현상금 $100,000이 걸렸음에도 불구하고 말입니다.
쇼어의 해법
1994년 피터 쇼어는 양자 컴퓨터가 고전 컴퓨터보다 지수적으로 더 효율적으로 큰 수를 인수분해할 수 있음을 깨달았습니다. 그의 통찰은 이 인수분해 문제와 모듈러 산술 사이의 관계에 기반합니다. 모듈러 산술에 대한 간단한 기초를 살펴본 후, 이를 이용해 을 인수분해하는 방법을 알아보겠습니다.
모듈러 산술
모듈러 산술은 순환하는 방식으로 수를 세는 체계입니다. 일반적인 방식인 0, 1, 2 등의 정수로 시작하지만, 어느 시점에서 주기 이 지나면 다시 처음부터 시작합니다. 예를 들어 살펴보겠습니다. 주기가 5라고 하면, 수를 셀 때 원래라면 5가 되어야 할 자리에서 다시 0으로 돌아갑니다:
이는 "모듈로-5" 세계에서 5가 0과 동일하기 때문입니다. 이라고 표현합니다. 실제로 5의 모든 배수는 와 동일합니다.
이해도 확인
아래 질문을 읽고 답을 생각해 본 후, 삼각형을 클릭하여 해답을 확인하세요.
모듈러 산술을 사용하여 다음 문제를 풀어보세요:
오전 8시에 긴 대륙 횡단 기차 여행을 출발합니다. 기차 여행은 60시간 동안 지속됩니다. 도착했을 때 몇 시입니까?
정답:
하루는 24시간이므로 주기는 24입니다. 따라서 이 문제는 모듈러 산술로 다음과 같이 표현할 수 있습니다:
따라서 목적지에 20:00, 즉 오후 8시에 도착하게 됩니다.
과
두 집합 과 를 도입하면 유용한 경우가 많습니다. 은 단순히 "모듈로-" 세계에 존재하는 수들의 집합입니다. 예를 들어 모듈로-5로 수를 셀 때 집합은 가 됩니다. 또 다른 예로 입니다. 의 원소들에 대해 덧셈과 곱셈(모듈로 )을 수행할 수 있으며, 각 연산의 결과도 의 원소입니다. 따라서 은 *환(ring)*이라는 수학적 객체가 됩니다.
쇼어 알고리즘에서 특히 중요한 의 특수한 부분 집합이 있습니다. 각 원소와 사이의 최대공약수가 1인, 즉 각 원소가 과 "서로소"인 수들의 부분 집합입니다. 이 수들의 집합에 모듈러 곱셈 연산을 더하면 *군(group)*이라는 또 다른 수학적 객체가 형성됩니다. 이 군을 라고 부릅니다. (그리고 일반적인 유한군)에서 임의의 원소 를 선택하여 를 반복해서 곱하면 결국 항상 1이 나옵니다. 를 자기 자신에 곱하여 1을 얻기 위한 최소 횟수를 의 **위수(order)**라고 합니다. 이 사실은 아래에서 수를 인수분해하는 방법을 논의할 때 매우 중요합니다.
이해도 확인
아래 질문을 읽고 답을 생각해 본 후, 삼각형을 클릭하여 해 답을 확인하세요.
는 무엇인가요?
정답:
다음 수들은 제외했습니다:
의 각 원소의 위수는 무엇인가요?
정답:
위수 은 각 원소 에 대해 을 만족하는 가장 작은 수입니다.
의 수들에 대한 위수를 찾을 수 있었지만, 이것은 일반적으로 더 큰 에 대해서는 쉬운 작업이 아닙니다. 이것이 인수분해 문제의 핵심이며 양자 컴퓨터가 필요한 이유입니다. 나머지 노트북을 진행하면서 그 이유를 알게 될 것입니다.
인수분해 문제에 모듈러 산술 적용하기
를 만족하는 인수 와 를 찾는 핵심은 다음 조건을 만족하는 다른 정수 를 찾는 것입니다:
이고
를 찾는 것이 인수 와 를 찾는 데 어떻게 도움이 될까요? 이제 그 논리를 살펴보겠습니다. 이므로 입니다. 다시 말해, 은 의 배수입니다. 따라서 어떤 정수 에 대해:
을 인수분해하면:
초기 가정에서 이므로 은 또는 중 어느 것도 나누어 떨어지게 하지 않습니다. 따라서 의 두 인수 와 는 각각 과 을 나누어야 합니다. 가 의 인수이고 가 의 인수이거나, 그 반대입니다. 따라서 과 , 각각의 최대공약수(GCD)를 계산하면 인수 와 를 구할 수 있습니다. 두 수 사이의 GCD를 계산하는 것은 예를 들어 유클리드 알고리즘을 사용하여 고전적으로 쉽게 수행할 수 있는 작업입니다.
이해도 확인
아래 질문을 읽고 답을 생각해 본 후, 삼각형을 클릭하여 해답을 확인하세요.
위의 각 논리 단계를 이해하기 어려울 수 있으니, 예제를 통해 직접 풀어보세요. , 을 사용하세요. 먼저 이고 임을 확인하세요. 그런 다음 각 단계를 계속 확인하세요. 마지막으로 를 계산하고 이것이 의 인수임을 확인하세요.
정답:
이며, 이는 이므로 입니다.
이며, 이는 와 동일하지 않습니다.
이며, 이는 와 동일하지 않습니다.
이제 어떤 정수 에 대해 임을 알고 있습니다. 와 을 대입하면: 이며 일 때 성립합니다.
이제 와 를 계산해야 합니다.
이렇게 의 인수를 찾았습니다!
알고리즘
어떤 정수 를 찾아서 을 만족시키면 을 인수분해하는 데 도움이 된다는 것을 살펴보았습니다. 이제 Shor의 알고리즘 전체를 살펴보겠습니다. 알고리즘의 핵심은 결국 를 찾는 것입니다:
- 임의의 정수 선택 을 만족하는 임의의 정수 를 선택합니다.
- 고전적인 방법으로 을 계산합니다.
- 이면 이미 인수를 찾은 것입니다. 종료합니다.
- 그렇지 않으면 계속 진행합니다.
-
를 으로 나눈 위수 찾기 을 만족하는 가장 작은 양의 정수 을 찾습니다.
-
위수가 짝수인지 확인
- 이 홀수이면 1단계로 돌아가 새로운 를 선택합니다.
- 이 짝수이면 4단계로 진행합니다.
- 계산
- 이고 인지 확인합니다.
- 이면 1단계로 돌아가 새로운 를 선택합니다.
- 그렇지 않으면, GCD를 계산하여 인수를 추출합니다:
이 값들이 의 비자명 인수가 됩니다.
- 필요 시 재귀적으로 인수분해
- 나 가 소수가 아니면 알고리즘을 재귀적으로 적용하여 완전히 인수분해합니다.
- 모든 인수가 소수가 되면 인수분해가 완료됩니다.
이 절차만 보면 왜 양자 컴퓨터가 필요한지 명확하지 않을 수 있습니다. 양자 컴퓨터가 필요한 이유는 2단계, 즉 를 으로 나눈 위수를 찾는 것이 고전적으로는 매우 어려운 문제이기 때문입니다. 복잡도가 에 대해 지수적으로 증가합니다. 하지만 양자 컴퓨터를 사용하면 Quantum Phase Estimation을 활용하여 이를 해결할 수 있습니다. 4단계인 두 정수의 GCD를 구하는 것은 고전적으로도 비교적 쉬운 작업입니다. 따라서 양자 컴퓨터의 능력이 실제로 필요한 단계는 위수 찾기 단계뿐입니다. 이를 인수분해 문제가 위수 찾기 문제로 "귀착된다"고 합니다.
어려운 부분: 위수 찾기
이제 위수 찾기에 양자 컴퓨터를 어떻게 활용하는지 살펴보겠습니다. 먼저 "위수"가 무엇을 의미하는지 명확히 하겠습니다. 물론 위수의 수학적 의미는 이미 설명했습니다: 을 만족하는 0이 아닌 첫 번째 정수 입니다. 하지만 이 개념에 대해 좀 더 직관적인 이해를 얻어 보겠습니다.
이 충분히 작은 경우, 의 각 거듭제곱을 계산하고 그 수에 을 모듈러 연산한 다음, 을 만족하는 거듭제곱 을 찾으면 됩니다. 위에서 예제에서 한 것이 바로 그 방법입니다. 다양한 와 값에 대해 이 모듈러 거듭제곱의 그래프를 살펴보겠습니다:
무언가 눈에 띄지 않나요? 이것들은 주기 함수입니다! 그리고 위수 은 주기와 같습니다! 즉, 위수 찾기는 주기 찾기와 동일합니다.
양자 컴퓨터는 함수의 주기를 찾는 데 매우 적합합니다. 이를 위해 Quantum Phase Estimation이라는 알고리즘 서브루틴을 사용할 수 있습니다. QPE와 Quantum Fourier Transform의 관계는 이전 모듈에서 다루었습니다. 자세한 복습이 필요하다면 QFT 모듈이나 John Watrous의 양자 알고리즘 강좌에 있는 Quantum Phase Estimation 강의를 참고하세요. 이제 절차의 핵심을 살펴보겠습니다:
Quantum Phase Estimation(QPE)에서는 유니터리 와 그 유니터리의 고유 상태 에서 시작합니다. 그런 다음 QPE를 사용하여 대응하는 고유값을 근사합니다. 연산자가 유니터리이므로 고유값은 형태입니다. 따라서 고유값을 찾는 것은 주기 함수에서 값을 찾는 것과 같습니다. Circuit은 다음과 같습니다:

제어 Qubit의 수(위 그림에서 상단 개 Qubit)가 근사의 정밀도를 결정합니다.
Shor의 알고리즘에서는 유니터리 연산자 에 QPE를 적용합니다:
여기서 은 다중 Qubit 레지스터의 계산 기저 상태를 나타내며, Qubit들의 이진 값이 정수 에 대응합니다. 예를 들어, 이고 인 경우, 15까지의 숫자를 인코딩하기 위해 4개의 Qubit이 필요하므로 는 4-Qubit 기저 상태 으로 표현됩니다. (이 개념이 낯설다면 양자 상태의 이진 인코딩에 대한 복습을 위해 입문 Qiskit in classrooms 모듈을 참고하세요.)
이제 이 유니터리의 고유 상태를 찾아야 합니다. 상태에서 시작하면, 를 연속적으로 적용할 때마다 레지스터의 상태가 씩 곱해지고, 번 적용하면 다시 상태로 돌아옵니다. 예를 들어 이고 인 경우:
따라서 이 사이클의 상태들()의 다음 형태의 중첩 상태:
는 모두 의 고유 상태입니다. (이 형태 이외의 고유 상태도 더 있습니다. 하지만 위의 형태인 것들만 관심을 가지면 됩니다.)
이해도 확인
아래 질문을 읽고, 답을 생각한 후, 삼각형을 클릭하여 해답을 확인하세요.
이고 에 해당하는 유니터리의 고유 상태를 구하세요.
답:
따라서 위수 입니다. 관심 있는 고유 상태들은 위에서 거쳐간 모든 상태들의 등비 중첩에 다양한 위상이 붙은 형태입니다: