Electrum 지갑 복구를 위한 완벽한 가이드

Electrum은 2011년 11월부터 존재해 왔으며, 암호화폐 업계의 기준으로는 꽤 오래된 프로젝트입니다. 이러한 오랜 역사는 복구 측면에서 보면 축복이자 저주입니다. 축복인 이유는 지갑 형식이 잘 문서화되어 있고, 코드베이스가 실제로 읽을 수 있는 오픈소스 파이썬이기 때문입니다. 저주인 이유는 15년 동안의 버전 변경으로 인해 누군가의 하드 드라이브에 저장된 지갑 파일이 6가지 형식 중 어느 것이든 될 수 있으며, 각 형식은 서로 다른 암호화 방식, 파생 경로, 시드 유형을 가지고 있기 때문입니다. 저는 2012년으로 거슬러 올라가는 일렉트럼 지갑을 복구해 본 적이 있는데, 시대마다 저마다의 골칫거리가 있었습니다.
이 가이드는 지갑 파일의 내부 구조부터 각 버전의 암호화 방식, 그리고 “잔액이 0으로 표시된다”는 문제가 비트코인 관련 지원 요청 중 가장 흔한 원인이 되는 ‘파생 경로’의 난제까지, Electrum 지갑 복구에 관한 기술적 측면을 전반적으로 다룹니다.
Electrum이 키를 저장하는 방식
Electrum은 지갑을 하나의 독립된 파일로 저장합니다. 기본적으로 이 파일의 이름은 default_wallet (확장자 없음)이며, 사용 중인 운영 체제에 따라 예상 가능한 위치에 저장됩니다:
Windows: C:\Users\<USER>\AppData\Roaming\Electrum\wallets\
macOS: ~/Library/Application Support/Electrum/wallets/
리눅스: ~/.electrum/wallets/
지갑 파일은 JSON 형식입니다. 사람이 읽기 쉽고, 체계적이며, 놀라울 정도로 깔끔합니다. 암호화되지 않은 지갑 파일을 텍스트 편집기로 열어보면 키스토어, 주소, 거래 내역, 라벨, 연락처 등 모든 데이터 모델을 확인할 수 있습니다. keystore ‘대상’은 회복의 핵심입니다.
그 seed 해당 필드 – 지갑이 암호화되지 않았거나 해독할 수 있다면, 필요한 모든 정보를 확보한 셈입니다. xprv (확장된 개인 키)는 지갑이 지금까지 사용한 모든 자식 키를 도출할 수 있습니다. seed_type 어떤 유도 방식을 사용했는지 알려주며, derivation 루트 경로를 표시합니다.
구버전 지갑(2.0 이전)의 경우 구조가 다릅니다. 대신 bip32, 보시면 알겠지만 type: "old" ~와 함께 mpk (마스터 공개 키) 필드입니다. 이 필드들은 BIP32와 BIP39보다 먼저 도입된 Electrum의 독자적인 키 도출 방식을 사용합니다. 이에 대한 자세한 내용은 아래에서 설명합니다.
(시드에서 파생된 것이 아닌) 가져온 개인 키가 포함된 지갑 파일은 type: "imported" 키스토어에 저장되며, 해당 키들은 직접 저장됩니다. 이러한 지갑들은 시드 문구로는 복구할 수 없습니다 – 지갑 파일 자체가 유일한 백업 수단입니다. 이 파일을 잃어버리면 키도 함께 사라집니다.
일렉트럼(Electrum)의 두 가지 암호화 계층
Electrum에는 두 개의 독립적인 암호화 계층이 있으며, 이 두 가지를 혼동하는 것은 제가 접하는 가장 흔한 복구 실수 중 하나입니다.
1단계: 키스토어 암호화 (개인 키 및 시드)
사용자의 개인 키와 시드 문구는 다음을 사용하여 암호화됩니다. AES-256-CBC. 암호화 키는 사용자의 비밀번호를 SHA-256 두 라운드 – 그게 전부입니다. MetaMask나 다른 지갑들처럼 수십만 번의 반복 연산을 거치는 PBKDF2도 아니고, scrypt도 아닙니다. 그저 SHA256(SHA256(password)). 이것이 바로 Electrum 지갑이 다른 거의 모든 최신 지갑보다 무차별 대입 공격에 훨씬 더 취약한 이유입니다. 성능이 그다지 뛰어나지 않은 GPU 하드웨어에서도 Hashcat 벤치마크를 통해 Electrum 지갑에 대해 초당 수십만 개의 비밀번호 후보를 테스트할 수 있습니다.
이 계층은 지갑 파일 내의 시드 키와 개인 키를 보호합니다. 거래에 서명하기 위해 비밀번호를 입력하면, Electrum은 메모리에서 개인 키를 잠시 해독하여 서명한 후, 해독된 키를 삭제합니다. 디스크에 저장된 지갑 파일은 항상 키를 암호화된 상태로 유지합니다.
2단계: 전체 파일 암호화 (ECIES)
버전 2.8(2016년경 출시)부터 Electrum은 기본적으로 전체 파일 암호화 기능을 지원합니다. 이 기능은 ECIES(Elliptic Curve Integrated Encryption Scheme) 를 사용하는데, 이는 사용자의 비밀번호에서 파생된 공개 키를 이용해 지갑 파일 자체를 암호화하는 비대칭 암호화 방식입니다. 암호화된 파일은 JSON 형식이 아닌 난해한 이진 데이터처럼 보이며, 파일을 열기 위해서는 비밀번호가 반드시 필요합니다.
가장 큰 차이점은 다음과 같습니다. 전체 파일 암호화가 활성화된 상태에서는 올바른 비밀번호가 없으면 지갑의 구조를 전혀 확인할 수 없습니다. 내부 내용을 들여다보아 주소, 거래 내역, 심지어 지갑 유형조차 확인할 수 없습니다. 전체 JSON 페이로드가 ECIES로 암호화되어 있습니다. 전체 파일 암호화가 비활성화된 경우(또는 이전 버전에서 해당 기능이 지원되지 않았던 경우), JSON은 읽을 수 있지만 xprv 그리고 seed 필드에는 AES로 암호화된 암호문이 포함되어 있습니다.
이러한 차이는 복구 과정에서 중요한데, 이는 공격 표면을 변화시키기 때문입니다. 키스토어만 암호화한 경우, 무차별 대입 공격을 시도하기 전에도 지갑 유형을 파악하고, 주소를 확인하며, 올바른 파일인지 확인할 수 있습니다. 반면 전체 파일 암호화의 경우, 비밀번호를 해독하기 전까지는 아무것도 알 수 없는 상태입니다.
Electrum의 시드 시스템 – BIP39가 아니며, 이는 매우 중요한 차이점입니다
바로 여기서 복구 관련 문제가 대부분 시작됩니다. Electrum은 BIP39와 호환되지 않는 독자적인 시드 형식을 사용합니다. 만약 누군가 Electrum 시드를 BIP39 전용 지갑(Exodus, Trust Wallet, 대부분의 하드웨어 지갑 등)에 가져오려고 하면, 시드가 아예 거부되거나 완전히 잘못된 주소가 생성될 것입니다.
이 차이는 기술적인 것이지만 중요합니다. BIP39는 사용자의 니모닉 단어를 고정된 단어 목록을 사용하여 엔트로피로 매핑하고, 체크섬을 추가한 다음, HMAC-SHA512를 사용하여 “mnemonic”이라는 패스프레이즈와 선택적 확장 단어를 조합해 2048회 반복으로 PBKDF2를 실행합니다. Electrum 2.0+는 겉보기에는 비슷해 보이지만 근본적으로 다른 방식을 사용합니다. 즉 , “electrum”이라는 패스프레이즈와 선택적 확장 단어를 사용하여 PBKDF2를 2048회 반복합니다. 반복 횟수와 HMAC-SHA512는 동일하지만, 솔트 문자열은 완전히 다릅니다. 결과적으로 생성되는 마스터 키는 동일한 12개의 단어를 사용하더라도 완전히 다릅니다.
이전 버전의 Electrum(대략 이슈 #4566 무렵)에는 암호구의 유니코드 정규화와 관련된 버그가 있었습니다. 구체적으로, Electrum은 BIP39 암호구에서 공백을 과도하게 제거했는데, 특히 연속된 두 개의 공백 중 하나를 제거하는 경우도 있었습니다. 만약 사용자가 특이한 공백 배열로 암호구를 설정했다면, 이 버그로 인해 정규화 문제가 수정된 최신 버전에서 지갑을 복구할 수 없게 될 수 있었습니다.
Electrum 시드에는 시드 자체에 버전 번호도 포함되어 있습니다. 이 버전은 시드 문구에 해시 연산을 적용한 후, 첫 번째 비트들이 알려진 접두사와 일치하는지 확인하여 도출됩니다. 이 버전은 어떤 도출 방식을 사용할지 나타냅니다:
- 초기 버전
01— 표준 지갑 (구형, 세그윗 이전) - 초기 버전
100— 세그윗 지갑 (네이티브 세그윗, bech32) - 초기 버전
101— 2단계 인증 지갑 (TrustedCoin 공동 서명자 포함) - 초기 버전
102— 세그윗 멀티시그
사실 이건 꽤 영리한 설계입니다. BIP39를 괴롭혀 온 “어떤 도출 경로를 써야 할까?” 하는 추측 게임을 없애주니까요. 하지만 이는 Electrum 시드가 폐쇄적인 환경이라는 뜻이기도 합니다. 이 시드들은 Electrum 내에서만 작동하며(혹은 Electrum 시드 형식을 명시적으로 지원하는 소프트웨어, 예를 들어 Electrum 모드를 갖춘 Ian Coleman의 BIP39 도구 같은 곳에서만 작동합니다).
세 가지 시드 시대
2.0 이전 버전의 시드(Electrum 1.x, “구” 형식): 이 방식은 양방향 인코딩을 사용했는데, 시드 문구를 특정 엔트로피 값으로 다시 변환할 수 있었고 그 반대의 경우도 가능했습니다. 이를 위해서는 정확하고 고정된 단어 목록이 필요했습니다. 이 도출 방식은 Electrum 고유의 방식(BIP32가 아님)으로, 다음과 같은 경로를 사용했습니다. m/0/k 주소를 수신하기 위해 및 m/1/k 변경 주소용입니다. 이러한 지갑은 다음으로 식별할 수 있습니다. "seed_type": "old" 지갑 파일에 남아 있는 경우입니다. 요즘은 보기 드물지만, 2012~2013년경에 비트코인 지갑을 개설해 놓고는 잊어버린 사람들이 여전히 이런 지갑을 가지고 있는 것을 종종 볼 수 있습니다.
Electrum 2.x 시드 파일 (2014년 이후): Electrum 시드 버전 시스템을 통해 BIP32 HD 지갑 구조를 도입했습니다. 표준 지갑은 파생 경로를 사용합니다. m/0h 수신 주소가 m/0h/0/k 그리고 다음에서 환승하세요 m/0h/1/k. 참고: 이는 BIP44 방식이 아닙니다 (m/44'/0'/0'). 이러한 비표준적인 도출 방식은 끊임없이 혼란을 야기한다.
Electrum 3.x+ 세그윗 시드: SegWit 지원이 도입되면서, Electrum은 네이티브 SegWit 지갑을 위한 새로운 시드 버전을 추가했습니다. 이 시드들은 파생 경로를 사용합니다 m/0h 마찬가지로 – 루트 경로는 동일하지만, 시드 버전 접두사를 통해 지갑이 레거시(1…) 주소 대신 bech32(bc1…) 주소를 생성하도록 보장합니다.
도출 경로와 “빈 지갑” 문제
파생 경로는 시드를 복원했을 때 잔액이 0으로 표시되는 가장 흔한 원인입니다. 경로의 모든 구성 요소가 중요하며, 단 하나의 숫자만 틀려도 키와 주소가 완전히 달라집니다.
다음은 Electrum의 파생 경로 현황입니다:
Electrum 기본 시드(BIP39 제외):
- 기존 표준 지갑:
m/0h→ 수신처:m/0h/0/k, 환승역m/0h/1/k - SegWit 표준 지갑:
m/0h→ 수신처:m/0h/0/k, 환승역m/0h/1/k(동일한 경로, 다른 주소 인코딩) - 구형 Electrum (2.0 이전 버전):
m/k수신을 위해,m/k‘변경’을 위한 별도의 키 조합을 사용하여
Electrum으로 가져온 BIP39 시드:
- 기존 방식 (P2PKH, 1로 시작하는 주소):
m/44'/0'/0' - 래핑된 세그윗 (P2SH-P2WPKH, 3으로 시작하는 주소):
m/49'/0'/0' - 네이티브 세그윗 (P2WPKH, bc1로 시작하는 주소):
m/84'/0'/0' - Taproot (P2TR, bc1p로 시작하는 주소):
m/86'/0'/0'
함정: 누군가 Trezor Suite(BIP39를 사용하는)에서 지갑을 생성했다면 m/84'/0'/0' (네이티브 세그윗의 경우), 이후 Electrum의 시드 형식을 사용하여 Electrum에서 복원을 시도하면 경로가 일치하지 않습니다. Electrum 옵션에서 “BIP39 시드”를 올바르게 선택하더라도, 올바른 스크립트 유형(레거시 vs. 세그윗 vs. 네이티브 세그윗)을 선택하고 파생 경로가 원본 지갑과 일치하는지 확인해야 합니다.
그리고 여기서 문제가 심각해집니다: Electrum은 BIP39 시드를 가져올 수는 있지만, 이를 생성하지는 않습니다. 새 지갑을 생성할 때 Electrum은 항상 자체 시드 형식을 생성합니다. BIP39 가져오기 옵션은 오로지 지갑 간 호환성을 위해 존재합니다. 하지만 Electrum은 유효하지 않은 BIP39 시드(체크섬 단어가 잘못된 시드)도 아무렇지 않게 받아들입니다. 작은 "체크섬 실패" 경고는 표시하지만, 진행을 막지는 않습니다. 이로 인해 시드를 잘못 입력하여 지갑을 생성한 사용자들이, 복원하려고 할 때까지는 지갑이 정상적으로 작동하는 것처럼 보이는 경우가 발생했습니다.
빈 지갑 문제에 대한 실용적인 해결 방법: 시드를 복원할 때 잔액이 0으로 표시된다면, 체계적으로 다양한 조합을 시도해 보세요. 먼저 시드가 Electrum 형식인지 BIP39 형식인지 확인하세요. Electrum 형식이라면 파생 과정이 자동으로 진행됩니다. BIP39 형식이라면 각 스크립트 유형을 차례로 시도해야 합니다. 먼저 네이티브 세그윗(최근 지갑에서 가장 흔함), 그다음 래핑된 세그윗, 마지막으로 레거시 순으로 시도하세요. Electrum 4.x 버전에서는 BIP39 복원 과정에서 "기존 계정 감지(Detect Existing Accounts)" 버튼을 제공하며, 이 버튼을 사용하면 서버에 일반적인 파생 경로에 대한 거래 내역을 조회할 수 있습니다. 이 기능을 활용하세요.
지갑에 여러 계정이 있는 경우(Trezor Suite를 사용하는 하드웨어 지갑에서 흔히 볼 수 있음), Electrum은 하나의 지갑 파일당 여러 계정을 지원하지 않는다는 점을 유의하십시오. 각 계정마다 별도의 지갑을 생성해야 하며, 이때 파생 경로(derivation path)의 계정 인덱스를 순차적으로 증가시켜야 합니다: m/84'/0'/0' 계정 1의 경우, m/84'/0'/1' 계정 2의 경우, 그 외의 경우도 마찬가지입니다.
한도 초과와 잔액이 표시되지 않는 이유
올바른 시드와 파생 경로를 사용하더라도, 갭 제한으로 인해 자금이 누락된 것처럼 보일 수 있습니다. Electrum은 주소를 순차적으로 생성하며, 20개의 연속된 미사용 주소(기본 갭 제한)를 발견하면 검색을 중단합니다. 누군가 주소 인덱스 0~5를 사용한 후(API나 다른 지갑을 통해) 인덱스 30으로 건너뛴 경우, Electrum은 갭 제한에 도달하여 검색을 중단하므로 인덱스 25 이후의 주소는 발견하지 못합니다.
해결 방법은 간단합니다. Electrum 콘솔(보기 → 콘솔 표시)에서 다음 명령을 실행하세요:
wallet.change_gap_limit(50)
또는 필요한 숫자라면 무엇이든 입력하세요. 그런 다음 재동기화를 실행하세요. 극단적인 경우를 대비해, 프로그래밍 방식으로 사용된 지갑(전자상거래 플랫폼, 기부 페이지 등)의 경우 간격 제한을 200 이상으로 설정해 두었습니다.
버전 기록 및 업그레이드 시 발생할 수 있는 문제점
역사적으로 Electrum의 버전 업그레이드는 하위 호환성을 저해해 왔습니다. 최신 버전에서 지갑 파일을 열면 내부 형식이 업그레이드되는 경우가 많으며, 이 경우 이전 버전에서는 업그레이드된 파일을 읽을 수 없습니다. 이는 공식 문서에 명시되어 있지만, 널리 간과되고 있습니다.
주요 버전 변경 내역:
1.x → 2.0 (2014): 지갑 형식이 완전히 변경되었습니다. 기존 독점 파생 방식을 대체하여 BIP32 HD 지갑을 지원하게 되었습니다. 업그레이드 과정에서 모든 주소가 새로 생성됩니다. Electrum 1.x 버전은 2.x 지갑 파일을 절대 읽을 수 없습니다. v1 지갑을 열어야 하는 경우, 반드시 Electrum 1.9.8 버전을 설치해야 합니다.
2.x → 3.0 (2017): 새로운 서버 프로토콜과 세그윗(SegWit) 지원이 추가되었습니다. 지갑 파일 형식이 개정되었습니다. 세그윗 시드 유형이 도입되었습니다. 내부 seed_version 지갑 JSON의 해당 필드가 이를 추적합니다 — 만약 seed_version: 13 또는 14, v3 시대의 지갑입니다.
3.x → 4.0 (2020): 라이트닝 네트워크 지원, PSBT 도입, 대대적인 내부 구조 개편. 라이트닝 채널은 지갑 파일에 저장되며, 지갑을 마지막으로 사용했을 때 채널이 열려 있었다면 시드만 복구하는 것만으로는 라이트닝 채널 상태를 복구할 수 없습니다. 라이트닝 복구를 위해서는 지갑 파일 자체가 필수적입니다.
4.x 시리즈 (2020년~현재): 지속적인 개선이 이루어졌습니다. 버전 4.1.0에서는 일반 UI를 통해 레거시 지갑을 생성하는 옵션이 제거되었으며(기본값은 네이티브 세그윗으로 설정됨), 버전 4.5부터는 스토리지 버전이 추가로 업데이트되었습니다. 지갑 DB 업그레이드 코드는 매우 오래된 형식의 데이터를 마이그레이션할 수 있도록 처리하지만, 항상 원활하게 진행되는 것은 아닙니다. v1.9.8 지갑에서 업그레이드하는 과정에서 개발자에게 문의하라는 오류 메시지가 표시될 수 있는 예외적인 경우가 있습니다.
교훈: Electrum을 업그레이드하기 전에는 항상 지갑 파일을 별도의 위치에 복사해 두세요. 업그레이드 과정에서 문제가 발생하더라도 원본 파일을 사용해 이전 버전으로 되돌릴 수 있습니다. 그리고 업그레이드 과정에서 지갑 파일이 변경된 후에는 절대로 다운그레이드하지 마세요.
비밀번호 해킹과 일렉트럼이 특히 취약한 이유
Electrum의 키 도출 – 간단히 말해 SHA256(SHA256(password)) – 이는 전체 암호화폐 지갑 생태계에서 가장 취약한 수준에 속합니다. 솔트(salt)도, PBKDF2도, scrypt도, argon2도 없습니다. SHA-256을 두 번 적용한 것이 AES-256-CBC의 암호화 키 전부입니다.
참고로: MetaMask는 60만 번의 PBKDF2 반복 연산을 사용합니다. Bitcoin Core는 약 10만 번 이상을 사용합니다. 반면 Electrum은… SHA-256 연산을 단 두 번만 수행합니다. 최신 GPU를 사용하면 hashcat으로 초당 수십억 개의 SHA-256 해시를 테스트할 수 있습니다. AES 복호화 검증 과정을 고려하더라도, Electrum의 비밀번호 해독 속도는 다른 거의 모든 지갑보다 몇 배나 더 빠릅니다.
Hashcat은 지갑 솔트 유형에 따라 세 가지 모드를 통해 Electrum을 지원합니다:
- 모델 16600 – Electrum 지갑 (Salt-Type 1-3): 대부분의 지갑을 포함합니다. 해시 형식은 다음과 같습니다.
$electrum$1*<hex_salt>*<hex_data>. - Mode 21700 – Electrum 지갑 (Salt-Type 4): ECIES 전체 파일 암호화 방식을 적용한 최신 지갑 암호화 형식입니다.
- 모드 21800 – Electrum 지갑 (솔트 유형 5): 최신 암호화 방식.
해시를 추출하려면 다음을 사용하십시오. electrum2john.py 존 더 리퍼(John the Ripper) 프로젝트에서.
btcrecover는 또 다른 대표적인 도구로, 토큰 기반 비밀번호 생성 기능을 지원하기 때문에 대부분의 복구 상황에서 더 실용적이라고 할 수 있습니다. 사용자가 기억하는 요소들(예: “‘Bitcoin’으로 시작하고 숫자와 느낌표로 끝나는 걸로 기억해요”)을 지정하면, 이 도구가 모든 가능한 조합을 생성해 줍니다. 특히 Electrum의 경우, btcrecover는 암호화된 지갑 파일 복구뿐만 아니라, 시드 문구의 일부만 기억하거나 누락된 단어가 있는 경우에도 직접 시드 복구를 지원합니다.
손상된 지갑 파일
Electrum에서 지갑 파일 손상은 여러 형태로 나타날 수 있으며, 복구 방법은 손상된 부분에 따라 달라집니다. 구체적인 사례가 있다면 david@walletrecoveryservice.com으로 문의해 주시면 해결책을 찾아드리겠습니다.
“v1.9.8 버그” 지갑: Electrum 버전 1.9.8에서 발생한 특정 유형의 손상된 지갑이 있는데, 복원 과정에서 잘못된 시드를 입력하면 겉보기에는 유효해 보이지만 실제로는 키 자료가 전혀 포함되지 않은 지갑 파일이 생성됩니다. 최신 버전의 Electrum 지갑 데이터베이스 코드에는 이에 대한 특별 검사 기능이 포함되어 있습니다. 즉, 마스터 키가 없고 시드 버전이 v6인 지갑을 감지하여 사용자에게 경고를 표시합니다. 이러한 지갑에는 복구 가능한 자금이 전혀 포함되어 있지 않습니다.
라이트닝 채널 상태 손상: 열린 라이트닝 채널이 있는 지갑이 손상된 경우, 시드만으로는 라이트닝 자금을 복구할 수 없습니다. 라이트닝 채널은 상태 저장형(stateful)입니다. 즉, 최신 채널 상태(커밋먼트 트랜잭션, 취소 키)는 오직 지갑 파일에만 저장됩니다. Electrum에는 채널 백업 메커니즘(SCB – Static Channel Backups)이 포함되어 있지만, 이는 채널을 강제 종료할 수만 있을 뿐 재개할 수는 없습니다. 라이트닝 자금이 포함된 지갑이 손상된 경우, 시드만 복구하는 것이 아니라 지갑 파일 자체를 복구하는 것이 우선입니다.
백업 전략: Electrum에는 ‘파일(File)’ → ‘백업 저장(Save Backup)’(구버전의 경우 ‘사본 저장(Save Copy)’) 메뉴에 내장된 백업 기능이 있습니다. 이 기능을 사용하면 지갑 파일의 전체 사본이 저장됩니다. 백업 파일은 여전히 사용자의 비밀번호로 암호화되어 있으므로, 복원하려면 백업 파일과 비밀번호가 모두 필요합니다. 최대한의 보안을 위해 시드 문구를 종이에 적어두고 지갑 파일 백업도 함께 보관하시기 바랍니다(특히 라이트닝(Lightning)을 사용하거나 키를 가져온 경우).
Electrum 안드로이드 지갑
Android용 Electrum은 Kivy 프레임워크(버전 2.6에서 도입됨)를 기반으로 구축되었으며, 데스크톱용 Electrum과 동일한 지갑 파일 형식을 사용합니다. 시드 유형, 암호화 방식 및 파생 경로는 모두 동일합니다. Android에서 생성된 지갑 파일은 데스크톱에서 열 수 있으며, 그 반대의 경우도 마찬가지입니다.
안드로이드 특유의 과제는 파일 접근 문제입니다. 루팅되지 않은 안드로이드 기기에서 Electrum의 지갑 파일은 앱의 전용 내부 저장소에 다음과 같은 경로에 저장됩니다:
/data/data/org.electrum.electrum/files/data/wallets/
일반 파일 관리자나 USB를 통해서는 이 경로에 접근할 수 없습니다. 안드로이드의 샌드박싱 기능 때문에 접근이 차단되기 때문입니다. 이는 (다른 앱이 지갑 파일을 훔치는 것을 방지하기 위한) 의도된 설계이지만, 앱이 강제 종료되거나 실수로 삭제될 경우 심각한 복구 문제를 야기합니다.
Electrum의 iOS 버전은 존재하지 않습니다. 단언컨대 그렇습니다. 누군가 아이폰에서 Electrum을 실행하고 있다고 주장한다면, 그 사람은 가짜 앱을 사용하고 있는 것입니다. 지난 몇 년간 앱 스토어에는 자금을 가로채는 사기성 Electrum 모방 앱들이 여러 차례 등장했습니다.
지워지거나 덮어쓴 지갑 파일 문제
Electrum 지갑 파일은 파일 시스템상의 일반 파일입니다. 이 때문에 백업하기는 더 쉬워졌지만, 실수로 삭제하기도 더 쉬워졌습니다.
시나리오 1: 지갑 파일 삭제
지갑 파일이 삭제된 경우(실수로, 프로그램 제거 과정에서, 또는 악성 코드에 의해), 전문 데이터 복구 서비스를 받으려면 WalletRecoveryService.com에 문의하거나 david@walletrecoveryservice.com으로 이메일을 보내주십시오. 지갑 파일은 일반적으로 용량이 작습니다(표준 지갑의 경우 수백 KB, 광범위한 라이트닝 채널 내역이 포함된 지갑의 경우 수 MB 정도). 즉, 삭제 후에도 디스크에 이후로 많은 데이터가 기록되지 않았다면 디스크에서 복구할 수 있는 경우가 많습니다.
SSD의 경우 TRIM 창이 적용되므로 즉시 드라이브 사용을 중단해야 합니다. HDD의 경우 시간이 더 있지만, 쓰기 작업이 발생할 때마다 지갑 파일이 저장된 섹터가 덮어쓰어질 위험이 있습니다.
시나리오 2: 복원 과정에서 지갑이 덮어쓰임
이는 Electrum에서만 발생하는 문제입니다. Electrum에서 시드(seed)를 복원할 때 기존 파일과 동일한 지갑 파일 이름을 선택하면, Electrum이 기존 파일을 덮어씁니다. 설명서에 이 내용이 언급되어 있지만, 당황한 상태에서는 쉽게 간과하기 쉽습니다. 만약 (시드에서 파생된 것이 아닌) 가져온 개인 키가 포함된 지갑 파일이 있는데, 다른 시드를 동일한 파일 이름으로 복원하여 덮어쓴다면, 별도의 백업을 해두지 않은 한 가져온 키들은 모두 사라지게 됩니다.
복원할 때는 항상 다른 파일 이름을 사용하십시오: restored_wallet, recovery_test, 기존 지갑 파일의 이름 이외의 모든 것.
시나리오 3: 고장 난 드라이브에 있는 지갑 파일
Electrum의 지갑 파일은 하나의 독립된 파일로 구성되어 있습니다. 고장 난 드라이브에서 전문 데이터 복구, 디스크 이미징 또는 파일 카빙을 통해 이 파일 하나만 복구할 수 있다면( walletrecoveryservice.com에서 해당 과정을 도와드릴 수 있습니다), 필요한 모든 것을 갖추게 되는 것입니다. Electrum 설치 파일 전체나 설정, 블록체인 헤더를 복구할 필요는 없습니다. 지갑 파일과 비밀번호(또는 시드 문구)만 있으면 됩니다.
피싱 공격 경로 – Electrum만의 고유한 문제
Electrum에는 다른 대부분의 지갑에는 없는 악명 높은 취약점이 있는데, 이는 복구 작업이 필요한 상황을 직접적으로 초래하기 때문에 복구와 직결된 문제입니다.
2018년 12월, Electrum 서버가 클라이언트에 임의의 오류 메시지를 전송할 수 있으며, Electrum이 이를 HTML로 렌더링된 텍스트 형태로 표시한다는 사실이 밝혀졌습니다. 공격자들은 악성 Electrum 서버를 구축하여, 사용자가 거래를 전송할 때 변조된 Electrum 바이너리를 호스팅하는 피싱 사이트로 연결되는 링크가 포함된 가짜 “업데이트 필요” 오류 메시지를 반환하도록 했습니다. 이 가짜 업데이트를 다운로드하여 설치한 사용자의 시드나 지갑 비밀번호가 도난당했습니다.
이번 공격은 피싱 메시지가 Electrum의 자체 인터페이스 내에 표시되어 공식적인 것처럼 보였기 때문에 특히 큰 피해를 입혔습니다. 해당 취약점이 패치되기 전까지 수천 개의 비트코인이 도난당했습니다. 이 문제는 Electrum 3.3.3 버전에서 수정되었으며, 이 업데이트를 통해 서버 메시지에서 HTML 렌더링이 차단되었습니다.
이것이 복구에 중요한 이유: 이 공격으로 자금을 잃은 많은 사용자는 여전히 원래의 시드(seed)가 포함된 초기 지갑 파일을 보유하고 있습니다. 공격자의 버전은 키를 훔쳐 자금을 이동시켰지만, 정당한 지갑은 여전히 존재합니다. 누군가 저에게 “2018~2019년경 Electrum에 보관하던 비트코인이 갑자기 사라졌다”고 찾아온다면, 저는 항상 가장 먼저 피싱 공격 여부를 확인합니다. 이 경우 복구는 기술적인 문제가 아닙니다. 자금은 분실된 것이 아니라 도난당한 것이기 때문입니다. 하지만 사용자가 공격자에 의해 비워진 지갑의 비밀번호를 해독하는 데 시간과 돈을 낭비하지 않도록 정확한 원인을 파악하는 것이 중요합니다.
다중 서명 및 2단계 인증 지갑 복구
Electrum은 TrustedCoin을 통해 다중 서명 지갑과 2단계 인증(2FA) 기능을 지원하며, 이 두 가지 모두 복구 과정을 복잡하게 만듭니다.
다중 서명 지갑 Electrum에서는 지갑 유형 필드를 통해 식별됩니다: "wallet_type": "2of3" 또는 이와 유사한 것. 지갑 파일에는 여러 개의 키스토어가 포함되어 있습니다 (x1/, x2/(등)으로, 각각 하나의 공동 서명자를 나타냅니다. 멀티시그 지갑에서 자금을 인출하려면 정해진 수의 키가 필요합니다. 모든 공동 서명자의 키스토어가 포함된 지갑 파일을 보유하고 있다면 복구 절차는 정상적으로 진행됩니다. 만약 한 명의 공동 서명자 시드만 가지고 있고 다른 공동 서명자가 필요한 경우, 다른 키 보유자의 협력이 필요합니다.
2단계 인증(2FA) 지갑은 TrustedCoin을 공동 서명 서비스로 사용합니다. 이는 본질적으로 3개 중 2개를 요구하는 다중 서명(멀티시그) 지갑으로, TrustedCoin이 키 하나를 보관하고 사용자가 두 개를 보관합니다. 복구에는 다음 중 하나가 필요합니다: (a) 세 개의 시드 중 두 개, 또는 (b) 시드 하나와 TrustedCoin 서비스가 정상 작동 중이며 사용자가 인증된 상태. TrustedCoin이 서비스를 중단하더라도 사용자는 자신의 두 로컬 시드를 사용하여 자산을 인출할 수 있지만, 두 개 모두를 보유해야 합니다. Electrum이 지갑 생성 시 표시하는 2단계 인증 복구 키(대부분의 사용자가 기록해 두지 않는)가 바로 세 번째 시드이며, 이는 TrustedCoin 없이 복구하는 데 필수적입니다.
실제로 효과가 입증된 회복 기법
수년간 Electrum 지갑 복구 작업을 해오면서, 제가 가장 자주 접하는 사례와 그에 대한 대처 방법을 소개합니다.
시나리오 1: 시드 문구가 있으며, 복원만 하면 됨
Electrum을 실행하고, ‘파일’ → ‘새로 만들기/복원’을 선택합니다. ‘표준 지갑’ → ‘시드가 이미 있습니다’를 선택합니다. 시드를 입력합니다. Electrum 시드인 경우, Electrum이 시드 유형과 도출 경로를 자동으로 감지합니다. BIP39 시드(하드웨어 지갑이나 다른 소프트웨어 지갑에서 가져온 것)인 경우, 단어를 입력하기 전에 ‘옵션’을 클릭하고 ‘BIP39 시드’를 선택하십시오. 올바른 스크립트 유형을 선택하고 파생 경로를 확인하세요. 새 비밀번호를 설정하세요.
잔액이 0으로 표시될 경우: 다른 스크립트 유형(네이티브 세그윗, 래핑된 세그윗, 레거시)을 시도해 보세요. BIP39를 사용하는 경우, “기존 계정 감지”를 클릭하여 거래 내역을 검색하세요. 20번째 이후의 주소가 사용된 경우 간격 제한을 늘리세요.
시나리오 2: 지갑 파일과 비밀번호가 있는 경우
Electrum을 실행한 다음 지갑 파일을 지정하기만 하면 됩니다. 파일이 USB 드라이브나 기본 경로 외의 위치에 있는 경우, ‘파일(File)’ → ‘열기(Open)’를 선택하여 해당 파일을 찾아주세요. 파일이 열리면 ‘지갑(Wallet)’ → ‘시드(Seed)’에서 시드를 확인하거나(비밀번호 필요), 개인 키를 내보내거나, 평소처럼 거래를 진행할 수 있습니다.
시나리오 3: 지갑 파일은 있지만 비밀번호를 잊어버렸고, 시드 문구는 알고 있는 경우
비밀번호는 완전히 무시하세요. 시드 문구를 사용하여 새 지갑을 생성하세요(시나리오 1과 동일). 시드 문구는 기존 지갑 파일에 설정된 비밀번호와 관계없이 동일한 키를 생성합니다. 새 지갑에 새로운 비밀번호를 설정하세요.
시나리오 4: 지갑 파일은 있지만 비밀번호를 잊어버렸고 시드 문구는 없는 경우
이건 무차별 대입 공격이 필요한 상황입니다. 다음과 같은 전문 복구 전문가에게 문의하십시오. walletrecoveryservice.com 또는 다음 명령어로 해시를 추출합니다 electrum2john.py, 그리고 이를 hashcat(솔트 유형에 따라 모드 16600, 21700 또는 21800)이나 btcrecover에 입력합니다.
시나리오 5: 구형 Electrum v1.x 지갑
Electrum 4.x에서 v1 지갑을 직접 열려고 시도하지 마십시오. 특정 예외적인 상황에서 업그레이드 과정이 실패할 수 있으며, 이 경우 원본 파일이 손상되지 않은 상태로 남아 있어야 합니다. 이메일 (david@walletrecoveryservice.com)로 문의해 주십시오. 저희는 오랫동안 이와 같은 사례를 처리해 왔습니다.
시나리오 6: 다른 지갑에서 Electrum 시드가 작동하지 않는 경우
Electrum 시드를 Electrum이 아닌 지갑(Trezor, Ledger, Exodus 등)으로 가져오려고 하면, 해당 지갑들은 BIP39 형식을 지원하기 때문에 작동하지 않습니다. Electrum에서 지갑을 복원한 후 자금을 해당 지갑으로 이체하거나 전송할 수 있습니다.
시나리오 7: 하드웨어 지갑의 BIP39 시드가 Electrum에서 잘못된 주소를 표시함
아마도 잘못된 스크립트 유형이나 파생 경로를 선택하신 것 같습니다. Trezor 지갑의 경우: 네이티브 세그윗은 m/84'/0'/0', 유산은 m/44'/0'/0', 래핑된 세그윗은 m/49'/0'/0'. 계정이 여러 개인 경우, 마지막 강화된 인덱스 값을 1씩 늘려야 합니다. 단어를 입력하기 전에 Electrum을 BIP39 모드로 설정해야 합니다(옵션 → BIP39 시드).
시나리오 8: 안드로이드 지갑 앱이 실행되지 않음
휴대폰이 루팅된 경우, 다음 경로로 이동하세요. /data/data/org.electrum.electrum/files/data/wallets/ 그리고 지갑 파일을 복사하세요. 두 방법 모두 효과가 없고 시드 문구를 가지고 있다면, 데스크톱에서 지갑을 복원하세요. 시드 문구가 없고 휴대폰이 루팅되지 않은 경우, 마지막 수단은 기기의 저장소를 이미지로 추출할 수 있는 전문 안드로이드 데이터 복구 서비스를 이용하는 것입니다.
모든 Electrum 복구 전문가가 갖추어야 할 도구
- electrum2john.py – John the Ripper의 Jumbo 에디션에서 해시 값을 추출합니다. 모든 Electrum 지갑 형식에서 작동합니다.
- hashcat – 모드 16600, 21700, 21800. GPU 기반의 고속 비밀번호 해독.
- btcrecover – 토큰 기반 비밀번호 복구 및 시드 복구 (부분적/불확실한 시드 문구에 사용).
- Ian Coleman의 BIP39 도구 – 오프라인에서만 실행됩니다. Electrum 형식의 시드에서 키와 주소를 도출할 수 있는 Electrum 시드 모드를 지원합니다.
복구 가능한 지갑과 분실된 지갑의 차이점은 무엇인가
일렉트럼(Electrum) 생태계는 다른 시스템보다 훨씬 관대합니다. 지갑 파일이 독립적이고 휴대성이 뛰어나며, 문서화가 잘 되어 있는 JSON 파일이기 때문인데, 이 파일은 (전체 파일이 암호화되지 않은 경우) 어떤 텍스트 편집기에서든 열 수 있고, 널리 지원되는 오픈소스 도구로 처리할 수 있습니다. 암호화 기능은 대부분의 사용자에게 충분한 보호를 제공하지만, 업계 표준에 비하면 훨씬 취약합니다. 이는 보안 측면에서는 좋지 않지만, 복구 측면에서는 매우 유용합니다.
복구할 수 없는 지갑들은 다음 두 가지 특징 중 하나를 공유합니다. 사용자가 시드 문구와 지갑 파일을 모두 분실한 경우(복구에 활용할 수 있는 자료가 전혀 없는 경우)이거나, 시드 문구는 분실했으나 지갑 파일은 보유하고 있으며, Electrum의 취약한 키 도출 방식을 사용했더라도 무차별 대입 공격으로는 계산상 해결이 불가능할 정도로 강력한 비밀번호(15자 이상의 무작위 문자 조합)를 설정한 경우입니다.
그 외의 모든 문제—잘못된 추출 경로, 형식 호환성 문제, 파일 손상, 구버전, 안드로이드 데이터 추출 등—는 적절한 맞춤형 도구와 전문 지식을 활용하면 해결할 수 있습니다.
지금 당장 해야 할 가장 중요한 일은 다음과 같습니다. Electrum을 실행한 후 ‘지갑(Wallet)’ → ‘시드(Seed)’로 이동하여 12개의 단어를 종이에 적어두고, 그 종이를 안전한 곳에 보관하세요. 지갑 파일은 손상되거나 삭제되거나 암호화되거나 분실될 수 있습니다. 하지만 안전하게 보관된 종이에 적힌 12개의 단어만 있다면 언제든지 비트코인을 되찾을 수 있습니다.
질문이 있으신가요? david@walletrecoveryservice.com으로 메일을 보내주세요 .
