암호화폐 지갑이란?

 

완벽한 암호화폐 보안, 절대 쉬운 일 아니다. 세상에 숱한 암호화폐 지갑 제조사들이 자기네 지갑만 쓰면 완벽하게 안전하다고 주장하지만 실상과는 거리가 있다. 이에 안전한 암호화폐 지갑에 대해 알아보기로 하고, 우선 암호화폐 지갑이 뭔지부터 살펴보자.

 

암호화폐 지갑이란?

일상에서 ‘지갑’은 화폐, 신용카드, 신분증 등을 넣고 휴대하는 물건이다. 그래서 ‘암호화폐 지갑’이라 하면 흔히 암호화폐를 보관하는 진짜 지갑 같은 물건을 떠올린다. 비트코인이나 이더리움 등 암호화폐가 지갑 안에 들어 있을 것 같다. 그러나 암호화폐 지갑 안에는 암호화폐가 없다. 암호화폐 지갑은 블록체인 분산원장에 기록되는 거래 트랜잭션 데이터를 생성하고 서명하는 일에 사용되는 비공개키를 보관하고 관리하기 위한 도구일 뿐이다.

그림1

그럼 암호화폐는 지갑이 아니라 어디에 있는 걸까? 참여자 모두가 공유하는 블록체인 안에 있다. 내 자산, 비트코인이라면 내 키와 연결된 주소의 UTXO 합, 이더리움이라면 내 키와 연결된 계좌의 밸런스, 그러한 내 자산은 블록체인에 들어 있다. 혹시 지갑 안에 보관하는 키를 잃어버리면 암호화폐가 사라지는 것이 아니라 내 자산의 소유권을 증명할 수 없게 되는 것이다. 그렇기 때문에 암호화폐 자산 관리에 있어 가장 중요한 일은 키 관리다. 암호화폐 지갑이란 바로 그 키 관리를 하기 위한 도구다.

 

암호화폐 거래 증명과 암호화 기술

암호화폐 거래 즉 트랜잭션은 모두 ‘공개키 암호화’ 방식을 이용해 서명해야만 유효한 것으로 인정된다. 공개키 암호화 방식이란 개인키 그리고 그 개인키에 대응하는 공개키의 쌍으로 이루어지는 암호화 과정이다. 암호화폐 거래 시 개인키로 서명한 트랜잭션을 공개키로 검증함으로써 거래의 주체가 확실하다는 사실을 검증한다.

그림2

[ Public-key cryptography : https://en.wikipedia.org/wiki/Public-key_cryptography  ]

 

개인키는 절대 남에게 공개하지 않고 은밀히 관리해야 하기 때문에 ‘비공개키’라고도 한다. 256 비트의 랜덤 숫자를 일반적으로 사용하는 내 개인키가 외부로 노출될 경우 나 아닌 다른 사람이 나인 척 유효한 서명을 할 수 있게 된다. 이는 다시 말해 내 자산을 모두 다 가져가 버릴 수 있다는 뜻이다. 따라서 개인키를 안전하게 관리하는 일이 암호화폐 지갑의 제1의 목적이다.

공개키는 말뜻 그대로 공개되어 있는 키다. 개인키를 통해 공개키를 쉽게 생성할 수는 있지만, 개인키의 소유자가 아닌 사람이 공개키로부터 개인키를 생성하는 일은 불가능하다. 따라서 공개키가 일반에 공개되어 있더라도 쌍을 이루는 개인키가 없는 한 아무나 그 공개키를 이용할 수 없는 성질을 이용한 것이 공개키 암호화 방식이다. 그러한 성질에 따라 공개키에 SHA-256 일방향 암호화를 반복해 적용하는 이중 해싱 인코딩 등을 적용해 암호화폐 주소를 만든다. 일방향 암호화로 공개키를 통해 주소를 생성하지만 주소 즉 공개키로부터 개인키를 알아내는 일은 불가능하다.

 

암호화폐 지갑 기술의 발전사

인류 문명의 발전사는 결국 온갖 도구의 편리한 이용을 향한 연구개발의 역사 아닌가 싶다. 암호화폐 지갑도 날이 갈수록 점점 더 편리해졌는데, 그 변화는 암호화폐 지갑 기술에 대한 아주 중요한 의미를 담고 있으니 간략하게나마 살펴보자.

앞서 암호화폐 거래는 개인키와 공개키 쌍에 대한 검증을 통해 증명된다 했다. 그렇다면 개인키와 공개키 각각 1개씩만 갖고 있으면 거래를 막 해도 되는 걸까. 그렇진 않다. 거래 트랜잭션에는 거래자 명의와 주소 그리고 공개키 정보가 기록된다. 그리고 모든 트랜잭션은 나 말고도 누구나 간단히 조회할 수 있기 때문에, 같은 키와 주소를 계속 사용하면 내 자산 규모나 거래 내역 등이 모두 다 노출된다. 이는 개인의 프라이버시 침해 문제라 이를 피하고 사용자 편의를 향상하는 방법이 지속적으로 개선되어 왔고, 그 변화가 암호화폐 지갑 기술의 발전사라 할 수 있다.

최초의 암호화폐 지갑은 주소와 키 재사용을 피하기 위해 기본 100개 이상의 개인키를 무작위로 생성하고 코인별 그리고 용도별로 다른 개인키와 공개키를 사용했다. 이로써 프라이버시 노출 문제는 피할 수 있었지만 모든 거래에 대해 사용된 키를 저장하고 관리해야 하는 불편함이 컸다. 키를 무작위로 생성하기 때문에 이를 ‘랜덤 지갑(Random Wallets)’이라 한다. 아래 결정성 지갑과 대비해 ‘비결정성 지갑(Nondeterministic Wallets)’이라고도 부른다.

랜덤 지갑의 불편함을 해소하기 위해 개발된 것이 ‘결정성 지갑(Deterministic Wallets)’이다. 결정성 지갑은 다수의 난수표로부터 하나를 골라 난수를 생성하는 랜덤 시드 값을 이용하기 때문에 ‘시드 지갑(Seeded Wallets)’이라고도 부른다. 결정성 지갑은 날것의 무작위 키를 생성하지 않고 하나의 시드 값으로 순차적으로 키를 생성한다. 따라서 시드를 안전하게 보관하기만 하면 언제든 시드로부터 개인키를 순차적으로 재생성할 수 있기 때문에 거래에 사용된 모든 키를 백업하고 관리하는 불편함 문제를 해소한 지갑이다.

 

그림3

[ BIP-0032 : https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki ]

 

하지만 완전히 편리해진 건 아니다. 암호화폐 종류는 다양하고 한 사용자가 여러 주소를 가질 수도 있는데 결정성 지갑만으로는 그 복잡다단한 환경 전체를 모두 다 관리할 수가 없다. 그래서 ‘계층 구조 결정성 지갑(Hierarchical Deterministic Wallets)’ 개념이 제안되었다. 줄여서 ‘HD 지갑’이라고도 부르는 계층 구조 결정성 지갑은 마스터 시드로부터 개인키를 계층적으로 생성하고 관리함으로써 하나의 지갑으로 여러 화폐 그리고 주소를 관리할 수 있게 되었다. HD 지갑 기술은 ‘BIP-0032’란 이름의 형식으로 사실상 표준화되었고, BIP-0032 이후 BIP-0043 그리고 BIP-0044 등을 통해 계층 구조를 보다 정교화하는 등 기술을 보강해 왔다.

 

니모닉 코드, 사람이 읽을 수 있는 시드

HD 지갑에서는 마스터 시드만 있으면 모든 키를 재생성함으로써 지갑 전체를 복원할 수 있다. 하지만 16진법 32자리 무작위 텍스트로 출력되는 마스터 시드를 기억하고 보관하는 건 결코 쉬운 일이 아니다. 시드 값이 사람이 읽을 수 있는 단어가 아니기 때문이다. 그래서 사용 편리와 사용자 실수 예방을 위해 시드 값을 사람이 읽을 수 있는, 사전에 나오는 일상 단어로 표현해 줄 필요가 있다.

‘니모닉(Mnemonic) 코드’가 바로 그 역할을 맡는다. 일반 텍스트 단어로 표현되는 니모닉 코드는 암호화폐 지갑 사용자가 난해한 기술에 대한 이해 없이도 지갑을 편리하게 사용할 수 있도록 돕는다. ‘BIP-0039’ 형식으로 정리된 니모닉 코드는 임의의 값을 사전에 정의된 일상적 단어 리스트에 매핑한다. 니모닉 코드는 해시 함수를 재귀적으로 반복하는 키 스트레칭 과정을 거쳐 마스터 시드를 생성하고, 그 마스터 시드는 HD 지갑 동작의 바탕이 된다.

니모닉 코드는 흔히 볼 수 있는 단어의 조합으로 구성되기 때문에 왠지 보안적으로 불안해 보이기도 하지만 이는 착각일 뿐이다. 니모닉 코드에 대한 가장 단순한 그러나 강력한 무작위 대입(Broute-force) 공격을 한다더라도 목적을 달성하는데 12개 니모닉 사용 시 2의 128승의 조합이 필요하고 50% 확률로 찾으려 해도 2의 127승의 시도가 필요하다. 즉 니모닉 코드 해킹을 위한 노력보다 암호화폐 채광 쪽이 더 경제적 판단이라, 해커 입장에서도 니모닉 코드 해킹하려고 애쓰기보다 차라리 부지런히 채광이나 하는 게 낫다.

 

동작은 하는 지갑, 안전하진 않다

위 기술들만 있으면 지갑을 만들 수 있다. 모두 공통 표준 기술로 일반에 공개되어 있기 때문에 기술에 대한 깊은 이해 없이도 가져다 쓰기만 하면 어쨌든 지갑을 만들 수는 있다. 오류만 없다면 지갑은 제대로 동작할 것이다. 하지만 안전한 지갑이라 할 수는 없다.

안전한 암호화폐 지갑은 단지 지갑만의 문제가 아니다. 지갑이 아무리 튼튼하더라도 암호화폐는 눈 깜짝할 새 어디론가 사라질 수 있다. 숱한 암호화폐 해킹 사고들이 위 기술들이 없어서 일어난 게 아니다. “쇠사슬은 가장 약한 고리만큼 약하다”는 보안의 오래된 격언은 여전히 옳다. 앞으로도 계속해서 유효할 것이다.

안전한 암호화폐 지갑은 안전한 암호화폐 환경 전체를 이루고 그 안에서 동작해야만 가능하다. 안전한 암호화폐 지갑을 위해서는 앞서 간략히 살펴본 1)암호화폐 지갑 기술과 2)암호화 등 보안 기술 그리고 그러한 이해를 바탕으로 한 3)안전한 환경 전체를 설계하고 구축하는 보안 아키텍처 기술, 3가지가 모두 다 필요하다. 특히 2)의 심도 깊은 이해는 3)의 필수다.