콜드 스토리지와 멀티시그 지갑: 암호화폐 거래소가 수십억 달러를 지키는 방법
목차
- 2022년 한 해에만 38억 달러가 도난당했습니다. 대부분 예방할 수 있었습니다.
- 콜드/핫/웜 지갑 아키텍처(일명 95/5 규칙)
- 멀티시그 보안: 단일 장애 지점 제거하기
- API 보안: 대부분의 거래소가 활짝 열어 두는 정문
- DDoS 방어: 훔칠 수 없으면 파괴하려 합니다
- 내부 보안 통제: 가장 큰 위협은 사원증을 달고 있습니다
- KYC/AML: 합법성까지 지켜 주는 보안
- 인시던트 대응: 절대 필요 없기를 바라는 계획
- 거래소 운영자를 위한 보안 감사 체크리스트
- Codono의 보안 처리 방식
- 보안 마인드셋
2022년 한 해에만 38억 달러가 도난당했습니다. 대부분 예방할 수 있었습니다.
모든 거래소 운영자가 밤잠을 설쳐야 할 이야기를 해 보겠습니다. 바로 암호화폐 거래소 해킹의 놀라울 정도로 예측 가능한 패턴입니다.
2022년 3월 Ronin Network가 6억 2,500만 달러를 잃었을 때, 근본 원인은 대단한 제로데이 익스플로잇이 아니었습니다. 검증자의 개인 키가 탈취된 것이었습니다. 9명의 검증자 중 5명이 단일 주체에 의해 통제되고 있었고, 공격자는 소셜 엔지니어링으로 브리지를 털 만큼 충분한 키를 손에 넣었습니다. 2014년 Mt. Gox가 85만 BTC를 잃고 붕괴했을 때도 근본적인 문제는 핫 월렛 관리 부실, 멀티시그 통제의 전면 부재, 그리고 내부 감사 추적이 거의 없었다는 점이었습니다. FTX가 무너졌을 때는요? 그건 사실 해킹조차 아니었습니다. 고객 자금에 무제한으로 접근할 수 있는 내부자가 있었고, 그들을 막을 운영 통제는 전혀 없었습니다.
충분히 여러 번 겪고 나면 그 패턴은 뼈아플 만큼 뻔해집니다. 그리고 저희는 충분히 많이 봤습니다. 500개 이상의 거래소가 플랫폼을 구축하고 보안을 갖추는 것을 도운 경험에 비추어 볼 때, 실패 양상은 거의 항상 똑같습니다. 거래소를 무너뜨리는 것은 정교한 국가 단위의 공격이 아닙니다. 지루할 정도로 기본적인 것들입니다. 엉망인 키 관리, 단일 장애 지점, 신급 권한을 가진 관리자 계정, 누군가 스윕을 돌리기 귀찮다는 이유로 적정 수량을 훨씬 넘는 암호화폐가 쌓여 있는 핫 월렛이 바로 그것입니다.
실제로 효과가 있는 것을 말씀드리겠습니다. “군사 등급 암호화”나 “AI 기반 위협 탐지” 같은 마케팅 문구 버전이 아니라 진짜 버전입니다. 좋은 보안 아키텍처는 대단히 화려하지 않으며, 바로 그 점이 그것을 효과적으로 만든다는 사실을 알려 드리는 버전입니다.
콜드/핫/웜 지갑 아키텍처(일명 95/5 규칙)
거래소에 보안 조치를 딱 하나만 적용한다면 이것을 선택하세요. 고객 자금의 95% 이상을 항상 콜드 스토리지에 보관하는 것입니다.
콜드 스토리지는 개인 키가 인터넷에 연결된 기기에 절대 닿지 않는다는 뜻입니다. 단 한 번도요. 키는 오프라인에서 생성되고, 하드웨어 보안 모듈(HSM)이나 에어갭 컴퓨터에 저장되며, 트랜잭션은 물리적으로 격리된 환경에서 서명됩니다. 개인 키가 네트워크에 연결된 기기에 존재하는 순간, 그것은 표적이 됩니다. 콜드 스토리지는 그 공격 표면 전체를 제거합니다.
하지만 콜드 스토리지만으로 거래소를 운영할 수는 없습니다. 사용자는 몇 시간이 아니라 몇 분 안에 암호화폐를 입출금하기를 기대합니다. 여기서 핫 월렛과 웜 월렛 계층이 등장합니다.
핫 월렛은 최전선입니다. 인터넷에 연결되어 있고, 거래소의 출금 시스템과 통합되어 있으며, 일반적인 출금 수요를 처리할 만큼의 암호화폐만 보유합니다. 보통 전체 자금의 2~5%입니다. 소매점의 금전 등록기라고 생각하세요. 거스름돈을 줄 만큼의 지폐는 두되, 하루 매출 전부를 서랍에 넣어 두지는 않습니다.
웜 월렛은 핫과 콜드 사이에 위치합니다. 반(半)연결 상태입니다. 예를 들어 정해진 시간에만 온라인이 되어 핫 월렛을 채워 주는 시스템에 둘 수 있습니다. 웜 월렛은 자금의 5~10%를 보유하며, 일상적인 운영을 위해 콜드 스토리지에 접근할 필요가 없도록 완충 역할을 합니다.
콜드 월렛은 나머지 전부, 즉 대부분인 85~95%를 보유합니다.
스윕은 어떻게 작동하는가
흐름은 이렇습니다. 입금은 입금 주소로 들어오는데, 이 주소는 사실상 임시 핫 월렛입니다. 스윕 프로세스가 주기적으로 이 주소들에서 입금액을 수거하여 통합합니다. 소액은 핫 월렛의 운영 잔고를 유지하기 위해 옮겨지고, 나머지는 전부 콜드 스토리지로 스윕됩니다.
출금 측면에서는 사용자가 출금을 요청하면 핫 월렛에서 지급됩니다. 핫 월렛 잔고가 임계값 아래로 떨어지면 누군가(이상적으로는 두 명이지만, 이 점은 뒤에서 다룹니다) 웜 월렛에서 핫 월렛으로 보충 이체를 승인합니다. 콜드 스토리지는 크고 계획된 이동에만 건드려야 하며, 그런 이동에는 복수의 승인, 물리적 참석, 문서화된 절차가 필요합니다.
실무적인 수치는 거래소 규모에 따라 다릅니다. 일일 거래량이 100만 달러인 소규모 거래소는 핫 월렛에 5만 달러 정도를 둘 수 있습니다. 일일 5,000만 달러를 처리하는 중견 거래소는 50만100만 달러를 핫으로 보유할 수 있습니다. 핵심 지표는 이것입니다. 핫 월렛이 일반적인 출금 수요의 48시간 분량을 감당할 수 있는가? 그렇다면 규모가 적절한 것입니다. 그 이상을 보유하고 있다면 불필요한 위험을 지고 있는 것입니다.
견고한 암호화폐 지갑 인프라는 이 모든 것, 즉 스윕 일정, 임계값 모니터링, 계층 간 자동 리밸런싱을 처리합니다. 하지만 아무리 좋은 소프트웨어도 그것을 감싸는 정책만큼만 좋을 뿐입니다. 여기서 멀티시그 이야기로 넘어갑니다.
멀티시그 보안: 단일 장애 지점 제거하기
멀티시그(다중 서명) 월렛은 트랜잭션을 승인하는 데 하나 이상의 개인 키를 요구합니다. 개념은 단순하지만 보안상의 의미는 엄청납니다.
멀티시그가 없으면 키 하나가 탈취되는 것만으로 전체 손실로 이어집니다. 피싱당한 직원 한 명, 도난당한 하드웨어 월렛 하나, 악의적인 내부자 한 명이면 자금은 사라집니다. 멀티시그는 그 계산을 완전히 바꿉니다. 공격자는 이제 이상적으로 서로 다른 사람이 서로 다른 장소에서 서로 다른 보안 관행으로 보관하는, 독립적인 여러 개의 키를 탈취해야 합니다.
멀티시그의 현대적 후속 기술은 이 아이디어를 한 단계 더 발전시킵니다. 임계값 MPC는 완전한 키 자체를 아예 제거하므로 개별 서명자로부터조차 훔칠 것이 없습니다. Codono Enterprise의 MPC 서명자가 작동하는 방식에서 자세히 다룹니다.
일반적인 멀티시그 구성
2-of-3: 키가 세 개 존재하고, 그중 두 개가 트랜잭션을 승인할 수 있습니다. 거래소 운영을 위한 최소한의 실용적 멀티시그입니다. 일반적으로 CEO/창업자가 키 하나, CTO 또는 보안 책임자가 하나를 보관하고, 나머지 하나는 백업용으로 안전한 금고에 보관합니다. 키 하나가 탈취되더라도 보호하면서, 키 보유자 한 명이 부재 중이어도 운영이 가능합니다.
3-of-5: 키 다섯 개 중 세 개가 필요합니다. 상당한 가치를 보유하는 콜드 스토리지 월렛에 권장하는 구성입니다. 키를 경영진, 이사회 구성원, 심지어 외부 수탁 기관에 분산하세요. 지리적 분산도 중요합니다. 키는 서로 다른 물리적 위치, 이상적으로는 서로 다른 도시나 국가에 있어야 합니다. 다섯 명의 키 보유자 중 세 명이 같은 사무실에서 일한다면, 단 한 번의 물리적 보안 사고로 전체 구성이 물너갈 수 있습니다.
4-of-7: 수억 달러를 보유하는 대형 거래소를 위한 구성입니다. 요구되는 서명이 많을수록 공격은 어려워지지만, 모든 트랜잭션이 운영적으로 복잡해집니다. 이 수준에서는 타임락(서명 후 24~48시간이 지나야 트랜잭션이 실행되어 부정 트랜잭션을 탐지하고 취소할 시간을 확보)과 키 생성 및 보관을 위한 하드웨어 보안 모듈도 함께 도입하게 됩니다.
각 구성이 적합한 경우
총 수탁액이 100만 달러 미만으로 시작하는 단계라면 2-of-3으로 충분합니다. 운영상의 악몽을 만들지 않으면서 의미 있는 보호를 제공합니다. 수탁액이 1,000만 달러를 넘어가면 콜드 스토리지는 3-of-5로 옮기고 웜 월렛은 2-of-3을 유지하세요. 1억 달러 이상이면 지리적 분산, 타임락, 그리고 기관 수탁 파트너십 형태를 갖춘 4-of-7을 검토해야 합니다.
중요한 규칙은 이것입니다. 어떤 단일 개인도 콜드 스토리지에서 일방적으로 자금을 옮길 수 있어서는 안 됩니다. 예외는 없습니다. CEO가 혼자 힘으로 콜드 월렛을 비울 수 있는 구조라면, 그것은 보안 아키텍처가 아닙니다. “CEO가 정직하기를 바라는” 아키텍처일 뿐입니다. FTX가 바로 그런 구조였고, 그 결말이 어땠는지는 모두가 봤습니다.
API 보안: 대부분의 거래소가 활짝 열어 두는 정문
거래소의 API는 세상이 플랫폼과 상호작용하는 통로입니다. 트레이딩 봇, 마켓 메이커, 기관 고객, 모바일 앱 모두 API를 두드립니다. 동시에 API는 어떤 거래소에서도 가장 많이 공격받는 표면으로, 초당 수천 건의 요청을 처리하며 그중 상당수는 24시간 날내 취약점을 탐색하는 자동화된 시스템에서 옵니다.
속도 제한: 첫 번째 방어선
속도 제한(Rate Limiting)은 단순히 남용을 막기 위한 것이 아닙니다. 탈취된 API 키 하나가 몇 초 안에 계좌를 비우지 못하도록 하기 위한 것입니다.
스마트한 속도 제한은 여러 수준에서 작동합니다.
- IP당 제한: 단일 IP 주소에서 오는 요청 수에 상한을 둡니다. 일반 엔드포인트에는 분당 1,200건이 합리적인 기본값입니다. 민감한 작업에는 더 타이트하게 설정합니다.
- 계정당 제한: 인증된 요청에도 상한이 있어야 합니다. 정상적인 트레이딩 봇은 초당 10건의 주문을 낼 수 있습니다. API 키가 갑자기 초당 1,000건의 출금 요청을 본격적으로 내기 시작했다면, 그것은 봇이 아니라 공격입니다.
- 엔드포인트당 제한: 출금 엔드포인트는 시세 데이터 엔드포인트보다 훨씬 낮은 속도 제한을 가져야 합니다. 1분에 출금 요청을 50건 제출해야 할 정당한 이유는 없습니다.
- 단계적 대응: 첫 위반에는 완만한 속도 저하를, 반복 위반에는 일시적 차단을, 지속적인 남용에는 영구 차단과 함께 계정 보안 검토를 적용합니다.
HMAC 서명 인증
주문 제출, 출금, 잔고 조회 등 계정 작업과 관련된 모든 API 요청은 HMAC(Hash-based Message Authentication Code) 서명으로 인증되어야 합니다.
실제 작동 방식은 이렇습니다. 사용자는 API 키(공개 식별자)와 시크릿 키(절대 네트워크로 전송되지 않음)를 가집니다. 요청을 본격적으로 볼 때 클라이언트는 요청 파라미터와 타임스탬프를 시크릿 키로 해싱하여 서명을 만듭니다. 서버는 요청을 받아 자신이 보관한 시크릿 키로 서명을 재생성하고 일치하는지 검증합니다. 타임스탬프가 30초보다 오래되면 거부합니다. 이렇게 하면 누군가 서명된 요청을 가로채 재사용하려는 리플레이 공격을 막을 수 있습니다.
이것은 기본 중의 기본입니다. 거래소 API가 인증 엔드포인트에 HMAC 서명을 요구하지 않는다면 심각한 문제가 있는 것입니다.
IP 화이트리스트
사용자가 자신의 API 키를 특정 IP 주소로 제한할 수 있게 하세요. 알려진 서버 세 대에서 봇을 운영하는 마켓 메이커는 자신의 API 키를 그 세 개의 IP로 잠글 수 있어야 합니다. 누군가 API 키를 훔쳐 다른 IP에서 사용하려 하면 요청이 거부됩니다.
이 기능 하나만으로도 API 키 도난의 대부분이 실제 자금 손실로 이어지는 것을 막을 수 있습니다. 제공하고, 눈에 잘 띄게 만들고, 출금 권한이 있는 API 키에는 필수로 만드는 것도 고려하세요.
거래소 운영 패널은 보안 팀이 API 사용 패턴, 즉 갑작스러운 급증, 비정상적인 지리적 출처, 새로운 IP에서 사용되는 키를 실시간으로 볼 수 있게 해야 합니다. 탐지는 예방만큼이나 중요합니다.
Codono Team
Codono builds enterprise-grade crypto exchange software deployed by 250+ operators across 40+ countries. Our team writes from production experience running spot, derivatives, custody, and compliance at scale.
View all posts by Codono Team →