Architecture

Introduction

Wallet SDK는 Secure Storage와 외부 분산 키 저장소를 활용한 MPC 기반의 키 관리 기술을 제공하는 안전한 지갑 SDK입니다. 서비스 제공자는 Wallet SDK를 통해 운영중인 서비스에 손쉽게 지갑을 도입하고 커스텀할 수 있습니다.

Wallet SDK의 구조와 동작

Wallet SDK는 지원하는 모바일 운영 체제에 따라 Android SDK(Kotlin)와 iOS SDK(Swift)로 구분되며, 아래 그림에서 Mobile Device 영역 내부에 묘사된 것과 같이 모바일 애플리케이션 내부에 Embedded 되어 배포됩니다.


Actor의 정의

본 문서의 이해를 돕기 위해, 각 Actor의 명칭과 역할을 아래와 같이 정의합니다.

  • 서비스 제공자: 자신의 지갑 또는 블록체인 관련 서비스를 구현 및 제공하는 주체입니다. 서비스 사용자를 위한 모바일 애플리케이션을 구축하며, 이 과정에서 사용자에게 안전하고 편리한 블록체인 계정/키 관리 기능을 쉽게 제공하기 위해 Wallet SDK를 사용할 수 있습니다.
  • Lambda256: Wallet SDK의 관리 주체입니다. 누구나 쉽게 지갑 관련 애플리케이션을 구현할 수 있도록 Wallet SDK를 공개적으로 배포하고 유지보수하는 역할을 수행합니다. 또한 Wallet SDK와 연동된 Web UI 컴포넌트 및 Backend Infrastructure를 운영합니다.

Architecture 구성요소

Wallet SDK 구조 다이어그램에 묘사된 각 구성요소에 대한 설명은 아래와 같습니다.

  • Application
    Wallet SDK를 사용하여 서비스를 제공하는 애플리케이션입니다. 서비스 제공자는 Wallet SDK를 활용하여 지갑 서비스 또는 블록체인 서비스를 제공하는 애플리케이션을 구축할 수 있습니다.
  • UI/Business Logic
    서비스 애플리케이션 내부에서 서비스와 관련된 UI 및 관련 비즈니스 로직이 구현되는 영역입니다. 서비스 제공자의 의도에 따라 자유롭게 구현 가능하며, Wallet SDK 연동을 위한 일부 로직이 포함되어야 합니다.
  • Wallet Core Mobile SDK
    모바일 버전의 Wallet SDK입니다. 안드로이드와 iOS 버전 모두 지원하며 모바일 애플리케이션 내부에 포함되어 블록체인 조회 연동 및 키 관리 로직을 담당합니다. 내부 구성 요소는 아래와 같습니다.
    • WebView Handler
      WebView 영역에 정의된 UI를 보여주기 위한 모듈입니다. Lambda256 web 서버에서 제공하는 완성된 형태의 지갑 UI를 조회하여 제공할 수 있습니다.
    • Key Manager
      모바일 기기에서 제공되는 하드웨어 기반 Trusted Environment 내부에 존재하는 Secure Storage 연동을 위한 모듈입니다. Trusted Environment에서 생성된 키 쌍을 Secure Storage에 안전하게 저장하거나, 저장된 키 정보를 조회하여 애플리케이션 레벨로 로드하는 역할을 수행합니다.
    • Network Handler
      Lambda256 Backend와의 통신을 위한 모듈입니다. 지원하는 블록체인 네트워크 목록을 관리하며, 각 체인 환경에서 필요한 정보를 조회하는 Nodit API를 호출하고 처리할 수 있습니다.
    • WebView Bridge
      In-App SDK를 사용하는 과정에서 필요한 정보를 애플리케이션 내부에서 Embedded 된 UI로 제공하기 위해, SDK 내부에서 조회 및 가공된 데이터를 정의된 WebView 영역으로 넘겨주는 역할을 수행하는 연동 모듈입니다.
  • Trusted Environment
    모바일 환경에서 제공되는 신뢰할 수 있는 실행 환경을 의미합니다. 하드웨어 또는 소프트웨어 레벨로 구현되며, 일반적으로 하드웨어 레벨에서 일반 애플리케이션 실행 환경과 물리적으로 격리된 별도의 환경으로 제공됩니다. Trusted Environment 내부에서 수행되는 모든 프로세스는 일반 보안 수준의 애플리케이션들로부터의 접근이 OS에 의해 강력하게 제한되기 때문에 보안 측면에서 안전하고 신뢰할 수 있는 실행이 보장됩니다.
  • Secure Storage
    모바일 환경에서 제공되는 안전한 저장소로, 일반적으로 OS에 의해 제공되는 Key 저장소를 의미합니다. 안드로이드의 경우 KeyStore, iOS의 경우 Keychain 이라는 이름의 Key 저장소가 제공됩니다.
  • MPC Key Management
    분산된 외부 저장소에 Secret Share를 보관합니다. 현재 지갑의 니모닉 엔트로피를 3개의 Secret Share로 분할하여 각각 분리하여 저장합니다. 지갑의 복구를 위해서는 3개 중 2개의 서버에서 Secret Share를 불러와 니모닉을 복구해야 합니다.

MPC Key Management

Wallet SDK의 MPC 기술은 개인 키를 3분할하여 분산된 외부 저장소에 Secret Share를 보관합니다. 모바일 기기 내부에서 생성 및 관리되는 개인키를 안전하게 백업하고 복원하기 위해, 개인키를 MPC(Multi-party Computation) 알고리즘으로 분할하여 여러 조각(Share)으로 나눈 뒤 각각의 분산 저장소에 저장합니다. 보안 요건에 따라 각 저장소는 외부로부터의 탈취 위협으로부터 안전하게 보호되어야 합니다. MPC 기술을 적용함으로써 하나의 저장소가 탈취 되더라도 다른 저장소에 저장된 키 조각이 유출되지 않는다면 개인키는 복원이 불가하므로 안전하게 관리됩니다.


서비스 제공자가 Secret Share 저장소를 임의로 수정할 수 있으나, Wallet SDK가 외부 저장소의 안전까지 책임지지는 않습니다. 기본 설정 값은 유저 디바이스, 유저 클라우드, Lambda256 서버로 구분되어 있습니다.