개인 키를 안전하게 저장하는 것은 어려울 수 있습니다. 이는 일반 사용자에게만 해당되는 것이 아니라 대규모 수탁자에게도 마찬가지입니다. 거래소에 저장된 수천 개의 비트코인은 해커에게 매력적인 표적이 되며, 수백만 달러에 달하는 도난 사건의 끝없는 목록은 이 솔루션과 함께하는 위험을 고통스럽게 증명합니다.
하지만 강탈을 저지하기 위한 기술적 조치가 곧 시행될 수 있습니다. 오늘 비트코인 코어 기여자 브라이언 비숍은 2016년에 처음 제안된 ‘비트코인 금고’에 대한 개편된 제안을 발표했습니다. 영리한 스마트 계약 설정을 통해 금고 사용자는 도난에 대응하여 자금을 회수할 수 있으며, 이는 도난을 처음부터 억제하는 데 도움이 될 것입니다. 더욱이, 이 모든 것은 비트코인 프로토콜에 대한 변경을 요구하지 않습니다.
“이것이 저에게 흥미로운 이유는 — 우리는 여전히 이를 평가하고 테스트해야 합니다 — 이것이 도난으로 인한 손실을 제한할 수 있는 신뢰할 수 있는 방법이 될 수 있다는 점입니다.”라고 비숍은 비트코인 매거진에 말했습니다. “이것이 비트코인 거래소 해킹과 개인 비트코인 저장소의 풍경을 변화시키는 데 큰 도움이 될 수 있다고 생각합니다.”
비트코인 금고의 배경 이야기
비트코인 금고의 개념은 최소한 2016년으로 거슬러 올라갑니다. 그 당시 뮌스터 대학교(말테 뫼저)와 코넬 대학교(이타이 에얄 및 에민 귄 시레르)의 연구자들은 도난이 일시적으로 되돌려질 수 있도록 동전을 잠글 수 있는 솔루션을 제안했습니다.
간단히 말해, 뫼저, 에얄, 시레르의 비트코인 금고는 두 개의 개인 키가 할당된 특별한 비트코인 주소로 설계되었습니다: 하나는 ‘금고 키’이고 다른 하나는 ‘복구 키’입니다. 금고 키는 동전을 사용하는 데 사용되며, 복구 키는 특정 기간 동안 거래를 되돌리는 데 사용할 수 있습니다.
공격자가 금고 키를 훔친 경우, 그들은 돈을 가져갈 수 없습니다. 금고 생성자가 여전히 (복사본의) 복구 키에 접근할 수 있다고 가정하면, 공격자가 동전을 이동하려고 시도한 후 특정 비트코인 주소로 자금을 회수할 수 있는 하루의 시간이 주어집니다.
최악의 경우, 공격자가 금고 키와 복구 키를 모두 훔친 경우에도 자금을 훔칠 수는 없습니다: 이 자금은 무한히 회수될 수 있습니다. 불행히도, 이 경우 금고 생성자는 공격자가 이를 차단할 수 있기 때문에 금고에서 동전을 꺼낼 수 없습니다. 두 사람 모두 자금을 얻지 못합니다.
그럼에도 불구하고 공격자가 큰 보상을 얻을 수 없다는 것은 그들이 동전을 훔치려고 시도하는 것에 대한 강력한 억제책이 될 것이라고 뫼저, 에얄, 시레르는 주장했습니다.
“도난으로부터 도망칠 수 없다는 것을 아는 공격자는 현재 비트코인 공격자들보다 공격할 가능성이 적습니다. 현재 비트코인 공격자들은 해킹 노력이 풍부한 보상을 받을 것이라는 보장이 있습니다.”라고 그들은 썼습니다.
그러나 뫼저, 에얄, 시레르의 솔루션은 큰 단점이 있었습니다: 비트코인 프로토콜에 대한 변경이 필요했습니다. 그들의 금고는 자금 반환을 가능하게 하는 비트코인 코드에 대한 업데이트인 ‘계약’을 중심으로 설계되었습니다. 이러한 합의 수준의 업그레이드를 채택하는 것은 어렵고, 지금까지 이 업데이트는 채택되지 않았습니다.
비숍의 금고: 단계별 설명
비숍의 금고 솔루션의 아이디어는 이전 금고 제안과 기능적 유사성을 공유하지만, 중요한 점은 비트코인 프로토콜에 대한 변경이 필요하지 않다는 것입니다.
작동 방식을 이해하기 위해서는 비숍의 금고 솔루션이 세 단계로 설정되는 방식을 살펴보는 것이 가장 좋습니다.
첫 번째 단계로, 최소 세 개의 거래가 생성되지만 아직 비트코인 네트워크에 방송되지 않습니다.
첫 번째 거래는 ‘금고 거래’라고 불립니다. 금고 거래는 동전을 ‘잠그는’ 방식으로 설정되어 특정 개인 키로만 ‘잠금을 해제’할 수 있습니다.
이 특정 개인 키는 즉시 두 번째 거래를 생성하고 서명하는 데 사용되며, 이 거래는 ‘지연 지출 거래’라고 불립니다. 이 지연 지출 거래를 구성하는 데는 여러 가지 전략이 있습니다. 일반적인 예로, 동전은 ‘정상’ 개인 키로 지출할 수 있지만, 예를 들어 하루가 지난 후에만 가능합니다. 이 정상 개인 키는 금고 생성자가 자신의 ‘핫’ 지갑에서 제어합니다. 또는 동전은 즉시 지출할 수 있지만, 다른 개인 키로만 가능합니다.
이 다른 개인 키는 다시 즉시 세 번째 거래를 생성하고 서명하는 데 사용되며, 이 거래는 ‘재금고 거래’라고 불립니다. 재금고 거래는 동전을 백업 주소나 새로운 금고로 보냅니다.
백업 주소는 여러 가지 방법으로 설정할 수 있지만, 바람직하게는 추가적으로 안전해야 하며, 이는 사용하기 덜 실용적일 수 있습니다. 예를 들어, 그 개인 키는 다른 컴퓨터에서 생성되어 물리적 금고에 저장될 수 있습니다. 또한, 그 키는 서로 다른 위치에 분산된 다중 서명 주소일 수도 있으며, 금고 생성자가 신뢰하는 여러 사람과 공유될 수도 있습니다.
어떤 설정이 선택되든, 이는 새로운 (잠재적으로 더 복잡한) 금고로 구성될 수 있습니다. 그리고 이 새로운 금고는 새로운 금고를 통한 ‘비상 출구’를 갖도록 설계될 수도 있습니다. 그리고 계속해서.
설정 과정의 두 번째 단계에서는 지연 지출 거래와 재금고 거래를 생성하는 데 사용된 개인 키가 완전히 삭제됩니다. 이는 개인 키가 더 이상 도난당할 수 없음을 의미합니다 — 가장 정교한 해커조차도: 더 이상 존재하지 않기 때문입니다. 결과적으로 금고 거래의 동전은 지연 지출 거래로만 잠금을 해제할 수 있습니다. 지연 지출 거래의 동전은 다시 하루 후에 정상 개인 키로 잠금을 해제하거나, 재금고 거래를 통해 백업 주소나 새로운 금고로 보내야 합니다.
설정의 세 번째이자 마지막 단계에서는 금고 거래가 비트코인 네트워크에 방송됩니다. 이제 동전은 금고에 있으며, 금고 생성자는 자신의 지연 지출 거래와 재금고 거래를 개인 키처럼 보호해야 합니다.
금고 생성자가 동전을 지출하고 싶다면, 지연 지출 거래를 방송해야 합니다. 그런 다음, 그들은 자신의 핫 지갑에서 정상 개인 키로 자금을 지출하기 위해 하루를 기다려야 합니다.
“제 제안에서는 사용자가 더 많은 데이터를 저장하고 장기적으로 그 데이터를 사용할 수 있도록 해야 합니다. 그렇지 않으면 금고에 대한 접근을 잃게 됩니다.”라고 비숍은 말했습니다. “하지만 이는 ‘키를 잃으면 동전을 잃는다’는 것과 유사합니다.”
공격
금고 생성자는 여전히 도난당할 수 있는 민감한 데이터를 가지고 있습니다. 여기에는 그의 정상 개인 키와 지연 지출 거래 및 재금고 거래가 포함됩니다. 그러나 해커가 이 모든 것을 손에 넣더라도, 그들은 자금을 지출할 수 없습니다.
이유를 살펴보겠습니다.
공격자가 정상 개인 키만 훔친 경우, 그들은 동원에 접근할 수 없습니다. 왜냐하면 여전히 금고 거래에 잠겨 있기 때문입니다. 금고 거래에서 동전을 꺼내려면 지연 지출 거래가 필요합니다.
그러나 공격자가 정상 개인 키와 지연 지출 거래를 모두 손에 넣더라도, 그들은 동전을 훔칠 수 없습니다 — 금고 생성자가 주의를 기울이고 있다고 가정할 때. (금고 생성자는 그들을 위해 주의를 기울이는 ‘감시탑’ 서비스를 사용할 수도 있습니다.) 공격자가 지연 지출 거래를 방송하면, 그들은 정상 개인 키로 동전을 지출하기 위해 하루를 기다려야 합니다.
그동안 금고 생성자는 재금고 거래를 방송할 수 있으며, 이는 동전을 백업 주소나 새로운 금고로 보냅니다. 공격자가 백업 주소나 새로운 금고의 키를 손상시키지 않았다면, 자금은 다시 안전해집니다 — 비록 지금은 덜 편리한 방식으로 저장될 수 있습니다 (예: 다중 서명 주소처럼).
공격자가 새로운 금고를 손상시킨 경우에도, 그들은 큰 도움이 되지 않을 것입니다. 동일한 사건이 발생하고 금고 생성자는 다시 동전을 백업 주소나 새로운 금고로 보낼 것입니다. 백업 금고의 순서는 금고 생성자가 원하는 만큼 길 수 있으며, 공격자가 모두 손상시키지 못하도록 복잡한 설정을 할 수 있습니다.
공격자가 재금고 거래를 훔친 경우 — 정상 개인 키와 지연 지출 거래와 결합하여 또는 그렇지 않게 — 그들은 자금을 훔칠 수 없습니다. 재금고 거래는 인출을 차단하는 데만 사용될 수 있습니다. 그러나 설정에 따라, 이 경우 공격자는 금고 생성자가 자금을 지출하는 것을 막을 수도 있습니다.
최악의 경우, 모든 금고 생성자의 민감한 데이터가 도난당한 경우, 금고 생성자와 공격자는 서로의 인출 시도를 차단하려고 시도하는 루프에 빠질 수 있습니다. (이는 아래에서 설명할 ‘자기 파괴’ 기능으로 해결될 수 있습니다.)
남아 있는 약점
비숍의 금고 설계는 보안에 있어 큰 진전을 이룰 수 있지만, 여전히 도난이나 손실에 대해 100% 안전하지는 않습니다. 남아 있는 약점 중 일부는 부분적으로 또는 완전히 해결될 수 있지만, 그에 따른 대가가 따릅니다.
아마도 가장 명백한 설계의 대가는 더 많은 백업 금고를 생성하는 것이 더 많은 민감한 데이터를 생성하는 것을 의미한다는 것입니다. 금고 생성자는 더 많은 키와 거래를 보호해야 하며, 아마도 더 많은 장소에서, 일부를 잃을 위험이 증가합니다. 반면, 그들이 더 적은 백업 데이터를 생성하거나 그렇게 많은 장소에 저장하지 않으면, 공격자가 모든 것을 손에 넣을 위험이 증가하여 인출을 차단할 수 있게 됩니다.
“각 백업 금고에 대해 고유한 키를 사용하는 문제는, 이 데이터를 어디에 저장할 것인가입니다? 만약 모두 함께 저장한다면 동일한 키를 사용하는 것과 다를 바가 없습니다.”라고 비숍은 설명했습니다. “하지만 여러 장소에 저장한다면 (고유한 키당 하나씩) 비밀 장소가 부족해질 것입니다.”
이 문제에 대한 비효율적인 해결책으로, 금고 생성자는 금고에 ‘자기 파괴’ 기능을 구축할 수 있습니다. 새로운 백업 금고가 몇 개 생성된 후 — 아마도 3개, 아마도 100개 — 마지막 재금고 거래는 자금을 새로운 금고로 보내지 않습니다. 대신, 동전은 개인 키가 없는 ‘소각 주소’로 전송됩니다. 이는 동전을 영원히 잠그어 금고 생성자, 공격자, 또는 다른 누구도 다시 접근할 수 없게 합니다. 뫼저, 에얄, 시레르에 따르면: 자기 파괴 기능을 구축하는 것은 잠재적인 공격자가 금고를 해킹하려고 시도하는 것에 대한 강력한 억제책이 될 것입니다.
매우 다른 문제는 해커가 정상 개인 키를 훔칠 수 있지만, 금고 생성자가 지연 지출 거래로 금고에서 자금을 꺼낼 때까지 아무것도 할 수 없다는 것입니다. 금고 생성자와 공격자 모두 자금을 지출하기 위해 하루를 기다려야 하지만, 공격자가 이 시간 초과 후 금고 생성자보다 더 빨리 반응하면 돈을 얻을 수 있습니다.
이 문제는 아마도 부분적으로 해결될 수 있습니다. 예를 들어, 금고 생성자는 하루에 금고에서 인출할 수 있는 자금의 비율을 1%로 제한하는 ‘단계적’ 시스템을 설계할 수 있습니다. 만약 1%의 배치가 도난당하면, 금고 생성자는 더 안전한 백업 주소를 사용해야 한다는 것을 알고 있습니다. 또는 정상 개인 키에 비트코인을 ‘미끼’로 자금 조달할 수 있습니다. 만약 그 동전이 도난당하면, 금고 생성자는 또한 백업 주소나 새로운 금고를 사용하여 자금을 꺼내야 한다는 것을 알게 됩니다.
마지막으로, 이 제안은 이제 막 발표되었으며, 동료 검토가 진행 중이라는 점은 주목할 만합니다. 비트코인 매거진은 이 기사를 작성하는 과정에서 마지막 약점을 발견했습니다. 추가적인 잠재적 약점이 여전히 나타날 수 있습니다.
“제안이 동료 검토를 받는 것이 가치가 있습니다.”라고 비숍은 말했습니다. “이는 제안을 더욱 강하게 만들고 문제를 지적합니다.”