최근 구글에서 양자컴퓨터 윌로우(Willow) 칩이 발표 되면서, 양자 컴퓨팅의 현실성과 개발되면서 금융 시스템을 포함한 국가 기밀과 비트코인과 같은 블록체인 기반의 암호까지 해킹이 가능한가 에 대해서 IT업계가 뜨겁게 불타오르고 있다. IT 업계 뿐만이 아닌 다른 종사자들까지 크게 관심이 몰린 이슈인 만큼 기술 자체에 대한 팩트가 잘 안 알려진 부분도 많고, 그 팩트를 잘 알고 있음에도 불구하고 이런 것들이 앞으로 ‘가능성이 있을 것이냐’ 아니면 ‘절대 못한다’로 나뉘어 열띤 토론을 벌이고 있다. 그래서 필자는 만약 양자 컴퓨터가 개발이 된다고 가정하에 비트코인이 어떤 방식으로 해킹이 되는지, 그리고 비트코인이 해킹이 되기 위해서는 얼마 만큼의 큐비트(Qubit : 퀀텀비트의 줄임말로 양자 정보시스템에서 사용되는 최소의 정보단위를 말한다.)가 필요한지에 대해서 최대한 쉽게 설명하고자 한다.
비트코인같은 블록체인 암호화폐는 크게 두 가지 방법으로 해킹이 가능하다.
첫 번째로는 ‘전자 서명이라는 부분을 해킹하는 것’인데, 비트코인을 다른 사람한테 거래로 보낸다거나 결제를 한다거나 통틀어서 주고받는 여러 가지 거래 내역들, 암호화폐라는 것은 기본적으로 앞에 말한 거래 내역들이 모두 공유되는 개념이기 때문에 현재 이 거래가 사실인지 확인할 방법이 필요한 것이다. 여기서 사용되는 방식이 개인 키(Private Key) 와 공용 키(Public Key)이다. 개인 키라는 것은 본인이 가지고 있는 키다. 예를 들자면 공인인증서 같이 내가 알고 있는 비밀번호 또는 내가 알고 있는 지문을 생각해 보면 된다. 마찬가지로 저 개인 키는 공인인증서와 같이 나임을 증명하는, 그러니까 이 거래는 내가 했다는 인증 도장 역할을 하는 것이다. 공용 키는 쉽게 설명하자면 개인 키와 연동되어 현재 이 개인 키가 고유한 것인지 사실인지 아닌지를 확인하기 위한 시스템이다. 이것이 위에서 말한 전자 서명 방식(ECDSA)이다. 그래서 해킹 타겟으로 가장 난이도가 낮아보이는 개인 키를 해킹하는 것이다. 내가 마음대로 거래를 100만원을 보낸 것을 1000만원을 보냈다고 할 수도 있고, 특정한 사람이 다른 사람에게 보낸다는 걸 바꿀 수도 있는 것이다.
두 번째로는 해킹 방법은 블록체인의 기본적인 개념에서 시작된다. 블록체인이라고 하는 것은 예를 들자면 A와 B와 C라는 3개의 같은 종류의 블록이 연달아 있다고 가정 해보자, 시작이자 시초가 되는 A블럭을 시작으로 B블럭에는 A블럭의 내용이 암호화 되어 해쉬(Hash)라는 것을 남겨둔다. 그래서 B블록에는 B블록의 데이터와 A블록의 데이터가 같이 있는 것이다. 그리고 C블록에도 마찬가지로 B블록의 암호화 데이터가 남겨져 있고 당연히 B블록의 암호화 데이터 안에는 A블록의 암호화 데이터까지 포함되어있는 것으로 ‘사슬같이 연결되어 있다’ 하여 그래서 블록체인이라고 하는 것이다. 여기에 활용되는 SHA-256이라는 것은 해쉬 함수로 256비트로 이루어진 암호화 함수인데, 일반인들도 쉽게 SHA-256 알고리즘을 인터넷에서도 접할 수 있는데, 일반적인 텍스트를 SHA-256로 번역해주는 번역기가 있다. 직접 테스트 해보면 알겠지만 단순히 아무 말이나 써도 256비트의 무작위로 보이는 숫자와 알파벳들이 점 하나만 찍어도 규칙성 없이 천차만별로 바뀌는 것을 볼 수 있다. 그러니까 거래 기록에 점하나만 찍히더라도 정말 무엇 하나라도 바뀌기라도 하면 SHA-256이라는 해쉬 함수 특성상 256비트의 숫자들이 혼란스럽게 바뀌도록 되어 있는 구조이다. 하지만 우리가 발전된 양자컴퓨터를 통해서 그 변화무쌍한 SHA-256 자체를 해킹할 수 있다면, 그러니까 저 해쉬 함수를 해독할 수 있다면 비트코인을 해킹할 수 있는 것이다.
위의 두 가지 방법으로 해킹이 가능한데 해킹할 때 얼마나 많은 양자컴퓨터의 큐비트가 필요한지에 대해서 차례로 설명해보자면, 첫 번째의 양자컴퓨터가 개인 도장에 해당하는 개인 키를 해킹하려면, 이 문제를 타원곡선 이산 로그 문(ECDLP)라 부르는데, 용어 자체가 중요한 것은 아니고, 크게 이해할 필요 없이 그저 개인 키(Da)와 공용 키(Qa) 사이에 이러한 수식적인 관계가 있다고 보면 된다(사진 참조). 참고로 개인 키의 용량도 256비트인데, 쉽게 말해서 2의 256승번을 반복해서 넣어보면서 이 암호가 맞는지 틀린지를 비밀번호 풀듯이 맞춰보는 것이다. 이것은 지금의 컴퓨팅 방식으로는 도저히 해결할 수 없는 방식이다. 그런데 여기서 양자 컴퓨터가 등장하면서 양자컴퓨터의 알고리즘으로 2의 256승보다 훨씬 더 낮은 수준의 컴퓨팅을 통해 해결할 수 있는 것이다. 여기서 이용되는 것은 양자컴퓨터의 쇼어 알고리즘(Shor’s ALG)이라는 것인데 똑같이 크게 이해할 필요 없이 목표인 256비트 크기의 개인 키를 해석하는데 2의 256승을 일일이 해보는 것이 아니라 패턴을 찾는데 중점을 두는 것이다. 양자 컴퓨터는 우리의 컴퓨터와는 다르게 큐비트들이 얽혀있고 이걸 동시에 계산할 수 있는 특성을 지녔다. 이런 것들을 이용하여 개인 키와 공용 키 사이에 어떠한 패턴이 있는 것을 뽑아내면, 그 패턴을 통해 개인 키의 값이 얼마라는 것을 찾아낼 수 있는 것이다.
문제는 현재 그게 가능한 것인가? 라는 물음으로 돌아와보자, 위에서 설명한 쇼어 알고리즘을 이용하여 256비트의 암호를 깨기 위해 필요한 논리 큐비트는 최소 1500에서 3000개만 있으면 된다고 한다. 생각보다 작은 숫자라 놀랍지 않은가? 하지만 여기엔 함정이 있다. 바로 그냥 ‘큐비트’가 아닌 ‘논리 큐비트’라는 것이다. 논리 큐비트는 실제로 만들어진 물리적인 큐비트가 아닌 거르고 걸려서 오류가 없는 깨끗해진 그러니까 에러없는 순수한 큐비트를 말한다. 보통 뭐 어느나라든 기업이든 중국에서 큐비트 500짜리 양자컴퓨터를 만들었다 라던가 구글에서 1000짜리 만들었다 라는 것은 물리적인 큐비트를 말한다. 기본적으로 이 큐비트는 주변의 노이즈라던가 서로간의 호환성, 그리고 계산 할때마다 에러가 발생하는것에 굉장히 취약하다. 그러니까 에러 자체가 많이 발생한다는 것이다. 그래서 현재 양자 컴퓨팅 방식은 에러가 발생하더라도 그 에러들을 고쳐내면서 사용하는 방식이다.
자 다시 문제로 돌아가서 256비트 크기의 개인 키를 뚫으려고 할 때는 1500에서 3000개의 논리 큐비트가 필요하지만, 그 논리 큐비트가 에러가 없게 유지하기 위해서는 그보다 훨씬 더 많은 물리 큐비트가 있어야 된다는 것이다. 이번 구글에서 발표한 내용을 보면 1개의 논리 큐비트를 만들기 위해서는 물리큐비트를 대략 1000개 정도 갖고 있어야 된다고 계산했다. 그러니까 실제로 하드웨어로 구현해야될 큐비트의 갯수는 300만 개라고 봐야 되는것이다.
이렇게 설명했으면 두 번째 방식도 설명이 쉬워진다. 똑같이 SHA-256 해쉬 함수도 256승인 것이다. 사실 크게 설명할 필요 없이 첫 번째 방식과 크게 다르지는 않다. 그렇다는 것은 들어가는 논리 큐비트 양도 비슷하다는 이야기이다. 그리고 결론은 똑같이 수십만 개 이상의 큐비트가 필요하다는 이야기로 똑같이 종결되는 것이다.
현재 이 이슈로 비트코인의 시세가 잠시지만 폭락했던 것을 보고 칼럼 주제로 결정하게 되었다. 이미 양자 내성 알고리즘은 나와 있고 현재 사용 중인 대다수의 알고리즘들은 유럽, 미국 등에서 조금씩 사용을 하지않는 정책을 시작했고 미국 중심의 표준화가 진행중이며 한국은 조금 늦은 분위기이다. 대표적으로 RSA만 봐도 3000만 큐빗이 있어야 의미 있는 시간 안에 키를 찾을 수 있기에 수천 개 혹은 수만 개로 늘려도 해독은 불가능하다.
> comments
댓글
댓글 쓰기