[컴][용어] Proof-of-work 란?

일의 증명 / what is proof of work


Proof-of-work 가 무엇일까? bit coin 문서를 보면 proof-of-work 의 이야기가 많이 나온다. 그래서 proof-of-work 에 대한 정의에 대해 살펴보자. 대부분 ref. 1 을 보고 필자가 이해한 바를 정리한 내용이다.



Proof-of-work system

proof-of-work 는 핵심은 비대칭성이다.[ref. 1] 이것은 한쪽은 시간이 오래 걸리고, 다른쪽은 시간이 별로 안걸리는 것을 이야기 한다.

쉬운 예로 어떤 왕이 "저 산을 이쪽에서 저쪽으로 옮겨라"라고 지시했다고 하자. 이 경우에 산을 옮기기 위해 신하들은 엄청나게 오랫동안 일을 하지만, 왕은 산이 옮겨진 것을 확인하는 것으로 간단하게 신하들이 고생했다는 것을 파악할 수 있다.

proof-of-work 에서 client 

proof-of-work 시스템을 번역하면 "일의 증명" 시스템이라고 할 수 있겠다. ref. 1 에서 Proof-of-work 의 예로 CAPTCHA 를 들고 있다. (CAPTCHA 에 대한 설명은 생략한다.)

우리도 이 CAPTCHA 를 가지고 proof-of-work 가 어떤 역할을 하는지 보자.

CAPTCHA 의 대표적인 예로 "이미지로된 영문자"가 있다. CAPTCHA의 "이미지로 된 영문자"는 정상적인 모양이 아니라 조금 비틀어져 있다.

이렇게 조금 비틀어진 이미지로 된 영문자는 컴퓨터의 입장에서 바로 인식할 수 없다. 흔히 이야기하는 image processing 을 해서 비로서 컴퓨터 입장에서 "문자"로 인식한다. 이 분야를 OCR(optical character recognition) 이라 하는데 이 OCR 이라는 것이 그렇게 훌륭하지 않아서 조금만 정자(正字) 에서 벗어나면 인식률이 크게 떨어진다. 결국 이 CAPTCHA 를 컴퓨터가 제대로 읽어드리기 위해서는 이런 비틀어진 이미지에 대한 처리를 해줘야 하는데, 이것은 작업이 빠르게 되지 않는다. 비틀어진 글자들이 어떤 pattern 을 가지고 있는지도 알 수 없으며, pattern 이 없기 때문에 여러가지 경우를 고려해야만 한다. 여하튼 이런 이유로 CAPTCHA 의 글씨는 사람은 빠르게 처리할 수 있지만, 컴퓨터는 시간이 오래걸리게 된다.

만약에 login 과정에 CAPTCHA 를 사용하는 시스템이 있다고 하자. 이 때 만약 누군가가(컴퓨터이든, 사람이든) CAPTCHA 를 통과해서 시스템에 들어오면, 이 통과해서 들어온 녀석은 무조건 login 을 정상적으로 했다고 인정해 준다.

사람이 아닌 컴퓨터가 통과하는 것은 해킹이기 때문에 허락하면 안되는 것 아니냐라고 생각할 수 있다. 하지만 컴퓨터로 통과하려면 이 CAPTCHA 를 처리하는 작업을 하고 들어와야 하는데, 이 CAPTCHA 를 처리하는 시간이,장비나 알고리즘마다 틀릴 수 있지만, 몇시간이상 걸릴 것이다. 이것이 한번의 login 시도만 할 경우에는 해볼만 할 지 모르겠지만, 해커의 입장에서는 비용이 많이 든다. 고작 login 시도 한 번을 위해 몇시간을 투입할 수는 없다. 이것을 병렬로 돌린다고 해도, 여러대의 컴퓨터를 소유해야 하고, 전기도 사용해야 해서 비용 대비 효율이 떨어진다.

즉 "login 시도"를 컴퓨터로 자동화 해도, 원하는 만큼의 속도를 얻기가 힘들다는 이야기다. 보통 컴퓨터로 자동화 하는 이유가 빠르게 여러 번 시도해서 login 을 성공하려는 것인데, 그런 일을 어렵게 한다는 것이다.

이러한 판단을 해커가 하게 된다면, 해커는 굳이 CAPTCHA 를 뚫으려 하지 않는다. 차라리 그 시간에 CAPTCHA 가 없는 곳을 공격하거나, 아니면 사람을 사용해서 일일이 시도하거나, CAPTCHA 를 우회할 방법을 고민할 가능성이 크다.

이렇게 해커에게 이 시스템을 공격하는 것은 돈도, 시간도 많이 드는 작업이라는 것을 알려서, 대부분의 해커가 포기하게 만드는 것이 Proof-of-work 의 목적이다.

proof-of-work 의 server

다시 CAPTCHA 로 돌아가자. server 쪽에서 이 녀석이 CAPTCHA 의 인증을 할 땐 간단히 확인해 줄 수 있다. 자신이 제시한 이미지가 어떤 값을 가지고 있는지 미리 알기 때문에 client 에서 입력한 값과 자신이 입력한 값을 비교해 주기만 하면 된다. 즉 server 는 매우 빠르게 증명해 줄 수 있어서 비용이 거의 들지 않는다.

이래서 server 쪽은 큰 부담없이 CAPTCHA 를 사용할 수 있다.


protocol 종류

이 proof-of-work 의 protocol 에는 2가지 종류가 있다.[ref. 1] 이 protocol 은 ref. 1 의 variants 에 있는 그림을 확인하자.
  1. Challenge-response protocol : CAPTCHA 처럼, 
    1. 요청자(requester)가 문제(challenge) 를 요구하고, 
    2. 제공자(provider)가 문제를 골라서 주면, 
    3. 요청자가 문제를 풀고 수신자에게 주면, 
    4. 수신자가 그 문제를 확인해서 증명하는 방법
  2. Solution-verification protocol : bitcoin 등에서 처럼 요청자가 문제를 요구하는 것이 아니라, 이미 나와 있는 문제들을 푸는 것이다. 이 때 제공자는 어떤 문제를 풀었는지도 확인하고, 답도 확인해야 한다. 이런 scheme 중 하나가 bitcoin 등의 unbounded probabilistic iterative procedures 이다.


비트코인의 작업 증명

  • 실제적으로는 검사하기는 쉬우나, 풀어내기는 어려운 것을 PoW라 한다.
  • 이것을 이용해서 bitcoin 에서는 하나의 어려운 문제에 대한 해답을 얻으면(CPU 능력을 소모) , 블록체인 원장(ledger)에 새로운 block을 더할 수 있도록 한다.
  • 네트워크안의 모든 node(컴퓨터들)가 문제를 풀게 된다.
  • 이 때 가장 빨리 풀어낸 node 가 코인으로 보상을 받게 된다. 이과정을 채굴(mining) 이라고 한다.
  • 이것이 consensus mechanism 이 된다. 즉, 이녀석이 많은 작업증명을 해결했다는 것은 곧 CPU 자원을 가장많이 사용한 녀석이기 때문에 이녀석의 ledger 를 채용한다는 동의를 해준다.(컨센서스 알고리즘 참고 자료 :  Raft 알고리즘)
  • 이렇게 cpu 의 소모가 많아서 쉽게 조작하지 못한다. 대체로 악의적인 유저가 cpu 를 소모해서 ledger의 내용을 고치는 것보다는 mining 을 하는 것이 cpu 소모가 적다. 이것이 blockchain 이 pow 를 이용하는 이유 중 하나다.



Reference

  1. Proof-of-work system - Wikipedia, the free encyclopedia
  2. 창시자의 무더기 트윗이 의미하는 이더리움 블록체인의 미래 - CIO Korea, 2018.08.23

댓글 없음:

댓글 쓰기