비트코인(bitcoin) 폭락, 마운트 곡스(Mt. Gox) 거래소, 거래 가변성(Transaction Malleability) IT/잡담

한때 세계 최대 규모의 거래량을 자랑했었던 마운트 곡스 비트코인 거래소가 얼마전에 인출을 전면중단했다.

중단 이유는 비트코인(bitcoin) 프로토콜에 심각한 보안 문제가 있기 때문이라고 발표했는데, 소위 "거래 가변성(transaction malleability)"라고 불린다. 어쨌든 이 시기를 기점으로 비트코인의 시세는 계속 하락을 거듭하고 있는 중이구나.

이 거래 가변성이라는 문제가 과연 얼마나 심각한 문제인지 잠깐 살펴보자.

모든 비트코인 거래는 네트워크에 공유된 거래내역에 기록되는데, 이 거래내역을 블록체인(blockchain)이라고 한다. 갑돌이(비트코인 지갑 A)가 갑순이(비트코인 주소 B)에게 1BTC를 보내면, 비트코인 S/W는 이 거래 내역을 비트코인 네트워크로 전송, 즉 공표하는 것이다. 이 거래가 유효한 것인지를 검증하고 블록체인에 확정시키는 역할을 하는 것이 채굴 노드(mining node)들이다. (즉, 비트코인 네트워크는 채굴 노드들의 집합체다.)

각 거래마다 해쉬(hash) 알고리즘을 이용해서 거래식별자(indentifier)가 정해진다. 거래 가변성 문제는 같은 거래에 대해 이 거래식별자가 다를 수 있다는 것이다.

예를 들어 갑돌이가 갑순이에게 1BTC를 전송할 때, 거래식별자 X가 생성되었다고 하자. 그런데 동일한 거래에 대해 거래식별자 Y로  비트코인 네트워크에 추가적으로 거래 내역을 공표할 수 있다는 문제점이 비트코인 프로토콜에 존재한다는 것이다. 이것이 거래 가변성이다.

이런 일이 벌어지면, 비트코인 네트워크에는 아래와 같이 2개의 내역이 돌아다닐 것이다.

비트코인 주소 A에서 B로 1BTC 송금, 거래식별자 X
비트코인 주소 A에서 B로 1BTC 송금, 거래식별자 Y

동일한 거래 내역이 존재할 경우, 채굴 노드들은 둘 중 하나만 승인하고 하나는 버린다. 블록체인에 확정되는 거래 내역은 오직 하나뿐이다. 그런데 어느쪽이 확정될 지는 모른다. (다수결로 승인하므로, 혹시 채굴 노드들을 많이 가지고 있다면 뭔가 특정한 내역이 확정되도록 유도하는 방법이 있을 수도?)

거래식별자에 문제가 있긴 하지만 이중으로 거래가 되는 것이 아니므로 개인간 송금에는 크게 문제가 되지 않는 종류의 취약점이다. 하지만 마운트 곡스 같은 비트코인 거래소에서는 심각한 문제가 되었다.(심각하지 않았으면 출금 정지도 안 했다)


왜 그런지 아래의 상황을 생각해 보자.

갑돌이(비트코인 주소 A)는 마운트 곡스에 저장하고 있던 1BTC를 출금 신청했다.

마운트 곡스(비트코인 주소 M)는 출금을 실행한다. (비트코인 주소 M에서 A로 1BTC 송금, 거래식별자 X)

갑돌이는 잽싸게 다른 거래식별자를 지닌 거래내역을 생성하여 네트워크로 공표한다. (비트코인 주소 M에서 A로 1BTC 송금, 거래식별자 Y)

운 좋게도(나쁘게도) 블록체인에 확정된 거래내역은 거래식별자 Y가 되었다.

이제 갑돌이는 마운트 곡스에 불만을 제기한다. "1BTC를 출금했는데 받지를 못했습니다!"

[바로 여기가 문제] 마운트 곡스는 블록체인에서 거래식별자 X를 검색한다. 아무리 찾아도 없다.

뭔가 문제가 있다고 판단한 마운트 곡스는 1BTC를 다시 송금한다. "죄송합니다. 다시 보내드리겠습니다."

얼씨구나 좋구나! 갑돌이는 1BTC 출금 신청하고 2BTC를 받았다.


이것은 정말로 심각한 보안 취약점인가? 비트코인 자체의 버그라는 점은 분명 사실이지만, 그보다는 마운트 곡스의 거래내역 확인 절차에 더 큰 문제가 있는 것으로 보인다. 사용자가 출금에 문제를 제기할 경우, 이를 확인하기 위해 블록체인을 검색할 때 거래식별자만이 아니라 송수신 비트코인 주소와 액수를 같이 확인했어야 한다. 어쨌든 출금/재출금과 관련된 일련의 과정은 아마도 전부 자동화되어 있었을 것이고, 이 문제를 악용해서 누군가 마운트 곡스의 비트코인을 열심히 빼돌린 모양이다. 그래서 결국 출금 정지.

어쨌든 마운트 곡스가 이 문제를 홈페이지에 공개하자, 얼마 지나지 않아서 비트스탬프(Bitstamp), BTC-e 등 비트코인 거래소들을 대상으로 거래 가변성 취약점을 이용한 대규모 분산 서비스 거부(DDoS) 공격까지 벌어졌다. -_-;

결론적으로, 거래 가변성은 개인의 비트코인 지갑에 위협이 되고 도난이 발생하는 종류의 취약점은 아니지만, 비트코인 거래소에겐 큰 문제가 될 수도 있다. 국내의 비트코인 거래소도 자사의 출금 시스템에 위와 같은 문제가 발생할 가능성이 있는지 확인은 해 보는 것이 좋을 듯하다.

이 문제점은 라이트코인(litecoin) 등 비트코인에서 파생된 비슷한 종류의 가상 화폐에도 동일하게 존재할 가능성이 있다.

비트코인 거래 가변성과 마운트 곡스 문제에 대한 좀 더 자세한 내용은 아래의 원문 기사를 참고하자.
IEEE Spectrum: what you need to know about Mt. Gox and the bitcoin software flaw



핑백

덧글

  • ㅎㅎ 2014/02/15 01:36 # 삭제 답글

    근미래에 지폐나 금속화폐가 사라지고 카우보이비밥처럼 1000우롱에 라면 하나 사 먹는 시대가 머지 않아 올 것 같네요
  • 반달가면 2014/02/15 23:19 #

    비트코인이 아니더라도 이미 상당량의 금융거래가 네트워크를 통해 이루어지고 있죠. 일반 지폐나 동전이 세상에서 완전히 사라지려면 전인류가 100% 다 네트워크에 붙어야 하는데, 아마 그건 꽤 오랜 시간이 걸리지 않을까 싶네요. 아예 안 올지도 모르구요;;
  • 나인테일 2014/02/15 02:21 # 답글

    비트코인이 지금 당장 망해버리지 않으면 저가매수의 찬스...일지도 모르지만 올라가다 언제 또 떨어질 줄 알고 (.....)
  • 반달가면 2014/02/15 23:21 #

    아주 심각한 취약점이 아니라 조치 가능한 문제로 보이기 때문에 망하진 않을 것 같습니다만, 출금 정지가 장기화되면 타격이 클지도 모르겠습니다.
  • 천하귀남 2014/02/15 10:32 # 답글

    이론은 완벽해도 사람의 태만이 있는이상 사람의 욕심에 당하나 봅니다.
  • 반달가면 2014/02/15 23:25 #

    개인적인 경험으로도 그렇고, IT쪽 문제라는게 설계개념이나 이론에 큰 하자가 있는 경우보다는 그걸 실제로 하드웨어/소프트웨어로 구현하면서 생기는 문제가 훨씬 더 많은 비중을 차지하는 것 같습니다.
  • 꾸머 2014/02/15 17:22 # 답글

    유용한 정보 재밌게 보고가요!!^^
  • 반달가면 2014/02/15 23:25 #

    아 네. 감사합니다~
  • a 2014/02/16 06:54 # 삭제 답글

    이미 다른 거래소들은 모두 문제를 해결했고 출금 정상화 되었습니다. 그로 인해 다시 비트코인은 오름세지요.
  • 반달가면 2014/02/16 23:28 #

    마운트 곡스는 아직도 정상화 안된 것 같습니다. 공지가 새로 올라온 것을 보니 현재 작업중인 모양이네요.
댓글 입력 영역
* 비로그인 덧글의 IP 전체보기를 설정한 이글루입니다.

Google Analytics


B-Side


adsense(w160_h600)2

통계 위젯 (화이트)

212858
6600
1187129

ad_widget_2