Zelcore
Z
Zelcore TeamMulti-Asset Crypto Wallet & Web3 Ecosystem

멀티체인 커스터디 문제 — 하나의 시드, 여러 원장

7분 분량
멀티체인 커스터디 문제 — 하나의 시드, 여러 원장

종이 한 장에 열두 개 또는 스물네 개의 단어를 적어 백업한 뒤, 암호화폐가 안전하다고 안심합니다. 하지만 그 종이는 하나의 계정만 보호하는 것이 아닙니다. 지갑이 지원하는 모든 블록체인의 모든 계정을 보호합니다. Zelcore에서는 80개가 넘는 체인을 동시에 보호한다는 뜻입니다. 이것이 왜 사실인지, 셀프 커스터디를 결정할 때 어떤 의미인지 정확히 이해하는 것이 셀프 커스터디 보안의 모든 것을 뒷받침하는 토대입니다.

시드 구문이 방대한 키 집합을 인코딩하는 방식

시드 구문은 무작위 단어처럼 보이지만, 원시 엔트로피를 정확하게 인코딩한 것입니다. 형식을 표준화한 Bitcoin 개선 제안인 BIP-39는 정확히 2,048개의 영어 단어로 구성된 단어 목록을 정의합니다. 각 단어는 11비트의 정보를 인코딩하므로 장식용 단어는 없습니다. 구문의 모든 단어가 구체적인 데이터를 담고 있습니다. 12단어 구문은 128비트의 엔트로피를, 24단어 구문은 256비트를 인코딩합니다.

니모닉 구문 자체가 암호학적 시드는 아닙니다. 지갑은 키를 파생하기 전에 니모닉을 PBKDF2-HMAC-SHA512에 입력해 2,048회 반복 처리합니다. PBKDF2-HMAC-SHA512는 계산 비용이 큰 키 스트레칭 함수입니다. 그 결과로 512비트 이진 값, 즉 실제 시드가 생성됩니다. 이 스트레칭 덕분에 공격자가 일부 단어를 추측하더라도 무차별 대입 공격은 현실적으로 어렵습니다.

중요한 점은 선택 사항인 패스프레이즈(때로는 25번째 단어라고도 함)를 추가하면 PBKDF2 함수가 이를 반영해 완전히 다른 512비트 시드를 생성한다는 것입니다. 같은 열두 단어를 사용해도 패스프레이즈가 다르면 완전히 별개의 지갑이 열립니다. 두 지갑 사이에는 아무런 연관성이 없습니다. 패스프레이즈를 잊으면 해당 자금은 영구적으로 사라집니다.

파생 트리: 하나의 시드로 무한한 계정 생성

512비트 시드는 BIP-32로 정의된 계층적 결정론적(HD) 지갑 트리의 루트입니다. 지갑은 시드 바이트를 HMAC-SHA512에 입력하고(키로 문자 그대로 "Bitcoin seed"를 사용), 512비트 출력을 같은 크기의 두 부분으로 나눕니다. 하나는 256비트 마스터 개인 키, 다른 하나는 256비트 마스터 체인 코드입니다. 지갑의 모든 하위 키와 그 하위 키, 주소는 이 두 값으로부터 HMAC-SHA512 연산을 반복해 파생됩니다.

BIP-44는 트리를 탐색하는 방법을 표준화하고, m/purpose'/coin_type'/account'/change/index 형식의 파생 경로를 정의합니다. 각 경로 요소에는 고유한 역할이 있습니다.

아포스트로피는 강화 파생을 나타냅니다. 이는 한 방향으로만 수행되는 연산으로, 손상된 하위 키를 이용해 형제 키나 부모 키를 파생할 수 없도록 수학적으로 막습니다. 따라서 Ethereum 계정 키가 유출되더라도 같은 마스터에서 파생된 Bitcoin 계정 키까지 노출되지는 않습니다.

Zelcore에서는 하나의 시드 구문으로 BTC, ETH, SOL, ADA와 수십 가지 다른 자산을 동시에 관리합니다. 각 자산은 자체 coin_type 하위 트리에 있으며, 모두 동일한 512비트 루트에서 결정론적으로 파생됩니다.

공격이 작동하는 방식: 모든 체인에 걸친 단일 실패 지점

파생 방식이 결정론적이고 표준화되어 있기 때문에 시드 구문을 가진 사람은 누구나 지원되는 모든 체인의 개인 키를 다시 생성할 수 있습니다. 이는 설계상의 결함이 아니라 설계 자체의 특성입니다. 보안 모델은 시드 구문을 다른 사람이 절대 보지 않는다는 전제에 기반합니다.

실제로 그 결과는 심각합니다. 시드 구문이 유출되면 Bitcoin만 노출되는 것이 아닙니다. 공격자는 Ethereum 주소, Solana 주소, Cardano 주소와 다른 모든 자산의 주소를 동시에 파생할 수 있습니다. 누군가 Bitcoin 복구 구문을 촬영하는 순간 Solana 자산도 위험에 노출됩니다. 공격자는 사용자가 SOL을 보유하고 있다는 사실조차 모를 수 있습니다.

시드 구문을 잃어버리면 정반대의 문제가 생깁니다. 체인별 대체 수단도, 계정 복구도, 고객 지원을 통한 상위 단계의 해결 경로도 없습니다. 시드를 생성한 엔트로피는 수학적으로 되돌릴 수 없습니다. 종이를 잃으면 모든 체인을 한꺼번에 잃게 됩니다.

이 때문에 하드웨어 지갑은 보안 요소 내부에서 시드 구문을 생성하고 연결된 컴퓨터에 절대 노출하지 않습니다. 시드는 오프라인에서 생성되며 그 상태로 유지됩니다.

시드에 보존되지 않는 체인별 메타데이터

시드 구문으로 복원하면 개인 키와 표준 파생 경로는 다시 생성되지만, 모든 정보가 보존되는 것은 아닙니다. 시드로 재구성할 수 없는 데이터에는 다음과 같은 유형이 있습니다.

실무적인 권장 사항은 시드 구문뿐 아니라 사용한 지갑 소프트웨어와 파생 경로도 기록해 두는 것입니다. 몇 달 또는 몇 년 뒤에 복구할 때 시드 구문만으로는 필요한 맥락이 충분하지 않을 수 있습니다.

주소 재사용과 크로스체인 신원

BIP-44의 coin_type 구분에 따라 같은 시드에서 파생된 Bitcoin 주소와 Ethereum 주소는 수학적으로 서로 연관이 없습니다. 루트는 공유하지만 공개 키는 공유하지 않습니다. 하지만 Ethereum, BNB Chain, Polygon, Avalanche C-Chain, Base 등 EVM 호환 체인은 모두 coin_type = 60을 공유합니다. 따라서 동일한 0x... 주소가 모든 EVM 체인에 나타납니다.

이는 의도된 동작이지만, 체인 간 신원이 연결되는 결과를 낳습니다. Ethereum 주소를 아는 사람은 같은 주소를 사용해 모든 EVM 체인에서의 활동을 조회할 수 있습니다. 프라이버시를 중시한다면 자산을 통합하기 전에 이 점을 이해해야 합니다.

Bitcoin의 UTXO 모델에서는 전통적으로 거래마다 새 주소를 생성하도록 권장하며, HD 지갑은 이를 자동으로 처리합니다. Ethereum의 계정 모델에서는 주소를 바꾸는 일이 드뭅니다. 대부분의 사용자는 계정마다 하나의 주소를 계속 사용합니다. 여러 거래에서 Bitcoin 주소를 재사용하면 입력을 동일한 소유자와 연결하기 쉬워져 프라이버시가 약해집니다.

고액 자산을 보관한다면 시드별로 자산을 분리하는 방안을 고려하세요. 위험도가 높은 거래용 시드와 장기 보유용 시드를 따로 사용하거나, 큰 포지션은 인터넷 연결 기기에 한 번도 연결한 적 없는 에어갭 기기에 보관할 수 있습니다.

단일 실패 지점 방어하기: 자산을 보호하는 방법

시드 구문은 가장 강력한 복구 수단인 동시에 가장 위험한 단일 실패 지점입니다. 다음과 같은 구체적인 방법으로 보호하세요.

  1. 종이가 아닌 금속에 기록하세요. 스테인리스강이나 티타늄 백업 플레이트는 화재와 침수에도 견딥니다. 종이는 그렇지 않습니다.
  2. 절대 디지털화하지 마세요. 스크린샷, 클라우드 메모, 비밀번호 관리자, 직접 입력한 사본을 만들지 마세요. 시드 구문이 네트워크에 연결된 기기에 한 번이라도 입력되면 공격 표면이 크게 넓어집니다.
  3. 상당한 금액을 입금하기 전에 복구를 확인하세요. 새 기기에서 시드 구문만 사용해 복구하고, 정상적으로 작동하며 예상한 주소가 생성되는지 확인하세요.
  4. Shamir 비밀 공유(SLIP-39)를 고려하세요. SLIP-39는 시드를 N개의 조각으로 나누고, 그중 M개만으로 복원할 수 있게 하는 표준입니다. 이렇게 하면 집의 금고, 신뢰하는 사람, 은행 금고에 각각 조각을 보관하는 등 여러 장소에 분산할 수 있으며, 어느 한곳에도 전체 비밀 정보가 모이지 않습니다.
  5. 암호 구문의 장단점을 이해하세요. 강력한 암호 구문(25번째 단어)을 설정하면 그럴듯한 부인 가능성을 확보할 수 있습니다. 암호 구문이 없는 지갑에는 미끼용 소액만 두고, 실제 자산은 암호 구문을 입력해야만 이용할 수 있게 하는 방식입니다. 위험은 양방향으로 작용합니다. 암호 구문을 잊으면 시드를 잃어버린 것처럼 영구적으로 자산에 접근할 수 없게 됩니다.

Zelcore에서 여러 체인에 걸쳐 자산을 보유한 암호화폐 지갑 사용자라면 마지막 항목이 특히 중요합니다. 가장 익숙한 체인 하나만 확인하지 말고, 실제로 사용하는 모든 체인을 대상으로 복구를 한 번씩 테스트해야 합니다.

핵심 요점


더 읽어 보기

“내 키가 아니면 내 코인도 아니다” — 거래소가 실제로 보유하는 것

“내 키가 아니면 내 코인도 아니다” — 거래소가 실제로 보유하는 것

거래소 잔액에 표시되는 채무 증서와 온체인에서 실제로 소유하는 자산의 차이를 설명하고, FTX와 Mt. Gox의 구체적인 실패 사례를 통해 ‘수탁형’이 실제로 어떤 의미인지 보여줍니다.

5분 분량
시드 구문: 모든 계정의 마스터 키

시드 구문 이해하기: 작동 방식, 보관 방법, 복구할 수 없는 항목

시드 구문에 관한 완벽한 안내서입니다. BIP-39가 시드 구문을 인코딩하는 방식, BIP-32/44가 각 체인에서 모든 키를 파생하는 방식, 안전한 보관 방법, 복구 가능한 항목과 불가능한 항목, 그리고 복원할 때만 드러나는 실패 유형을 설명합니다.

10분 분량
25번째 단어: 암호 구문으로 보안을 한층 강화하는 방법

25번째 단어: 암호 구문으로 보안을 한층 강화하는 방법

BIP-39 암호 구문으로 완전히 분리된 숨겨진 지갑을 만드는 방법, 시드 구문 도난에 대한 가장 강력한 방어책인 이유, 치명적인 실패 상황, 그리고 위험을 감수할 가치가 있는 경우를 알아봅니다.

6분 분량

뉴스레터 구독하기

한 달에 한 번 반가운 소식을 보내 드립니다. 스팸 없이 Zelcore의 최신 소식만 전합니다.

뉴스레터 구독하기