[그림] Terminal Node Architecture


[그림] Terminal Node Process


개요
  • Terminal Node는 Web browser를 내장한 사용자 응용 프로그램이다. Mobile Application(Android, iOS)과 PC Application으로 Service Node와의 데이터 통신을 통해 사용자에게 Service Node의 다양한 서비스를 제공하며, Service Node를 경유해 Blockchain Node와 연결된다.
  • Terminal Node은 Service Node를 통한 Blockchain Node와의 거래(Transaction)에서 가장 중요한 지갑의 Key를 생성하고, 안전한 내부 저장소에 보관하며, 거래(Transaction)시에 서명(Digital Signature)를 하는 기능을 가지고 있다. Terminal Node는 지갑 Key의 생성과 보관을 위한 다양한 보안 알고리즘(Security Algorithm)과 보안 인증 기능을 갖추고 있다. Terminal Node는 Web Browser와 Java script Interface를 이용하여 Service Node와 필요한 기능을 상호 정의된 API를 주고 받으며 거래(Transaction)시에 무결성과 안정성을 보장한다.
  • Terminal node는 Seed Node를 통해 다수의 분산화된 Service Node의 URL를 수집하고, 임의의 Service Node에 접속하며, 거래(Transaction)시에 발생할 수 있는 Service Node의 소스 및 거래 데이터 위변조를 방지하기 위해, 분산화된 다수의 Service Node에 임의로 접속하여 검증을 수행한다. 이러한 과정을 통해 사용자에게 안전한 거래(Transaction)를 보장한다.
  • 이러한 Application 개발을 위해 Terminal Node는 Nodehome Platform내의 Interface 규칙에 맞는 기능 확장성 API를 제공한다. Terminal Node가 Service Node에 접속 후에는 Terminal Node내의 Web browser내의 Java script interface를 이용하여 안정적이고 독점적인 데이터 통신 채널을 연결한다. 통신 채널 내에서 상호 정의된 API는 서비스 개발자가 서비스 사용자의 선호도에 맞는 다양한 Application(응용 프로그램)을 쉽게 만들 수 있도록 한다.

  • 지갑의 관리
  • 안전한 지갑의 생성을 위해, OS내의 디바이스 파일(Device file) 을 이용한 의사 임의(pseudo-random) bit를 이용하여 128 bit 시드 값(seed value)를 생성한다. 이 시드 값(seed value)을 기반하여 HD Wallet(Hierarchical Deterministic Wallet) 구조의 지갑 키(Private/Public Key)를 생성한다.
  • 생성된 지갑의 key는 Base58 기반의 checksum encoding을 통하여 다시 한번 암호화 되어 Protocol 상에서 이용되는 공개키(public key)생성에 사용된다.
  • 지갑 Key는 OS내에 zero padding 기법의 암호 블록 체인(cipher-block chaining, CBC) 모드를 사용하는 AES 암호화 방식으로 암호화되고, SHA256 Hash 함수를 통해 이중 암호화되어 안전하게 저장된다.
  • 생성된 128 bit 시드 값(seed value)는 사용자의 가독성을 높여주는 연상기호 단어열(mnemonic word sequence)로 encoding되어, 지갑의 백업 또는 복원할 때 사용되며, 이는 사용자가 Terminal Node에 해당되는 기기가 변경될 때 지갑을 이동 할 수 있게 한다.

  • [그림] Mnemonic Word Sequence Encoding

  • Terminal Node만이 개인키(Private key)를 가지고 있으며, 이 개인키(Private key)는 백업 과정 이외에는 외부에 노출되지 않는다. 그렇게 때문에 서명(Signature)이 필요한 프로토콜의 경우 반드시 Terminal Node의 서명 API를 통해야만 가능하다.

  • 로그인과 자동 로그아웃
  • Terminal Node를 사용하기 위해서는 사용자 확인을 위한 암호가 사용되며, 이 암호는 SHA256 Hash 함수를 통해 암호화되어 내부 저장소에 안전하게 보관된다.
  • 개발자는 OAuth2.0 인증을 사용하는 Google, Facebook, Twitter, Kakao, Naver 등의 인증을 선택적으로 사용자 편의에 따라 개발 또는 추가하여 사용할 수 있다.
  • 개발자는 생체 인증 기능을 사용하여 Terminal Node의 인증을 지문(Fingerprint), 얼굴(Face)로 대체하여 사용할 수 있다.
  • 또한 일정시간 Terminal Node를 사용하지 않을 시에는 Auto sign out을 통해, 사용자의 Terminal Node를 다른 사용자가 사용할 수 없도록 보호한다.

  • Service Node 연계
    - Seed Node
  • Terminal Node는 처음 한번 Seed Node에 접속하여 다수의 분산화된 Service Node의 URL를 수집하여, 임의의 Service Node에 접속한다. Terminal Node에서는 필요시에 Service Node의 위변조 여부 및 거래 데이터 위변조를 탐지하기 위해, 동일한 요청을 다수의 Service Node 중에서 임의 (Random)로 선택하여 다중 요청을 하며 이 응답을 비교한다. Service Node에 정의된 Service Code(예를 들면, 병원 service, 음악 service 등)에 따라, 선별적으로 접속이 가능하다.

  • [그림] Seed Node 와 Service Node 흐름도

  • Terminal Node는 선호하는 Node (네트워크 속도, Service Node 평점, 사용자 추천 등)를 선별하여 접속할 수 있는 기능이 있다. 이는 Service Node 운영자에게 Service Node의 운영을 잘해야 하는 동기를 부여한다.
  • - Service Node 데이터 통신
  • Terminal node가 Service Node에 접속 후에는 Terminal Node상의 web browser 내의 Java Script Interface를 이용하여 안정적이고 독점적인 통신 채널이 만들어진다.
  • Terminal Node는 거래(Transaction) 등의 정보를 전송할 때, 다수의 Service Node와 임의의 데이터 통신을 진행함으로, Terminal Node와 Service Node간의 Session을 별도로 유지하지 않는다. 아래 그림은 Transaction이 진행되는 과정을 보여준다.

  • [그림] 거래(Transaction) 흐름도

  • 처음에 Service Node가 서명이 없는 거래(Transaction) Packet으로 거래(Transaction)을 시작한다. 요청 받은 Terminal Node는 거래(Transaction) Packet의 검증을 위해 다른 Service Node로 거래 정보에 대한 검증을 요청한다. 검증에 이상이 없는 경우 Terminal Node는 서명(Signature)을 하고 Service Node에게 서명된 거래(Transaction) Packet을 보낸다. 서명된 Transaction Packet을 받는 Service Node는 Blockchain Node에 거래(Transaction)을 요청한다. 이와 같은 Transaction Sequence를 통해 거래의 무결성 및 안전성이 보장된다.