brunch

You can make anything
by writing

C.S.Lewis

by SKKRYPTO Oct 04. 2018

Bitcoin #2: 키, 지갑과 보안성

키 생성원리와 지갑의 종류

블록체인 기술이 차세대 기술로 떠오르면서 중요한 장점 중의 하나로 '안전성'이 자주 언급되고 있다. 하지만 수차례의 거래소 해킹 사태가 벌어지면서, 블록체인 기술이 어쩌면 그렇게 안전하지 않을지도 모른다는 비판적 입장도 많이 등장했다.


정확하게 말하자면, 비트코인의 높은 안전성을 이야기할 때의 안전은 주로  해킹을 방지할 수 있는 ‘보안성’보다는 체인 상의 데이터에 대한 ‘신뢰도’를 의미한다. 보안성과 관련된 키와 지갑 그리고 신뢰도와 연관된 체인의 형성 과정을 알아야 비트코인의 두 가지 안정성을 혼동하지 않을 것이다. 후자는 이후에 자세히 다루기로 하며 해당 글에서는 전자를 파악한 후, 비트코인의 보안성에 대해 조금 더 이야기를 해보겠다. (이해하기 어려울 수 있는 부분은 붉은 글씨로 적었으며 스킵해도 좋다.)


개인키, 공개키 그리고 주소

비트코인의 암호화 방식에 대해서는 더 간단하게 혹은 더 자세하게 설명해놓은 좋은 글이 많기 때문에 본 글에서는 길게 다루지는 않고, 가장 기본적인 내용만 몇 개 짚고 넘어가도록 하겠다.


개인키(private key)는 자금의 소유권을 증명하고, 자금의 사용을 허가하는 데 사용된다. 우리가 송금할 때 계좌 비밀번호를 넣어야 하는 것처럼, 비트코인 송금을 하기 위해서는 개인키를 보유하고 있어야 한다. 비트코인의 경우, 개인키는 256비트이며, 이는 약 1077개의 소수점 자리를 갖는 어마어마한 크기의 숫자이다.


공개키(public key)는 자금을 받을 때 증명하는 데 사용된다. 비트코인의 경우, 타원곡선함수(ECDSA)를 이용하여 개인키로부터 공개키를 도출한다. 이 복잡한 수학 과정에서 중요한 점은 타원곡선함수의 특징에 따라서 개인키로 공개키를 도출하는 것은 간단하지만, 반대로 제3자가 공개키로 개인키를 알아내는 것은 사실상 불가능하다. 따라서 블록체인 네트워크에서 공개키를 주고받아도 자금에 위협이 가해지는 일은 없다.


마지막으로 주소(address)는 계좌번호나 이메일 주소처럼, 타인과 공유하여 자금을 받거나 보내는 데 사용하는 문자열이다. 주소는 한 방향 해시함수를 사용하여 공개키로부터 만들어진다. PoW(작업증명)에서도 쓰여 다들 들어본 적은 있는 “해시”함수가 주소 생성에서도 쓰이는 것이다. SHA256과 RIPEMD160이란 해시함수가 쓰인다는 것은 상식으로 알아두고 넘어가자. 이후 Base58Check Encode를 통해 주소가 형성이 된다.


사실 키와 주소의 부분에서는 암호학, 수학, 컴퓨터공학의 상당히 난해한 개념들이 다소 등장한다. 그래서 모든 부분을 이해하기는 어렵지만, 반드시 잊지 말아야 하는 점은 키와 주소의 관계에서 개인키 -> 공개키 -> 주소의 생성이 한쪽으로만 작용하며, 반대로 풀어내기는 거의 불가능하다는 것이다.





지갑의 광의는 암호화폐를 사용하는 가장 기본적인 사용자 인터페이스로, 사용자의 자산, 키와 주소, 잔액, 거래 승인을 관리하는 애플리케이션이다. 그러나 프로그래밍 기술의 관점에서는 좀 더 정의를 좁혀본다면, 지갑은 사용자의 키를 관리하는 데이터베이스 구조를 일컫는다.


비결정적 지갑 / Non-deterministic Wallet

시작시 100개의 랜덤한 개인키를 소유한 후, 추가로 필요할 경우 생성해 내는 방식이다. 이러한 방식의 지갑을 Type-0 nondeterministic Wallet 이라고 부르며, 잦은 백업의 필요성과 많은 개인키 보유의 문제 때문에 잘 사용되지 않는다.


결정적 지갑 / Deterministic Wallet

종자(seed)를 통해 개인키를 형성하며 그에 따라 추출키 전부를 복원할 수 있기에 백업을 한번만 해도 된다.


계층적 지갑 / HD Wallet

결정적 지갑의 대표적인 예인 계층적 지갑(hierarchical deterministic, HD wallet)은 BIP-32, BIP-44에 의해서 정립된, 비트코인의 가장 기본적인 지갑 구조이다. HD wallet이란 영어 단어는 계층적 지갑의 특징을 잘 보여준다.


먼저, deterministic은 키들의 생성 원리가 무작위가 아닌 특정한 규칙에 의한다는 점을 설명한다. Non-deterministic wallet의 경우, 새로운 키를 생성할 때마다 마치 주사위나 룰렛을 돌리듯 새로운 키를 생성한다. 이렇게 엔트로피에만 의존할 경우, 수많은 키를 관리하기가 힘들어져 현재는 사용되지 않는다. 그래서 대안으로 나온 deterministic wallet은 새로운 키를 만들 때 seed라는 마스터 키에서 파생하여 만든다. Electrum이란 지갑을 실행해보면, 처음에 12개의 영어 단어로 이루어진 마스터키를 무작위로 만들어준다. 이 12개의 단어를 외우면, 지갑의 키 파일들이 사라지더라도 복구가 가능하다.


다음으로, hierarchical은 마스터키로부터 파생되는 구조가 계층을 이룬다는 점을 설명한다. 가계도에 비유하여 생각하면 이해하기 쉽다. 마스터키로부터 1세대 키가 만들어지고, 거기서 파생되어 2세대가 만들어지고, 그렇게 쭉 n세대까지 필요한 만큼 키를 생성할 수 있다. 다만, 주의해야 할 점은 개인키와 공개키가 철저하게 구분된다는 점이다. 부모 공개키에서는 자녀 공개키만이 만들어지고, 부모 개인키에서는 자녀 개인키만이 만들어진다.


따라서, 새로운 공개키를 만드는 데는 두 가지 방법이 있다. 

바로 1) 부모 개인키 -> 부모 공개키 -> 자녀 공개키 아니면 2) 부모 개인키 -> 자녀 개인키 -> 자녀 공개키다.


즉, 요약하자면 HD 지갑이 새로운 키를 만드는 방식은 시드에서 계층적으로 파생되는 것이다. HD 지갑의 장점은 첫째, 키 관리를 더욱 체계적으로 할 수 있다. 예를 들어, 기업에 부서마다 키의 서로 다른 가지를 배정하여 기업의 자금 흐름을 더욱 명확하게 관리할 수 있다. 그리고 두 번째 장점은 해당하는 개인키가 없이도 부모 공개키로부터 자녀 공개키를 생성하고, 주소를 만들어낼 수 있다는 점이다. 따라서 개인키를 안전하게 cold storage에 보관하고, 공개키만 서버에 올려서 분리를 통해 더욱 높은 보안성을 얻을 수 있다.

 

비트코인의 보안


다시 처음의 의문으로 돌아와, 블록체인의 안전성을 명확하게 정의해보자. 지금까지 알아본 키와 지갑이 가진 특성을 종합해보면, 사용자가 가진 개인키가 유출되지 않는 이상 개인의 자금은 안전하다. 따라서 개인키의 보호가 가장 중요한 보안상의 문제가 되며, 이의 효율적인 관리를 위해 지갑도 발전해왔다. (비트코인 보안 문제에 있어 난수생성기(Random Number Generation), 키 관리와 같은 문제들은 여러 발생하였다)


또한, 블록체인의 장부 혹은 거래 기록들이 참여자 모두에게 공개되어도 크게 문제가 되지 않은 이유는 개인정보가 노출되지 않기 때문이다. (하지만 완전한 익명성이 보장이 되지 않아 그를 보완하기 위해 영지식 증명을 도입한 Zcash, Monero 등이 탄생하였다.) 비대칭키 방식에 따라서 주소로 보내는 사람이나 받는 사람의 신상 정보에 대해 제3자가 알 수 없으며, 거래의 위변조도 불가능하다.  물론, 개인키가 해킹당하는 순간, 그 안전성은 와르르 무너지고는 만다.


이러한 특성을 고려하여 Mastering Bitcoin의 저자는 다음과 같은 말을 한다

 

Bitcoin’s security relies on decentralized control over keys and on independent transaction validation by miners. If you want to leverage bitcoin’s security, you need to ensure that you remain within the bitcoin security model. In simple terms: don’t take control of keys away from users and don’t take transactions off the blockchain. (p. 286)


쉽게 말하자면, 비트코인의 보안성을 최대한 높이기 위해서는 비트코인의 탈중앙화 성격을 유지해야 한다. 

1) 개개인이 키를 관리하며 2) 거래를 블록체인 안에서만 유지해야 한다.


기획의 관점에서 보는 키와 지갑

개인이 키를 관리해야 한다는 점을 좀 더 확장하여, 원론적인 이야기에서 좀 더 현실적인 이야기를 해보고자 한다. 다시 말해서 기획의 관점에서 보았을 때 개인이 직접 보안을 통제하는 것은 무엇을 의미할까?

 

생각해보면 현재 우리가 사용하는 대표적인 서비스 중에서 우리가 직접 보안을 통제할 수 있는 서비스는 없다. ‘보안의 통제’를 조금 더 확장하여 ‘개인 정보의 통제’라고 본다면 더욱 문제가 극명해진다. Cambridge Analytica가 페이스북을 통해서 미국 대통령 선거를 조작할 수 있던 것도, 내가 딱 원하는 비디오를 구글이 추천해줄 수 있는 것도, 내가 관심 있는 분야의 상품들이 인스타그램 피드에 올라오는 것 모두 우리가 ‘모르는 사이’에 개인정보가 기업에 넘어갔기 때문이다.


새로운 서비스에 가입할 때 이용약관이나 개인정보 제공에 동의했기에 개인이 완벽하게 무지한 것은 아니라고 반문할 수 있다. 그러나 ‘개인정보보호 실태조사’에 따르면 개인정보제공자 중 83.4%가 이용약관 등을 읽지 않고 동의한다. 어렸을 때부터 사람들은 동의를 누르는 것이 습관처럼 굳어버린 것뿐, 때로는 자신이 양도하는 정보가 어디까지 포함되는지 모른다.


따라서 기획의 관점에서 보았을 때, 이미 사용자들은 정보의 관리를 기업에 넘기는 것이 익숙하다. 반대로 말하자면, 개인키를 포함하는 개인정보를 직접 관리하는 데 익숙하지 않다. 지금처럼 아직 암호화폐 지갑을 사용하는 인원이 소수일 때는 크게 상관없을 수 있지만, 암호화폐가 삶의 곳곳에 스며들수록 기술에 친숙하지 못한 유저가 점점 늘어날 것이다. 결국 기술과 사용자의 간극을 줄여줄 수 있는 역할은 기획의 몫이다.


지갑의 가장 중요한 기능이 키 관리는 아니다. 정말로 ‘사용의 시대’가 온다면, 오히려 dApp의 플랫폼 등의 기능이 더 중요할 수도 있다. 하지만 결국 지갑의 가장 기본적인 기능은 키의 관리이다. 가장 기본적인 기능이 user friendly 하지 않다면 앞으로 치열해질 경쟁에서 살아남기는 어려울 것이다.  



참고문헌

Antonopoulos, Andreas M. Mastering Bitcoin: Unlocking Digital Crypto-Currencies. OReilly, 2016.


박윤정
손동하 /  sohn@skkrypto.io

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari