검수요청.png검수요청.png

해시캐시

위키원
이동: 둘러보기, 검색
해시캐시(hashcash)
해시캐시(hashcash)

해시캐시(hashcash, 哈希现金)는 1997년 아담 백(Adam Back)이 스팸메일과 서비스 거부(DoS) 공격을 제한하기 위해 사용한 작업증명(PoW) 시스템이다. 해시캐시가 제안한 작업증명 시스템은 이듬해인 1998년 웨이 다이가 고안한 비머니에서 새로운 블록 생성 방식으로 채택되었다. 이후 2008년 사토시 나카모토비트코인 백서에서 해시캐시가 제안한 작업증명 방식을 채택하여 채굴 알고리즘을 만들었으며, 2009년 1월 실제 비트코인 채굴에 사용되었다. '해쉬캐시', '해쉬캐쉬', '해시캐쉬'가 아니라, '해시캐시'가 올바른 표기법이다.

개요[편집]

아담 백(Adam Back)

해시캐시와 같은 유사한 아이디어가 처음 제안된 것은 1992년 캘리포니아 산타 바바라에서 열린 연례 국제 암호화 회의에서 Cynthia Dwork와 Moni Naor가 발표한 “ 처리 또는 스팸 메일 퇴치를 통한 가격 책정”이라는 논문을 통해서이다. 이 논문은 가격 책정 기능으로 알려진 프로토콜을 도입하여 스팸 메일을 줄일 수 있는 시스템에 대해 자세히 설명했다. 주요 아이디어는 사용자가 리소스에 대한 접근을 얻고, 그로 인한 스팸메일 사용을 방지하기 위해 적당히 어렵지만 다루기 힘든 계산기능, 즉 컴퓨터 연산능력을 사용해 특정한 값을 찾는 작업을 요구하는 것이다. 이를 위해 제곱근을 제곱한 소수, Fiat-Shamir 서명 방식, Ong-Schnorr-Shamir 서명 방식을 기반으로 하여 여러 가지 가격 책정 기능을 제안한다.[1]

1997년 영국의 아담 백은 Dwork와 Naor가 제출한 것과 비슷한 기능을 제안했다. 해시캐시는 원래 이메일과 익명의 Remailers와 같은 모든 인터넷 자원에 대한 남용을 통제하고 줄일 수 있는 메커니즘이었다. 해시캐시는 암호화 해시 기능인 SHA-1을 사용하여 전자 메일이 스팸이 아님을 받는 사람에게 확인하는 데 도움이 되는 스탬프이다.[1] 즉, 아담 백은 메일 발송자가 POW를 수행해야만 해시캐시 스탬프를 받을 수 있도록 했다. 해시캐시 스탬프가 찍히지 않은 메일은 보낼 수 없다. 이 말은 곧 메일을 발송하려면 어느 정도의 연산작업과 시간을 투입해야 한다는 의미다. 대량의 정크메일을 보내려면 금전적, 시간적 비용이 많이 발생하기 때문에 스팸을 줄일 수 있는 시스템이었다.[2]

비트코인 백서에서 사토시 나카모토는 Backcoat의 해시캐시가 비트코인 분산 원장에서 사용된 채굴 기능을 위한 영감을 제공했다는 사실을 암시했다. “P2P 방식으로 분산 타임스탬프 서버를 구현하려면 신문이나 유즈넷 게시물이 아닌 아담 백의 해시캐시와 유사한 작업 증명 시스템을 사용해야 한다. 비트코인이 해시캐시와 같은 PoW 알고리즘을 사용한다는 것을 공개적으로 밝히고 있는 것이다. 그러나 비트코인 네트워크는 비슷한 버전의 알고리즘을 사용할 뿐이지 동인한 알고리즘을 사용하는 것은 아니다.[1]

특징[편집]

작동방식[편집]

해시캐시는 컴퓨팅을 위해 작업량을 선택할 수 있는 작업증명 알고리즘이지만, 증명은 효율적으로 검증될 수 있다. 이메일을 사용하는 경우, 해시캐시 스탬프의 텍스트 인코딩은 이메일의 헤더에 추가되어 보낸 사람이 이메일을 보내기 전에 스탬프를 계산하는 CPU 시간을 적당히 소비했음을 증명한다. 즉, 보낸 사람이 스탬프를 생성하고 이메일을 보내는 데 일정 기간이 걸렸으므로 스팸일 가능성은 거의 없다. 수신자는 적은 계산 비용으로 스탬프가 유효한지 확인할 수 있다. 그러나 헤더를 찾는 유일한 방법은 무차별하게 해답이 발견될 때까지 무작위 값을 시도하는 것이다. 비록 개별 문자열을 테스트하는 것은 쉽지만, 만족스러운 답변이 거의 없는 경우 대답을 찾기 위해 많은 노력이 필요하다.[3]

메시지 당 매우 적은 비용으로 많은 수의 이메일을 보낼 수 있는 능력에 의존하는 스팸머의 비즈니스 모델은 발송자들은 그들이 보내는 각 스팸에 대해 적은 비용이 든다면 수익성이 없어질 것이라는 가설이 있다. 수신자는 발신인이 이러한 투자를 했는지 여부를 확인하고 결과를 사용하여 이메일을 필터링할 수 있다.[3]

오픈 소스[편집]

해시캐시는 특허권이 없으며, 레퍼런스 구현과 기타 구현의 대부분이 무료인 소프트웨어이다. 해시는 많은 리눅스(Linux)배포에 포함되거나 사용할 수 있다. RSA는 클라이언트 퍼즐을 설명하는 RFC 맥락에서 클라이언트 퍼즐에 대한 IPR 설명을 국제인터넷표준화기구에 발표했다. RFC는 제목에 해시캐시를 포함했지만 여기에 설명된 메커니즘은 알려진 솔루션의 대화형 과제이며, 클라이언트-퍼즐과 유사하므로 해시캐시는 상호 작용하지 않는다. 어떤 경우에도 해시캐시가 클라이언트 Puzzle 출판물(1999년 3월)과 클라이언트 Puzzles 특허 파일 2000년 2월 US71976에 선행되기 때문에 RSA의 IPR 문항을 적용할 수 없다.[3]

채굴자 프라이버시[편집]

원칙적으로 채굴자는 각 블록에 대해 다른 보상 주소를 사용해야 한다. 사토시의 초기 비트코인이 잠재적으로 연결되어 있었던 이유는 보상 주소를 변경하는 동안 마이닝 카운터를 다시 설정하는 것을 잊었기 때문이다. 이것은 일종의 비트코인 채굴 전용 버그이다. 그 코인이 누구의 소유인지를 암시할 수 있는 많은 채굴 파워를 가졌다면 쉽게 그 기여 수준이 드러나게 된다. 따라서 비트코인에서 카운터 또한 가려져야만 한다. 그렇기 때문에 비트코인은 논스(Nonce)와 엑스트라-논스(extra-nonce)를 통해 이러한 작업을 수행한다. 논스는 0에서 시작되지만 엑스트라 논스는 임의로 결정된다. 이 두 가지를 합치면 증명에 들어간 노력의 양을 숨겨서 무작위화 된 카운터를 형성하는데, 그래서 채굴 파워가 좋은 사람인지 아니면 단순이 운이 좋은 채굴자 인지 구분하기가 어렵다.[3]

또한 현재 채굴 프로토콜이 수행하는 채굴 풀의 도입으로 사용자가 작업을 다시 수행할 수 있는 위험이 있다. 채굴자들은 사용자들이 재작업하는 것을 막기 위해 정해진 작업을 분명히 하게 규정한다. 그러나 이는 불필요한 통신을 야기하며, 초기 프로토콜 버전에서는 풀이 실제 블록을 채굴자들에게 보내기로 한 결정의 한 요소일 수 있는데, 이는 유효성 심사 권한을 풀 운영자에게 위임하여 비트코인 네트워크의 보안을 저하시킨다. 최신 마이닝 프로토콜 버전은 사용자가 자신의 블록 정의를 추가할 수 있게 해주지만, 여전히 불필요한 작업 할당 전달에 따른 행동을 하게 된다. 새로운 풀 마이닝 프로토콜은 특별히 선택된 광부들을 가지고 있기 때문에 이것은 무작위로서 작용하기 때문에 실제로 작업 할당을 위해 풀과 소통할 필요가 없고, 채굴자들은 그들이 선택한 크기의 작업을 UDP 패킷으로 풀에 제출할 수 있다.[3]

스크립트 작업 증명(Scrypt proof-of-work)[편집]

스크립트(Scrypt)는 작업 증명 기능이 아니라 높은 반복 시간으로 계산하려면 설계상 비용이 많이 들지만 파생 기능을 확장하기 위한 것이며, 공적으로 감사 가능한 증거를 만드는 데 사용할 수 없다. 스크립트의 내부 해시 함수가 있는 해시캐시는 해시캐시-스크립트로 표시 할 수 있다. 콜린 퍼시벌의 스크립트는 사용자가 선택한 암호를 키로 변환하는 키 파생 기능이다. 스크립트를 선택하게 된 이유는 스크립트의 내부 해시가 다른 것들 보다 더 많은 메모리를 사용하므로 CPU에 비해 GPU는 암호 연산의 길이가 짧은 장점이 있다.[3]

마이닝은 실제로 스크립트를 직접 사용하는 것이 아니라 내부 스트립트 해시만 사용한다. 따라서 스크립트의 키 확장 기능은 사용자의 암호에서 비트코인 지갑 암호화로 암호키를 추출하는 등의 키 보호를 정상적으로 사용하는 것과 달리 경도에 전혀 사용되지 않습니다.  스크립트의 키 확장을 채굴에 사용할 수 없는 이유는 동시에 동일한 요소로 확인하는 것이 더 비용이 많이 들기 때문이다.[3]

장점과 단점[편집]

해시캐시 시스템은 합법적인 이메일에 실제 돈이 포함되지 않은 소액 결제 제안을 적용하는 것보다 유리하다. 발송인이나 수령인이 지불 할 필요가 없으며, 소액 결제와 관련된 행정 문제와 이메일 요금 청구와 관련된 도덕적 문제를 회피 할 수 있다. 한편, 해시캐시는 전송되는 각 전자 메일에서 잠재적으로 중요한 계산 리소스를 소비해야하므로 클라이언트가 유효한 헤더를 계산하는 데 소비하는 평균 시간의 이상적인 양을 조정하는 것은 다소 어렵다. 이는 시스템의 접근성을 저하시키거나, 스팸으로부터 효과적인 필터를 제공할 정도로 충분하지 않아 위험을 감수해야 한다는 것을 의미 할 수 있다.[1]

해시캐시는 메일 사용자 에이전트 및 스팸 필터에 구현하기 매우 쉽다. 중앙 서버가 필요 없다. 해시캐시는 점진적으로 배포 될 수 있다. 스팸이 아닌 전자 메일은 보낸 사람의 처리 능력 부족으로 인해 막히거나 스팸 이메일이 통과될 가능성이 높다. 또 다른 예상되는 문제는 컴퓨터가 무어의 법칙에 따라 더 빨라진다는 것이다. 따라서 필요한 계산의 어려움은 시간이 지남에 따라 증가 한다. 그러나 개발도상국에서는 오래된 하드웨어를 사용할 것으로 예상 될 수 있다. 즉, 이메일 시스템에 참여하는 것이 점점 어려워 질 것이다. 이는 최신 하드웨어를 구입할 여유가 없는 선진국의 저소득층 개인에게도 적용된다.[1]

해시캐시와 마찬가지로 암호화폐는 작업 증명 시스템으로 해시 함수를 사용한다. 암호화폐의 등장으로 에이식(ASIC)기반 채굴 장비에 대한 수요가 발생했다. 대부분의 암호화폐는 SHA-256해시 함수를 사용하지만 동일한 에이식(ASIC) 기술을 사용하여 소비자의 CPU보다 3배 빠른 해시캐시 답를 찾을수 있으므로 스팸 발송자의 계산상의 장애물을 줄일 수 있다.[1]

기술적 측면[편집]

발신자 측[편집]

송신자는 헤더를 준비하고 카운터 값을 초기화 된 임의의 숫자에 추가한다. 그런 다음 헤더의 160비트 SHA-1 해시를 계산한다. 해시의 처음 20비트가 모두 0인 경우, 이는 허용 가능한 헤더이다. 그렇지 않는 경우, 발신인은 카운터를 증가시키고 해시를 다시 시도한다. 2,160 개의 가능한 해시 값 중에서 이 기준을 충족시키는 2,140개의 해시 값이 있다. 따라서 처음 20개가 0이어야 하는 헤더를 무작위로 선택하는 확률은 220분의 1이다. 송신자가 유효한 해시 값을 얻으려고 시도하는 횟수는 기하 분포에 의해 모델링된다. 따라서 송신자는 평균적으로 유효한 헤더를 찾기 위해 220개의 값을 시도해야 한다. 해시를 계산하는 데 필요한 시간의 합리적인 추정치를 고려할 때 찾는 데 약 1초가 소요된다. [1]

수취인측[편집]

기술적으로 시스템은 다음 단계를 통해 구현된다.

  • 수신자의 컴퓨터는 전체 문자열의 160비트 SHA-1 해시를 계산한다. 이 작업은 약 2 마이크로초가 소요되며, 나머지 이메일을 받는 데 걸리는 시간보다 훨씬 짧은 시간이다. 처음 20비트가 모두 0이 아니면 해시가 유효하지 않다.
  • 수신인의 컴퓨터는 헤더의 날짜를 확인한다. 현재 날짜로부터 이틀 이내에 없으면 유효하지 않다.
  • 수신인의 컴퓨터는 해시 문자열의 이메일 주소가 수신인이 등록한 유효한 이메일 주소와 일치하는지 또는 수신인이 가입한 메일 목록과 일치하는지 확인한다. 일치 항목을 찾을 수 없으면 해시 문자열이 잘못된 것이다.
  • 수신인의 컴퓨터는 해시 문자열을 데이터베이스에 삽입한다. 해시 문자열이 이미 데이터베이스에 있는 경우, 이는 유효하지 않다. 해시 문자열이 이러한 테스트를 모두 통과하면 유효한 해시 문자열로 간주된다.[1]

적용[편집]

비트코인 채굴[편집]

비트코인 채굴자는 네트워크에서 코인 거래자로부터 검증되지 않은 거래를 수집하는 컴퓨터 프로그램을 실행한다. 다른 데이터를 사용하면 이것들은 블록을 형성하고 채굴자에게 지불할 수 있지만, 채굴자가 시행 착오를 통해 ‘논스(nonce)’ 번호를 발견한 경우에만 블록이 네트워크에 의해 받아들여진다. 이 논스는 네트워크의 난이도 목표를 달성하기 위해 충분한 수의 제로 비트를 가진 해시를 산출한다. 첫 번째 코인이 형성된 이래로 채굴자로부터 받아들여지는 블록은 비트코인 블록체인을 형성한다. [1]

해시캐시는 SHA-1 해시를 사용하고 160개의 해시 비트 중 처음 20개가 0이어야 하는 반면, 비트코인의 작업 증명은 SHA-256 해시를 사용하며 원래 256비트 중 처음 32개가 0이어야 한다. 그러나 비트코인 네트워크는 시간 당 6개의 블록 평균 생성 속도를 유지하기 위해 난이도를 주기적으로 재설정한다.[1]

스팸 필터[편집]

해시캐시는 자동 스팸 필터링 시스템을 사용하여 긍정 오류(false positive)에 대한 잠재적인 솔루션으로 사용된다. 합법적인 사용자는 스탬프를 채굴하는 데 소요되는 추가 시간으로 거의 불편을 느끼지 않는다. SpamAssassin은 버전 2.70부터 유효하고, 유효하지 않은 해시캐시 스탬프에 대해 부정적인 점수를 할당했다. 그러나 해시캐시 리소드 필드와 일치해야하는 주소 패턴 목록으로 구성해야하므로 기본적으로 환경을 설정한다.[1]

이메일[편집]

소스포지(SourceForge)의 페니 포스트(Penny Post)소프트웨어 프로젝트는 모질라 썬더버드(Mozilla Thunderbird) 이메일 클라이언트에서 해시를 구현한다. 이 프로젝트는 발신자가 1 페니 밖에 들지 않는 기존의 우편 서비스의 역사적 유용성에 대한 정보를 위해 페니 포스트를 참고한다.[1]

마이크로소프트는 또한 그들의 조정된 스팸 감소 이니셔티브(CSRI)의 일부로 유사하지만 호환되지 않아 현재 사용되지 않는 사양을 설계하고 구현했다. 해시캐시의 마이크로소프트 전자 메일 포스트마크 변형은 마이크로소프트 메일 인프라 구성 요소 Exchange, Outlook 및 Hotmail에서 구현된다. 해시캐시와 마이크로소프트의 이메일 표지의 형식 차이는 사후 표시가 수신인 외에 본문을 해시하고 수정된 SHA-1을 해시 함수로 사용하며 여러 개의 하위 퍼즐을 사용하여 작업 증빙을 줄이는 것이다.[1]

블로그[편집]

이메일과 마찬가지로 블로그도 스팸 댓글의 대상이 되는 경우가 많다. 일부 블로그 소유자는 자바스크립트 언어로 작성된 해시 캐시 스크립트를 사용하여 댓글 스패머를 줄였다. wp-해시캐시와 같은 일부 스크립트에서는 해시 캐시를 구현한다고 주장하지만 대신 자바스트립트 난독화에 의존하여 클라이언트에서 일치 키를 생성하도록 한다.[1]

각주[편집]

  1. 1.00 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.10 1.11 1.12 1.13 Hashcash
  2. 김흥록 기자, 〈(비트코인개론)<1>사이퍼펑크와 사토시 나카모토 찾기〉, 《서울경제 블록체인》, 2018-04-13
  3. 3.0 3.1 3.2 3.3 3.4 3.5 3.6 Hashcash

참고자료[편집]

같이 보기[편집]


  검수요청.png검수요청.png 이 해시캐시 문서는 암호화폐 종류에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.