2018년이 마무리되며 각 분야에서 눈에 띄는 연구 성과를 달성한 연구자들을 위한 시상식이 다수 개최되었다. 특히, 10월 튜링상(Turing Award) 시상식이 개최되며 인공지능 분야의 대가인 ‘라즈 레디(Raj Reddy)’가 아시아계 최초의 수상자로 선정되어 ‘튜링(turing)’에 대한 대중의 관심이 쏠렸다. 튜링상은 “컴퓨터 과학의 노벨상”이라고도 불리는 상으로, 컴퓨터 과학 분야에 업적을 남긴 사람에게 매년 시상하는 상이다.
튜링상의 어원은 수학자 앨런 튜링(Alan M. Turing)으로부터 시작되었다.
수학자 앨런 튜링은 1936년에 기계의 일반적인 개념을 설명하기 위하여 고안한 가상의 기계로 ‘튜링’을 제시하였다. 앨런 튜링은 기계가 진짜 인간처럼 보일 수 있게 구현할 수 있다면 해당 기계는 지능적으로 인공지능에 대한 테스트 즉, 튜링 테스트를 통과하였다고 보는 것이라고 하였다. 이러한 테스트는 실험자 한 명이 또 다른 실험자 한 명과 컴퓨터와 대화를 하게 하여 둘 중 누가 사람인지 구분을 할 수 없다면 이 컴퓨터는 인공 지능을 갖춘 것으로 최종 판단한다는 것이다.
2014년, 영국의 레딩 대학은 ‘유진 구스트만’이라는 이름의 인공지능이 튜링 테스트를 통과하였다고 발표하였다. 당시의 튜링 테스트는 심사위원의 30% 이상이 인간과 대화한다고 판단하면 통과하는 것으로 유진 구스트만은 5분 동안 심사위원 25명과 텍스트 대화를 나누었고 심사위원 중 33%가 유진을 진짜 인간이라고 판단하였다. 이러한 튜링의 성격을 갖춘 경우를 튜링 완전성(Turing Complete)을 갖추었다고 하며 ‘튜링의 완전성’을 확보하였다고 한다.
튜링의 완전성은 무한한 저장공간을 바탕으로 이 세상의 모든 문제를 풀 수 있는 기계인 튜링머신(Turing Machine)을 만들고 이러한 튜링머신 안에 입력할 수 있는 알고리즘을 구현하는 언어가 ‘튜링완전언어(Turing Complete Language)’이다. 튜링완전언어를 통하여 튜링의 완전성을 확보할 수 있으나 이를 위해서 충족되어야 하는 다음의 필수 요건들이 있다.
먼저, 튜링완전언어는 프로세스를 충분히 분할할 수 있을 만큼 작은 단위를 사용할 수 있어야 하며, 조건 설정과 반복 명령어가 있어야 한다. 일반적으로 오늘날 우리에게 대중적으로 알려진 기계어나 어셈블리어의 경우, 충분히 작은 단위로 나뉘어있지만, 실용성이 낮다. 예를 들어, C언어, JAVA 등은 분할 정도나 실용성 측면에서 충분하지 못하기 때문에 ‘느슨한 튜링 완전(Loose Turing Completeness)’이라고 한다.
블록체인이 등장하면서 이러한 튜링이 더 주목받기 시작하였는데 블록체인과 튜링은 어떠한 관계가 있을까.
보다 구체적으로 블록체인의 대표적인 사례인 비트코인과 이더리움을 통하여 튜링을 살펴보자.
비트코인에서는 스마트 콘트랙트를 위해 ‘스크립트(Script)’라는 언어를 제공한다. 비트코인 거래를 움직이는 이러한 스크립트 언어는 많은 연산자를 포함하고 있지만, 의도적으로 조건부 흐름 제어 기능 이외에는 루프나 복잡한 흐름 제어 능력이 있지 않아 특정 명령문이 반복되는 것을 의도적으로 제한하고 있다. 쉽게 말하여 비트코인의 스크립트 언어상에서 for문과 while 문을 이용할 수 없다는 것이다. 즉, 완벽한 튜링이 요구하는 ‘아주 작은 단위로 이루어진 명령문의 반복 실행’이 비트코인은 불가능하다. 따라서 비트코인의 스크립트 언어는 튜링이 완전하지 않다는 점(Turing-Incomplete)을 확인할 수 있다.
결국 비트코인 거래 스크립트는 복잡성이 제한될 수 밖에 없고 무한히 반복되는 명령문이 존재할 수 없기 때문에 실행 시간의 예측이 가능하다. 따라서 비트코인을 이루는 스크립트 언어는 다용도의 언어가 아니고 비트코인에 제한되는 동시에 비트코인 거래 안에서 무한 루프를 구현하거나 ‘논리 폭탄(logic bomb)’ 의 복잡한 형태를 애초에 구현하기 어렵다.
그럼에도 불구하고 비트코인의 스크립트에서 반복문의 사용이 불가능하도록 원초적으로 설계한 까닭은 아주 간단한 명령문이라도 반복이 허용된다면 이는DOS(denial of service) 의 공격에 노출될 수 밖에 없기 때문이다. 예를 들어, 공격자가 스크립트에 반복 명령문을 삽입하고 비트코인이 이 스크립트를 실행하게 되면 의미 없는 무한 작업이 블록체인에서 실행된다. 이는 단시간에 비트코인 네트워크를 과부하에 빠뜨리거나 마비시킬 위험이 있다. 또한, 거래 과정에서 의도적으로 ‘송금’의 명령문을 반복시켜 타인의 지갑에서 비트코인이 계속 빠져나가는 악용의 사례를 방지하기도 위해서이다.
비트코인과 달리 2세대 블록체인 기술로 평가받는 이더리움은 ‘솔리디티(Solidity)’라는 프로그래밍 언어를 제공한다. 이더리움은 비트코인에서 제공하는 스크립트 언어의 튜링 불완전성을 ‘가스(Gas)’라는 개념을 도입하였다. 즉, 이더리움은 각 컴퓨터 코드 작업마다 수수료인 가스를 부과하는 시스템 기반에서 이루어지도록 하여 튜링 완전성을 확보하였다. 이러한 튜링 완전성 때문에 이더리움 플랫폼을 기반으로 다양한 분산 애플리케이션(DApp)을 이더리움 기반에서는 만들 수 있다. 궁극적으로 이더리움은 튜링완전언어가 구현이 가능하도록 한 것으로 블록체인의 측면과 더불어 프로그래밍 언어 자체의 기술적 진보를 보여줬다고 할 수 있다.
이더리움의 솔리디티는 비트코인과 다르게 DOS의 공격을 단순화시킬 수 있다. 블록체인의 특성상 참여한 채굴자가 코드를 검증 및 실행하게 되므로 해당 코드 설계에 참여한 모든 채굴자의 기계에서 실행되면 블록체인 자체가 마비될 수 있다. 하지만 이더리움은 이러한 문제를 해결하기 위해 가스의 개념을 도입하였다. 연산부호마다 가스 가격이 책정되어 있으며 처음 코드를 실행시킬 때 가스량을 정할 수 있다. 예를 들어 100 가스를 이용하여 프로그램을 실행시키는 것으로 처음에 설계하는 경우, 그 이후 가스가 부족하면 코드를 끝까지 실행시킬 수 없게 된다. 따라서 반복적으로 명령문을 계속 실행하기 위해서는 이에 비례하여 상응하는 양의 가스가 필요하며 무한정으로 코드가 반복되어 실행되기 위해서는 무한한 양의 이더를 소모하여야 한다는 점이다. 따라서 누군가 의도적으로 명령문이 반복되도록 하기 위해서는 이에 해당하는 가스가 요구되기 때문에 사용자에게 부담이 갈 수 밖에 없는 구조로 무한의 루프문을 통한 악용 사례는 일부분 이더리움에서 방지할 수 있는 것이다.
애초에 이더리움을 제시한 비탈릭 부테린은 ‘완벽한 튜링 프로그래밍 언어’가 심어진 블록체인을 이더리움을 통하여 제공하겠다고 수차례 인터뷰했던 점을 통하여 ‘튜링 완전성’에 대한 인지가 있었다. 그래서 이더리움은 비트코인이 지닌 한계를 극복하며 2세대 블록체인으로 주목받았다. 하지만 이제는 3세대의 블록체인으로 평가받는 이오스가 등장하였으며, 이오스의 창시자 다니엘 라리머(Daniel Larimer) 역시 이오스를 통하여 튜링 완전한 블록체인을 만들겠다는 포부를 밝혔다.
물론 튜링 완전성이 모든 코드 기반 시스템의 완벽성을 보장하지는 않는다. 튜링 완전성 때문에 연산어의 무한 반복이 일어나 오히려 해킹 위협에 취약한 경우도 있다. 그러나 이더리움, 이오스의 창시자들이 각자의 플랫폼을 개발하면서 이를 강조하고 핵심 구현 목표로 세운 까닭에는 주목할 필요가 있다. 따라서 우리는 블록체인의 튜링 완전성에 대한 의미를 계속 살펴보고 향후, 세상에 등장할 수많은 블록체인 기반의 플랫폼 속에서 각각이 가진 프로그래밍 언어로서의 기술적 진보를 튜링 완전성을 지표로 평가해볼 만한 가치가 있다는 점에는 모두가 동의할 것으로 판단된다./이화여대 융합보안연구실
- 심두보 기자
- shim@decenter.kr