검수요청.png검수요청.png

양자난수생성기

해시넷
이동: 둘러보기, 검색

양자난수생성기(QRNG; Quantum Random Number Generator)란 패턴을 분석할 수 없는 순수 난수를 만드는 장치이다. 양자역학적 성질을 이용하여 특정한 제한 조건에 따라 일련의 난수를 발생시키기 위해 설계된 프로그램이나 하드웨어를 말하며, 통신 네트워크를 통한 외부 위협을 원천 봉쇄할 수 있다. 양자 난수 발생기 또는 퀀텀 난수 생성기라고도 부른다.

개요[편집]

양자는 더 쪼갤 수 없는 물리량의 최소 단위이다. 그리고 양자난수생성기는 양자의 특성을 이용하여 패턴을 분석하는 것도 불가능한 무작위 숫자를 생성하는 장치이다. 통신 네트워크를 통한 해킹 같은 외부 위협을 원천봉쇄할 수 있으며, 양자암호통신의 핵심 기술이다. 양자 난수는 예측할 수 없어야 하고(Unpredictable), 어느 한쪽으로도 편향성이 없어야 하고(Unbiased), 앞뒤 숫자 간에 상호연관성이 없어야 한(Uncorrelated)다. 난수는 통신 내용을 암호화하여 전송하는 데 사용되는데, 패턴이 없는 숫자를 이용하여 정보 탈취나 도청이 불가능하도록 만든다. 현재까지의 암호체계는 수학적 알고리즘으로 생성된 유사 난수(Pseudorandom Number)를 활용했다. 유사 난수의 경우, 불규칙적으로 보이지만 실제로는 일정한 주기를 가지고 있는 난수로, 난수의 초깃값과 동작 상태를 알면 이를 통해서 다음 값을 예측하고 앞뒤 숫자 간의 상호 연관성을 찾아낼 수 있다는 단점이 있다. 따라서 외부위협이나, 해커의 공격에 비교적 취약하다. 하지만 순수 난수는 앞뒤 숫자 간의 상호 연관성이 없기 때문에, 순수 난수를 생성하는 양자난수생성기가 차세대 통신 보안기술로 기대되고 있다. 유사 난수는 패턴을 읽고 연산하는 슈퍼컴퓨터를 통하여 암호 체계가 무너질 수 있지만, 양자난수생성기로 만든 난수는 패턴 연산 컴퓨팅으로도 풀 수 없는 불규칙성을 갖고 있기 때문에 보안성이 뛰어나다. 슈퍼컴퓨터보다 데이터 처리 속도가 1억 배 더 빠른 양자 컴퓨터도 등장하여 기존 암호 체계의 사전 예측 가능성이 커지고 있다.[1]

양자 시스템을 사용하여 난수를 생성하는 방법은 여러 가지 방법이 있다. 그중 가장 간단한 방법은 광자를 일대일 확률로 각각의 출석부에서 검출되는 반투명거울(beam splitter)을 통과시키는 것이다. 양쪽 검출기 중에서 어느 쪽에서 광자가 검출되는지에 따라 0이나 1을 결정하여 순수 난수를 생성할 수 있다. 이렇게 생성된 순수 난수는 무작위성뿐만이 아니라 난수의 분포가 균등하게 된다. 그러나 현재 단일 광자를 생성하거나 검출하는 것이 매우 어려우므로 다소 신뢰도가 떨어지기 때문에 실제로 구현할 때는 효율이 낮다.

난수[편집]

컴퓨터 과학 분야의 난수는 일반적으로 결정론적인 방법으로 생성된 난수를 말한다. 컴퓨터로 생성된 모든 난수는 유사 난수라고 부른다. 특정한 입력이나 조건에 따라 무작위로 선택된 것 같은 난수나 난수 열이 생성되고, 생성 조건이나 입력이 같다면 결괏값은 항상 같다. 컴퓨터를 시동하면 난수표가 생성되어 컴퓨터 내부에 보관되는데, 컴퓨터 프로그램이 매번 같은 방법으로 난수를 가져오라고 요청한다면 매번 그 값은 같아서 순수 난수라고 부를 수 없다. 따라서 보통은 씨앗 값을 인자에 다르게 주어서 요청할 때마다 다른 유사 난수를 돌려줄 수 있도록 한다. 씨앗 값은 보통 현재 시각을 이용한다. 매 순간 현재 시각이 바뀌어서 한번 지나간 시간은 다시 돌아오지 않는 특성 때문에 이전에 발생했던 난수는 다시 재연할 수 없고, 시간 단위가 섬세할수록 사람이 임의로 난수를 조작할 수 없게 된다.[2]

  • 유사 난수 : 의사 난수라고도 부른다. 난수를 구조적으로 의사 난수와 양자 난수로 구분하기도 한다.[3] 유사 난수는 사람이 소프트웨어 방식으로 구현한 값이다. 현재 통상적으로 사용되는 난수 체계는 유사 난수에 기반한 경우가 많다. 알고리즘의 상태에 따라 값이 정해지기 때문에 생성된 수열은 일정한 반복을 가지게 되고, 따라서 난수의 예측 불가능성을 가질 수 없다. 예측 불가능성이 필요한 경우에는 하드웨어처럼 외부 신호를 사용하는 하드웨어 난수 생성기를 사용한다. 몬테카를로 방법과 같은 확률 계산에 사용되며, 암호학에서도 중요하게 사용된다. 유사 난수를 생성하는 데는 유사난수 생성기 알고리즘이 사용된다.[4]
  • 양자 난수 : 사람이 아닌 순수 자연 현상의 물리계에서 추출하여 생성한 난수이다. 진정 난수, 자연 난수, 순수 난수라고도 부른다. 반복되는 주기가 없어 예측이 불가능하고, 해킹에서 안전하다는 장점이 있다. 하지만 별도의 추출장치가 필요하고, 속도가 느리며, 편향성이 심하고, 크기가 매우 크고 비싸다. 10nm 이하의 미시 세계에서는 우리의 일상 속 물리 현상과 달리 확률에 기반한 불확실한 현상이 일어난다. 이를 바로 양자역학이라고 부르는데, 양자 난수는 이 양자역학적 현상을 활용하여 생성한다. 현재까지 양자 난수 생성 방식으로 알려진 것은 크게 광학식과 전기식으로 구분된다. 광학식은 빛의 입자이자 파동인 광자를 이용하고, 전기식은 전기의 기본 구성인 이온을 이용하여 전기 저항을 고의로 일으켜 난수를 검출한다. 양자 난수를 계속해서 생성하는 장치를 바로 양자난수생성기라고 부르며, 아무리 뛰어난 슈퍼컴퓨터라도 예측할 수 없는 무질서한 난수이다. 현재 양자난수생성기는 상용화가 되어있지만, 장비가 크고 비용 부담이 커서 범용으로 사용하기엔 아직 한계가 있다. 이를 개선하기 위해 초소형 양자난수생성기가 개발되기도 했다.[3]

특징[편집]

양자난수생성기는 광섬유, 가변 광 감쇠기, 광섬유 접속기를 모두 갖는 레이저나 단일 광자 검출기에 의해 구현되며, 광섬유 결합기와 같은 전광섬유 소자들에 의해 구현된다. 또한, 렌즈나 거울 및 광 조정을 위한 복잡한 절차들이 없어도 광섬유 접속기만 이용하여 모든 광소자를 편리하게 접속할 수 있다.

난수는 출력을 예측할 수 없는 프로세스에 의해서 만들어진 수이고, 재생성할 수 없다. 컴퓨터 과학 및 공학, 통신, 정보 보안, 통신 시스템의 신뢰성 테스트 및 기타 응용에서 유용하다. 이러한 난수를 생성하는 생성기는 주로 두 가지 형태로 존재하는데, 그중 하나가 소프트웨어 기반 발생기이다. 일반적인 알고리즘에 의해 생산되는 방법은 항상 주기적이기 때문에 소프트웨어 형태의 난수 생성기는 의사 난수를 생성한다. 의사 난수를 사용해도 크게 상관이 없는 분야도 있으나, 엄격하게 완벽한 난수가 사용되어야 하는 분야에서는 사용하기 어렵다는 단점이 있다. 다른 타입은 물리적 난수 생성기인데, 고전 역학에서 설명하는 프로세스로 난수를 생성한다. 표면상의 난수들은 전자 회로에서 작은 변동으로 일어나는 '노이즈'를 이용하여 생성될 수 있는데, 그러한 전자 노이즈 장치들이 과연 진정한 난수를 발생시킬 수 있는가에 대해서 논쟁이 일어났었다.

양자 역학은 고전 역학과는 방대로 본질적으로 임의적이다. 제네바 대학의 아이디퀀티크 기업이 양자 역학에 기초한 양자 기계적 난수 생성기를 시장에 내놓았다. 광자라고 불리는 광입자들이 반투명한 거울을 때려서 이 임의성이 지켜질 수 있었다. 반투명 거울로 발생한 광자는 50% 확률로 반사되거나 투과됐고, 이는 일련의 양자비트들로 번역될 수 있었다. 하지만 반투명 거울을 검출기에 정렬시키는 데 다소 어려운 면이 있었고, 다른 장치와 통합하기 어려워서 크기나 비용면에서 부담이 됐다.[5]

양자암호통신[편집]

양자난수생성기는 양자암호통신의 대표적인 기술 중 하나이다. 양자암호통신 기술은 양자키분배 기술이라고도 불린다. 양자암호통신은 기존 암호키 분배가 가지고 있는 수학적 알고리즘 문제를 개선할 대안으로써, 보안 측면에서 고객에게 추가적인 이점을 제공하고 신뢰 지수를 높일 수 있는 기술이다. 고속 암복호화 기술과 결합하면 기존의 저속 암복호화기의 병목현상을 해결할 수 있으며, 인지의 여부를 모두 떠나서 크게 주목받지 않았던 링크 구간의 보안에 해결책을 제시한다. 알고리즘에 의존하지 않기 때문에, 미래의 외부로부터의 공격에서 안전하다. 초연결사회라고 불리는 5G 시대는 통신이 금융, 의료기기, 인공위성, 자율주행차 등까지 확장될 수 있다. 따라서 5G망에서도 기존의 유사 난수 방식을 이용할 경우, 기술 의존도가 더욱 심화한 시점에선 보안이 심각하게 취약해질 수 있다. 예를 들어, 자율주행 자동차를 대상으로 도청을 시도한다면, 탑승자의 의도와는 전혀 상관없이 제3자에 의해 원격 조정 당할 가능성이 있다. 여기서 양자암호통신은 양자 얽힘 현상이 작용하면 애초부터 복제가 불가능하다. 양자 얽힘은 두 개의 입자가 강한 상관성을 가지면 아무리 멀리 떨어뜨려 놔도 한쪽이 반응하면 다른 한쪽도 바로 반응하는 현상을 말한다. 만약 도청자가 양자암호통신을 통해 전달하는 데이터를 알아내려 접근하면 양자 데이터가 소실되고, 수신자는 정확도가 떨어진 데이터를 확인할 수밖에 없기 때문에 중간에서 도청 시도가 있었다는 사실을 알 수 있다. 양자암호는 양자암호분배기를 통해 무작위로 생성되며, 키를 알고 있는 송수신 자만 정보를 읽을 수 있는 권한이 있다. [6]

양자암호통신에서 주의해야 할 점은, 양자 암호통신과 양자통신은 같지 않다는 것이다. 양자통신은 양자 상태를 무손실로 전송한다는 뜻이다. 양자 암호통신은 대칭 암호키를 생성하는 것이 목적이기 때문에, 전송한 양자 신호 중 성공적으로 도착한 신호를 추출하여 암호키로 사용한다. 기존 통신의 개념처럼 전송효율이 100%인 것은 아니며, 실질적으로는 약 10,000분의 1의 효율을 보인다. 기존의 암호화 기술에서 키 분배의 안전성을 획기적으로 높이는 기술이며, 양자 암호통신이 적용되더라도 기존 암호화 기술이 전혀 필요 없어지는 것은 아니다. 대표적인 기술로는 단일광자 검출기, 신호처리 알고리즘, 양자 중계기, 양자난수생성기, 간섭계 안정화 기술 등이 있다. [7]

반도체의 양자 효과를 이용하거나 원자핵의 방사성 붕괴를 사용한 양자 난수 발생기 등이 존재한다. 군용 통신이나 연구 목적으로 사용되는 생성기는 상용화 되었다.

양자암호통신 기술
구분 기술 개요
단일광자 검출기 단일 광자 수순의 미약한 광신호를 고감도 광학 센서로 수신하는 기술이다. 장비의 동작 속도나 암호키 생성률을 결정한다.
신호처리 알고리즘 생성된 암호키의 오류를 효율적으로 수정하고 비밀성을 증폭한다. 시스템의 절대적인 안전성을 보장하고, 신호 처리 속도를 결정한다.
간섭계 안정화 기술 전송 과정에서 경로 차 중첩과 위상변조를 거쳐 완전 수신 단에 도달한 단일 광자가 정확히 간섭할 수 있도록 외부요인의 위상 오차를 제거한다.
양자난수생성기 암호키 생성 과정 중 필요한 완전 난수를 만드는 기술이다.
양자 중계기 양자 암호는 미약한 광신호를 이용하기 때문에 장거리 전송에 한계가 존재한다. 따라서 양자 상태를 유지한 채 신호를 전달하는 양자 중계 기술이 필요하다.

장단점[편집]

  • 장점
양자난수생성기는 방사성 붕괴나 진공 요동, 광자 편광 관찰 같은 양자역학 현상들에서 발생하는 무작위성에 의존하는 난수 생성기이다. 암호 키를 생성하는데 사용된 난수가 얼마나 무작위에 의한 지는 보안 시스템의 안정성을 판단하는 데 큰 영향을 준다. 겉으로 보이기에만 무작위에 의해 보이는 수준이 아니라, 진정한 무작위성을 제공하여 순수 난수를 생성한다. 양자 역학적인 성질을 사용하여 순수 난수를 생성하기 때문에 안정성과 관련된 문제들을 해결하고 보완을 강화할 수 있다. 또한, 현재 가장 많이 개발된 양자 시스템인 양자키분배에서 필수적으로 사용된다.
  • 단점
실제 응용에서는 편향될 수 있다. 비트를 빠르게 산출하지 못한다는 단점이 있어서 빠른 속도에서 신뢰성을 제공하려면 추가적인 구성요소가 필요하다.

구현[편집]

Q# 코드[편집]

다음은 양자 메커니즘의 특성을 활용하여 양자난수생성기를 생성하는 간단한 알고리즘이다. 사전에 마이크로소프트 양자 개발 키트(Microsoft Quantum Development Kit)가 필요하고, 명령줄에서 Q#을 사용하거나 파이썬 호스트 프로그램, C# 호스트 프로그램을 사용하여 Q# 프로젝트를 생성한다.

연산기능 코드

임의 비트를 생성하는 Q# 연산 기능코드이다. 양자난수생성기를 빌드하기 위해 필요하다.

  • Program.qs
01 namespace Qrng {
02    open Microsoft.Quantum.Convert;
03    open Microsoft.Quantum.Math;
04    open Microsoft.Quantum.Measurement;
05    open Microsoft.Quantum.Canon;
06    open Microsoft.Quantum.Intrinsic;
07    
08    operation SampleQuantumRandomNumberGenerator() : Result {
09        using (q = Qubit())  {  // Allocate a qubit.
10            H(q);               // Put the qubit to superposition. It now has a 50% chance of being 0 or 1.
11            return MResetZ(q);  // Measure the qubit value.
12        }
13    }
14}

큐비트는 중첩될 수 있는 양자 정보의 단위이다. 측정한 큐비트는 0이나 1 둘 중 하나만 될 수 있다. 하지만 큐비트가 실행 중인 상태는 측정값이 0이나 1일 수 있는 확률을 나타낸다. 이 확률적 상태를 중첩이라고 하며, 이 확률을 사용하여 난수를 생성할 수 있다. Q# 연산에서는 Q#의 기본 형식인 큐비트 데이터 형식을 도입한다. 'Qubit'는 'Using'문으로만 할당할 수 있기 때문에, 할당되는 경우 큐비트는 항상 제로 상태이다. H 연산을 통해 'Qubit'를 중첩 상태로 전환할 수 있다. 큐비트를 측정하고 값을 읽으려면 M 내장 연산을 사용한다. 'Qubit'를 중첩 상태로 전환하고 측정하면, 코드가 호출될 때마다 다른 값을 반환한다. 'Qubit'는 할당을 취소하면 큐비트가 다시 제로 상태로 설정되어야 한다. 그렇지 않으면 시뮬레이터가 런타임 오류를 보고하기 때문이다.

블로흐 구를 사용하여 알고리즘 코드를 시각화하자면, 블로흐 구의 북극은 클래식 0값을 나타내고 남극은 클래식 1을 나타낸다. 모든 중첩은 구의 점으로 표현될 수 있다. 화살표의 끝이 극에 가까울수록 측정할 때 해당 극에 할당된 클래식 값으로 축소될 확률이 높다. 예를 들자면, 0 상태에서 시작된 큐비트로 시작하는 블로흐 구가 H를 적용하여 0과 1의 확률이 동일한 중첩을 만들고 큐비트를 측정한 다음, 출력을 저장한다. 이 연산을 여러 번 호출하면 정수를 만들 수 있다. 만약 연산을 세 번 호출했다면, 세 개의 임의 bit를 얻으면 0부터 7까지의 임의의 3bit 숫자를 빌드할 수 있다.

난수생성기 코드

Q# 명령줄 애플리케이션을 사용하거나 별도의 호스트 프로그램을 사용한다.

  • Q# 명령줄 애플리케이션
전체 Q# 명령줄 애플리케이션을 만들기 위해 다음 진입점을 Q# 프로그램에 추가한다.
01 operation SampleRandomNumberInRange(max : Int) : Int {
02     mutable bits = new Result[0];
03     for (idxBit in 1..BitSizeI(max)) {
04         set bits += [SampleQuantumRandomNumberGenerator()];
05     }
06     let sample = ResultArrayAsInt(bits);
07     return sample > max
08            ? SampleRandomNumberInRange(max)
09            | sample;
10 }
11 
12 @EntryPoint()
13 operation SampleRandomNumber() : Int {
14     let max = 50;
15     Message($"Sampling a random number between 0 and {max}: ");
16     return SampleRandomNumberInRange(max);
17 } 
실행 파일은 프로젝트 구성 및 명령줄 옵션에 따라서 시뮬레이터나 리소스 예측 도구에서 @EntryPoint()로 표시된 작업이나 함수를 실행한다.
01 namespace Qrng {
02    open Microsoft.Quantum.Convert;
03    open Microsoft.Quantum.Math;
04    open Microsoft.Quantum.Measurement;
05    open Microsoft.Quantum.Canon;
06    open Microsoft.Quantum.Intrinsic;
07    
08    operation SampleQuantumRandomNumberGenerator() : Result {
09        using (q = Qubit())  {  // Allocate a qubit.
10            H(q);               // Put the qubit to superposition. It now has a 50% chance of being 0 or 1.
11            return MResetZ(q);  // Measure the qubit value.
12        }
13    }
14
15    operation SampleRandomNumberInRange(max : Int) : Int {
16        mutable bits = new Result[0];
17         for (idxBit in 1..BitSizeI(max)) {
18             set bits += [SampleQuantumRandomNumberGenerator()];
19         }
20         let sample = ResultArrayAsInt(bits);
21         return sample > max
22                ? SampleRandomNumberInRange(max)
23                | sample;
24     }
25   
26     @EntryPoint()
27     operation SampleRandomNumber() : Int {
28         let max = 50;
29         Message($"Sampling a random number between 0 and {max}: ");
30         return SampleRandomNumberInRange(max);
31     }
32 }
코드는 비주얼 스튜디오나 비주얼 스튜디오 코드를 사용하여 작성한다. 비주얼 스튜디오는 스크립트를 그냥 실행하기만 하면 되지만, 비주얼 스튜디오 코드의 경우에는 터미널에 아래를 입력하여 빌드한다.
dotnet build
후속 실행을 할 때는 재실행할 필요가 없다. 실행하려면 다음 명령을 입력하고 엔터 키를 누른다.
dotnet run --no--build
  • 파이썬
파이썬으로 Q# 프로그램을 실행하기 위해서 다음 코드를 host.py로 저장한다.
01 import qsharp
02 from Qrng import SampleQuantumRandomNumberGenerator # We import the 
03 # quantum operation from the namespace defined in the file Qrng.qs
04 max = 50 # Here we set the maximum of our range
05 output = max + 1 # Variable to store the output
06 while output > max:
07     bit_string = [] # We initialise a list to store the bits that
08     # will define our random integer
09     for i in range(0, max.bit_length()): # We need to call the quantum
10         # operation as many times as bits are needed to define the
11         # maximum of our range. For example, if max=7 we need 3 bits
12         # to generate all the numbers from 0 to 7. 
13         bit_string.append(SampleQuantumRandomNumberGenerator.simulate()) 
14         # Here we call the quantum operation and store the random bit
15         # in the list
16     output = int("".join(str(x) for x in bit_string), 2) 
17 # Transform bit string to integer
18 
19 print("The random number generated is " + str(output))
20 # We print the random number
이제 명령줄에서 파이썬 호스트 프로그램을 실행할 수 있다.
01 $ python host.py
02 Preparing Q# environment...
03 ..The random number generated is 42
  • C#
C#에서 Q# 프로그램을 실행하려면 다음과같은 C# 코드를 Driver.cs에 포함시킨다.
01 using System;
02 using Microsoft.Quantum.Simulation.Core;
03 using Microsoft.Quantum.Simulation.Simulators;
04 using System.Linq;
05 
06 namespace Qrng
07 {
08  class Driver
09     {
10         static void Main(string[] args)
11         {
12             using (var sim = new QuantumSimulator())
13             {
14               // First we initialize all the variables:
15                 var bitString = "0"; // To save the bit string
16                 int max = 50; // The maximum of the range
17                 int size = Convert.ToInt32(Math.Floor(Math.Log(max, 2.0) + 1));
18                 // To calculate the amount of needed bits
19                 int output = max + 1; // Int to store the output
20                while (output > max)  // Loop to generate the number
21                 {
22                     bitString = "0"; // Restart the bit string if fails
23                     bitString = String.Join("", Enumerable.Range(0, size).Select(idx =>
24                                             SampleQuantumRandomNumberGenerator.Run(sim).Result == Result.One ? "1" : "0"
25                                                                                 )
26                                            );
27                     // Generate and concatenate the bits using the Q# operation
28                     output = Convert.ToInt32(bitString, 2);
29                     // Convert the bit string to an integer
30                 }
31                // Print the result
32                 Console.WriteLine($"The random number generated is {output}.");
33             }
34         }
35     }
36    }
이제 명령줄에서 C# 프로그램을 실행할 수 있다.[8]
01 $ dotnet run
02 The random number generated is 42

퀀티스[편집]

스위스의 아이디퀀티크에서 만든 양자난수생성기이다. 단일 광자와 빔 스플리터를 이용하여 난수를 출력하는 난수 생성기로, 유에스비, PCI 인터페이스를 가진 기기로 제공된다. 원시 데이터를 출력할 때 4Mbps 또는 15Mbps의 난수 출력률 성능을 가지며, 라이브러리 생성 코드와 응용 프로그램을 제공하고 있어 난수 출력 과정과 행렬 생성 과정을 확인할 수 있다. 소프트웨어로 확인할 수 없는 내부 후처리 과정을 포함한 기술들에 도움이 되는 서비스도 지원하고 있다.

  • 후처리 과정
퀀티스는 난수 추출기를 이용하는 디바이스 내부 후처리 과정과 소프트웨어 프로그램 상의 후처리 과정을 모두 포함한다. 첫 번째 후처리 과정은 디바이스 내부에서 처리되는 폰노이만 방식이다. 독립적이고 연속적인 데이터에 적용할 수 있기 때문에 양자난수생성기의 후처리 과정에 적합하다. 그러나 결정론적이기 때문에 한계가 존재한다. 두 번째 후처리 과정이 이 한계를 보완하는데, 폰노이만 방식이 적용된 씨드를 추가로 입력하는 난수 추출기로, 소프트웨어 프로그램에서 처리되게 되어있다. 추가된 후처리 과정은 정보이론인 랜덤 행렬을 이용하여 이진 행렬 벡터 곱 연산을 수행하는 난수 추출기이다. 두 번째 후처리 과정이 효과적으로 제공되도록 소프트웨어 프로그램에서 폰노이만 방식이 적용된 데이터로 랜덤 행렬 데이터를 생성해서 파일을 저장하는데, 난수 출력 요청이 발생할 때마다 랜덤 행렬 데이터 파일을 입력받아 사용할 수 있도록 제공하고 있다. 이러한 아이디퀀티크의 퀀티스 후처리 과정은 행렬 곱 연산에 최적화 기법을 적용하여 난수 출력 속도에 미치는 영향을 최소화하며, 안전성 부분에서 이론적인 근거가 충분하다. 하지만 유니버설 해시 함수의 안전성을 충분히 확보하기 위해서 씨드에 해당하는 랜덤 행렬 데이터가 입력 데이터인 잡음원과 독립이어야 하고, 자주 갱신도 되어야 한다.[9]

연구[편집]

국내[편집]

초소형 양자난수생성기를 개발하는 데 성공하여 미국 공군에 양자 난수 암호 칩을 공급한 국내 스타트업 기업이다. 최근 국내에서 정부가 정책적으로 집중적으로 육성하는 비메모리 시스템 칩 기술에 해당한다. 양자난수생성기 기술은 대표적으로 상용화된 빛을 이용한 방식과 방사성 동위원소를 이용한 방식을 예로 들 수 있는데, ㈜이와이엘의 양자난수생성기는 방사성 동위원소를 이용한 방식을 적용했다. 전자는 정확하게 50%를 투과하는 거울을 제작할 수 없어 편향성을 보정하는 과정이 필요하고, 초고감도 센서가 필요하여 크기가 크고 값이 비싸다는 단점이 있다. 후자는 품질이 매우 좋은 난수를 생성할 수 있으나, 인체에 해롭고, 크기가 크고 비싸서 쉽게 상용화되지 못한다. ㈜이와이엘의 초소형 양자난수생성기는 방사성 동위원소의 반감기를 이용하여 양자 난수를 추출하는 기술을 개발했다. 인체에 무해한 극소량의 방사성 동위원소를 활용한 예로는 화재감지기, 의료기기처럼 주변에서 어렵지 않게 발견된다. 여기서 반감기란 방사성 동위원소가 붕괴하고 그 수가 절반으로 줄어드는 데까지 걸리는 시간을 가리킨다. 동위원소에서 나오는 에너지를 숫자로 전환하기 때문에, 생성된 난수는 결국 원천적으로 해킹할 수 없다. 통계적으로 완전한 난수를 만들어내기 때문에 별도의 보정 과정이 불필요하고, 난수의 왜곡이 전혀 없다. 안정성과 소형을 중요시하는 시장 특성이 반영되어 있다. 방사성 동위원소에서 자연적으로 방출되는 알파 입자를 센서로 감지하고, 감지된 신호를 디지털 펄스로 전환한 뒤, 펄스 간의 시간 간격을 측정하여 난수를 생성한다. 생성 원리는 다음과 같다.
  1. 방사성 동위원소는 정해진 반감기 동안 자연스럽게 붕괴한다.
  2. 붕괴한 원자핵은 항상 새로운 것으로서 중복되는 원자핵은 존재하지 않는다.
  3. 반감기 동안 양성자 2개와 중성자 2개로 이루어진 α 입자를 방출하며 다른 원자핵으로 변화된다.
  4. 양자역학적 불확정성 원리에 의하여 언제 어떻게 방출될지 알 수 없음으로 완전히 무작위에 의한다.
  5. α 입자가 다이오드 충돌하면 공핍 현상에 의하여 전하의 흐름을 생성하여 펄스가 발생한다.
  6. 감지된 신호를 디지털 펄스로 전환한다.
  7. 펄스 간의 시간 간격을 계측하여 난수를 생성한다.
  8. α 입자의 강력한 에너지로 인하여 α 입자와 생성되는 난수가 일대일로 대응되므로 해외에서 개발된 광자의 랜덤 성을 이용한 양자난수생성기에서 편향성 극복을 위하여 적용하는 XOR 알고리즘이 필요 없는 완전한 상태의 난수를 생성한다.[10]
저렴한 가격에 양산이 가능한 초소형 제품이기 때문에 각종 스마트기기와 사물인터넷 기기의 보안을 강화하기 위해 도입될 수 있다는 장점이 있어, 카드 결제나 전자상거래 보안에도 적용될 수 있다. 2016년 11월 2일, ㈜이와이엘은 미래창조과학부에서 지원을 받아 미국 보스턴에서 열린 세계 벤처 경진대회 보스턴 매스챌린지에 참가하여 최고상인 다이아몬드 상을 수상했고, 10만 달러의 상금을 받았다.[3] 2019년 4월, 양자 난수를 이용한 암호화 모듈에 대한 FIPS 140-2 인증을 획득했다. 2020년, ㈜이와이엘의 양자 난수 기술이 미국 공군 보안 시스템을 위한 핵심 기술로 선정되어, 미국 공군의 무인 정찰기에 적용할 목적으로 초소형 암호 칩을 개발하기로 했다. 미 공군의 센서 연구소가 후원하고 디펜스웍스라는 민간 기술과 미국 국방 기술을 연결하는 조직에 의해 관리되는 사업으로, 경진대회 형태로 이루어진다. 개발되는 칩에는 무인 정찰기 등에서 촬영한 영상 파일을 인공지능 기술로 압축하고, 양자 난수를 활용하여 암호화 가속 기술과 부 채널 공격 같은 물리적 해킹 공격을 방어하기 위한 보안 기능이 적용된다.[11]
암호 플랫폼 및 웹 보안 전문 업체로, 암호키 관리 시스템 디아모(D'Amo) SG-KMS에 양자 난수 생성기와 하드웨어 보안 모듈을 추가하여 보안성 강화 패키지를 만들었다. 생성된 키를 안전한 장소로 보관할 수 있는 하드웨어 보안 모듈을 추가하여 안전하게 키를 보호할 수 있는 서비스로, 하드웨어 보안 모듈은 물리적 연산 장치로 저장된 데이터에 대한 위조 및 변조를 방지할 수 있는 보안 프로세서이다. 메모리나 저장소에 보관하는 키 보관 방식보다 안전하다.
2011년, 양자기술연구소를 설립하여 양자암호통신 기술을 개발하고 있다. 2016년, 세계 최고의 스위스 암호통신 기업 아이디퀀티크를 인수하고, 같은 해에 세계 최초로 세종과 대전 간의 LTE 백홀에 양자암호통신을 적용했다. 유럽연합과 미국의 양자암호통신 구축 사업을 수주했으며, 2017년에는 세계에서 가장 작은 크기인 5mm*5mm 크기 양자난수생성기 칩을 개발했고, 2019년, 2.5mm*2.5mm*0.8T 크기의 모바일 양자난수생성기 칩을 개발했다.[1] 2020년 5월, 세계 최초로 양자난수생성기 칩이 탑재된 5G 스마트폰을 개발했다. 칩은 가로 2.5mm, 세로 2.5mm 초소형 크기와 초 전력 성능을 가지고 있어 스마트폰에 최적화되어 있다. 삼성전자와 함께 개발한 '갤럭시 A 퀀텀'에는 블록체인 모바일 전자 증명 서비스 '이니셜'과 T 아이디 이중 로그인, SK 페이 생체인증 보호 서비스가 제공된다. 특히 블록체인 서비스 이니셜의 경우, 사용자가 출입증이나 자격증과 같은 각종 개인 증명서를 저장할 때 퀀텀 지갑이 자동 생성되어 안전하게 보관할 수 있고, 이니셜 앱과 발급기관 간의 인증 절차도 안심하고 이용할 수 있다. 블록체인 DID 기술을 적용하여 위조 및 변조를 방지하고 자기 주권을 강화했으며, 오프라인 절차가 따로 필요 없이 스마트폰 하나만으로 다양한 개인 증명서를 발급하거나 제출할 수 있다. 스마트폰 '갤럭시 A 퀀텀'에 적용된 양자난수생성기 칩의 내부에는 CMOS 이미지센서가 있다. 이미지센서가 LED 광원이 방출한 빛을 감지하면, '일정한 시간 동안 일정한 센서 면적 안에 감지되는 광자의 개수는 예측 불가능하다는 양자의 무작위성을 이용하여 난수를 추출한다. 이 난수는 T 아이디, SK 페이, 이니셜 앱에 제공되며, 각 앱에서 암호키를 생성하는 데 활용한다. 모든 서비스는 데이터를 보관하거나 주고받는 과정에서 암호화와 복호화 작업을 진행하는데, 여기에 암호키가 필수적이기 때문이다. 결과적으로 이용자는 양자난수생성기 칩을 통해 보안성이 높은 암호키를 사용함으로써 개인정보를 안전하게 보호할 수 있다.[12] 반면 일각에서는, 양자난수생성기로 예측을 할 수 없는 진짜 난수를 만들어낸다고 해도, 키의 보관과 분배, 암호화 등의 다음 단계의 기술이 없다면 사실상 보안 측면에서 무용지물이라고 지적하는 전문가들도 있다. 양자 기술을 이용한 것은 맞지만, 양자 보안과 양자 암호라고 보기엔 무리가 있다는 의미이다. 양자암호통신은 일회성 암호 키를 공유하는 기법으로, 송수신 자가 일회성 키를 공유하고 외부로부터 침입이 들어올 때 내용 자체가 변경되는 방식이다. 따라서 양자 키 분배 시스템, 암호화 장비, 네트워크 기술 등이 모두 필요하다.[13]

국외[편집]

중국과학기술대학 판젠웨이, 장쥔 연구팀은 영국 옥스퍼드 대학교 연구팀과 공동으로 68Gbps 고속 양자난수생성기를 개발했다. 그리고 2012년, 캐나다 토론토 대학교에서는 6Gps 양자난수생성기 시스템을 개발했다. 68Gbps는 비트 레이트로, 양자난수생성기의 가장 중요한 지표이다. 초기의 양자난수생성기는 단일 광자 경로 선택법으로 비트 레이트가 4Mbps에 불과했으나, 비트 레이트가 높은 양자 난수를 얻기 위해 꾸준히 발전하고 있다. 판젠웨이 연구팀은 레이저 위상 요동을 기반으로 한 초고속 양자 난수 생성기술을 발전시킨 다음, 피드백을 통해 온도 제어가 필요 없고 안정성은 높은 간섭계를 개발했다. 반도체 레이저에서 자연 방출된 광자의 양자 위상 요동 정보를 강도 정보로 전환하여 표본을 빨리 수집할 수 있다. 또, 레이저의 작업 전류에 대한 체계적인 최적화로, 양자 위상 요동 기여와 전형적인 소음 기여 간 비례를 극대화했다. 최소 엔트로피 모델을 통해 원시 데이터 중 양자 난수 비례 하한선을 확인했다.[14] 2018년 9월, 중국과학기술대학반건위 교수와 장강, 범정운, 마웅봉은 중국과학원의 상하이 마이크로 시스템 정보기술 연구소와 일본 NTT 기초과학 연구소와 협력하여 고품질의 양자얽힘 광원과 고효율 단일 광자 검출기를 개발하는 데 성공했다. 양자 얽힘의 본질적인 무작위성을 기반으로, 장치에 무관한 양자 난수가 세계 최초로 실현된 연구이다. 일기 예보, 신약 개발, 신소재 및 핵무기 개발과 같은 수치 시뮬레이션이나 암호학 같은 분야에서 널리 사용되며 새로운 국제 표준을 형성할 것이라는 평가를 받고 있다. 3년 이상이 걸린 연구는 고속 제어와 적절한 공간 거리 설계를 통해 기기와 무관한 양자난수생성기에 필요한 공간 거리 요구를 만족하는 성과를 냈다. 또, 얽힌 광자의 수집과 전송, 변조 등의 효율이 최적화되고 고성능 광원의 고효율 측정을 실현했다. 본 연구는 중국 과학원과 중국 자연과학기금단, 안회성 등의 지원을 받았다.[15][16]

각주[편집]

  1. 1.0 1.1 스크랩, 〈(IT위키)양자난수생성기 〉, 《네이버포스트》, 2019-06-27
  2. 난수 위키백과 - https://ko.wikipedia.org/wiki/%EB%82%9C%EC%88%98
  3. 3.0 3.1 3.2 노동균 기자, 〈슈퍼컴퓨터로도 해킹 불가능한 암호 체계 만드는 '양자 난수'란 무엇?〉, 《아이티조선》, 2016-11-04
  4. 유사난수 위키백과 - https://ko.wikipedia.org/wiki/%EC%9C%A0%EC%82%AC%EB%82%9C%EC%88%98
  5. 유후이 루오, 캄 타이 찬, 〈양자 난수 발생기〉, 《구글패턴트》, 2008-03-19
  6. 넥스트데일리, 〈SKT, 5G에 '양자암호통신' 도입해 해킹 막는다〉, 《네이버포스트》, 2019-03-18
  7. 곽승환, 〈[양자키 분배기술 동향과 SK텔레콤 개발 현황]〉, 《에스케이텔레콤㈜》, 2015-06-23
  8. 마이크로소프트, 〈자습서: Q#에서 퀀텀 난수 생성기 구현〉, 《마이크로소프트》, 2019-10-25
  9. 배민영, 강주성, 염용진, 〈양자난수발생기 Quantis의 후처리 과정에 관한 암호학적 분석〉, 《국가과학기술정보센터》, 2017
  10. ㈜이와이엘 공식 홈페이지 양자난수생성기 - http://www.mikrotik.co.kr/trn/page03.php
  11. 박금지 기자, 〈국내 보안 스타트업 '이와이엘(EYL)', 미국 공군 핵심기술 공급한다〉, 《디지털조선티비》, 2020-01-13
  12. 에스케이텔레콤㈜ 뉴스, 〈SKT, 세계 최초 양자보안 5G 스마트폰 공개〉, 《에스케이텔레콤㈜》, 2020-05-14
  13. 오지현 기자, 〈세계 첫 양자보안폰? 갤럭시A 퀀텀에 학계는 '갸웃'〉, 《서울경제》, 2020-06-23
  14. 중국과학기술대학교, 세계 68Gbps 고속양자난수생성기 개발〉, 《한중과학기술협력센터》, 2015-07-13
  15. 동향 상세정보, 〈기기에 무관한 양자 난수 생성기를 실현한 중국과학자들〉, 《국가과학기술정보센터》, 2018-09-23
  16. Yang Liu 외 18인, 〈Device-independent quantum random-number generation〉, 《네이처》, 2018-11-19

참고자료[편집]

같이 보기[편집]


  검수요청.png검수요청.png 이 양자난수생성기 문서는 암호 알고리즘에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.