Ethereum 지갑을 오프라인에서 생성하는 완전 가이드
목차
인터넷에 연결된 상태에서 Ethereum 지갑을 생성하는 것은 편리합니다. 하지만 불필요한 위험이기도 합니다. 시드 구문이나 개인 키가 네트워크에 연결된 기기에 존재하는 매 순간, 키로거, 클립보드 멀웨어, 과도한 권한을 가진 브라우저 확장 프로그램, 원격 접근 트로이 목마에 노출됩니다. 해결책은 간단합니다: 오프라인에서 지갑을 생성하고, 백업을 적어두고, 공개 주소만 온라인으로 가져오세요.
이 가이드는 엔트로피 생성부터 사용 가능한 Ethereum 주소까지의 전체 기술 과정을 설명하고, 오프라인에서 생성한 키가 Polygon, Arbitrum, Optimism, Base 같은 레이어 2 네트워크에서 원활하게 작동하는 이유를 설명합니다.
왜 오프라인에서 생성하는가?¶
Ethereum 지갑은 근본적으로 하나의 개인 키입니다. 그 키를 보유한 사람이 자금을 통제합니다. 온라인 서비스나 연결된 브라우저를 사용하여 지갑을 생성하면, 개인 키는 완전히 통제할 수 없는 소프트웨어 계층을 통과합니다: 브라우저의 JavaScript 엔진, 브라우저 확장 프로그램, 운영 체제의 메모리 관리, 데이터를 유출할 수 있는 네트워크 스택까지.
오프라인 생성은 네트워크 벡터를 완전히 제거합니다. 머신에 네트워크 연결이 없다면 — WiFi 비활성화, 이더넷 분리, Bluetooth 꺼짐 — 어떤 소프트웨어가 실행 중이든 개인 키가 원격으로 유출될 수 없습니다.
이상적인 설정은:
- 클린 머신(새로 설치한 OS 또는 라이브 USB 배포판).
- 어떠한 종류의 네트워크 연결도 없음.
- 무작위성을 위해 Web Crypto API를 사용하여 브라우저에서 완전히 실행되는 도구.
- 시드 구문을 기록할 종이 또는 금속.
SafeSeed의 Ethereum Seed Phrase Generator는 정확히 이 시나리오를 위해 설계되었습니다. 완전히 클라이언트 측에서 실행됩니다 — API 호출 없음, 서버 통신 없음, 분석 없음. 페이지를 로드하고, 인터넷 연결을 끊고, 완전한 격리 상태에서 지갑을 생성할 수 있습니다. 오프라인 보안 관행에 대한 더 넓은 시야는 콜드 스토리지 가이드 2026를 참조하세요.
secp256k1과 Keccak-256¶
두 가지 암호학적 기본 요소가 Ethereum의 키 시스템을 정의합니다: 키 생성을 위한 secp256k1 타원 곡선과 주소 파생을 위한 Keccak-256입니다.
secp256k1: 타원 곡선¶
Ethereum은 Bitcoin에서 secp256k1 곡선을 물려받았습니다. 이것은 소수체 위에 정의된 특정 곡선으로, 효율성과 알려진 약점이 없는 점으로 선택되었습니다. 곡선의 정의 방정식은:
y^2 = x^3 + 7 (mod p)
여기서 p는 256비트 소수입니다. 시스템의 보안은 타원 곡선 이산 로그 문제(ECDLP)에 기반합니다: 곡선 위의 공개 점이 주어졌을 때, 그것을 생성한 스칼라(개인 키)를 결정하는 것은 계산적으로 불가능합니다.
Ethereum의 개인 키는 256비트 정수 — 32바이트, 또는 64개의 16진수 문자입니다. 공개 키는 곡선의 생성점 G에 개인 키 스칼라를 곱하여 파생됩니다. 이 곱셈은 일방향 연산입니다: 정방향 계산은 쉽지만 역방향은 사실상 불가능합니다.
결과 공개 키는 x와 y 좌표를 가진 곡선 위의 점으로, 비압축 형태에서 총 64바이트(128개 16진수 문자, 04 접두사)입니다. Solana가 사용하는 ed25519 곡선과의 비교는 secp256k1 vs ed25519를 참조하세요.
Keccak-256: 공개 키에서 주소로¶
Ethereum은 공개 키를 직접 주소로 사용하지 않습니다. 대신 비압축 공개 키(04 접두사 제외)에 Keccak-256(SHA-3의 변형)을 적용하여 32바이트 해시를 생성합니다. 해시의 마지막 20바이트가 0x 접두사가 붙은 Ethereum 주소가 됩니다.
개인 키 (32바이트)
→ secp256k1 곱셈 → 공개 키 (64바이트)
→ Keccak-256 해시 → 32바이트
→ 마지막 20바이트 취함 → Ethereum 주소 (0x...)
이 해싱 단계는 단순한 크기 축소가 아닙니다. 추가적인 보호 계층을 제공합니다: secp256k1에서 주소로부터 공개 키의 부분적 복구를 허용하는 결함이 발견되더라도, Keccak-256 해시가 전체 키를 복구하는 것을 상당히 어렵게 만듭니다. 그러나 실제로는 주소에서 거래를 하면 전체 공개 키가 거래 서명에서 온체인에 공개됩니다.
시드 구문에서 ETH 주소까지¶
대부분의 현대 지갑은 원시 개인 키를 직접 관리하도록 요구하지 않습니다. 대신 BIP39 시드 구문과 HD 지갑 파생을 사용하여 단일 백업에서 키의 트리를 생성합니다.
1단계: 엔트로피 생성¶
프로세스는 128비트 또는 256비트의 암호학적으로 안전한 무작위성(엔트로피)으로 시작됩니다. 이 엔트로피는 이후 모든 것의 씨앗입니다. SafeSeed에서 이 무작위성은 브라우저의 crypto.getRandomValues()에서 나오며, 운영 체제의 CSPRNG에서 끌어옵니다.
12단어 시드 구문에는 128비트, 24단어 구문에는 256비트의 엔트로피가 생성됩니다. 엔트로피가 단어가 되는 전체 과정은 BIP39 완전 해설을 참조하세요.
2단계: 엔트로피에서 니모닉 단어로¶
엔트로피는 SHA-256으로 해시되어 체크섬을 생성합니다. 체크섬 비트가 엔트로피에 추가되고, 결합된 비트 문자열은 11비트 세그먼트로 분할됩니다. 각 세그먼트는 BIP39 단어 목록의 2,048개 단어 중 하나에 매핑되어 12 또는 24개의 단어를 생성합니다.
3단계: 니모닉에서 마스터 시드로¶
니모닉 단어(선택적 패스프레이즈 포함)는 2,048번 반복의 PBKDF2-HMAC-SHA512에 입력되어 512비트 마스터 시드를 생성합니다. 이 마스터 시드는 전체 HD 지갑 트리의 루트입니다.
4단계: 마스터 시드에서 마스터 키로¶
512비트 시드는 "Bitcoin seed" 키로 HMAC-SHA512에 입력됩니다(Ethereum에서도 마찬가지 — BIP32 규약). 출력은 분할됩니다: 왼쪽 256비트가 마스터 개인 키, 오른쪽 256비트가 마스터 체인 코드가 됩니다.
5단계: Ethereum 키 파생¶
Ethereum은 BIP44로 정의된 파생 경로 m/44'/60'/0'/0/0를 사용합니다. 경로의 각 레벨은 자식 키 파생을 나타냅니다:
44'— 목적: BIP44 다중 계정 계층.60'— 코인 타입: 60은 Ethereum의 SLIP44 인덱스.0'— 계정: 첫 번째 계정.0— 체인지: 외부 체인(수신 주소).0— 주소 인덱스: 첫 번째 주소.
각 레벨에서 부모 키와 체인 코드가 HMAC-SHA512를 통해 결합되어 자식 키를 생성합니다. 강화 파생(아포스트로피로 표시)은 개인 키를 입력으로 사용하여 브랜치 간에 더 강한 격리를 제공합니다.
6단계: 개인 키에서 주소로¶
m/44'/60'/0'/0/0의 파생된 개인 키는 256비트 정수입니다. secp256k1 생성점에 곱하여 공개 키를 생성합니다. 공개 키는 Keccak-256으로 해시되고, 마지막 20바이트가 Ethereum 주소가 됩니다.
SafeSeed의 Ethereum Private Key Generator에서 원시 엔트로피부터 최종 주소까지 파생의 각 단계를 볼 수 있습니다.
레이어 2 네트워크에서 동일한 키¶
Ethereum의 가장 실용적인 특성 중 하나는 키가 모든 EVM 호환 네트워크에서 동일하게 작동한다는 것입니다. Ethereum 메인넷에서 0xABC... 주소를 통제하는 동일한 개인 키가 Polygon, Arbitrum, Optimism, Base에서도 0xABC...를 통제합니다. 추가 키 생성이 필요하지 않습니다.
이는 모든 EVM 체인이 동일한 암호학적 기본 요소 — 서명을 위한 secp256k1와 주소 파생을 위한 Keccak-256 — 그리고 동일한 계정 모델을 사용하기 때문입니다. 주소는 개인 키에서 결정론적으로 파생되며, 파생이 동일하므로 주소도 동일합니다.
체인 간에 다른 것은 체인 ID — 거래 서명에 포함된 네트워크 식별자(EIP-155)로, 리플레이 공격을 방지합니다. Polygon(체인 ID 137)에 대해 거래를 서명하면, 그 서명은 Ethereum 메인넷(체인 ID 1)에서는 무효입니다. 이것은 거래 수준의 보호이지 키 수준의 것이 아닙니다.
오프라인 생성 워크플로에서 이것은 단일 시드 구문 백업이 모든 EVM 체인의 자산을 보호한다는 것을 의미합니다. 한 번 생성하고, 한 번 백업하고, 어디서나 같은 주소를 사용합니다. 이것이 신중한 오프라인 생성을 위한 가장 강력한 논거 중 하나입니다: 키가 접촉하는 모든 체인에 걸쳐 위험이 배가됩니다.
EVM 체인 간 공유 주소의 보안 함의에 대해서는 EVM 주소 보안을 참조하세요.
주소 검증기로 확인¶
오프라인에서 지갑을 생성한 후 자금을 보내기 전에 주소가 올바르게 포맷되었는지 확인해야 합니다. Ethereum Address Validator를 사용하여 확인하세요:
- 형식 검사: 주소가
0x로 시작하고 정확히 40개의 16진수 문자를 포함하는지. - EIP-55 체크섬: 혼합 대소문자 인코딩이 올바른지. 주소가 제대로 생성되었다면 대문자와 소문자가 소문자 주소의 Keccak-256 해시와 일치합니다.
동일한 에어갭 머신에서 검증기를 실행할 수 있습니다. 도구를 열고, 연결을 끊고, 주소를 붙여넣고, 확인합니다. 체크섬이 통과하면 사용한 매체(종이, 금속, QR 코드)에서 주소가 올바르게 전사되었다고 확신할 수 있습니다.
다양한 체인에서 주소 검증이 어떻게 작동하는지에 대한 자세한 설명은 암호화폐 주소 검증 방법을 참조하세요.
MetaMask 또는 다른 지갑으로 내보내기¶
시드 구문이 생성되고 안전하게 백업되면 결국 지갑 애플리케이션에서 사용해야 합니다. 가장 일반적인 선택은 MetaMask(브라우저 확장 또는 모바일), Rabby, Rainbow, Ledger나 Trezor 같은 하드웨어 지갑입니다.
MetaMask로 가져오기¶
MetaMask는 BIP39 시드 구문을 직접 수락합니다:
- 깨끗한 브라우저 프로필에 MetaMask를 설치합니다.
- "기존 지갑 가져오기"를 선택합니다.
- 12 또는 24개의 단어를 입력합니다.
- 로컬 비밀번호를 설정합니다(이것은 기기에서 키만 암호화하며, 시드의 일부가 아닙니다).
MetaMask는 m/44'/60'/0'/0/0에서 키를 파생하고 해당 주소를 표시합니다. 오프라인에서 생성한 주소와 일치하는지 확인합니다. 일치하지 않으면 전사 중에 문제가 발생한 것입니다 — 불일치를 해결할 때까지 어느 주소로도 자금을 보내지 마세요.
하드웨어 지갑으로 가져오기¶
Ledger와 Trezor 기기는 초기화 중에 BIP39 시드 구문을 수락합니다. 하드웨어 기기의 화면에서 직접 구문을 입력하세요 — 컴퓨터에서는 절대 입력하지 마세요. 하드웨어 지갑은 동일한 경로에서 동일한 키를 파생하고 동일한 주소를 생성합니다. 이것이 오프라인 생성과 일상 사용을 결합하는 최적의 표준입니다: 시드는 에어갭 머신에서 생성되었고, 개인 키는 네트워크 연결된 컴퓨터에 절대 존재하지 않습니다.
다중 계정¶
파생 경로 m/44'/60'/0'/0/0은 첫 번째 계정을 생성합니다. 마지막 인덱스를 증가시키면 추가 주소를 얻습니다: m/44'/60'/0'/0/1, m/44'/60'/0'/0/2 등. 모두 동일한 시드 구문에서 파생됩니다. 대부분의 지갑은 "계정 추가"를 클릭하면 이를 자동으로 처리합니다.
오프라인 Ethereum 지갑 생성은 편집증이 아닙니다 — 기본적인 운영 보안입니다. 연결을 끊고, 생성하고, 전사하는 데 걸리는 몇 분은 그 주소에 보유할 모든 ETH, 토큰, NFT를, 모든 EVM 체인에 걸쳐, 키를 보유하는 한 보호하는 투자입니다. 암호학은 건전합니다. 유일한 변수는 얼마나 신중하게 다루느냐입니다.