tech

암호화폐 지갑의 기술적 원리와 보안 구조 분석

암호화폐 지갑은 디지털 자산을 안전하게 보관하고 관리하는 데 필수적인 도구다. 특히 블록체인의 탈중앙화 특성상, 개인 지갑 사용 시 자산 손실에 대한 책임은 전적으로 사용자에게 있다. 따라서 높은 수준의 보안 인식이 필요하다.

지갑은 크게 소프트웨어 지갑(핫월렛)과 하드웨어 지갑(콜드월렛)으로 구분된다. 소프트웨어 지갑은 인터넷에 상시 연결되어 있어 편리하지만, 온라인 공격에 취약하다. 반면 하드웨어 지갑은 오프라인 상태에서 개인 키를 저장하므로 보안성이 뛰어나다.

이번 기사에서는 암호화폐 지갑의 동작 원리와 보안 구조를 기술적으로 분석해 보고자 한다.

사실상 암호화폐 지갑은 코인을 저장하는 것이 아니라, 블록체인 네트워크에서 자산에 접근할 수 있는 개인 키(private key)와 공개 키(public key)를 생성하고 이를 안전하게 관리하는 기능을 수행한다.

지갑 생성 과정


지갑 생성 구조를 쉽게 이해하기 위해 웹사이트를 만들어봤다. 사이트를 따라서 직접 지갑을 생성해보면 그 과정을 보다 쉽게 이해할 수 있을 것이다. 지갑 생성은 이더리움 가상 머신(EVM) 기반의 지갑을 기준으로 설명한다.

🔗 지갑 생성 구조 시각화 웹사이트

1. 니모닉 생성

니모닉은 개인 키를 사람이 읽고 기억하기 쉽게 만든 단어 조합이다. 지갑 백업 및 복구 시 사용된다.

  • 1) 엔트로피 생성: 128비트 또는 256비트의 임의 난수를 생성한다. 이는 지갑의 보안성을 결정하는 핵심 요소다.
  • 2) 체크섬 추가: SHA-256 해시 함수를 통해 엔트로피를 해싱하고, 그 일부(4~8비트)를 체크섬으로 엔트로피에 추가하여 총 132비트로 만든다. (128비트 엔트로피 + 4비트 체크섬 = 총 132비트)
  • 3) 비트 분할: 132비트를 11비트 단위로 나누면 총 12개의 그룹이 생성된다.
  • 4) 단어 매핑: BIP-39라는 2028개의 단어 목록에서 각 숫자에 해당하는 단어를 선택한다.
2. 개인 키 파생

하나의 니모닉 문구로 여러 개의 지갑 주소를 만들 수 있다. 이는 계층적 결정적 지갑 구조를 통해 이루어진다.

  • 1) 마스터 시드 생성: 니모닉 문구를 바이트로 변환한다. 여기서 salt로 비밀번호(패스프레이즈)를 사용한다. PBKDF2를 사용해 512비트(64바이트) 마스터 시드를 생성한다.
  • 2) 마스터 개인 키 생성: 마스터 시드를 사용해 마스터 개인 키와 체인 코드를 생성한다. 키 유효성 확인 후, 유효하지 않으면 다시 생성한다.
  • 3) 계층적 파생: 마스터 키로부터 자식 키를 파생한다. 이 과정은 트리 구조로 무한히 확장이 가능하다.
    • 부모 공개 키와 인덱스를 포함한 데이터를 HMAC-SHA512에 입력한다.(키는 부모 체인 코드)
    • 결과의 왼쪽 256비트는 자식 개인 키에 더해지고, 오른쪽 256비트는 자식 체인 코드가 된다.
    • 자식 개인 키로 자식 공개 키를 생성한다.
  • 4) 경로 정의: BIP-44를 이용하여 블록체인의 용도에 따라 키를 구조화한다.
m / purpose' / coin_type' / account' / change / address_index
  • m: 마스터 노드
  • purpose’: 44 (BIP-44 사용)
  • coin_type’: 블록체인 식별자(이더리움은 60, 비트코인은 0)
  • account’: 계정 번호(0부터 시작)
  • change: 0(외부 주소) 또는 1(변경 주소)
  • address_index: 주소 인덱스(0부터 순차 증가).
3. 공개 키 생성

만들어진 개인 키에 ECDSA(타원 곡선 디지털 서명 알고리즘)인 secp256k1을 적용해 공개 키를 만든다.

4. 주소 추출

SHA-3계열 해시 함수로 공개 키에서 Keccake-256를 계산하면 32바이트(256비트)가 출력된다. 이 중 20바이트를 주소로 사용한다.

5. 주소 생성

주소의 무결성을 검증하고 오입력을 방지하기 위해 EIP-55 체크섬을 적용한다. 이는 주소를 소문자로 바꾸고 변환한 주소로 keccak-256 해싱하여 대소문자를 결정한다. 대소문자는 해시의 nibble이 8이상이면 대문자 아니면 소문자로 처리된다.

이제 마지막으로 0x 접두사를 붙여주면 최종 주소가 나오게 된다.

하드웨어 지갑도 위에서 설명한 과정과 기본적으로 동일하지만, 개인 키를 물리적인 장치에 저장한다는 점이 가장 큰 차이점이다.

대부분의 하드웨어 지갑은 EAL5+ 이상의 보안 등급 인증을 받은 상태로 판매된다. 이러한 지갑에 탑재된 보안 칩은 RSA, ECC 등 앞서 언급한 암호화 알고리즘을 하드웨어 수준에서 처리하며, 보안의 핵심 요소인 엔트로피도 물리적으로 내장된 난수 생성기를 통해 예측 불가능한 키를 만들어낸다. 이로 인해 물리적 수준에서도 매우 강력한 보안성을 갖추게 된다.

이번에는 실제 하드웨어 암호화폐 지갑인 키스톤 프로 3(Keystone Pro 3)를 사용해 지갑을 생성해 보겠다.

새 지갑을 생성하면 먼저 시드 구문(seed phrase)을 백업할 수 있다. 보통 동봉된 종이에 수기로 작성하여 보관하는데, 이를 사진으로 촬영하거나 온라인에 저장할 경우 기존의 핫월렛과 다를 바 없기 때문에 반드시 물리적인 수단으로 오프라인 보관해야 한다.

지갑이 생성되는 과정에서는, 하드웨어 보안 칩에서 생성된 개인 키(private key)가 입력되며 완전히 오프라인 상태에서 지갑이 만들어진다.

그렇다면 하드웨어 지갑은 인터넷에 연결되어 있지 않은데, 트랜잭션 처리는 어떻게 이루어질까?

먼저 사용하는 소프트웨어 지갑(앱 등)에서 해당 하드웨어 지갑과 연결해준다. 이때 개인 키를 위임하는 것이 아니라 지갑만 연결하는 방식이다.

그 다음, 트랜잭션을 생성하면 화면에 서명용 QR 코드(sign QR)가 나타난다. 이를 실제 기기로 스캔하면, 서명을 할 수 있다.

서명이 완료되면, 하드웨어 지갑에 서명된 트랜잭션 메시지에 해당하는 QR 코드가 생성된다. 이제 이 QR 코드를 컴퓨터 지갑에 찍으면 트랜잭션 전송이 완료된다.

하드웨어 지갑 사용 시 주의점
  • 대부분의 하드웨어 지갑은 에어갭(Air Gap) 기술을 통해 외부 네트워크와 완전히 분리되어 있어 사용에 다소 불편함이 있다.
  • 장치를 분실하거나 손상될 경우, 니모닉 코드로 복구가 가능하다. 하지만 이를 인터넷에 연결되는 소프트웨어 지갑에 입력하면 핫월렛과 다름이 없어지기 때문에 보안성이 떨어질 수 있다.
  • 하드웨어 지갑이라고 해도 완벽한 보안을 보장하지 않는다. 피싱 스마트 컨트랙트에 서명할 경우 자산이 탈취될 수 있다. 2조 원 규모의 해킹 피해를 입은 바이빗 거래소도 유사 사례로 볼 수 있다.

온체인 자산은 사용자 스스로가 관리 책임을 지기 때문에, 하드웨어 지갑은 초기 비용과 약간의 번거로움을 감수하더라도 디지털 자산 보호를 위한 최선의 선택이다. 실제로 개인의 온체인 자산이 해킹당하는 사례는 매우 흔하게 발생한다.

참고 자료


이학성 기자

국내 거래소의 경우, 고객 자산은 1:1로 매칭되어 보관되므로 비교적 안전하지만 온체인에는 많은 기회가 열려있습니다. 온체인 활동을 생각한다면 사용이 간편하면 하드웨어 지갑을 추천드립니다.


TOP