안전한 지갑(Key 관리) 시스템
블록체인 산업의 발전은 블록체인을 이용한 여러 서비스들이 등장과 함께 이루어질 것이다. 블록체인에 데이터를 저장하고, 저장된 데이터를 읽어오고 이를 활용하는 다양한 아이디어가 점차 등장할 것으로 예상된다. 이러한 블록체인 서비스 개발 시 가장 먼저 고려해야 할 사항 중 하나는 '키 관리'이다. 키 관리는 서비스 제공회사가 사용자 대신 직접 관리하는 방식과 서비스 사용자가 키를 직접 관리하는 방식으로 크게 나뉘어져 있다.
서비스 제공자가 키관리를 하는 대표적인 예는 암호화폐 거래소이다. 사용자는 자신의 암호화폐 지갑에 대한 키를 별도로 관리할 필요가 없다. 로그인 비밀번호만 잘 관리하면 된다. 만일 로그인 비밀번호를 분실하더라도, 거래소에게 본인인증을 하고 되찾을수 있다. 이러한 방법은 기존의 온라인 서비스를 이용하는 것과 비슷하여, 사용자에게 가장 친숙하다. 그렇지만 이 경우, 개인키에 대한 소유가 온전하지 않기 때문에 본인 인증[1]이 필요한 서비스(지적재산권 소유증명, 판매 등)를 이용할 수 없다. 트랜잭션에 대한 수수료도 비싼 편이다. 그리고 서비스 제공자에 대한 신뢰 문제(해킹 등)는 상시 존재한다. 반대로 서비스제공자에게는 보안사고 및 사용자 인증의 문제(KYC, AML 등)가 까다롭게 남아있다.
한편 대부분의 지갑앱들은 사용자가 직접 키 관리를 하도록 한다. 지갑앱을 사용하면 자신의 개인키로 서명한 트랜잭션을 생성하여 본인 인증을 하거나, 블록체인에 저장한 자신의 지적재산권 증명 및 판매 등이 가능해진다. 매우 싼 수수료로 트랜잭션을 생성하여 보낼 수도 있다. 즉, 1¢(약11원) 이하를 송금하는 마이크로 페이먼트가 가능하다. 이를 활용하면 새로운 형태의 로그인 및 서비스 제공이 가능해진다. 그리고 사용자가 키를 직접 보관하기 때문에 서비스 제공자의 해킹 문제 발생에 대한 우려 없이 서비스 사용이 가능하다. 그러나 개인키를 제대로 백업 해두지 않고 분실한 경우, 이를 되찾을 방법은 전혀 없다. 개인키를 물리적 형태(종이지갑, 하드웨어지갑 등)로 보관하는 방법을 사용하기도 하는데 무척 귀찮은 일이다.
키 관리에 대해 주로 사용되는 두 방식은 각각의 단점이 명확하며 사용성에 큰 걸림돌이다. 이에 대한 대안을 크래이그 박사가 자신의 Medium에서 게시하였다. 이를 쉽게 이해하기 위해 필요한 몇가지 개념을 덧붙여 설명을 해보겠다.
mnemonic seed: 사람이 인지하기 쉬운 여러 단어들의 배열[2]로써, 이를 통해 유일한 암호키를 생성할 수 있다. 여기에서 mnemonic을 이용한 비트코인 암호키 생성 테스트를 해볼 수 있다. 니모닉 시드를 소유하고 있다는 것은 암호키를 가지고 있는 것과 동일하다.
4S를 이용하면, 하나의 암호키를 여러개의 부분키로 나눌 수 있으며, 원래의 암호키를 재구성하기 위해 필요한 부분키의 갯수를 지정할 수도 있다. 예를 들어, 특정 암호키를 5개로 나누면서, 이를 복구하기 위해서는 최소 3개의 부분키가 필요하도록 설정할 수 있다. 이 경우, 암호키를 분실하여 복구가 필요한 경우, 5개의 부분키 중 3개 이상을 모은 후, 최초의 암호키를 다시 만들 수 있다. 여기에서 4S에 대한 간단한 테스트를 해볼 수 있다.
네트워크상 한 쌍의 노드에게 향상된 보안 통신을 제공하는 기술이다. 노드 간의 공용비밀키는 필요에 따라 노드간에 결정한다. 따라서 노드들은 공용비밀키를 보관할 필요 없이, 필요시 공용비밀키를 만들고 이를 보안 통신에 사용 할 수 있다. nChain은 유럽 특허청(the European Patent Office)으로부터 이에 대한 특허권을 2018년 6월 획득했다.
Image Source : 여기
위의 내용을 조합하면 다음을 수행할 수 있다.
암호키 생성
'4S'를 이용하여 암호키를 부분키로 나누기
'DKG'를 이용하여 부분키를 넘겨줄 상대와의 공용비밀키를 임시로 생성하고, 안전하게 부분키를 전달
암호키 삭제
이 방식은 다음의 이점이 있다. 암호키 사용이 필요한 경우에만 이를 복구하여 사용하므로 전체 암호키를 한번의 작업으로 해킹할 수 없다. 암호키의 원소유자가 사망하거나, 무능력해지거나, 또는 키를 분실했다 하더라도, 합법적인 소유자들(예 : 본인, 가족, 변호사, 가까운 친척 등)은 다른 부분키 소유자들을 통해 최초의 암호키를 복구할 수 있다. 이는 암호키 전체를 제3자에게 전달하거나, 또는 암호키를 단순히 쪼개어 전달하는 방식에 비해 보안상 훨씬 유리한 방법이다.
예를 들어 보자.
A : 블록체인 서비스 회사
B : A의 사용자
C : 금융회사
금융회사 C는 B에 대해 충분한 KYC, AML 등을 이미 하고 있다고 가정하자.
1. B는 자신의 단말기에서 암호키를 생성한다.
2. 생성된 암호키를 '4S'를 이용하여 3개의 부분키로 나눈다. 암호키 복구를 위해선 최소 부분키 2개가 필요하다.
3. 'DKG'를 이용해 A에게 부분키 1번, C에게 부분키 2번을 안전하게 온라인상에서 전달한다.
4. 암호키는 폐기한다.
5. 일반적인 A의 서비스 사용을 위해서는 B는 A에게 부분키1번을 'DKG'를 이용해 전달받는다. B는 소유하고 있던 부분키2번으로 암호키를 복구 후, 서명을 한다. 서명 작업이 끝난 암호키는 폐기한다.
6. A에 문제가 발생해도, B는 C에 보관된 부분키2번을 이용해 자신의 디지털 자산을 보호할 수 있다.
7. B가 소유하고 있던 부분키 3번을 분실하거나 또는 B에게 갑작스런 사고가 발생하더라도, A, C에 보관된 부분키를 이용해 B의 디지털 자산을 합법적인 소유자에게 전달할 수 있다.
8. 서명이 필요한 순간을 제외하고는 아무도 암호키 전체를 소유하고 있지 않기 때문에 해킹의 난이도는 올라간다.
크레이그는 "Threshold signature" 의 개념도 소개하고 있다. 싱글 또는 멀티서명과는 달리 부분키의 소유자들이 각자의 부분키로 서명을 하고난 결과가 싱글서명과 동일하며, 멀티서명과는 달리 검증을 위한 공개키는 동일하다. 즉, 여러 부분키로 서로 다른 이들이 서명했다하더라도, 해당 트랜잭션의 소유권은 명확한 이점이 있다.
Single/Multi signature:
Threshold signature:
이와 같은 기술을 이용한다면, 암호화폐 거래소 또는 지갑서비스 제공자 및 사용자 누구도 전체키를 보유하지 않아 해킹을 위험으로부터 자유로워 질 수 있으며, 동시에 키분실에 대한 위험 또한 제거할 수 있다. 여기서 가장 중요한 것은 키는 한번만 사용되어지고 새로운 키가 생성되는 시스템이라고 크레이그는 말한다. 위에 언급한 과정이 한번만 자동화되어서 진행될 수 있는 것이라면, 분할키 사용 후에는, 다시 키를 생성하고 분할해 저장하는 일은 사용성을 저해하지 않고 반복될 수 있다.
사실 위 내용들은 nChain 블로그에서 이전에도 몇 차례 언급되었던 것들이다.
Sep 2017 nChain's Inventions to Enable Bitcoin's Future - Jimmy Nguyen - Hong Kong 2017
아직은 모든 것이 다 이해되기는 어려운 내용들이다. 더구나 현재 nChain의 Nakasendo 암호 라이브러리[3]는 비공개로 전환되어 있다. 소스코드가 공개되어 있지 않아, 실제 어떻게 작동하는지에 대해 추가적인 이해가 필요한 부분들도 있다. 하지만 새로운 블록체인 관련 기술들에 대한 내용을 미리 살펴보며 앞으로 나올 서비스에 대한 고민을 해볼 수 있는 것은 요즘 개인적으로 무척이나 즐거운 일이다.
추가적으로 여기에서 nChain에서 언급한 더 많은 응용사례를 살펴볼 수 있다.
[1]"인증"이라 함은 전자서명생성정보가 '가입자에게 유일'하게 속한다는 사실을 확인하고 이를 증명하는 행위를 말한다. - 전자서명법 제2조 6항
[2] 어떤 단어들이 사용되는지 여기에서 확인할 수 있다. 좀 더 자세한 내용은 여기를 참고하면 된다. '한국어'로도 정의되어 있다.