Life
이더리움(Ethereum)에서 신뢰성 있는 난수(Random)를 발생시키는 것이 과연 가능한 일일까?
윤수지 기자  |  park@newsfinder.co.kr
폰트키우기 폰트줄이기 프린트하기 메일보내기 신고하기
승인 2020.03.27  14:18:03
트위터 페이스북 미투데이 요즘 네이버 구글 msn

요즘 핫한 주제로 이야기를 시작해 보고자 한다. 정보의 사용 주체인 사용자가 인증된 사용자인지 아닌지 그리고 해당 정보의 내용이 참인지 거짓인지를 판별하는 것은 정보 사회를 이루는 기술에 있어서 가장 핵심적인 요소이다. 만약 어떤 사용자가 자신의 ‘인증 정보’로 100만원을 A 은행에서 B 은행으로 이체하는 ‘이체 정보’를 생성한다면 A, B 은행은 생성된 정보가 정확한 정보인지 상호 검증하게 되고 검증을 통과할 때만 100만원이 이체 된다. 만약 ‘이체 정보’가 악의적으로 생성된 잘못된 이체 정보라면? 더 나아가 사용자가 인증된 본인이 아닌 타인이 만들어낸 잘못된 인증 정보라면? 정보 사회는 붕괴하게 될 것이다. 다행스럽게도 우리의 정보 사회는 이중 삼중에 거친 철저한 보안 시스템을 구축하여 사용자가 자신의 정보를 잘못 관리하지 않는 이상 이러한 일이 발생되기는 아주 어려운 안전한 시스템을 구축하였다.

이러한 보안 시스템은 암호 알고리듬(cryptographic algorithm)이 있기 때문에 탄생될 수 있었다. 이체 정보는 절대 인간이 인지하기 쉬운 평문, 즉 “나는 100만 원을 이체하겠다”와 같은 정보로 구성되어 있지 않다. 이러한 평문은 누구나 쉽게 쓰고 복제 가능하며 이체 주체인 사용자를 마음대로 바꿀 수 있다. 보안 시스템은 이러한 평문 구성을 누구도 알아볼 수 없도록 암호화하며, 암호화된 이체 정보는 다른 여러 시스템을 거쳐 목적지에 도착하게 된다. 흥미로운 점은 목적지에서조차 암호화된 정보만 받았을 뿐 암호화된 정보에 어떤 내용이 적혀 있는지는 전혀 알 수 없다는 것이다. 이것이 암호화의 핵심이다.

암호화된 정보를 목적지에서 인지할 수 있는 평문으로 바꾸는 ‘열쇠’는 최초로 정보를 생성한 사용자에게만 있으며, 열쇠를 이용해 암호를 평문으로 바꾸는 작업을 복호화라고 한다. 즉, 사용자의 의도된 정보로 암호화와 복호화의 모든 과정을 완전하게 처리해야만 정보의 모든 처리가 완료되는 것이다. 비트코인과 이더리움은 타원 곡선 전자 서명 알고리듬(Elliptic Curve Digital Signature Algorithm : ECDSA)를 사용하여 정보를 인증하는 데 사용자의 공개키와 개인키를 이용하여 모든 과정을 처리한다.

공개키는 말 그대로 공개된 열쇠인데 이 열쇠는 특이하게도 상자를 만들 수는 있어도 상자를 열수는 없다. 개인키는 절대 공개하면 안 되고 소중히 보관해야만 하는 열쇠인데 이 열쇠가 바로 상자를 열수 있는 기능을 가지고 있다. 공개키는 개인키에서 추출하는 키값이지만 공개키로 개인키를 추출해내는 것은 알고리듬을 정확히 알고 있다 하더라도 추출할 수가 없다.

다만 ECDSA는 암호화보다는 전자서명 방식으로서 일반적인 공개키=암호화, 개인키=복호화 방식과는 반대로 개인키로만 암호화를 할 수가 있고, 공개키로 복호화가 가능하다. 모든 노드가 모든 정보를 투명하게 검증하고 처리한다는 블록체인 플랫폼 입장에서는 자유롭게 배포 가능한 공개키가 있는 전자 서명 방식이 알맞은 것으로 보인다. 그렇다면 ECDSA는 어떠한 방식으로 개인키를 생성해 내는 것일까? 바로 난수(Random Value)이다.

난수는 전혀 예측할 수 없는 중복되지 않는 값이 도출되는 것인데 사실 컴퓨터는 난수를 만들 수 없다. 컴퓨터는 결정론적(deterministic) 기기로서 어떠한 값이 입력이 되면 당연히 특정 값을 결정적으로 만들어내야만 하며 이 값은 어떤 기기라도 동일하다. 결정론적으로 자명하게 (1+1=2)이다. 컴퓨터의 모든 작동은 결정론적으로서 절대 예측할 수 없는 무작위의 결과가 나오면 안 된다. 만약 컴퓨터가 비 결정론적(nondeterministic)으로 결과가 나온다면 (1+1=???) 전혀 알 수가 없는 상태가 된다.

따라서 컴퓨터에서 난수를 생성해 내려면 결정론적 함수에 어떠한 ‘잡음(entropy: 엔트로피)’을 넣어서 예측하기 힘든 결과가 나오게 해야 한다. 그 잡음은 시간, 마우스의 움직임, CPU의 주파수, 네트워크 사용 대역폭 등 상상할 수 있는 모든 요소가 동원된다. (1+1+ CPU의 주파수 + 마우스의 모니터 픽셀 위치 = ??) 어떤 값이 나올지 예측하기가 매우 힘들게 된다. 하지만 고도의 ‘잡음’을 복잡하게 사용한다 하더라도 이는 가짜 난수(Pseudo-Random Number)이다. 양자컴퓨터가 실현되면 모든 보안을 뚫을 수 있다는 가정이 가능한 것이 바로 난수를 만들어 내는 알고리듬을 알고 만 있으면 사용 가능한 모든 영역의 엔트로피를 전부 넣어서 암호화를 시킨 난수가 무엇인지 추론 계산하는 것이 가능하기 때문이다.

다만, 양자컴퓨터를 작동시키기 위해서는 물리적으로는 절대영도에 수렴하는 온도를 유지해야만 하고 이론적으로는 양자 계산에 맞는 새로운 계산 알고리듬을 만들어야 하기 때문에 현존하는 기술로 이를 구현하는 것은 불가능에 가깝다. 미래에는 가능하겠지만 그 시간 동안 인류의 암호학은 난수 발생 알고리듬 자체가 난수가 되는 등 계산량의 법칙으로 해결 불가능한 난수를 발생시키는 방법으로 발전될 것이다.

이렇듯 난수라는 것은 보안 시스템에 있어서 출발점이라 할 수 있을 정도로 아주 중요한 부분을 차지하고 있다. 그런데 보안에 강력하다고 널리 알려진 비트코인과 이더리움 같은 블록체인 플랫폼은 아이로니컬 하게도 ‘난수’를 생성해 낼 수 없다. 블록체인은 필연적으로 모든 블록 정보를 공유하고 있는 전체 노드가 같은 정보를 가지고 있어야만 하며, 같은 결과를 계산해 내야만 한다. 결코 다른 결괏값을 만들어 내서는 안되는 구조이기 때문에 가짜 난수(가짜 난수, 유사 난 수, 의사 난수 : Pseudo-Random Number) 조차 허용되어서는 안된다.

선뜻 이해하기 어려운 내용일 수는 있으나 정확하게는 블록체인 자체가 아니라 블록체인을 기반으로 작동하는 모든 응용프로그램(앱:App, 애플리케이션:application)은 난수를 생성할 수 없다고 생각하면 직관적인 이해가 가능하다.

그렇다면 난수를 이용할 수 있는 블록체인 기반 애플리케이션은 무엇이 있을까?

난수를 사용하는 저차원의 모델은 게임/도박으로서 확률형 아이템 뽑기 혹은 어떠한 결과에 베팅하는 방법이라 할 수 있으며 고차원의 모델은 빅데이터 분석에서 주어진 함수에 인자(Parameter)에 난수를 입력하고 반복 계산하는 것을 예로 들 수 있다. 구글 딥 마인드에서 개발한 바둑 인공지능 프로그램인 알파고가 인간의 기보만으로는 큰 도약이 어려워져서 난수를 기반으로 한 자가 학습을 통해 한계를 돌파한 알파고 2.0를 내놓았다는 점에서 ‘난수’라는 것이 딥러닝과 인공지능에서 얼마나 중요한 것인지 알 수 있게 해준다.

하지만 비 중앙 집중화된 블록체인 애플리케이션(Decetralized applications : DAPP, 이하 디앱)에서 난수를 발생시킬 수 없다는 것은 블록체인 자체 보안에 추가적인 보안 기능을 넣어서 더욱 강력한 보안 시스템을 만들거나 난수를 이용한 게임이나 딥러닝 시스템을 만드는 것이 쉽지 않다는 것을 말해준다. 따라서 현재 개발된 디앱들은 자체적인 방법으로 난수를 발생시키는데 과연 해당 디앱의 난수가 정말 예측하기 힘든 것인지 더 나아가 조작 가능성이 있는 것인지는 생각해 볼 문제이다.

이더리움 기준으로 설명하자면 현재 디앱에서 가장 많이 쓰이고 있는 난수발생 방법은 Commit-Reveal 방식이다. Commit-Reveal의 세부적인 방식과 어떤 엔트로피를 사용하는지에 따라서 알고리듬은 여러 방식으로 나뉠 수 있으나 크게 다음과 같은 방식을 벗어나지는 않는다.

Commit 단계 : 사용자가 어떠한 결과값을 얻기 위해 디앱 스마트컨트랙트에 ‘사용자만의 엔트로피’을 추가하여 트랜잭션을 발생.

Reveal 단계 : 사용자의 요청을 받아서 ‘컨트랙트(Smart-Contract)만의 엔트로피’을 생성시키고 이를 ‘사용자만의 엔트로피’와 합쳐서 keccak256 혹은 Bitwise 연산을 이용해 난수를 발생시키고 사용자에게 결과값을 전송

언뜻 보면 안전한 난수 발생 알고리듬처럼 보이지만 블록체인의 특성상 어떤 엔트로피를 사용하던지 Commit 단계의 모든 정보는 모든 이더리움 네트워크에 있는 그대로 보여지게 된다. 또한 keccak256 혹은 Bitwise 연산 역시 어떠한 방법을 사용하던지 그 방법은 코드 그 자체로서 투명하게 볼 수 있다.

즉, Reveal 단계에서 ‘컨트랙트만의 엔트로피’가 어디에서 발생되는지가 중요하다. 만약 컨트랙트의 소유자가 수동 혹은 자동으로 Reveal 단계의 엔트로피를 입력하는 구조라면 Reveal 엔트로피 입력전에 Commit-Reveal을 미리 계산 함으로서 어떤 난수가 발생될지 컨트랙트의 소유자는 미리 알 수 있게 되는 것이다. 난수가 얼마든지 조작가능 하고 그 방법 또한 쉽다는 것이다.

이더리움의 대표적인 언어인 Solidity 공식문서에서 난수를 발생시키는 것은 까다로운 일이며, 블록생성시간 및 블록해시는 난수의 엔트로피로 사용하지 말 것을 권고하는 것은 충분히 예측가능하고 직관적으로 사용이 가능한 모든 엔트로피는 배제되어야 한다는 것을 의미 하기에 Reveal 단계에서 컨트랙트의 소유자가 난수를 절대 조작하지 않는다고 하더라도 신뢰성 있는 엔트로피를 입력하는 범위가 제한적 이라는 것을 의미한다.

그렇다면 이더리움 외부에서 신뢰할 수 있는 난수를 가져오는 방법은 어떨까? 이 대표적인 방법이 바로 Oraclize(Provable things로 변경)의 Random Data Source Service이다. Oraclize는 블록체인 외부의(오프-체인)의 데이터를 내부(온-체인)로 입력할 수 있게 해주는 다리(Brigde)로서 폐쇄적인 블록체인을 개방적인 시스템으로 활용할 수 있게 해주는 확장성을 가지고 있다. WolframAlpha, IPFS, Random.org의 API 통해서 난수를 가져올 수도 있으며 Oraclize의 Random Data Source를 이용 할 수도 있다. 뿐만 아니라 진위 증명(Authenticity Proofs)과 쿼리 아이디(Query ID) 조회를 제공하여 가져온 데이터가 조작되지 않은 신뢰성 있는 데이터라는 것을 입증 할 수가 있다.

다만 Oraclize(Provablethings)의 서비스를 이용한다 하더라도 진위 증명(Authenticity Proofs)이 실패하거나 이더리움 네트워크의 트래픽 증가로 인한 딜레이 혹은 요청한 Query ID에 대해 응답하지 않는 QoS의 문제가 발생될 수 있기 때문에 디앱의 개발자는 이러한 문제에 대한 대비책을 코드 자체 내에서 해결하도록 해야 만 하고 이는 Oraclize의 공식 기술문서에도 명시되어 있다. 현재 Oraclize를 온체인으로 하여 서비스하는 게임은 Square Queue이며, 이기종간의 신뢰성 있는 데이터 송수신 및 검증이라는 다리(Brigde)라는 기능 답게 특정 암호화폐가 다른 블록체인과 호환되도록 하는 pTokens이 있다. 둘 모두 현재는 Ethereum 기반이다.

블록체인에서의 난수 생성이라는 것은 상당히 중요하지만 이와 같이 구현에 있어서 꽤 어려운 점들이 있다. 다행스럽게도 현재 이더리움은 예측이 불가능한 난수를 제공할 목적도 가진 Ethereum 2.0 업그레이드를 수행하고 있다. 다수의 참여자가 난수를 제공하는 RANDAO, 값이 도출될 때까지 시간을 지연시켜서 어떤 값이 나올지 예측하기 힘들게 만드는 검증 가능한 시간 지연함수(verifiable delay function: VDF)등을 복합적으로 이용한 방법이 논의되고 있는데 이는 보안에서부터 인공지능에까지 아주 중요한 부분을 차지하는 신뢰할 수 있는 난수를 발생시키는 기술이 접근하기 쉬운 방법으로 탄생할 수 있다는 점에 대단히 환영할만한 일이다.

현재 유사 난수(의사 난수, 가짜 난수: Pseudo-Random Number)그리고 암호학적으로 안전한 유사난수(cryptographically secure pseudo-random number)가 주류로 사용되고 있지만 궁극적으로 난수라는 것은 진짜 난수(True Random Number)을 지양하고 있다. 진짜 난수를 사용하기 위해서는 전용 하드웨어(True Random Number Generator Hardware: TRNG Hardware)를 사용해야만 하기에 물리적인 무리가 따른다. TRNG 하드웨어는 광자,온도,양자 등의 역학적 현상을 관찰하여 전혀 예측할 수 없는 자연적인 엔트로피를 사용하기 때문에 알고리듬 자체를 파악하는 것도 불가능 하다.

물론 Ethereum 2.0이 아무리 신뢰성이 높은 난수를 생성해 낸다고 해도, 관찰 하는 행위 자체가 값의 영향을 주는 TRNG 만큼의 신뢰성을 확보하기는 힘들 수 있다. 그러나 각자의 방식으로 상이한 알고리듬으로 확보된 다양한 난수를 사용하는 것이 Ethereum 2.0에서는 가능하고 이는 TRNG와 거의 동등할 만큼의 강력한 난수를 생성하는 것을 가능도록 한다.

누가 더 강력한 난수를 생성하고 이를 적용시키는 가는 전산학 분야에서 너무 중요한 소리없는 창과 방패의 전쟁이다. 어쩌면 보안에서부터 인공지능에 이르기까지의 핵심인 강력한 난수발생기가 블록체인의 발전과 함께 우리의 삶에 다가올지도 모른다는 기대를 해본다.

< 저작권자 © 헤모필리아 라이프 무단전재 및 재배포금지 >
윤수지 기자의 다른기사 보기  
폰트키우기 폰트줄이기 프린트하기 메일보내기 신고하기
트위터 페이스북 미투데이 요즘 네이버 구글 msn 뒤로가기 위로가기
이 기사에 대한 댓글 이야기 (0)
자동등록방지용 코드를 입력하세요!   
확인
- 200자까지 쓰실 수 있습니다. (현재 0 byte / 최대 400byte)
- 욕설등 인신공격성 글은 삭제 합니다. [운영원칙]
이 기사에 대한 댓글 이야기 (0)





신문사소개기사제보광고문의불편신고개인정보취급방침청소년보호정책이메일무단수집거부
헤모필리아 라이프  |  등록번호 서울아02245  |  등록일 2012-08-31  |  대표 박천욱  |  편집인 김태일 박필선  |  청소년보호책임자 유성연
서울특별시 금천구 가산디지털1로 205(가산동 470-8, 케이씨씨 웰츠배리 604호)  |  02)6111-8255
업무국 : 서울 서초구 방배중앙로 27길 25  |  전화 02-535-6474  |  문의 및 제보 hemo@hemophilia.co.kr
Copyright © 2012 헤모필리아 라이프. All rights reserved.