ELI: 더 안전한 LINE의 가상자산 지갑 플랫폼

LINE DEVELOPER DAY 2020에서 김창성 님이 발표하신 ELI: LINE Crypto Currency Wallet Platform 세션 내용을 옮긴 글입니다.

안녕하세요. LINE BIZ Plus 김창성입니다. 이번 글에서는 저희 팀에서 만든 ELI라는 플랫폼을 소개하겠습니다.

ELI 프로젝트를 한 문장으로 줄이면 ‘LINE 가상자산 지갑 플랫폼’이라고 할 수 있습니다. 다들 아시다시피 지갑은 돈을 보관하는 도구인데요. 가상자산 지갑이란 지갑 안에 가상자산을 넣고 보관하다가 필요할 때 꺼내 쓸 수 있게 만든 시스템을 의미합니다. ELI란 LINE 그룹 내에서 사용 가능한 가상자산 지갑 시스템이라고 이해하시면 될 것 같습니다. 현재 일본에서 서비스하고 있는 LINE BITMAX 거래소에서 사용하고 있으며, 향후 글로벌 서비스인 BITFRONT 가상자산 거래소에서도 사용할 예정입니다.

이번 글에서는 ELI가 무엇인지 조금 더 자세히 말씀드린 뒤에 왜 ELI를 만들게 되었는지 말씀드리겠습니다. 이어서 ELI의 주요 기능을 소개하고, 각 기능이 어떻게 동작하는지 말씀드린 뒤, 마지막으로 향후 어떤 계획을 가지고 있는지 말씀드리겠습니다.

 

ELI 개발 배경

ELI에 대해 두 가지 상황을 예시로 들어 설명하겠습니다. 먼저 아래 그림은 가상자산 거래 과정을 표현한 그림입니다.  

User A가 User B에게 거래소를 통해서 비트코인을 이동시키려고 할 때, User A는 LINE BITMAX를 사용하고 있고, User B는 LINE BITMAX가 아닌 다른 가상자산 거래소를 사용하고 있다고 가정해 보겠습니다. 일반적으로 우리가 은행에 가서 다른 누군가에게 송금하려고 할 때, 제일 먼저 필요한 건 그 사람의 계좌 정보입니다. 여기서도 마찬가지로 비트코인을 이동시키려면 User B의 비트코인 계좌가 필요합니다. User B는 자신이 사용하고 있는 거래소에서 비트코인 계좌 생성을 요청합니다. 요청을 받은 거래소는 비트코인에서 통용될 수 있는 방법으로 계좌를 생성한 다음에 User B에게 할당합니다. 이것이 위 그림의 1번, 비트코인 계좌 생성 과정입니다.

이제 계좌가 생성됐으니 User A는 LINE BITMAX를 통해서 User B에게 출금을 요청할 텐데요. 이때 LINE BITMAX는 비트코인 네트워크의 스펙을 명확하게 분석해서 비트코인 네트워크에서 통용될 수 있는 방법으로 데이터를 잘 만들어 전파하는 역할을 해야 합니다. 이것을 위 그림의 2번, 출금 과정이라고 합니다.

출금까지 완료됐으니 수신자의 거래소에서 입금만 명확하게 해주면 됩니다. User B가 사용하고 있는 거래소에서 앞서 LINE BITMAX와 마찬가지로 비트코인 네트워크를 명확하게 잘 분석해서 가장 안전한 방법으로 안전한 시기에 입금을 처리해 주는 것이 필요합니다. 이게 3번의 입금 과정입니다.

User A가 User B에게 비트코인을 송금했기 때문에 여기까지만 해도 일단 과정이 끝났다고 볼 수도 있지만, 아직 중요한 게 한 가지 더 남아 있습니다. 바로 4번 과정입니다. 가상자산은 외부의 공격뿐 아니라 내부의 공격에 대해서도 안전한 방법으로 보관할 수 있어야 합니다. 이 과정을 포함해야 비로소 일련의 과정이 완성됐다고 말할 수 있을 것입니다.

다시 한 번 정리하면, 어떤 가상자산을 누군가에게 전달할 때 반드시 필요한 기능은 그 가상자산에 해당하는 계좌를 생성하는 일과 입출금하는 일, 안전하게 보관하는 일, 이렇게 네 가지가 중요하다고 말씀드릴 수 있습니다.

두 번째 경우를 살펴보겠습니다. 일반적으로 가상자산 거래소에서는 하나의 가상자산만 다루는 것이 아니라 여러 개의 가상자산을 다룹니다. 수백 개까지 다루는 거래소도 있습니다. 만약 LINE BITMAX가 이더리움도 취급한다고 가정한다면 이더리움 네트워크를 명확하게 잘 분석해서 앞서 말씀드린 네 가지 기능을 모두 다 개발해야 하는 부담이 있습니다. 

여기에 LINE 그룹 차원에서 본다면, 아래와 같이 일본에서 서비스하고 있는 LINE BITMAX뿐 아니라 글로벌 서비스인 BITFRONT에서도 아래와 같이 동일한 개발을 해야 합니다.

그뿐만이 아닙니다. 블록체인이 많은 관심을 받고 있고, LINE에서도 블록체인 서비스에 많은 관심을 기울이고 있다 보니, LINE BITMAX와 BITFRONT뿐 아니라 LINE 내 다른 여러 팀에서도 블록체인과 소통하면서 서비스하길 원하는데요. 이때 각 팀에서 앞서 말씀드린 네 가지 기능을 각각 개발한다면 역시 중복 개발이 될 것입니다. 또한 저희는 각 나라의 법령에 맞춰 더 안전한 시스템을 만들기 위해서 노력하는데요. 각 거래소와 여러 서비스가 독자적으로 동일한 개발을 계속 진행하면서 법령에 맞추다 보면 아래와 같이 더욱 많은 중복 개발이 발생할 수 있습니다.

이런 상황에서 ELI는 아래 그림과 같은 포지션으로 개발됐습니다. 가상자산을 이해하고 개발하는 네 가지 기능은 ELI가 개발하지만, LINE 그룹 내의 LINE BITMAX나 BITFRONT 및 다른 여러 서비스에서는 직접 가상자산과 통신하지 않고 아래와 같이 ELI를 통해서 통신합니다.

위와 같은 구조로 만들면 ELI가 단일화해서 제공하는 인터페이스를 이용하는 서비스에서는 복잡한 가상자산을 이해할 필요가 없으며, 가상자산을 안전하게 보관하기 위한 노력도 ELI에 모두 위임할 수 있습니다. 법령을 준수하는 측면에서도 ELI를 통해 일괄적이고 효율적으로 대응할 수 있습니다.

이와 같이 ELI는 중복 개발을 줄여 전체적인 효율을 높이기 위해 개발됐습니다. 또한 중복 개발이라고 해서 완전히 동일한 코드가 여러 군데 퍼져 있는 것은 아니기 때문에 저마다 다른 수준의 보안으로 가상자산을 보관할 가능성이 있는데요. ELI를 통하면 많은 서비스에서 동일하게 높은 수준의 보안을 달성할 수 있으며, 법령 준수와 유지 보수, 운영 관점에서도 장점이 있습니다. 

 

ELI의 네 가지 주요 기능

이제 ELI의 네 가지 주요 기능에 대해 소개하겠습니다. 첫 번째로 앞서 말씀드린 입출금과 계좌 생성, 두 번째로 정책, 세 번째로 보안, 네 번째로 네트워크 고립 기능입니다. 첫 번째 기능은 앞서 설명했으므로 두 번째 정책 기능부터 설명하겠습니다.

 

정책

정책 기능은 어뷰징을 막고 사용자의 실수를 방지하는 역할을 합니다. 관련해서 두 가지 기능을 말씀드리겠습니다. 

먼저 출금 계좌 화이트 리스트 기능입니다. 만약 A라는 계좌에서 B라는 계좌로 출금하려고 했는데 잘못 입력해서 C라는 계좌로 보낸다면 사고로 이어질 수 있겠죠. 이런 사고를 방지하기 위해 출금 계좌 화이트 리스트에 등록되지 않은 곳으로는 출금하지 않도록 막아주는 기능입니다.

다음으로는 지출 한도(spending limit) 기능입니다. 특정 금액 이상의 출금이 발생했을 때 더 이상 자동으로 출금되지 않고 관리자의 승인 단계가 추가되는 기능입니다. 예를 들어 일반적으로 거래소에서 하루에 100BTC 정도가 출금됐는데 어느 날 갑자기 1000BTC 출금 요청이 발생했다고 하겠습니다. 문제가 발생한 것일 수도 있고, 일반적인 사용 사례일 수도 있습니다. 이런 상황에서 자동으로 출금하기보다는 잠시 중지하고 관리자에게 확인 알림을 보냄으로써 이게 어뷰징인지 정상적인 사용인지 한 번 확인하는 역할을 하는 기능입니다.

 

보안

세 번째는 가장 심혈을 기울인 보안입니다. 앞서 말씀드린 것처럼 고객의 자산과 회사의 자산을 안전하게 보관하는 것이 중요한데요. 아래 예시와 함께 ELI에서 제공하는 보안에 대해 설명하겠습니다.

먼저 어떤 안전한 금고가 있고, 그 금고 안에 회사와 사용자의 자산이 보관돼 있으며, 해당 금고를 열 수 있는 유일한 방법은 딱 하나 있는 키라고 가정하겠습니다. 꽤 안전해 보이지만 여기서 문제는 키가 하나뿐이라는 것입니다. 키를 가지고 있는 사람이 나쁜 마음을 먹고 금고를 열어 회사와 고객의 자산을 탈취할 수도 있고, 하나뿐인 키를 잃어버릴 수도 있으며, 잃어버린 키를 누군가가 습득해 금고를 열 수도 있습니다. 또한 누군가가 키를 복제할 수도 있고요. 여러 가지 보안 위협이 발생할 수 있습니다.

이와 같이 키가 하나뿐인 것을 가상자산에서는 싱글 시그(single-sig)라고 부릅니다. 싱글 시그는 앞서 말씀드린 것처럼 보안에 큰 위협이 될 수 있기 때문에 저희는 멀티 시그(multi-sig) 기능을 제공하고 있습니다. 멀티 시그는 아래 오른쪽 그림을 보면 쉽게 이해할 수 있습니다.

보시는 바와 같이 키가 3개이고 금고를 열려면 3개의 키 중 2개가 있어야 합니다. 키 하나를 분실했거나 혹은 키 한 개를 가지고 있는 누군가가 악의적인 마음을 품고 금고를 열려고 하더라도 나머지 하나의 키가 없기 때문에 금고를 열 수가 없습니다. 즉, 멀티 시그는 싱글 시그보다 높은 수준의 보안을 제공한다고 말할 수 있습니다. 저희는 이와 같이 ‘m of n’ 멀티 시그 기능을 제공하고 있습니다(금고를 열기 위해 3개의 키 중에서 2개의 키가 필요할 때 ‘2 of 3’ 멀티 시그라고 부릅니다).

멀티 시그를 제공하는 것으로 충분히 안정성을 높였지만 여기서 멈추지 않고 각 키를 좀 더 안전하게 보관할 수 없을지 고민했고, 현재 HSM이라는 특별한 하드웨어를 도입해서 키를 보관하고 관리하고 있습니다. HSM은 키를 전문적으로 보관하는 장치로 이 안에 보관된 키는 내부인을 포함해 어떤 누구도 열람할 수 없는 강력한 보안 장치입니다. 현재 사용하고 있는 HSM은 미국에서 ‘FIPS 140-2 Level 3’까지 받은 제품입니다. 여기서 레벨 3이란 내부 혹은 외부의 누군가가 HSM을 억지로 열어서 안에 있는 키를 탈취하려고 할 때, 금고를 열려는 동작이 감지되면 자동으로 안에 있는 키를 삭제하는 기능입니다. 이와 같이 외부의 위협뿐 아니라 내부 인원까지, HSM에 접근할 수 있는 그 누구라도 HSM 안에 있는 키를 직접 열람하거나 탈취할 수 없는 보안을 제공하고 있습니다.

 

네트워크 고립

마지막으로 ELI만의 네트워크 고립을 구축해 놓았습니다. LINE의 다른 서비스와 공유하지 않는 네트워크이기 때문에 LINE 내 다른 네트워크가 어떠한 공격이나 오류로 장애가 발생하거나 망가지더라도 ELI는 영향을 받지 않습니다. 네트워크 고립이 어떻게 동작하는지 설명하겠습니다. 쉽게 설명드리기 위해서 기술적인 부분을 조금 생략했기 때문에 실제와 완벽하게 동일하지는 않다는 점을 참고해 주시기 바랍니다. 대략 ‘아, 이런 식으로 작동하는구나’라고 이해해 주시면 감사하겠습니다.

 

계좌 생성

먼저 사용자가 LINE BITMAX를 통해서 비트코인 계좌를 생성하고 싶을 때, 어떤 일이 일어나는지 보여드리겠습니다.

사용자가 LINE BITMAX로 계좌 생성을 요청하면 LINE BITMAX에 있는 보안 스태프가 오프라인 보안 룸에 들어가서 오프라인 컴퓨터로 오프라인 클라이언트로 2가지 암호화된 키를 만듭니다. 첫 번째 키는 보안 오프라인 스토리지에 저장합니다. 여기에는 물리적인 금고가 있으며 해당 금고에 키를 저장합니다. 두 번째 키는 LINE BITMAX와 직접 연결돼 있는 KMS라는 서버에 저장합니다. 이렇게 3개 중에 2개의 키가 만들어졌습니다. 이후 LINE BITMAX는 마지막 세 번째 키를 ELI에 요청합니다. ELI는 HSM에 마지막 세 번째 키 생성을 요청합니다. 

3개의 키가 완성됐으니 계좌를 생성할 수 있습니다. ELI는 계좌를 생성해서 LINE BITMAX에 보내고, LINE BITMAX는 최종적으로 사용자 화면에 비트코인 주소를 노출시킬 수 있습니다. 보시는 바와 같이 세 개의 키가 만들어졌지만 세 개 모두 물리적으로 다른 장소이고 네트워크도 다른 곳에 보관돼 있기 때문에 매우 안전한 상태라고 말씀드릴 수 있습니다.

 

출금

두 번째로 출금하는 상황을 말씀드리겠습니다. 사용자가 LINE BITMAX를 통해서 출금 요청을 하면, LINE BITMAX는 KMS에 서명 생성을 요청합니다. 키를 요청하는 게 아니라 서명을 요청합니다. 서명은 키를 통해서 만들어 낼 수 있는 데이터이지만 서명을 보고 키를 역추적할 수는 없습니다. 따라서 LINE BITMAX는 출금 요청 1건과 생성했던 서명 1건을 ELI에 보내고, ELI는 두 번째 서명을 HSM에게 요청합니다. 마찬가지로 키를 요청하는 것이 아니라 서명을 요청하기 때문에 키에 직접 접근하는 상황은 없습니다.

이제 ELI는 요청 한 건과 두 개의 서명을 갖고 있습니다. 이 데이터를 블록체인에 전파하면, 블록체인에서는 이 데이터로 서명이 정말 정확한지 확인합니다. 확인이 끝나면 블록에 담아서 전 세계에 퍼트리고, 해당 수신자의 거래소까지 이 블록이 도착하면 최종적으로 입금이 완료됩니다.

이 과정을 공격하는 관점에서 살펴보겠습니다. 공격자가 만약 ELI에서 HSM으로 접근하면 HSM에 보관된 키는 누구도 열람할 수 없기 때문에 아무것도 얻을 수 없습니다.

다음으로 공격자가 KMS에 접근한다고 가정해 보겠습니다. KMS에 접속된 키는 암호화되어 있기 때문에 탈취하기도 힘들지만, 만약 탈취하더라도 복구화해야 합니다. 설사 복구화에 성공했다고 해도 세 개의 키 중에 하나만 탈취한 것이기 때문에 아무것도 할 수가 없습니다.

마지막으로 공격자가 보안 오프라인 스토리지에 접근했다고 가정해 보겠습니다. 공격자가 해당 장소에 물리적으로 접근해서 영화처럼 모든 보안 장치를 다 뚫어낼 수 있다고 할지라도, 앞서 말씀드린 키와 마찬가지로 암호화되어 있기 때문에 복구화해야 하며, 복구화까지 성공했다고 해도 역시 세 개의 키 중 하나이기 때문에 얻을 수 있는 게 없습니다.

 

향후 계획

마지막으로 ELI의 미래를 소개하겠습니다. 그동안 가상자산 업계에서 가상자산의 보관 방법과 관련해 참 많은 사건과 사고가 있었습니다. 저는 각 나라의 법령을 준수하면서 안정적으로 운영되고 있는 ELI 플랫폼을 단지 LINE 그룹뿐 아니라 전 세계의 수많은 가상자산 홀더와 거래소가 함께 사용하는 미래를 그리고 있습니다. 저희의 가치를 공유해 전 세계 가상자산 시장을 좀 더 안정적인 시장과 인프라로 구축해 나가겠다는 꿈이 있습니다. 앞으로 모든 사용자와 모든 거래소에서 사용할 수 있는 ELI와 지갑 서비스를 만들어 나가는 모습을 지켜봐 주시면 감사하겠습니다. 긴 글 읽어주셔서 감사합니다. 아래에서 발표 영상도 확인하실 수 있습니다.