보안칼럼
이스트시큐리티 보안 전문가의 전문 보안 칼럼입니다.
비트코인 거래, 안전할까?
“모니터 너머로 이루어지는 전자거래에서, 상대방이 보내는 전자화폐가 유효한지,아닌지를 누가 증명해 주느냐?”
거래 알고리즘 측면에서, 이것이 비트코인과 다른 공식적인 전자통화들의 간단한 차이입니다.
거의 모든 공식적인 통화들은 현금 등의 실물을 은행에 예치하거나 신용거래 한도를 설정한 후, 화폐의 이동을 은행, 카드사 같은 금융기관이 주관해 전문 인증기관들과 연계해서 처리하는 전자거래 방식을 이용하고 있습니다.
그런데 ‘사토시’라는 정체 불명의 프로그래머가 고안해낸 인터넷 상의 가상화폐, ‘비트코인’은 거래를 주관하는 기관이 없습니다. 오직 ‘채굴’만이 있을 뿐입니다.
인터넷 검색 사이트에 ‘비트코인 채굴’이라는 단어를 검색해 보면 금광을 캐듯 비트코인을 마구 캐낼 수 있다는 글과 어떻게 하면 비트코인을 더 빠르게 채굴할 수 있는지에 대한 팁들이 쏟아집니다.
전체 발행량이 2100만 비트코인으로 한정되어있다는 것, 중국이 비트코인 거래를 금지했다는 것 등 다양한 정보가 있지만 정작 비트코인이 어떻게 발행되고, 어떤 원리로 있지도 않은 돈이 생겨나 거래되는지에 관한 구체적인 정보는 찾기 어려워 보입니다.
채굴이란 단순히 ‘채굴프로그램’을 돌려서 비트코인을 얻는 것에 불과한 것 같지만, 실은 비트코인의 거래시스템을 유지하는 근간입니다.
채굴이 바로 비트코인 거래들의 유효여부를 검증하는 연산작업이기 때문입니다.
채굴자가 얻는 비트코인은 사용된 컴퓨팅 리소스에 대한 인센티브인 셈이죠.
“개인들이 모인 네트워크가 뭘 어떻게 검증 하냐고요? "
예를 들어보겠습니다.
먼저 비트코인을 거래하려는 ‘B’는 P2P네트워크에 거래하고자 하는 사실을 알립니다.
“B가 C에게 1비트코인을 전송”
전자서명이라는 널리 검증된 알고리즘을 활용해 거래 트랜잭션에 공개키를 첨부, ‘개인키’로 암호화해 알리기 때문에‘누가 누구에게 얼마를 준다는 내용’과 ‘보내는 사람 (실명이 아닌 비트코인 전자지갑 소유자)이 직접 내용을 외쳤다는 것’은 쉽게 증명이 됩니다.
그렇다면 남은 문제는 ‘B가 1비트코인 이상을 가지고 있는지 또, 보유액 이상의 비트코인을 여러 명에게 동시에 지불하지는 않았는지’입니다.
이 점만 확인되면 거래 무결성은 완전히 입증됩니다.
보유액을 확인하는 방법은 간단합니다. B의 이전 거래를 확인해서 ‘A가 B에게 1비트코인 이상을 전송 했는지’ 확인하면 됩니다.
물론 이 글에서 설명하는 모든 조건을 만족하는 ‘유효한 거래’여야 합니다.
이제 ‘B가 전송하는 1비트코인이 C에게 처음 전송하는 것인지’ 확인하면 유효한 거래로 인정되고, 다음에 발생할 거래에서 본 거래를 참조할 수 있을 것입니다.
이것을 ‘거래블록'이라고 합니다.
그런데 이것을 증명하는 방법이 약간 복잡합니다. 누군가 ‘가짜 거래’를 만들어 P2P 네트워크에 내민다면 가짜와 진짜를 구별해야 하기 때문이죠.
네트워크가 이 문제를 해결하기 위해서는 ‘동일한 거래가 나타나면 첫 번째 거래만을 유효한 거래로 취급’해야 하므로, 일부러 복잡한 연산을 동반해 해당 거래의 발생시간을 인증합니다.
0n 이하의 해시 결과가 나올 때까지 난수를 대입, 연산을 반복해 만족하는 값이 나오면 거래시간이 인증되고 해당 해시결과를 다음 블록의 헤더에 적용합니다.
이런 과정이 반복되면 “거래블록체인”이 되고 연산 조건은 노드들의 평균적인 연산속도가 빨라질수록 난이도가 자동으로 조절되어 0의 자릿수가 늘어나면서 결과 값을 구하기가 점점 어려워진다고 합니다.
물론 가짜 거래블록을 만들어 이러한 연산을 반복, 정상적인 거래로 위장할 수도 있지만, 한 개의 블록처리에도 상당히 많은 컴퓨팅 리소스가 필요하기 때문에 특정 시점에 생성한 가짜 블록이 여러 개의 긴 블록체인으로 발전하는 데에는 한계가 생깁니다.
자발적으로 정상적인 채굴에 매진하는 마이너들이 언제나 더 많기 때문에, 공격자의 가짜 블록체인은 자연스럽게 만들어지는 정상 체인보다 항상 짧을 것이라는 점에 착안해 네트워크는 항상 더 긴 블록체인을 바른 체인으로 인정하도록 설계되어 있습니다. 다수결 방식인 셈이지요.
이렇듯 정상거래라는 것이 증명되려면 ‘이전의 거래’, 또 ‘그 이전의 거래’를 계속 참조해야 하며, 이러한 일련의 거래는 ‘검증의 어려움’, ‘어려운 검증을 마친 블록체인의 길이'에 의해 더 견고해집니다.
“비트코인이 해킹으로 망했다던데?”
지난달에 최대 비트코인 환전소인 마운트곡스가 해킹되어 5천억원대의 비트코인을 도둑맞고 파산한 사건이 큰 이슈가 되었습니다.
비트코인이라는 새로운 가상화폐에 사람들의 관심이 높다는 것을 말해주고 있는데요,
사건 초기에는 ‘정식 통화도 아닌 비트코인이 결국에 망했다’라는 듯한 인식이 퍼졌으나, 얼마 지나지 않아 비트코인의 시세가 회복하기 시작했습니다.
이유는 비트코인에 대한 기술적인 배경을 잘 이해하고 있는 사람들 중 일부는 비트코인이 불안한 통화라고 생각하지 않고, 오히려 시세하락을 투자의 기회로 보았기 때문입니다.
사실, 마운트곡스 사건은 비트코인의 거래 알고리즘 자체에 문제가 있어 일어난 것이 아니라 비트코인을 달러나 원화 같은 통화로 바꿔주는 환전소가 해킹을 당해 고객이 예치해둔 비트코인을 도난 당한 것입니다.
실제 통화를 취급하는 은행이나 전자상거래에서 충분히 안전하다고 증명된 암호화 기술들을 사용하므로, 기술 자체의 결함은 아니었습니다.
정식 은행도 보안을 게을리하면 해킹을 당할 수 있는 것과 같습니다.
비트코인 거래가 시작된 지 5년이 넘어 총 발행량의 통화가치가 8조원에 이르고 있는데 아직까지 알고리즘자체의 큰 문제는 발견되지 않아, 비트코인을 안정된 통화로 보는 사람도 많습니다.
“어떤 국가에서 정식으로 발행된 화폐가 아닌데, 비트코인이 과연 가치가 있을까?”
많은 사람들이 이런 의문 때문에 비트코인을 소유하고 싶어하기 보다는, 그저 호기심만으로 바라보고 있습니다.
그런데 1비트코인이 현재 한국 돈으로 60~70만원정도에 거래되고 있습니다.
사실 ‘실체가 있느냐 없느냐’는 그리 중요하지 않습니다.
현금 다발도 그것에 가치를 부여하는 사람이 없다면, 엄청난 인플레이션을 겪었던 짐바브웨의 지폐처럼 그저 종이조각일 뿐이고, 어느 게임회사의 DB서버에 [FFFFFF]같은 코드로만 존재하는 (비트코인처럼 현실세계에서는 존재하지 않는)어떤 게임 아이템은 그것에 가치를 부여하는 사람들로 인해 수천 만원이 되기도 하니까요.
실제로 전 세계에서 많은 상점들이 현금대신 비트코인을 받고있으며, 작년에는 국내에 비트코인 결제가 가능한 상점이 생기기도 했습니다.
하지만, 비트코인은 문제점도 적지 않습니다.
어느 국가의 통제도 받지 않기 때문에 돈세탁,탈세, 범죄수익 은닉 등에 악용될 여지가 있다는 점, 분실이나 사고 시 책임을 지는 기관이 없다는 점,한국은행에서는 비트코인을 정식 화폐로 인정하지 않는다는 성명을 냈다는 점 등.
무엇보다 비트코인 같은 방식의 통화가 여러 개 더 있고, 모두 가치(시세)가 안정적이지 않아 투자의 대상으로는 상당히 위험하다는 점은 꼭 기억해둘 필요가 있습니다.