Nodehome Platform은 보안 위험에 완벽히 대처하기 위한 다양한 보안 솔루션을 적용하여 사용자가 안심하고 서비스를 개발하거나 이용할 수 있는 Platform입니다.


인프라 아키텍쳐

[그림] Nodehome Platform Architecture
1) 하드웨어 구성
Nodehome platform의 물리적인 하드웨어 구성은 Service Node(Seed, Sapp, SVM)와 Blockchain Node(1세트기준 Node Agent 1대, Peer Node 4대) 로 나누어진다. 기본 장비스펙은 Dual CPU(12 core 24 threads) RAM 16GB, HDD 2TB 이며 추후 user 증가시 충분히 확장이 가능하다. 설치된 OS는 Linux Server(Ubuntu 18.04 64Bit) 이다.

[그림] Nodehome Platform Service Node Architecture

[그림] Nodehome Platform Blockchain Node Architecture
2) 하드웨어 주변 인프라
네트워크 환경에서 서비스를 운영하기 위해서는 가장 중요한 부분은 회선이다. Nodehome platform은 LG U+ 에서 제공하는 비스넷 전용회선을 도입하였다. 장점은 비즈넷망에서 Metro Ethernet 방식으로 라우터와 중단장비등의 추가장비없이 Nodehome platform의 하드웨어장비까지 다이렉트로 제공되는 광케이블 기반 서비스로 접속 불량 및 노이즈를 최소화 하였으며 네트워크 구성을 단순화 시켜 서비스 장애요인을 감소시켰다. 추가로 서비스 확장에 따라 최대 10G까지 속도 지원을 제공 받을 수 있다.
다음은 방화벽과 VPN 장비이다. Nodehome platform에 도입한 VPN장비는 JUNIPER 제품의 SSG-140 으로 네트워크, 어플리케이션 및 데이터 액세스를 보호하기 위한 통합 솔루션을 제공하고 VPN기능까지 제공되어 중소기업과 대기업에서 다른제품의 비해 많은 선호도를 받고 있다. 주요기능으로서 방화벽 성능은 대규모패킷 350Mbps 를 지원하며 초당 방화벽 패킷은 100,000PPS를 제공해준다. 또한 동시 VPN 터널은 최대 500터널을 지원하며, 최대 동시 세션은 48,000 user 보안정책은 최대 1,000 가지 정책을 지원한다. 추후 user 증가로 장비확장시 동일 JUNIPER 제품으로 업그레이드시에는 기존의 정책을 쉽게 적용하여 빠른 시간안에 업데이트를 완료할 수 있다. SSG-140 장비는 기본 시스템, 메모리, 이벤트와 시스템로그를 제공하며 현재 장비의 사용량과 CPU와 Memory를 한눈에 볼수 있다.

[그림] Nodehome Platform VPN Architecture
장비의 대한 현재 설정된 Interface의 Up / Down 상태를 모니터링 할수 있으며, 서비스를 운영 및 관리하기 위한 HTTP, SSL, SSH , Telnet Port 를 설정 할 수 있다. 각 Interface 에 대한 IP 및 Zone 설정과 MIP, VIP, DIP 설정을 제공하며 Routing Table 를 이용하여 Trust 와 Untrust 의 방화벽 정책을 설정할 수 있다. 기본적인 모드로는 L2 모드와 L3 모드 있으며, L2 모드는 기존장비 구성 및 IP 변경 없이 간단하게 설치하여 사용하며 방화벽에 관리용 IP를 설정하여 관리할 수 있으며, L3 모드는 외부와 내부로 나누어 Untrust Zone 과 Trust Zone 으로 설정한다. Untrust zone은 공인 IP를 사용하고 Trust Zone은 방화벽에서 설정한 사설 IP를 사용하는데 Trust Interface를 Route mode 로 설정하고 nat의 정책에 따라 공인 IP와 사설 IP를 모두 사용할 수 있다.

[그림] Nodehome Platform Network Architecture
Nodehome platform의 Blockchain Node는 L3 모드로 하나의 서비스 포트만 오픈 후 Internet Network와 완벽히 분리된 Intranet Network로 운영된다. 통신 보안에서 기밀성(confidentiality)은 비밀스러운 내용을 통신으로 주고 받을 때 불법 침입자가 혹시 통신 내용을 가로채기 하더라도 해독할 수 없도록 데이터를 암호화하는 것이다. 이리하여 Nodehome Platform은 해킹으로부터 차단을 고려하여 기밀성이 보장된 VPN 터널링(인증, 기밀성, 무결성을 보장할 수 있는 일종의 보호막) 방식을 도입하여 네트워크 상에서 데이터의 도청을 막기 위해 암호화를 적용하였다.

3) 터널링 Protocol
터널링은 안전한 네트워크의 일부로서 사용하는 것이며, 한 네트워크에서 다른 네트워크의 접속을 거쳐 데이터를 보낼 수 있도록 하는 기술을 말한다. 터널링은 두 번째 네트워크에 의해 운송되는 패킷들 내에 네트워크 Protocol을 캡슐화함으로써 운영된다.
터널링 Protocol은 캡슐화, 전송, 디캡슐화 과정을 포함하는데, 먼저 라우팅 정보를 포함하는 추가 헤더 정보로 프레임을 캡슐화하여 전송한다. 캡슐화된 프레임을 추가 헤더 정보 내의 라우팅 정보를 기반으로 공중망을 경유하여 터널 엔드포인트로 전송된다. 캡슐화된 프레임이 망의 목적지에 도달하면 디캡슐되어 최종 목적지로 향한다.
터널링 Protocol을 터널링이 수행되는 계층에 따라 분류하여 간략히 설명한다.
터널의 시작과 끝지점을 터널 종단이라고 하며 터널 종단으로 들어가기 전의 IP 패킷은 IP 헤더와 페이로드(payload:전송될데이터)로 구성돼있는데, 터널링으로들어가면 AH(Authentication Header)가 추가돼 캡슐화를 하게 된다. 그 다음에는 ESP(Encapsulating Security Payload) 헤더가 삽입되면서 IP 패킷을 암호화해 전송하게 된다.

[그림] Nodehome Platform VPN Tunneling Architecture
Nodehome platform 은 Ubuntu의 기본 지원인 iptables 방화벽 정책을 도입하여 운영을 할려고 설정도 해 보았다. 하지만 iptables의 로컬의 대한 방화벽 정책은 충분하였으나 세부적인 정책인 타지역과의 데이터 송수신의 대한 원할한 패킷 전송이 어렵워 VPN장비의 터널링 방식을 도입하게 되었다. 그리하여 Nodehome platform은 이러한 특징을 고려하여 설계된 시스템으로 Blockchain Node(Node Agent, Peer Node)는 암호화된 VPN네트워크의 터널링 Protocol 캡슐화방식으로 운영되며, Service Node(Seed, Sapp, SVM)와는 완전히 분리된 네트워크로 운영된다. 이렇다보니 Blockchain Node(Node Agent, Peer Node) 와 Service Node(Seed, Sapp, SVM)는 물리적으로 완전히 분리되어 있으며, 어느 한쪽으로만 해킹이 불가능하고, 원격으로도 해킹이 불가능하게 구축되어 서비스를 운영하고 있다. 또한 이렇게 서버마다 vpn의 방화벽 기본설정이 세팅되어 있지만 혹시 모를 대비책으로 모든 서버장비에는 기본 방화벽인 iptables 의 방화벽 정책을 VPN의 정책과 동일하게 세팅되어 있어 이중적으로 보안 구축에 최선을 다하였으며, 서버의 접속은 오로지 로컬망에서만 접속이 가능하다. 우분투 16버전까지는 /etc/network/interfaces/ 네트워크를 관리하였지만, 17버전부터는 netplan 으로 변경되었다. Netplan은 시스템이 부팅할 때 /etc/netplan/*.yaml 파일을 읽어드려 랜더링하고 랜더링한 설정값에 따라 네트워크 데몬들을 가동하게 된다. 이러한 특성은 보안이나 속도면에서 기존 버전보다는 우수한 성능을 발휘하게 하기 때문에 Nodehome platform 의 모든 서버 장비는 최신버전인 Ubuntu 18.04 를 설치 네트워크설정은 netplan 로 iptables 방화벽을 세팅하여 운영하고 있다.

[그림] Nodehome Platform ubuntu18.04 netplan Architecture

프로토콜 아키텍쳐

1) Nodehome Platform Service Node 보안
Node의 생성과 생명주기
Service Node의 운영은 두 가지 방식이 존재한다. 원하는 서비스를 Nodehome platform으로 직접 개발하여 참여하거나, 이미 서비스 중인 다른 Node Network에 같은 node server로 추가하여 참여할 수 있다.
Service Node는 누구나 원하는 서비스를 직접 구현하고 블록체인 기반으로 서비스할 수 있도록 지원한다. 이를 위해서는 서비스 목적, 화면 인터페이스, 거래수수료, 이익배당 등과 같이 자세한 사항까지 계획한 후 Service node를 개발하면 된다.
서비스의 시작은 seed server를 통해 이루어지게 된다. 개발된 서비스를 seed server에 등록 요청을 한다. 이 후 원하는 수 만큼의 추가 서비스 host를 추가 하거나 홍보를 통해 다른 사람의 서비스 참여를 유도 할 수도 있다. 이 서비스 host (Service node)의 수가 많으면 많을수록 보안과 서비스 안정성이 확보될 것이다.
만약 누군가에 의해 이미 개발되어 운영되고 있는 서비스의 운영에 참여 하고자 한다면, 물리적인 서버를 준비하고, 만들어진 해당 Service node의 open source를 다운로드 하고 일련의 설정과정을 마친 후 seed server를 통해 해당 host 추가 요청하여 서비스에 참여할 수 있다.


[그림] Service node의 생명주기

Service Node Network
Service Node를 운영하기 위해서는 하나의 Service Node 만으로는 운영할 수 없습니다. Service Node는 집합체인 Service Node Network를 이루어 프로토콜을 검증합니다. 하나의 거래(Transaction)는 다수의 Service Node를 거치며 통신 Packet의 위변조를 검증합니다. Service Node Network의 검증을 통과한 신뢰할 수 있는 거래(Transaction)만 Blockchain에 등록 됩니다.
이러한 검증 프로세스는 Terminal Node, Service Node, Blockchain Node간의 인터페이스로 보안기능이 내장된 프로토콜로 구현됩니다.

Service Node API
Service node에는 마켓, 계약, 커뮤니티 등 다양한 서비스를 개발하는데 필요한 API 기능을 제공하고 있다.
1. Seed host와 service node host의 관리에 필요한 Host API를 제공한다.
2. 블록체인의 디지털자산 거래, Transaction history의 API를 제공한다.
3. 콘텐츠 데이타를 블록체인을 활용해 구현할 수 있도록 지원하는 API를 제공한다.
4. 기타 화면개발에 필요한 다양한 API와 보안적용을 위한 API도 함께 제공하고 있다.

필요 기술
Service node는 웹서버로 Terminal node와 Chain node간의 중요한 보안 프로토콜 API를 제어하기 위하여 다양한 개발 언어를 사용한다. Jsp, ASP, Java, JavaScript등 웹서비스를 위한 다양한 API를 함께 제공한다.

SEED
Seed server는 서비스 노드의 집합체인 node network에서 문제가 있는 node를 제거하면서 안정적인 서비스가 유지되도록 하는 blacklist관리 프로세스를 운영하고 있다..
또한, 서비스중인 node network에 새로운 node가 등록될 때에도 node가 등록 전 이미 운영중인 node와 동일한지를 검증한 후 node network에 추가된다.


[그림] Node blacklist management

SVM(Sapp)
SVM Library와 Sapp 소스는 일반적인 Web 소스로 구현되었고, 서비스 개발 역시 WEB 으로 구현하고 누구나 service node운영에 참여할 수 있도록 배포하여 공유하는 소스다. 이와 같은 방식은 위변조가 쉬워 서비스 운영에 문제가 발생 할 수 있다.
하지만, 일반적인 웹 방식과 다르게 Session과 중요정보를 관리, 보관하지 않는다. 중요정보는 휴대폰 지갑앱(사용자의 본인 휴대폰)에만 보관하고 암호화 보안 인터페이스로 다른 sapp 또는 터미널 App, blockchain node와 통신하게 된다.

SVM보안 기본 정책
1. 중요정보는 블록체인, 파일에 보관하지 않고 사용자의 지갑앱에만 저장 된다.
2. Blockchain에 접근할 때 통신 packet의 유효성을 검증하고, host server의 소스를 검증한다.
3. node list에 변화가 발생할 경우 내부 검증 프로세스로 node간 소스의 보안을 체크한다.
4. 문제 있는 node발견 시 즉시 다른 node에 broadcasting하고 blacklist 처리를 한다.

SVM ? NA ? SEED
SVM의 모든 통신 packet은 NA를 통해 blockchain으로 전달된다. 이때 허가된 service node의 packet만이 정상적으로 blockchain으로 전달하게 된다. 만약 허가받지 않은 요청지에서 전송된 packet이 있을경우 별도의 blacklist로 등록 되고, 반복적인 요청을 24시간동안 차단하게 된다.


[그림] node agent 검증 프로세스

2) Nodehome Platform Terminal Node 보안

[그림] Software security structure

Terminal Node
  • Terminal Node내에서 생성된 지갑 Key는 OS내에 zero padding 기법의 암호 블록 체인(cipher-block chaining, CBC) 모드를 사용하는 AES 암호화 방식으로 암호화되고, SHA256 Hash 함수를 통해 이중 암호화되어 안전하게 저장된다.
  • Terminal node가 Service Node에 접속 후에는 Terminal Node상의 web browser 내의 Java Script Interface를 이용하여 안정적이고 독점적인 통신 채널이 구성된다.
  • Terminal Node는 거래(Transaction) 등의 정보를 전송할 때, Service Node을 통해 Blockchain Node로부터 난스 값(Nonce Value)을 전송 받아, 서명 키(Signature Key)를 생성할 때 이용하여, 거래(Transaction) 등의 정보의 무결성을 검증한다.
  • Terminal Node는 거래(Transaction) 등의 정보를 전송할 때, 다수의 Service Node와 임의의 데이터 통신을 진행함으로, 거래 정보에 대한 검증을 진행하여 거래에 대한 무결성 및 안정성을 보장한다.
  • Terminal Node를 사용하기 위해서는 사용자 확인을 위한 암호가 사용되며, 이 암호는 SHA256 Hash 함수를 통해 암호화되어 내부 저장소에 안전하게 보관되며, 또한 일정시간 Terminal Node를 사용하지 않을 시에는 Auto sign out을 통해, 사용자의 Terminal Node를 다른 사용자가 사용할 수 없도록 보호한다.
  • 지갑의 백업/복원 시에 사용되는 키보드(Keyboard)는 내장된 키보드가 아닌 자체 자체 구현된 키보드로 Web hacking으로부터 안전하다.

  • 3) Nodehome Platform Network 보안
    Nodehome Platform은 Internet Network와 Intranet Network의 두가지 네트워크를 분리 운영함으써 보안성을 제고합니다. Sapp는 Internet Network에 위치하여 사용자들이 자유롭게 접속할 수 있는 반면에 Blockchain Node는 Internet Network와 분리된 Intranet Network에 위치하게 되며 방화벽을 통해 허가된 접근 외에 비정상적인 접근을 원천적으로 차단함으로써 Blockchain Node는 해킹으로부터 안전합니다.

    4) Nodehome Platform Ptotocol 보안
    Nodehome Platform의 Protocol은 크게 3 부분으로 구분되는데, Header, Body, Footer가 그것입니다.
    Header에는 Command, Protocol ID, Version이 있으며 좀더 자세히 설명하면 아래와 같다.
  • Command는 명령어 이름입니다.
  • Protocol ID는 Response Packet에도 포함되어 있다. 이는 Command가 비동기적으로 콜백 리턴하는 경우 Command Response를 구분하여 Call back이 어떤 요청에 대한 응답인지를 구분하는 용도로 이용된다.
  • Version은 프로토콜의 호환성을 보장하기 위한 구별자이다. Body는 다수의 Parameter를 가지며 Parameter는 숫자형, 문자형 등의 데이터를 포함할 수 있습니다. Footer에는 Nonce Number, Signature, Public key가 포함됩니다.
  • Nonce Number는 임의의 숫자로 시스템 난수 생성기(System Random Generator)를 이용하여 생성되며, 똑같은 기능의 Command에도 다른 Nonce Number가 적용되어 다른 서명값을 가지게 만들어, 같은 Command에 같은 값이 사용되지 않도록 합니다. 또한 Nonce Number에는 등록형과 임의형이 있으며, 특히 등록형의 경우는, 블록체인으로부터 할당 받은 값을 이용하는 것으로 Command의 호출이 허가형으로 동작되도록 하는 특징을 가지게 한다.
  • Signature는 서명자를 확인하고 서명자가 Packet에 서명을 하였음을 증명하기 위하여 Packet의 내용을 Hash value로 만들어 첨부한 것이며, Packet의 무결성을 보장하기 위한 목적으로 포함되어 있습니다. 수신된 Packet이 해킹되어 위변조 되지 않았음을 확인하기 위하여, Blockchain Node는 도착한 Packet에 대하여 Signature값을 이용하여 Packet의 무결성을 검증하게 된다.
  • Public Key는 Signature와 함께 Packet의 무결성을 확인하기 위하여 사용되며, 서명자를 구분하기 위한 구별자(ID)로 이용된다.

  • [그림 1] 프로토콜 Architecture
    5) Nodehome Transaction Packet 보안
  • Nodehome Platform은 Packet에 Signature포함하여 무결성을 보장하는 것에 더하여, 권리의 승계, 자산의 이동 및 분할등 이력이 필요한 Transaction은 이전 거래의 해쉬값이 포함되는 구조를 같고 있어서 중복 전송을 이용한 해킹 또는 중복 전송으로 이한 오류를 원천적을 방지하며, 완료된 거래를 변경하거나 삭제하는 등의 행위에 대하여 검증 가능한 구조를 갖추고 있다.


  • [그림] Transaction Packet structure