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

이중지불

해시넷
Asadal (토론 | 기여)님의 2020년 9월 19일 (토) 17:35 판 (위임증명)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)
이동: 둘러보기, 검색

이중지불(double spending)이란 원본 파일에 저장된 가치를 지불한 뒤, 해당 파일을 복사하여 다른 사람에게 또 지불하는 것을 말한다. 예를 들어, A가 B에게 1,000원이라고 기록된 파일을 전송한 후 다시 해당 파일을 복사하여 C에게 또 1,000원을 전송하는 것을 말한다. 영어로 더블스펜딩(double spending)이라고 한다.

개요[편집]

컴퓨터와 인터넷에서 모든 파일은 복사가 가능하기 때문에 이중지불 문제를 피할 수 없다. 기존의 인터넷 시스템에서는 이중지불 문제를 피하기 위해 신뢰할 수 있는 중개기관을 두고, 중개기관이 보관하고 있는 기존 데이터에서 해당 금액만큼 차감하는 방식으로 가치를 전달했다. 결국 기존 인터넷 시스템에서 가치를 전송하려면 반드시 은행이라는 중개기관에 의존해야 했다.

블록체인은 이중지불 문제를 해결함으로써 암호화폐의 기반 기술이 되었다. 기존의 인터넷에서는 이중지불 문제를 해결할 수 없어, 인터넷으로 정보를 전달할 수는 있었지만 중개기관이 없이는 가치를 전달할 수 없었다. 하지만, 블록체인 기술을 이용할 경우 은행이라는 중개기관이 없이도 이중지불 문제 없이 가치를 전송할 수 있다.

블록체인에서 모든 거래내역은 해시(hash)로 변환되어 저장되는데, 하나의 블록에는 과거의 모든 거래내역이 담긴 이전 해시값을 포함하고 있기 때문에 이중지불이 불가능하다. 예를 들어, A가 B에게 1,000원을 전송한 경우 해당 거래내역이 블록체인에 기록되기 때문에, A가 다시 1,000원을 C에게 전송하려고 할 경우 해당 거래는 블록체인 네트워크에 참여한 다른 노드(node)들의 승인을 얻지 못하여 실패하게 된다. 이처럼 블록체인은 과거의 모든 거래내역이 담긴 장부를 해시함수로 변환하여 하나의 파일로 만들어 전송하고, 그 결과를 블록체인 네트워크에 참여한 다른 노드들이 검증하게 함으로써 이중지불 문제를 해결할 수 있게 되었다.

이중지불 공격[편집]

이중지불 공격으로 블록체인 레벨의 공격과 사용자 레벨의 공격으로 크게 나눌 수 있다.

블록체인 레벨의 공격[편집]

가장 널리 알려진 공격이면서 가장 강력한 방식이다. 해커가 합의 의결권의 51% 이상을 점유할 경우 크게 3가지의 공격이 가능해진다. 첫째, 51% 점유기간동안 일어난 해커 본인의 전송 내역을 뒤집어 이중 지불을 할 수 있다. 둘째, 특정/모든 전송이 승인 받지 못하게 할 수 있다. 셋째, 특정/모든 채굴자가 확정 블록을 채굴하지 못하게 할 수 있다. 51% 이상의 의결권을 점유한다고 하더라도 할 수 없는 일들이 있다. 첫째, 타인의 전송 내역을 그들의 협조 없이 뒤집을 수는 없다. 둘째, 블록당 생성되는 보상 코인의 수를 바꿀 수는 없다. 셋째, 세상에 없던 코인을 새로 발행하거나 타인의 코인을 임의로 자신에게 송금할 수는 없다. 위와 같은 공격을 방어하기 위해서는 구성원이 풀노드를 구성해야 한다. 풀노드가 아닌 라이트노드의 경우 위와 같은 공격에도 피해를 입을 수 있는데, 이는 라이트노드가 특정 채굴자나 풀노드를 신뢰해야하기 때문이다.
지분 증명(Proof OF Stake, POS) 방식의 코인에 대해 감행할 수 있는 공격 방식이다. 블록체인 포크(fork)가 발생했을 때, 지분 증명 코인 채굴자의 우월전략은 모든 체인을 동시에 채굴하는 것이다. 대부분의 채굴자가 모든 체인을 동시에 채굴할 경우 지분 증명 코인은 이중 지불 공격에 취약해진다. 예를 들어 공격자는 본인의 코인을 타겟에 지불 한 뒤, 해당 지불 내역이 없는 새로운 체인을 임의로 포크해 만들어나갈 수 있다. 81% 이상의 지분이 메인체인과 공격자가 포크한 체인을 동시에 채굴하는 데 쓰일 경우, 공격자는 10%의 지분만 가지고도 포크한 체인을 메인체인으로 만들 수 있다. 공격자(10%)와 이중 채굴자(81%)의 합이 91%, 공격자를 제외한 채굴자의 합이 90%이므로, 이는 51% 어택에 준하는 위협이 된다.
먼 옛날의 블록부터, 최대로는 제네시스 블록부터 시작하는 새로운 체인을 메인체인으로 만들어 이중 지불을 하고자하는 공격이다. 이와 같은 공격은 지분 증명 방식일 경우 적용이 가능하다. 지분 증명의 특성상 새롭게 블록을 계산해 이어 붙이는 것은 어려운 일이 아니므로, 소규모의 지분만 가지고도 평균 블록 생성 속도보다 빠르게 이어 붙일 수 있다. 포크한 체인이 메인체인보다 길어져 메인체인으로 인정되면, 롱레인지 어택은 성공한다.
랜덤 변수를 생성해 슬롯 리더(slot leader)를 선출하는 지분 증명 코인들에 대한 공격방식이며, Stake Grinding Attack이라고도 불린다. 슬롯 리더를 선출하기 위한 랜덤 변수를 생성하기 위해 블록체인의 헤더와 전송 내역을 이용하기도 하는데, 이 경우 마지막 블록 생성자가 미리 랜덤 변수를 계산해볼 수 있게 된다. 간단하게는 본인에게 유리한 랜덤 변수를 얻을 때까지 전송 내역을 임의로 누락시키거나 포함시키는 것과, 미리 계산한 랜덤 변수로 예측한 스테이킹 코인을 사전 구매하는 등의 공격을 생각할 수 있다.
하나의 노드를 대상으로 행하는 네트워크 공격이다. 블록체인 네트워크에서 노드들은 서로 다른 노드들과 통신을 하며 각자의 장부 내역을 확인 받는다. 만일 특정 노드가 통신하는 다수의 노드가 공격자의 관리 하에 있으면, 해당 노드에 대한 이클립스 어택이 가능하다. 공격자가 허위전송내역을 담은 블록을 마치 다수에게 확인 받은 것 처럼 타겟 노드에 전파시켜, 이중 지불 공격을 할 수 있다.
공격자와 채굴자가 뇌물과 같은 모종의 이해관계로 연합하여 행하는 네트워크 공격이다. 공격자의 목표는 채굴자를 이해관계로 묶어 51% 어택을 가능하게 하는 것에 있다. 작업 증명 코인의 경우 채굴자가 일정 이상의 지분을 가지고 있어야할 의무는 없기 때문에, 채굴자는 51% 어택으로 인한 가격 하락 리스크에서 자유롭다. 따라서 뇌물이 채굴자의 이해관계를 만족시켜줄만큼의 규모를 가진다면, 이 공격 방식은 의미를 가진다.
이기적 채굴자가 채굴한 블록을 전파시키지 않고 있다가, 최대한 늦게 내보내는 채굴 전략을 뜻한다. 전파시키지 않는 동안 다음 블록 해시 문제를 미리 풀어봄으로서 채굴 확률을 높일 수 있다. 이러한 채굴 전략은 작업 증명 코인에서 두드러지며, 다른 정직한 채굴자에 비해 높은 수익을 낼 수 있다.

사용자 레벨의 공격[편집]

가장 흔히 알려져 있는 사용자 레벨의 공격 유형이다. 공격자는 서비스를 제공받기 위해 지불한 코인을 다시 한번 본인의 지갑으로 전송한다. 이 경우 서로 다른 전송 내역 중 하나만 승인되어 블록에 기록되는데, 만일 본인 지갑으로 전송되는 것이 승인될 경우 공격이 성공한다. 이 공격이 성공하기 위해서는 타겟이 공격자의 승인상태를 믿어야 한다.
레이스 어택을 조금 더 발전시킨 공격 유형이다. 이 공격을 위해서는 공격자가 직접 채굴을 해야 한다. 공격자는 채굴에 성공했을 경우, 생성할 블록에 본인 코인을 본인의 지갑으로 보내는 전송 내역을 포함시킨다. 공격자는 이 블록을 네트워크에 전파시키지 않고 기다린다. 그동안 공격자는 본인 지갑으로 보내는 코인을 이용해 타겟과 서비스 거래를 시도한다. 이 때 타겟이 해당 코인의 또 다른 0컨펌 내역이 있는지 확인하더라도 공격자의 의도를 파악하기 어렵다. 타겟이 0컨펌 내역을 믿고 서비스 거래를 완료하면, 공격자는 본인의 블록을 네트워크에 전파시킨다. 공격자 본인의 지갑으로 보내는 내역은 1컨펌이 되고, 타겟과 거래한 내역은 여전히 0컨펌이므로 이후 타겟과의 거래내역은 취소 된다. 핀니 어택은 레이스 어택보다 강력하지만, 공격자가 어느정도의 리스크를 가진다. 만일 공격자가 본인의 블록을 네트워크에 전파시키기 전에 제 3자가 블록을 채굴해버릴 경우 핀니 어택은 실패한다. 이 경우 공격자는 블록 채굴 보상만큼의 손실을 입게 된다.
1승인 상태를 믿는 타겟에 대한 공격 유형이다. 이 공격 역시 공격자가 직접 채굴을 해야 한다. 공격자는 채굴에 성공했을 경우, 생성할 블록에 본인의 코인을 타겟에게 보내는 전송내역을 포함시킨다. 공격자는 이 블록을 네트워크에 전파시키지 않고, 제 3자가 블록을 채굴할 때까지 기다린다. 제 3자의 블록에는 공격자->타겟으로의 전송 내역이 포함되지 않는다. 제 3자가 채굴에 성공하는 즉시 공격자는 타겟에 본인 블록이 생성되었음을 알린다. 타겟이 공격자의 블록을 제 3자의 블록보다 먼저 수신하고 이를 믿게 될 경우, 공격자의 전송 내역은 1승인 상태가 된다. 한편, 블록체인에서 공격자의 체인과 제 3자의 체인은 포크 상태가되어 경쟁하게 된다. 만일 공격자의 체인이 패배하여 제 3자의 체인이 메인체인이 되면, 공격자의 전송내역은 포함되지 않았으므로 1승인 상태였던 전송내역은 무효가 된다. 공격자 입장에서 백터76 어택은 피니 어택의 헷지 전략이라고 볼 수 있다. 공격자의 체인이 승리하여 공격이 실패하더라도, 공격자는 채굴 보상을 지급받을 수 있다. 공격자의 체인이 패배할 경우, 이번에는 채굴 보상을 받을 수 없지만 타겟에 대한 공격은 성공한다. 공격 성공으로 인한 이익이 채굴 보상보다 클 경우, 공격자는 어떤 경우에도 이익을 취할 수 있다.[1]
포크가 일어나 블록체인이 분리되더라도 지갑 전송내역이 모든 체인에 동일하게 적용되는 것을 의미한다. 이를 악용하면 타겟에 대한 공격이 가능하다. 먼저 공격자는 악의적으로 포크한 체인을 통해 타겟에게 코인을 전송한다. 타겟은 새롭게 코인을 받았다 생각하고 이 코인을 다른 지갑에 전송한다. 이 때 타겟의 코인은 메인 체인과 포크 체인 모두에서 전송되게 된다. 반면 공격자는 메인 체인을 통해 코인을 전송하지 않았다. 이후 포크체인이 누락되면, 타겟 입장에서는 보낸 코인만 있고 받은 코인은 없게 된다.

대안[편집]

이중지불로 인한 피해를 막기 위해 알려진 방법은 거래의 컨펌(confirmation, 승인) 수가 일정 수치를 넘어갔는지를 보는 것이다. 비트코인 기준으로 6 컨펌 이상이 떨어진 트랜잭션에서 이중지불 문제가 발생할 가능성은 매우 적다는 것이 전문가들의 의견이다.[2] 다음은 이중지불을 막기위한 프로토콜들이다.

작업증명[편집]

작업증명(Proof of Work)은 암호 해독능력인 컴퓨팅 파워를 이용해 함께 블록에 담기는 해시를 생성하기 위한 숫자값을 찾는 문제를 풀어 거래를 증명해주는 일이다. 이 때문에 비트코인의 이중지불 위험을 사전에 차단할 수 있게한다. 작업증명을 통해 블록체인에서 0.01BTC로 커피를 사겠다는 A거래와 피자를 사겠다는 B거래, 둘 모두 채택하는 일이 절대 없도록 하는 것이다.[3]

지분증명[편집]

지분증명(Proof of Stake)은 작업 증명(Proof Of Work)에 비해 51% 어택에 더 강한 합의 프로토콜이라고 평가받는다. 51% 어택과 같은 블록체인 레벨의 공격이 성공하면 네트워크 신뢰성이 떨어지고, 이는 높은 확률로 코인 가격 하락으로 이어진다. 지분 증명 채굴자는 필연적으로 해당 코인을 보유해야하기 때문에 본인 지분 가치의 하락이라는 리스크를 안고 공격에 참여해야한다. 반면, 작업 증명의 채굴자는 해당 코인을 보유할 의무가 없기 때문에 51% 어택 위험에 상대적으로 더 노출되어 있다.

위임지분증명[편집]

위임지분증명(Delegated Proof of Stake)은 Nothing at Stake Attack과 그라인딩 어택에 대해 어느 정도 내성을 갖는 합의 프로토콜으로 평가 받는다. Nothing at Stake Attack의 경우, 상대적으로 채굴자의 수가 적기 때문에 네트워크 구성원들이 감시하기 용이하다. 일부 위임 증명의 경우, 위임자(delegator/witness)들이 번갈아가며 균일한 블록 생성 기회를 갖기 때문에 그라인딩 어택에서 자유롭다.

캐스퍼[편집]

캐스퍼(Casper)는 이더리움이 지향하는 합의 프로토콜이다. 이 프로토콜은 지분 증명 채굴 역시 작업 증명처럼 기회비용을 갖도록 만든다. 작업 증명 채굴자는 잘못된 체인을 선택했을 경우 보상 없이 전기세만 소진된다는 기회비용을 갖는다. 캐스퍼의 경우 포크가 일어났을 때, 채굴자가 잘못된 체인을 선택할 경우 네트워크 합의에 따라 지분이 삭감된다. 따라서 채굴자가 이중 채굴을 선택할 경제적 유인이 줄어들게 된다. 다만, 지분 삭감은 과도한 패널티라는 의견도 있다.[4]

코인토싱[편집]

코인토싱(Coin Tossing)은 조작 불가능하고 믿을 수 있는 랜덤 변수의 생성을 위한 프로토콜이며, 카르다노우로보로스 프로토콜이 채택한 방식이다. 코인 토싱은 불특정 다수의 참여자가 서로의 정보를 공평하고, 배신의 위험 없이 안전하게 교환할 수 있게 하는 프로토콜이다. 이를 랜덤 변수 생성에 적용하면 네트워크 참여자가 각자가 만든 랜덤 변수를 안전하게 교환할 수 있게 된다. 랜덤 변수가 무결하고, 조작이 불가능하면 지분 증명 코인은 그라인딩 어택으로부터 자유롭다.[5]

타임스탬프[편집]

타임스탬프(Time Stamp)는 롱레인지 어택을 막기 위해 지분증명 코인에 적용된 변수이다. 블록 생성자는 블록의 해시 계산을 위해 타임스탬프를 사용한다. 공격자가 만들어낸 포크체인메인체인을 따라잡더라도, 채굴자는 포크체인의 공격을 타임스탬프를 보고 방어할 수 있다.

각주[편집]

  1. Weaknesses〉, 《Wikipedia》
  2. 이준수 기자, 〈[블록체인 용어 설명 더블 스펜딩, 블록체인을 공격하는 법 #2]〉, 《경향게임스》, 2018-05-18
  3. 이정훈 기자, 〈(이정훈의 암호화폐 읽기)<7>이중지불 문제의 해법, 작업증명(POW)〉, 《이데일리》, 2018-01-27
  4. jon choi,〈Ethereum Casper 101〉, 《Medium》, 2017-08-22
  5. 카르다노 백서

참고자료[편집]

같이 보기[편집]


  검수요청.png검수요청.png 이 이중지불 문서는 블록체인 기술에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.