offline-key-generation
---
title: "오프라인 키 생성: 에어갭 보안 가이드"
description: "에어갭(네트워크 분리)된 오프라인 컴퓨터에서 암호화폐 키와 시드 문구를 생성하는 단계별 가이드. 장기 콜드 스토리지를 위한 최고 수준의 보안."
keywords: [offline key generation, air-gapped, cold storage, security, seed phrase generation, cryptocurrency safety]
sidebar_position: 6
---
# 오프라인 키 생성: 에어갭 보안 가이드
인터넷에 연결된 컴퓨터에서 암호화폐 키를 생성하면 악성코드, 키로거, 화면 캡처, 클립보드 하이재킹, 원격 유출에 노출될 수 있습니다. 장기 콜드 스토리지를 목적으로 하는 고가치 지갑의 경우, 최상급 표준은 에어갭 오프라인 생성입니다. 즉, 과거에도 네트워크에 연결된 적이 없고 앞으로도 연결되지 않을 기기에서 키를 만드는 방식입니다.
이 가이드는 하드웨어 선택, 운영체제 설정, 키 생성, 검증, 안전한 정리에 이르기까지 오프라인 키 생성을 위한 포괄적인 단계별 절차를 제공합니다.
## 에어갭 생성이 중요한 이유
### 위협 모델
일상적으로 사용하는 컴퓨터에서 [시드 문구](/security/seed-phrase-guide) 또는 [개인 키](/security/private-key-guide)를 생성하면, 키 자료는 다음 위치에 존재하게 됩니다.
- **RAM** — 시스템에서 실행 중인 어떤 프로세스든 접근할 수 있습니다.
- **디스크** — 운영체제의 가상 메모리 시스템에 의해 스왑되어 디스크로 기록될 수 있습니다.
- **클립보드** — 복사/붙여넣기를 하면 모든 애플리케이션이 접근할 수 있습니다.
- **네트워크** — 기기가 연결되어 있다면, 악성코드가 즉시 키를 유출할 수 있습니다.
- **디스플레이** — 화면 캡처 악성코드 또는 옆에서 훔쳐보기(숄더 서핑).
- **키보드** — 키로거(소프트웨어 또는 하드웨어)가 모든 입력을 기록합니다.
에어갭 컴퓨터는 네트워크 경로를 완전히 제거합니다. 여기에 적절한 운영 보안(OPSEC)을 결합하면, 다른 경로들도 크게 줄이거나 제거할 수 있습니다.
### 누가 에어갭 생성이 필요한가?
- 감당할 수 있는 손실 범위를 넘는 자산을 보관하는 사람
- 장기 “딥 콜드” 보관(수년 또는 수십 년)
- 기관 커스터디 및 재무(트레저리) 관리
- 달성 가능한 최고 수준의 보안 표준을 원하는 사람
일상 지출용으로 소액만 보관하는 지갑이라면, 에어갭 절차의 복잡성 없이도 하드웨어 지갑이 충분한 보안을 제공합니다.
## 하드웨어 선택
### 옵션 1: 전용 노트북 (권장)
키 생성 전용으로만 사용하고 인터넷에 절대 연결하지 않을 새 노트북 또는 공장 초기화한 노트북을 준비합니다.
- **모든 네트워킹 하드웨어를 제거하거나 비활성화합니다.** 가능하다면 Wi‑Fi 카드와 Bluetooth 모듈을 물리적으로 제거하세요. 최소한 BIOS/UEFI 펌웨어에서 비활성화하세요.
- **카메라와 마이크를 비활성화합니다.** 제거하거나 물리적으로 가리거나 연결을 끊으세요.
- **셀룰러 모뎀이 없는 노트북을 사용하세요.**
- 예산 옵션: 중고 ThinkPad (X230, T440) — 저렴하고 Linux 지원이 좋으며 물리적 개조가 쉽습니다.
### 옵션 2: Raspberry Pi
Raspberry Pi(모델 3B+ 또는 4)는 저비용 싱글보드 컴퓨터입니다. 무선 모듈이 없는 Pi Zero를 사용하거나 네트워킹을 비활성화하면 Wi‑Fi 없이 사용할 수 있습니다.
- microSD 카드로 부팅
- SD 카드 외에는 영구 저장소가 없음(사용 후 폐기/파괴)
- 올바른 모델을 사용하면 무선 하드웨어가 없음
- 더 낮은 비용(액세서리 포함 $35–$75)
### 옵션 3: 기존 하드웨어에 라이브 USB 부팅
기존 컴퓨터에서 모든 네트워킹을 끈 상태로 전용 Linux 라이브 USB를 부팅합니다.
- 라이브 환경은 전적으로 RAM에서 실행됩니다.
- (올바르게 설정하면) 내부 드라이브에는 어떤 데이터도 기록되지 않습니다.
- 종료 후 RAM은 초기화됩니다.
- **위험:** 기존 컴퓨터는 OS 재부팅과 무관하게 지속되는 하드웨어 수준의 침해(펌웨어 루트킷, 하드웨어 키로거)가 있을 수 있습니다. 전용 기기는 이 위험을 제거합니다.
## 운영체제 설정
### Tails OS (권장)
[Tails](https://tails.net)는 흔적을 남기지 않도록 설계된 프라이버시 중심 Linux 배포판입니다.
- USB로 부팅하고 전적으로 RAM에서 실행됩니다.
- 기본적으로 모든 네트워크가 Tor를 통해 라우팅되지만, 에어갭 용도에서는 네트워킹을 아예 켜지 않습니다.
- 명시적으로 설정하지 않는 한 영구 상태가 없는 “기억상실(amnesic)” 사용을 목표로 합니다.
- 일반적인 도구가 포함되어 있고 키 생성 스크립트를 위해 Python도 실행할 수 있습니다.
**설정 단계:**
1. 일반(온라인) 컴퓨터에서 Tails ISO를 다운로드합니다.
2. Tails 서명 키로 ISO 서명을 검증합니다.
3. Tails Installer, Etcher 또는 `dd`로 ISO를 USB 드라이브에 씁니다.
4. 에어갭 컴퓨터를 USB로 부팅합니다.
5. Tails Greeter에서 **어떤 네트워크 연결도** 설정하지 마세요.
6. 네트워크 인터페이스가 활성화되지 않았는지 확인합니다: `ip link show`에서 모든 인터페이스가 DOWN으로 표시되어야 합니다.
### Ubuntu 라이브 USB (대안)
Tails가 적합하지 않다면:
1. Ubuntu ISO를 다운로드하고 체크섬을 검증합니다.
2. USB에 씁니다.
3. BIOS에서 네트워킹을 비활성화한 상태로 부팅합니다.
4. Ubuntu 설치 화면에서 “Try Ubuntu”(설치하지 않음)를 선택합니다.
5. 네트워크 연결이 없는지 확인합니다.
### 에어갭 무결성 검증
부팅 후 에어갭을 검증합니다.
```bash
# UP 상태인 네트워크 인터페이스가 없는지 확인
ip link show
# IP 주소가 할당되지 않았는지 확인
ip addr show
# 인터넷 도달 시도(실패해야 함)
ping -c 1 8.8.8.8
# Wi-Fi 및 Bluetooth 확인
rfkill list all
모든 네트워크 인터페이스는 DOWN이어야 하고, IP 주소가 할당되어 있으면 안 되며, ping은 실패해야 합니다. 어떤 테스트에서든 연결 가능성이 보이면 즉시 중단하고, 다음 단계로 진행하기 전에 원인을 해결하세요.
키 생성 절차
방법 1: SafeSeed 도구를 오프라인으로 사용
SafeSeed 도구는 인터넷 연결 없이 브라우저에서 실행 가능한 클라이언트 측 웹 애플리케이션입니다.
SafeSeed 시드 문구 생성기 와 페이퍼 월릿 생성기 는 오프라인 사용을 위해 저장할 수 있습니다. 오프라인으로 전환하기 전에 웹 페이지 전체를 저장(Ctrl+S / Cmd+S)한 뒤, USB로 에어갭 컴퓨터에 옮겨 브라우저에서 여세요. 모든 암호화 연산은 JavaScript로 로컬에서 실행되며 서버 통신이 필요 없습니다.
단계:
- 일반(온라인) 컴퓨터에서 SafeSeed 도구로 이동합니다.
- 웹 페이지 전체를 USB 드라이브에 저장합니다.
- 파일 무결성을 검증합니다(가능하다면 체크섬 비교).
- USB 드라이브를 에어갭 컴퓨터로 옮깁니다.
- 저장된 HTML 파일을 브라우저에서 엽니다.
- 시드 문구를 생성합니다.
- 종이에 적습니다(에어갭 기기에는 디지털로 저장하지 마세요).
- 시드 문구를 다시 입력해 동일한 주소가 생성되는지 확인하여 검증합니다.
방법 2: Ian Coleman의 BIP-39 도구 사용
Ian Coleman BIP-39 도구는 오프라인 키 생성에 널리 사용되는 오픈소스 단일 HTML 페이지입니다.
- 온라인 컴퓨터에서 GitHub의 최신 릴리스를 다운로드합니다.
- PGP 서명을 검증합니다.
- USB로 에어갭 컴퓨터에 전송합니다.
- 브라우저에서
bip39-standalone.html을 엽니다. - 니모닉을 생성하거나 입력합니다.
- 코인과 파생(derivation) 경로를 선택합니다.
- 시드 문구와 주소를 기록합니다.
방법 3: 주사위 기반 엔트로피
모든 소프트웨어 RNG를 최대한 불신하고 싶다면, 주사위로 엔트로피를 수동 생성합니다.
- 카지노급 주사위를 사용합니다(모서리가 날카로운 정밀 주사위, 둥근 일반 소비자용 주사위는 피함).
- 256비트 엔트로피를 위해 주사위 1개를 99번 굴립니다(각 굴림은 약 2.585비트, 99회는 약 255.9비트).
- 주사위 결과를 이진 문자열로 변환합니다.
- (오프라인) BIP-39 도구로 이진 엔트로피를 니모닉으로 변환합니다.
- 또는 128비트 엔트로피(12단어 문구)를 위해 50번 굴립니다.
주사위 변환 방법:
- 6진법(Base-6) 방식: 각 굴림(1-6)을 기록하고, 시퀀스를 이진으로 변환합니다.
- 이진 주사위 방식: 동전(앞면=1, 뒷면=0)을 256번 던집니다.
- 주사위→이진 방식: 주사위를 굴려 1-3이면 0, 4-6이면 1을 기록합니다. 256번 반복합니다.
세 번째 방식은 엔트로피를 가장 많이 버리지만 가장 단순합니다. 엔트로피 품질에 대한 자세한 내용은 엔트로피와 랜덤성 가이드를 참고하세요.
방법 4: 커맨드 라인(Python)
커맨드 라인에 익숙한 사용자는 최소한의 Python 스크립트로 BIP-39 니모닉을 생성할 수 있습니다.
import hashlib
import os
# BIP-39 단어 목록은 파일에서 로드해야 합니다
with open('english.txt', 'r') as f:
wordlist = [w.strip() for w in f.readlines()]
# 256비트 엔트로피 생성
entropy = os.urandom(32) # OS CSPRNG 사용
# 체크섬 계산
h = hashlib.sha256(entropy).digest()
checksum_bits = bin(h[0])[2:].zfill(8) # 256비트 엔트로피에 대해 첫 8비트
# 엔트로피를 이진 문자열로 변환
entropy_bits = bin(int.from_bytes(entropy, 'big'))[2:].zfill(256)
all_bits = entropy_bits + checksum_bits
# 11비트 그룹으로 분할 후 단어로 매핑
words = []
for i in range(0, len(all_bits), 11):
index = int(all_bits[i:i+11], 2)
words.append(wordlist[index])
print(' '.join(words))
중요: 이는 교육 목적의 단순화된 예시입니다. 실사용(프로덕션)에서는 python-mnemonic의 mnemonic처럼 충분히 감사(audit)된 라이브러리를 사용하세요.
검증
시드 문구를 생성한 뒤, 자금을 맡기기 전에 반드시 검증하세요.
1. 체크섬 검증
생성 도구에 시드 문구를 다시 입력합니다. 도구가 오류 없이 수용한다면 체크섬이 유효합니다.
2. 주소 파생 검증
의도한 암호화폐와 파생 경로에 대해 최초 몇 개의 주소를 파생시킵니다. 이 주소들을 기록해 두세요. 나중에 별도의 기기에서(또는 에어갭 기기를 재부팅한 뒤) 시드 문구를 다시 입력해 동일한 주소가 생성되는지 확인합니다.
3. 도구 간 교차 검증
가능하다면 두 가지 다른 도구(예: SafeSeed 생성기와 Ian Coleman 도구)로 시드 문구를 검증하세요. 동일한 시드 문구, 파생 경로, 패스프레이즈에서 두 도구가 동일한 주소를 생성해야 합니다.
4. 소액 트랜잭션 테스트
유의미한 가치를 보관하기 전에:
- 첫 수신 주소로 소액의 암호화폐를 전송합니다.
- 별도의 기기에서 시드 문구로 지갑을 복원합니다.
- 잔액이 보이는지, 그리고 서명하여 다시 되돌려 보내는 트랜잭션을 만들 수 있는지 확인합니다.
이로써 엔트로피 생성, 니모닉 인코딩, 시드 파생, 키 파생, 주소 생성까지 전체 체인이 올바른지 확인할 수 있습니다.
시드 문구 기록 방법
종이
- 산성 없는 종이에 유성(영구) 잉크 펜으로 또렷하게 씁니다.
- 각 단어에 번호(1-24)를 매깁니다.
- 눌림 자국이 아래 장에 남을 수 있는 표면에서는 쓰지 마세요(아래 종이에 압인되는 패드 위 작성 금지).
- 내화/방수 보관함에 보관합니다.
금속
- 스테인리스 플레이트에 타각(stamp)하거나 각인(engrave)합니다.
- 공간이 제한되면 앞 4글자 약어로 테스트합니다.
- 타각 직후 가독성을 즉시 확인합니다.
- 금속은 화재와 침수를 견딥니다. 장기 보관에 권장됩니다.
하면 안 되는 것들
- 시드 문구를 촬영하지 마세요.
- 에어갭 기기에서 어떤 파일에도 입력하지 마세요.
- 출력하지 마세요(프린터는 메모리와 네트워크 기능이 있을 수 있습니다).
- USB 드라이브에 저장하지 마세요.
안전한 정리
시드 문구를 생성하고 기록한 뒤, 에어갭 기기에서 모든 흔적을 제거합니다.
1. 클립보드 및 화면 정리
- 모든 애플리케이션을 종료합니다.
- 클립보드를 비웁니다(무관한 텍스트를 선택한 뒤 Ctrl+C).
2. 종료
- 컴퓨터 전원을 끕니다. RAM 내용은 전원 차단 후 수 초에서 수 분 내에 소멸합니다.
- 추가 확신을 위해 최소 15분 이상 전원을 꺼 둡니다(상온에서 DRAM은 더 짧게, 추운 환경에서는 더 오래 데이터를 유지할 수 있음).
3. 저장 매체
- Tails 라이브 USB를 사용했다면 디스크에 아무것도 기록되지 않았습니다. USB는 재사용 가능합니다.
- Raspberry Pi SD 카드에 비-기억상실 OS를 사용했다면 SD 카드를 안전하게 삭제(
dd if=/dev/urandom of=/dev/sdX bs=1M)하거나 물리적으로 파괴합니다. - 실수로 에어갭 기기의 내부 드라이브에 무엇이든 저장했다면 안전 삭제를 수행합니다.
4. USB 드라이브
- 생성 도구를 옮기는 데 사용한 USB 드라이브는 지침을 올바르게 따랐다면 어떤 생성된 키 자료도 포함하지 않아야 합니다.
- USB에 원본 도구 파일만 있고 다른 것이 없는지 확인합니다.
- 최고 수준의 보안을 원한다면 사용 후 USB를 삭제하세요.
고급: 에어갭에서 트랜잭션 서명
에어갭 컴퓨터는 키 생성뿐 아니라 지속적인 트랜잭션 서명에도 유용합니다.
워크플로우
- 온라인(워치 온리) 기기: 서명되지 않은 트랜잭션을 구성합니다.
- 전송: USB 또는 QR 코드로 서명되지 않은 트랜잭션을 에어갭 기기로 옮깁니다.
- 에어갭 기기: 개인 키로 트랜잭션에 서명합니다.
- 전송: 서명된 트랜잭션을 온라인 기기로 다시 옮깁니다.
- 온라인 기기: 서명된 트랜잭션을 네트워크에 브로드캐스트합니다.
QR 코드 전송(권장)
QR 코드를 사용하면 USB 드라이브를 완전히 제거하여 잠재적 악성코드 경로를 닫을 수 있습니다(USB 장치는 자동 실행 페이로드를 운반할 수 있음).
- 온라인 기기에서 서명되지 않은 트랜잭션을 QR 코드로 표시합니다.
- 에어갭 기기에 연결된 카메라로 QR 코드를 스캔합니다.
- 트랜잭션에 서명합니다.
- 에어갭 기기에서 서명된 트랜잭션을 QR 코드로 표시합니다.
- 온라인 기기로 스캔합니다.
QR 기반 에어갭 서명을 지원하는 지갑으로는 Coldcard, Keystone, Sparrow Wallet(웹캠 설정 포함) 등이 있습니다.
PSBT(부분 서명된 비트코인 트랜잭션)
비트코인의 PSBT 포맷(BIP-174)은 에어갭 워크플로우를 위해 특별히 설계되었습니다. PSBT에는 서명 장치가 블록체인 데이터를 갖고 있지 않아도 트랜잭션에 서명하는 데 필요한 모든 정보가 포함됩니다.
멀티시그 에어갭 설정
최고 수준의 보안을 위해 에어갭 키 생성과 멀티시그를 결합하세요.
- 서로 다른 에어갭 세션 3개에서(가능하면 서로 다른 기기) 각기 다른 시드 문구 3개를 생성합니다.
- 2-of-3 멀티시그 지갑을 설정합니다.
- 각 시드 문구를 서로 다른 물리적 위치에 보관합니다.
- 트랜잭션은 3개 에어갭 기기 중 2개에서 서명이 필요합니다.
이는 다음 상황에 대한 보호를 제공합니다.
- 단일 기기 침해(한 키만 노출)
- 단일 시드 문구 분실(남은 두 키로 서명 가능)
- 단일 보관 위치 침해
흔한 실수
실수 1: “깨끗하지만 이전에 연결된” 컴퓨터 사용
과거에 인터넷에 연결된 적이 있는 컴퓨터에서 OS를 삭제하고 재설치하는 것만으로는 충분하지 않습니다. 펌웨어 수준의 악성코드(UEFI 루트킷)는 OS 재설치를 견딜 수 있습니다. 전용의, 한 번도 연결된 적 없는 기기가 이 위험을 제거합니다.
실수 2: 에어갭 기기를 “잠깐만” 네트워크에 연결
아주 잠깐이라도 네트워크 연결이 생기면 에어갭이 깨집니다. 악성코드는 밀리초 단위로 개인 키를 유출할 수 있습니다. 한 번이라도 연결되면 그 기기는 더 이상 에어갭으로 간주할 수 없습니다.
실수 3: 프린터 사용
프린터는 종종 자체 저장소(인쇄 작업 스풀링용)를 가지고 있고, 많은 최신 프린터는 Wi‑Fi나 Bluetooth를 갖고 있습니다. 시드 문구를 출력하면 프린터 메모리에 저장되거나 전송될 수 있습니다. 대신 손으로 쓰세요.
실수 4: 시드 문구를 디지털로 전송
시드 문구는 에어갭 화면에 표시되는 짧은 순간을 제외하고, 디지털 형태로 존재해서는 안 됩니다. USB로 복사하거나, 파일로 저장하거나, 전송을 위해 QR 코드로 인코딩하지 마세요. 종이에 쓰거나 금속에 직접 타각하세요.
실수 5: 생성 도구를 검증하지 않음
에어갭 기기로 옮기는 도구는 사용 전에 반드시 검증되어야 합니다. 파일 해시, PGP 서명을 확인하거나 최소한 파일 크기를 비교하세요. 변조된 도구는 공격자가 이미 아는 결정적 키를 생성할 수 있습니다.
FAQ
하드웨어 지갑을 쓰면 되지 않나요?
하드웨어 지갑은 훌륭하며 대부분의 사용자에게 충분합니다. 에어갭 생성은 하드웨어 지갑의 난수 생성기와 펌웨어에 대한 신뢰를 줄여, 매우 고가치 보관에서 추가적인 안전 여유를 제공합니다. 또한 에어갭 접근법은 여러 독립 도구로 검증할 수 있는 반면, 하드웨어 지갑은 단일 신뢰 지점이 됩니다.
전체 에어갭 과정은 얼마나 걸리나요?
처음 설정은 OS 준비, 검증, 키 생성, 정리까지 포함해 2-4시간을 예상하세요. 이미 준비된 기기에서의 이후 생성은 30-60분 정도 걸립니다.
스마트폰을 에어갭 기기로 사용할 수 있나요?
스마트폰은 셀룰러, Wi‑Fi, Bluetooth, NFC 등 여러 무선 기능을 갖고 있어 완전한 에어갭이 어렵고, 물리적으로 완전히 비활성화할 수 없는 경우도 있습니다. 네트워크 하드웨어를 제거한 노트북이 더 신뢰할 만합니다. Keystone 지갑처럼 목적에 맞게 설계된 일부 기기는 에어갭 서명 장치로 만들어졌습니다.
모든 지갑에 에어갭 생성이 필요한가요?
아니요. 일상 지출용으로 소액만 사용하는 지갑은 신뢰할 수 있는 하드웨어 지갑이나, 잘 보안된 소프트웨어 지갑으로도 충분합니다. 에어갭 생성은 유의미한 가치를 장기 콜드 스토리지로 보관할 때 권장됩니다.
에어갭 기기의 소프트웨어는 어떻게 업데이트하나요?
업데이트하지 않습니다. 에어갭 기기는 동일한 소프트웨어를 장기간 그대로 실행해야 합니다. 더 최신 버전의 생성 도구가 필요하다면 온라인 기기에서 다운로드하고 검증한 뒤 USB로 옮기고, 사용 전에 에어갭 기기에서 체크섬을 다시 검증하세요.
에어갭 기기의 난수 생성기가 고장 나면 어떻게 하나요?
이 때문에 주사위 기반 엔트로피가 대안으로 존재합니다. 모든 하드웨어/소프트웨어 RNG를 불신한다면 주사위로 엔트로피를 직접 생성해 BIP-39 도구에 입력하세요. 그 결과 시드 문구의 보안은 전자 부품이 아니라 주사위 굴림의 품질에만 의존합니다.
악성코드가 에어갭을 넘어올 수 있나요?
이론적으로는, 국가 수준의 정교한 공격자가 전자기 방출, 음향 신호, LED 점멸 패턴 등을 이용한 에어갭 점프 기법을 시연한 바 있습니다. 그러나 실제로 이런 공격은 물리적 근접, 특수 장비가 필요하며, 일반적인 암호화폐 절도범이 수행하기에는 훨씬 어렵습니다. 대다수 사용자에게, 올바르게 유지된 에어갭은 사실상 뚫기 어렵습니다.
관련 가이드