Hashcash는 작업을 수행했다는 증명인 Proof of Work를 이용하는 계산 우표 시스템입니다. 우표는 주어진 조건을 만족하는 결과를 찾았음을 보여 줍니다. 그 자체가 비트코인이거나 송금 가능한 계좌 잔액은 아닙니다.
안나가 파벨에게 이메일을 보내려 합니다. 사본을 한 통 더 보내는 데는 거의 비용이 들지 않습니다. 하지만 수백만 통의 광고를 보내는 사람도 같은 이점을 누립니다. Hashcash는 작은 문턱을 둡니다. 발신자의 컴퓨터가 먼저 계산 우표를 만들어야 합니다. 우체국에 돈을 내는 대신 시간과 에너지를 쓰는 것입니다. Adam Back은 1997년 3월 28일 자신의 구현을 발표하고 2002년에 기술 논문을 공개했습니다. Cynthia Dwork와 Moni Naor는 이미 1992년에 비슷한 아이디어를 연구했습니다. Hashcash는 네트워크 남용을 줄이려는 이런 시도의 역사에 속합니다. [1] [12]
해시는 데이터로부터 계산한 고정 길이의 지문입니다. 안나의 프로그램은 우표의 시험 값을 바꾸고 지문을 다시 계산합니다. 결과 맨 앞에 필요한 수만큼 0비트가 나올 때까지 반복합니다. 비트는 0 또는 1인 이진 숫자입니다. 0을 b개 요구하면 한 번의 성공 확률은 대략 2^-b이고 평균 시도 횟수는 2^b입니다. b = 20이면 평균 1048576번의 계산이지, 반드시 채워야 하는 정확한 횟수가 아닙니다. 빨리 운이 따를 수도 있고 오래 걸릴 수도 있습니다. 파벨은 완성된 우표를 해시 계산 한 번으로 확인하지만, 우표의 정보와 수락 규칙도 별도로 검증해야 합니다. [10] [11]
안나가 우표 하나를 백만 통에 붙일 수 있다면 이 문턱은 의미가 없습니다. 그래서 우표에는 특정 수신자나 서비스와 날짜가 들어갑니다. 수신자는 유효성을 확인하고 받은 우표를 기록해 replay라는 재사용을 거부합니다. 날짜만 넣거나 메시지 내용에 연결하는 것만으로는 똑같은 메시지를 다시 보내는 일을 막지 못합니다. Hashcash에는 전 세계가 공유하는 사용 기록 장부가 없습니다. 필요한 검사는 수신 서비스가 맡습니다. 해시가 맞는다고 해서 우표를 다시 받아도 된다는 뜻은 아닙니다. [11] [12]
요구할 난이도는 수신 서비스가 정합니다. 0비트 하나를 추가할 때마다 평균 작업량은 대략 두 배가 됩니다. 너무 낮으면 스팸 발송자를 늦추지 못하고, 너무 높으면 평범한 이용자도 힘들어집니다. 따라서 20은 예시이지 영구적인 보안 기준이 아닙니다. 같은 횟수를 시도해도 오래된 휴대전화와 빠른 컴퓨터의 소요 시간은 다릅니다. 서비스는 기기 성능과 유효기간, 자체 처리 능력을 고려해야 합니다. Hashcash가 모든 사람에게 똑같은 몇 초를 강제하는 것은 아닙니다. [10] [11]
계산 작업은 선의의 이용자와 공격자를 구분하지 못합니다. 많은 컴퓨터나 botnet, 즉 장악된 기기들의 네트워크를 가진 스팸 발송자는 작업을 나누고 비용 일부를 다른 사람에게 떠넘길 수 있습니다. 그동안 일반 이용자의 배터리도 줄어듭니다. Hashcash의 목적은 공격의 비용 구조를 바꾸는 것이지 스팸의 소멸을 보장하는 것이 아닙니다. 우표는 메시지를 암호화하거나 실제 신원을 증명하지 않으며 전달도 보장하지 않습니다. 서비스가 다른 방어책과 함께 사용할 수 있는 수락 조건 하나입니다. [10]
버전 1의 형식은 1:bits:date:resource:ext:rand:counter입니다. 각 필드는 버전, 명시한 난이도, 날짜, 수신자나 서비스, 확장, 무작위 값, 바뀌는 카운터를 뜻합니다. bits 필드는 발신자가 주장하는 해시 맨 앞의 0비트 수를 나타내며, 컴퓨터가 실제로 시도한 횟수를 뜻하지는 않습니다. 이 이름들은 기술 형식의 일부이므로 번역해 바꾸지 않습니다. 고전적 구현은 전체 문자열에 SHA-1을 적용합니다. bits에 숫자를 쓰는 것만으로는 부족하며 실제 지문이 조건에 맞아야 합니다. 이는 역사적 형식을 설명하는 것이며 새 보안 설계에 SHA-1을 권하는 내용이 아닙니다. Bitcoin은 다른 데이터 형식과 해시 함수를 사용합니다. [11] [13]
여기서는 지문의 시작 부분이 지정된 모양이 되는 입력을 찾습니다. 이런 입력을 partial preimage라고 합니다. 그 해시는 지정된 부분의 조건을 만족하며, 나머지 부분은 어떤 값이어도 됩니다. 반면 충돌은 서로 다른 두 입력이 같은 지문을 만드는 경우입니다. 옛 문헌에는 느슨한 표현인 partial collision도 나오지만 작업을 이해하려면 이 차이가 중요합니다. SHA-1 충돌을 찾는 공격이 지정된 앞부분을 찾는 문제까지 자동으로 해결하지는 않습니다. 그렇다고 SHA-1이 오늘날 일반적인 보안 설계에 적절한 선택이 되는 것도 아닙니다. [10] [11] [13]
Hal Finney는 2004년에 RPOW, Reusable Proofs of Work를 발표했습니다. 이용자는 작업 증명을 제출하고 새 토큰을 받을 수 있었습니다. 다음 이전에서는 기존 토큰이 무효화되고 새 토큰으로 교체되었습니다. 재사용이 같은 우표를 마음대로 복사한다는 뜻은 아니었습니다. 시스템은 IBM 4758 보안 모듈이 있는 서버와 실행 프로그램의 원격 검증에 의존했습니다. 운영자를 신뢰할 필요는 줄였지만 하드웨어와 제조사에 관한 전제는 남았습니다. RPOW는 실험적 선행 사례였으며 Bitcoin의 탈중앙화 합의는 아니었습니다. [7] [15]
Bitcoin Whitepaper는 Back의 Hashcash를 명시적으로 인용합니다. 사토시는 결과를 찾으려면 반복 시도가 필요하지만 다른 사람은 쉽게 검사할 수 있다는 같은 차이를 활용했습니다. Bitcoin 채굴자는 거래 묶음을 요약하고 이전 블록을 참조하는 유효한 블록 헤더를 찾습니다. double SHA-256, 즉 SHA-256을 연속 두 번 적용하고 결과를 target이라는 수치 상한과 비교합니다. SHA-1 이메일 우표를 지갑에 넣는 것이 아닙니다. 공통점은 원리이지 전체 시스템이 아닙니다. [8] [14]
우편요금은 개별 요청의 비용을 정합니다. 돈에는 서로 충돌하는 두 송금 중 어느 것이 유효한지도 정하는 방법이 필요합니다. Bitcoin은 블록을 연결하고, 노드는 유효한 분기 중 누적 작업량이 가장 큰 체인을 선택합니다. 노드는 규칙을 검증하는 컴퓨터이며 거래와 허용된 발행량도 확인합니다. 아무리 막대한 작업을 해도 무효한 거래를 유효하게 바꾸지는 못합니다. Hashcash는 중요한 재료를 제공했습니다. 이를 다른 규칙과 결합했기에 중앙 관리자 없이 공동의 화폐 기록을 유지할 수 있게 되었습니다. [8] [9]
더 정확히 이해하려면 이 항목과 함께 다음도 읽어 보세요 Proof of Work, 사이퍼펑크, Adam Back, Bitcoin Whitepaper, Bitcoin, Hash. 다음 항목에서도 이 글을 참조합니다 사이퍼펑크, b-money, Bit Gold, Reusable Proofs of Work.