수학·컴퓨터

블록체인은 정말 해킹할 수 없나, 51% 공격과 스마트 계약의 허점

블록체인의 기록을 고치기 어렵다는 것은 사실이다. 그러나 해킹할 수 없다는 말은 과장이다. 실제로 일어난 공격들을 통해 블록체인의 약한 고리를 짚어 본다.

Antigravity AI · 2023년 1월 20일 · 읽는 데 4분

빛나는 디지털 블록들이 이어진 사슬 가운데 금이 간 고리 하나
빛나는 디지털 블록들이 이어진 사슬 가운데 금이 간 고리 하나

블록체인은 이미 기록된 내용을 몰래 고치기가 매우 어렵게 설계되어 있다. 각 블록이 앞 블록의 지문과 연결되어 있어서, 과거의 기록 하나를 바꾸면 그 뒤의 모든 블록을 다시 만들어야 하기 때문이다. 그러나 이것이 블록체인을 해킹할 수 없다는 뜻은 아니다. 참여자의 과반을 장악하는 51% 공격, 블록체인 위에서 돌아가는 프로그램의 허점, 그리고 거래소나 개인 지갑처럼 블록체인 바깥의 약한 고리를 노린 공격은 실제로 일어났다.

블록체인의 기록은 왜 고치기 어렵나

블록체인은 거래 기록을 블록이라는 묶음으로 만들어 사슬처럼 잇는다. 각 블록에는 앞 블록의 해시 값이 들어 있다. 해시 값은 데이터의 지문 같은 것으로, 내용이 한 글자만 바뀌어도 완전히 다른 값이 된다. 그래서 과거 블록의 내용을 바꾸면 그 블록의 해시가 바뀌고, 그것을 담고 있던 다음 블록과의 연결이 끊어진다.

작업 증명 방식의 블록체인에서는 새 블록을 만들 때마다 어려운 계산을 해야 한다. 과거 기록을 고치려면 그 블록부터 지금까지의 모든 블록을 다시 계산해야 하고, 그동안 다른 참여자들은 계속 새 블록을 쌓아 간다. 따라잡기가 사실상 불가능하다. 이것이 블록체인이 위변조에 강하다고 말하는 이유다.

사슬처럼 이어진 블록들과 각 블록을 잇는 지문 값을 그린 도식

51% 공격은 어떻게 일어나나

앞의 설명에는 전제가 하나 있다. 정직한 참여자들이 전체 계산 능력의 과반을 가지고 있어야 한다는 것이다. 만약 한 세력이 계산 능력의 절반 이상을 차지하면, 다른 참여자들보다 빠르게 블록을 쌓을 수 있다. 이들은 몰래 다른 갈래의 사슬을 만들어 키운 뒤, 그것이 더 길어지면 공개해 기존 기록을 뒤집을 수 있다.

이것을 이용하면 같은 돈을 두 번 쓰는 이중 지불이 가능해진다. 거래소에 코인을 보내 다른 자산으로 바꾼 뒤, 몰래 키운 사슬로 그 송금 기록을 지워 버리는 식이다. 비트코인처럼 참여자가 아주 많은 블록체인에서는 과반의 계산 능력을 모으는 데 천문학적인 비용이 들어 현실적으로 어렵다. 그러나 참여자가 적은 작은 블록체인에서는 실제로 이런 공격이 여러 차례 성공했다.

공격 대상 방식 블록체인 자체의 결함인가
참여자가 적은 블록체인 51% 공격으로 기록 뒤집기 설계상의 전제가 깨진 것
스마트 계약 프로그램의 버그를 악용 블록체인 위 코드의 결함
거래소, 개인 지갑 서버 해킹, 열쇠 탈취 블록체인 바깥의 결함

스마트 계약은 왜 위험할 수 있나

일부 블록체인에서는 거래 기록뿐 아니라 프로그램도 올려 자동으로 실행할 수 있다. 이것을 스마트 계약이라 부른다. 조건이 맞으면 사람의 개입 없이 돈이 오가도록 만든 것이다.

문제는 이 프로그램도 사람이 쓴 코드라는 점이다. 코드에 버그가 있으면 누군가 그 허점을 이용해 계약에 묶인 자산을 빼낼 수 있다. 게다가 블록체인에 한 번 올라간 코드는 고치기 어렵고, 실행된 거래는 되돌리기 어렵다. 블록체인의 장점인 '고칠 수 없음'이 버그가 있을 때는 오히려 약점이 된다. 실제로 스마트 계약의 허점 때문에 큰 금액이 빠져나간 사건들이 있었다.

노트북 화면에 코드와 경고 표시가 떠 있는 장면

가장 흔한 피해는 어디서 생기나

뉴스에 나오는 대규모 암호화폐 도난 사건 가운데 상당수는 블록체인 자체가 아니라 그 바깥에서 일어난다. 거래소는 수많은 이용자의 자산을 한곳에 모아 관리하기 때문에 해커의 표적이 된다. 개인은 지갑의 비밀 열쇠를 피싱 사이트에 입력하거나 악성 프로그램에 빼앗기기도 한다. 블록체인은 비밀 열쇠를 가진 사람을 주인으로 인정할 뿐이라, 열쇠를 도둑맞으면 도둑이 주인이 된다.

남은 과제

블록체인의 보안은 수학과 암호에만 달려 있지 않다. 참여자가 충분히 많고 고르게 흩어져 있는지, 그 위에서 돌아가는 프로그램이 검증되었는지, 사용자가 열쇠를 안전하게 지키는지가 함께 맞물려야 한다. 스마트 계약의 코드를 수학적으로 검증하는 방법, 열쇠를 잃어도 자산을 되찾을 수 있게 하는 방법이 연구되고 있지만, 편리함과 안전함을 함께 얻는 일은 여전히 숙제다.

이어서 읽기