
브리지가 계속 털리는 이유, 그리고 브리지된 토큰의 정체
2021년과 2022년의 상당 기간 동안, 크로스체인 브리지는 암호화폐 세계 전체에서 가장 꾸준히 털린 대상이었습니다. 거래소도 아니고, 지갑도 아니고, 스마트 컨트랙트 일반도 아닌 — 브리지였습니다.
Ronin은 약 6억 2500만 달러를 잃었습니다. Poly Network는 6억 달러 넘게 잃었습니다. Wormhole은 3억 2000만 달러가량. Nomad는 2억 달러에 가깝게. 네 건에서 15억 달러가 넘고, 목록은 넷보다 깁니다.
그중 어느 것도 비트코인이나 이더리움, 또는 어떤 기반 체인의 실패가 아니었습니다. 왜 그런지 이해하는 것이 브리지에 관해 배울 수 있는 가장 쓸모 있는 일입니다. 브리지를 쓸 때 당신이 정확히 무엇을 믿고 있는지를 알려주기 때문입니다.
체인끼리는 대화할 수 없다
뿌리에 있는 문제는 단순한데도 자주 건너뛰어집니다. 비트코인은 이더리움이 존재한다는 사실조차 모릅니다. 각 체인은 자기 거래만 검증하고, 다른 체인의 상태를 관찰할 장치가 전혀 없습니다. 한쪽이 다른 쪽에서 무슨 일이 있었는지 알아낼 내장된 방법은 없습니다.
그러니 "BTC를 이더리움으로 보낸다"는 말 그대로는 불가능합니다. 당신의 비트코인은 비트코인을 떠날 수 없습니다.
실제로 벌어지는 일은 대체입니다. 당신은 진짜 BTC를 브리지가 통제하는 주소로 보냅니다. 브리지가 그것을 알아채고, 이더리움 쪽의 무언가가 그 BTC를 대표하는 토큰을 당신에게 발행합니다. 나가고 싶어지면 토큰을 태우고, 브리지는 원본을 풀어줍니다.
결정적인 귀결은 이렇습니다. 브리지된 토큰은 그 자산이 아닙니다. 브리지를 운영하는 자가 보관하는, 그 자산 더미에 대한 청구권입니다. 그 값어치는 전적으로 그 더미가 여태 거기 있고 운영자가 여전히 상환에 응한다는 데 놓여 있습니다. 더미가 비워지면 당신의 래핑된 토큰은 아무것도 아닌 것에 대한 영수증입니다 — 위의 사고마다 보유자들이 알아낸 것이 정확히 그것이었습니다.
입금이 있었다고 누군가는 판정해야 한다
어느 체인도 다른 체인을 관찰할 수 없으니, 제삼자가 체인 A를 지켜보고 체인 B에게 입금이 있었다고 증언해야 합니다. 그 증언 장치가 바로 브리지이고, 모든 돈이 사라지는 곳도 거기입니다.
설계는 얼마나 믿어야 하는지에 따라 갈립니다.
멀티시그 또는 검증자 집합 — 정족수가 반출을 승인하는 고정된 서명자 무리. 단순하고 빠르며, 자금을 움직일 수 있는 최소한의 키 개수만큼만 강합니다.
낙관적 모형 — 일정 기간 안에 이의가 제기되지 않으면 메시지를 유효한 것으로 봅니다. 값싸지만, 누군가 정말로 지켜보고 있어야 하고 이의 제기 논리가 옳아야 합니다.
경량 클라이언트와 증명 — 목적지 체인이 출발지 체인 상태에 대한 암호학적 증명을 검증합니다. 가장 튼튼하고 가장 비싼 방식이며, 그래서 마땅히 그래야 할 만큼 흔하지 않습니다.
나머지는 전부 변형입니다. 중요한 것은, 거의 모든 경우에 자금 더미와 공격자 사이를 가로막는 것이 작은 당사자 무리이거나 단 하나의 검증 함수라는 사실입니다.
네 번의 실패, 그리고 각각이 가르치는 것
Ronin — 뚫린 것은 코드가 아니라 키였다. 이 브리지는 아홉 검증자 집합을 썼고, 출금 승인에는 다섯이 필요했습니다. 공격자는 표적 피싱으로 네 개의 키를 얻고, 다섯 번째는 예전에 서명 권한을 받고 한 번도 회수되지 않은 제삼자를 거쳐 손에 넣었습니다. 아홉 중 다섯, 정족수 충족, 자금 반출. 암호학적으로는 아무것도 깨지지 않았습니다. 서명 검사는 완벽하게 작동했습니다 — 다만 공격자의 서명을 검증했을 뿐입니다.
교훈은 "멀티시그가 나쁘다"가 아닙니다. 정족수는 그 서명자들이 서로 독립적인 만큼만 의미가 있다는 것입니다. 한 회사 안의 키 넷에 묵은 권한 하나를 더한 것은 다섯-of-아홉이 아니라, 옷을 갈아입은 하나-of-둘에 가깝습니다.
Poly Network — 컨트랙트가 제 문지기를 갈아치우도록 설득당했다. 공격자는 크로스체인 호출 경로를 찾아내, 어떤 메시지가 정당한지를 정하는 keeper 역할을 자신이 통제하는 주소로 바꿔 놓았습니다. 그 뒤로 모든 부정한 출금은, 컨트랙트가 보기에는 적법하게 승인된 것이었습니다.
교훈: 브리지에서 가장 위험한 함수는 돈을 옮기는 함수인 경우가 드뭅니다. 누가 그렇게 해도 되는지를 정하는 함수입니다.
Wormhole — 서명 검사 자체에 결함이 있었다. 검증 루틴이 위조된 수호자 서명 묶음을 받아들이도록 속을 수 있었고, 그 덕에 공격자는 이더리움 쪽에서 아무 담보도 없는 wETH 12만 개를 솔라나에서 찍어냈습니다.
교훈: 올바른 검증기가 없다면 "서명으로 검증됨"은 아무 뜻도 없습니다. 암호학은 멀쩡했고, 그 둘레의 코드가 아니었습니다.
Nomad — 설정 변경 하나가 모두에게 문을 열어줬다. 정례 업그레이드가 신뢰 루트를 0 값으로 남겼고, 그 효과로 사실상 어떤 메시지든 증명된 것처럼 보이게 됐습니다. 그 악용에는 특별한 기술이 필요 없었습니다. 사람들은 첫 공격자의 거래를 복사하고, 자기 주소로 바꿔 넣고, 되풀이했습니다. 집단적인 퍼가기가 된 것이죠.
교훈, 그리고 이건 불편한 쪽입니다: 이것은 기묘한 공격이 아니었습니다. 배포 실수였습니다. 브리지 손실의 대부분은 패배한 암호학보다 엉망이 된 운영에 더 가깝습니다.
이것이 당신에게 뜻하는 바
브리지된 자산은 체인의 위험이 아니라 브리지의 위험을 집니다. 다른 체인에서 래핑된 BTC를 들고 있는 것은 BTC를 들고 있는 것이 아닙니다. 그 브리지에서 가장 약한 부품이 무엇이든 그것으로 담보된 청구권을 들고 있는 것입니다. 그래도 완전히 받아들일 만할 수 있습니다 — 다만 그것은 가정이 아니라 결정이어야 합니다.
대안이 있을 때는 브리지를 쓰지 않는 쪽을 택하십시오. 목적지 체인에서 그 자산을 곧바로 살 수 있거나, 중앙화 거래소를 건너는 지점으로 쓸 수 있다면, 브리지 위험을 다른 — 그리고 대개 더 잘 이해된 — 위험과 맞바꾼 것입니다. 어느 쪽도 무위험은 아닙니다. 다만 다른 방식으로 무너질 뿐이고, 거래소의 실패 양상은 적어도 잘 정리되어 있습니다.
가치를 브리지된 형태로 세워두지 마십시오. 브리지 위험은 시간과 함께 쌓입니다. 건너가서 할 일을 하고 건너오면 잠깐 노출됩니다. 래핑된 자산을 일 년 들고 있으면 일 년 노출됩니다.
브리지는 인터페이스가 아니라 신뢰 모형으로 판단하십시오. 몇 명의 서명자가 자금을 움직일 수 있습니까? 그들은 독립된 조직입니까, 아니면 한 팀입니까? 코드는 감사받았습니까 — 그리고 더 말해주는 것으로, 시간과 물량을 견뎌냈습니까? 매끈한 화면은 아무것도 알려주지 않습니다.
신뢰에 맞춰 금액을 정하십시오. 단순한 규칙은, 운영자가 사라져도 감당할 수 있는 액수를 넘겨 브리지하지 않는 것입니다. 최악의 경우 그 둘은 같은 일이니까요.
SSP는 어디에 서 있나
SSP는 EVM 체인 사이의 자산 이동을 지원하며, 그것이 무엇을 지키고 무엇을 지키지 못하는지는 정확히 말해둘 값어치가 있습니다.
우리의 2-of-2는 당신의 키와 승인을 지킵니다. 두 기기가 모두 서명하지 않으면 누구도 브리지 거래를 시작할 수 없고, 각 기기에서 무엇을 승인하는지 보게 됩니다. 그 성질은 온전히 유지됩니다.
할 수 없는 일은 브리지 자체를 안전하게 만드는 것입니다. 당신의 자산이 브리지 컨트랙트에 들어간 순간부터, 그것을 다스리는 것은 그 컨트랙트의 규칙과 그 운영자의 키 관리이지 당신의 멀티시그가 아닙니다. 두 기기 승인은 누군가 허락 없이 당신의 자금을 옮기는 데 맞선 훌륭한 보호입니다. 당신이 스스로 의도해서 보낸 곳에서 자금을 빼앗기는 데에는 아무런 보호도 되지 못합니다.
이것은 공학으로 우회할 수 있는 한계가 아니며, 아닌 척하는 것은 정직하지 못한 일입니다. 브리지는 암호화폐에서 정직한 답이 "안전은 거의 전적으로 다른 누군가에게 달려 있다"인 몇 안 되는 지점이고, 옳은 대응은 건너기 전에 그 누군가가 누구인지 꼼꼼히 들여다보는 것입니다.


