작업증명
Proof-of-Work
작업증명(Proof-of-Work)은 제3자로부터의 서비스 요청(request)이 악의적인 공격(spam 또는 DoS, Denial of Service)이 아님을 증명하기 위해서, 자원이 소모되는 작업을 추가로 수행할 것을 요구하는 것을 의미한다. 대표적인 작업증명으로는 웹사이트 로그인시 특정한 문자 및 그림을 읽고 입력할 것을 요구하는 캡차를 들 수 있다.
작업증명의 특징은 비대칭성인데, 서비스 요청자가 수행하는 데는 어느 정도 자원이 소모되지만 이를 확인하기는 매우 쉬워야 한다. 작업증명은 가상자산인 비트코인 등을 채굴하는 합의 과정에 활용되고 있다.
쉽게 이해하기
작업증명은 무언가를 요청하는 쪽에 일부러 시간과 계산이 드는 작업을 시켜, 그 비용을 치렀다는 증거를 낸 요청만 받아 주는 방식입니다. 보통 이용자에게는 거의 티 나지 않는 작은 수고지만, 같은 일을 엄청나게 반복하려는 쪽에는 큰 부담이 됩니다.
스팸 메일이나 서비스 마비 공격은 요청 한 건을 보내는 비용이 사실상 0이라서 가능합니다. 건마다 아주 작은 수고를 붙이면 평범한 이용자는 몇 번만 치르면 되지만, 수백만 건을 쏟아내려는 공격자에게는 그 수고가 수백만 배로 불어나 공격이 남지 않는 장사가 됩니다.
핵심 조건은 하기는 어렵고 맞는지 보기는 쉬워야 한다는 점입니다. 컴퓨터 방식에서는 흔히 '이 데이터에 붙였을 때 특정 조건을 만족하는 숫자'를 찾게 합니다. 정답을 찾으려면 숫자를 하나씩 수없이 넣어 봐야 하지만, 받은 쪽은 내놓은 숫자를 한 번만 넣어 보면 됩니다. 캡차는 계산 대신 사람의 수고를 요구하는 예입니다.
비트코인은 이 원리를 장부 관리에 씁니다. 여러 참여자가 다음 거래 묶음에 맞는 숫자를 먼저 찾으려고 경쟁하고, 가장 먼저 찾은 쪽이 장부에 새 묶음을 붙이며 보상으로 새 코인을 받습니다. 이미 적힌 기록을 고치려면 그 뒤의 작업을 모두 다시 해야 해서, 많은 전기와 장비가 드는 계산이 곧 장부를 지키는 비용이 됩니다.
예를 들면
정답 숫자를 찾는 데 평균 100만 번의 계산이 필요하고, 컴퓨터가 1초에 100만 번 계산한다고 해 봅시다. 메일을 하루 10통 보내는 사람은 모두 10초만 쓰면 됩니다. 하지만 스팸 100만 통을 보내려면 100만 초, 약 11.6일 동안 컴퓨터를 돌려야 합니다. 받는 쪽은 메일마다 계산 한 번으로 정답인지 확인합니다.