검수요청.png검수요청.png

위스퍼 프로토콜

해시넷
이동: 둘러보기, 검색

위스퍼프로토콜(whisper protocol)이란 가십(gossip) 기반의 메시지 및 임시적으로 값을 저장하는 프로토콜이다.

개요[편집]

디앱(DApp)의 상호작용을 위한 P2P 커뮤니케이션 프로토콜이며 하이 레벨(High level)프로토콜이다. 수신인과 발신인에 대한 완벽한 익명성 제공을 하지 않으며, 메시지 지속 시간(Time to Live)의 설정이 불가능하다. 또한 저장된 값은 만료될 때까지 시스템에 존재하며 저장된 값을 확인하는데 더 용이하고, 네트워크에 참여하는 노드들에 메시지를 보내고 새로운 메시지는 새로운 노드가 네트워크에 참여하더라도 만료될 때 까지 복제된다.[1]

등장배경[편집]

이더리움의 전 CTO, 개빈우드(Gavin Wood)가 이더리움 개발 초기 단계에 (DApp) 간의 커뮤니케이션을 돕기 위해 설계한 메시징 프로토콜(Decentralized messaging protocol)이다. 2014년 10월 12일에 위스퍼 프로포셜(Whisper Propasal)을 시작으로 꾸준히 업데이트를 해왔으며 현재 Go Ethereum 기준 위스퍼 v6가 가장 최신 버전이며, 패리티(Parity)도 지원하고 있다.

특징[편집]

P2P 커뮤니케이션 프로토콜[편집]

메시지를 전파하기 위해 이더리움의 데브피투피 와이어 프로토콜(DEVp2p wire protocol) 활용 데브피투피(DEVp2p)는 분산 네트워크에서 노드 간 P2P 커뮤니케이션을 돕는 트랜스포트 레이어(transport layer) 네트워크 프로토콜 모음으로 서브 프로토콜(sub-protocol)을 관리한다. 또한 이더리움 밖에서도 사용이 가능하다. 또한 위스퍼(Whisper)는 데브피투피(DEVp2p)의 서브 프로토콜로 통신하며 블록체인을 거치지 않아 가스비를 소모하지 않는다.

멀티 캐스팅 및 브로드 캐스팅[편집]

멀티캐스트(multi-cast)로 복수의 대상에게 메시지 송신이 용이하다. 또한 메시지를 보내면 해당 메시지는 네트워크 전체에 전파되며, 의도한 수신인 또는 메시지 주제(Topic)의 공개키(public Key)를 통해 해당 메시지를 암호화한다. 이러한 공개-개인키(public0private key) 암호화 방식때문에 신원 기반 메시징 시스템으로라고도 불리며, 모든 메시지는 메시지 지속 시간(Time to Live)를 가진다. 메시지를 수신하더라도 재암호화하여 메시지 지속 시간 내에 다른 위스퍼 노드에 재전파가 가능하다.

다크(Dark) 커뮤니케이션 지원[편집]

특정 모드를 활용하면 메시지/패킷을 추적, 조사할 수 없으며 메타 데이터를 유출하지 않는다. 즉, 클라이언트가 자신에게 전달된 메시지일지라도 메시지 지속 시간 내에 끊임없이 재전파하기 때문에 발신자와 수신자를 특정하기가 어려우며, 메시지의 서명(signature)과 암호화(encryption) 여부를 조합하여 어느 정도의 데이터를 공개할 것인지 보안 수준을 선택할 수 있다.

Privacy Level 조정[편집]

보안 레벨은 자기 마음대로 조정하여 트윗과 같이 유사하게 사용할 수 있거나 불특정 다수에게 전파할수도 있게하거나 암호화된 익명 메시지로 전파하거나 암호화된 서명 메시지로 이메일같이 사용할 수도 있다.

장점[편집]

메시지 지속 시간 내에 지속적인 메시지 전파로 메시지 수신자/발신자를 숨긴다. 가십을 이용한 릴레이(relay) 방식으로 메시지 전송 중에 수신인, 발신인, 메시지 내용 등의 메타 데이터ip, 패킷을 100% 숨길 수 있다. 또한 수신인의 SECP-256k1 공개키로 메시지 암호화, 수신인은 개인키복호화하는 신원 기반 메시징 시스템을 통해 신뢰성이 높다.

단점[편집]

대규모 데이터 처리가 어렵다. 64KB 이하 처리에 최적화 되어있기 때문에 라이팅 되어 시간에 민감한 애플리케이션에서 사용이 어렵다. 또한 PoC(Proof of Concept) 단계가 베타 버전이며 확장성 문제가 있었지만 현재는 Whisper v2.0 업데이트로 확장성에 대한 문제는 해결하였다.

구성요소[편집]

봉투(Envelope)[편집]

데이터그램(Datagram)의 패킷과 같은 역할을 한다. 구성요소로는 만료, 메시지지속시간, 주제, 데이터, 논스로 구성되어 있다.

  • 만료(expiry)는 4바이트로 유닉스 타임(UNIX Time)으로 만료시간을 설정한다.
  • 메시지지속시간(Time to Live)는 4바이트로 초 단위의 메시지지속시간을 설정한다
  • 주제(topic) 4바이트로 임의 데이터로 배열이 될 수 있으며 인덱스와 같은 개념이다. 블룸필터(Bloom filter)를 이용하여 공간의 효율성을 높이며 자료구조로 압축되어 잔달된다.
  • 데이터(data)는 암호화된 메시지(Payload)를 포함하며 포함 임의 사이즈는 Byte array이다.
  • 논스(Nonce) 8바이트로 임의 데이터 및 네트워크 과부화 방지를 위한 작업 증명(PoW) 계산에 활용된다.

메시지(Messages)[편집]

봉투(Envelope)의 데이터를 구성하며 항상 암호화 되어있다. 구성요소로는 플래그, 페이로드, 서명, 보조 필드가 있다.

  • 플래그(flag)는 1바이트로 플래그의 비트 0은 서명 존재 여부를 나타내고 나머지는 임의 값으로 지정되어있다.
  • 페이로드(payload)는 실제 메시지 컨텐츠를 담고 있으며, 수신자의 SECP-256k1 공개키(public key)로 암호화되며, 수신자가 없을 경우 AES-256의 임의의 키로 암호화된다.
  • 서명(signature)는 65바이트로, 암호화되지 않은 페이로드의 SHA3-256의 해시값을 가지고 있다.
  • 보조 필드(auxiliary field)는 최대 4바이트로 구성되어 있다.

토픽(Topics)[편집]

트위터의 해시태그와 같은 개념으로 메시지 발신인 또는 어플리케이션 레이어(application layer)가 설정한 데이터의 SHA3-256 해시값을 구하고, 그 해시값의 왼쪽 첫 4바이트로 구성된다. 주제의 확장성 및 충돌성 문제를 고려하여 4바이트로 설정하며 노드는 메시지를 받으면 토픽을 확인하고, 가지고 있는 키를 통해 복호화를 한다. 만약 복호화가 실패할 경우 다른 노드로 전송시킨다.

작업 증명(Proof of work)을 통한 디도스(DDoS) 방지[편집]

봉투(Envelope)에 대한 작업 증명을 통해 스팸 메시지 및 네트워크 과부화를 방지하며, 메시지 크기와 메시지 지속 시간(Time to Live)가 높으면 더 많은 작업이 필요하다. 또한 작업 증명은 자체적으로 설정 가능하며 메시지를 전달 받은 노드는 작업 증명 값이 너무 낮으면 메시지를 거부할 수 있다. 대용량의 메시지(Size)나 긴 메시지지속시간은 네트워크에서 패널티를 받게 된다.

PSS와의 차이점[편집]

PSS는 기본적인 위스퍼 기능에 스웜 라우팅 프로토콜(swarm routing protocol)을 결정론적(deterministic) 라우팅에 추가한다. PSS와 함께 라우팅은 제공된 부분 주소(Partial address)까지 카데밀라(Kademlia)를 따라 수행하고 이후에는 가십이 처리한다. 즉, 위스퍼와 달리, 새로운 노드들이 현재 메시지 데이터 베이스에 업데이트 되는 DHT 같은 기능이 존재하지 않는다. 또한 DoS 보호도 위스퍼는 작업 증명을 통해 하는 반면 PSS는 스왑 인센티브(Swap incentives)로 하며 통신이나 익명성을 보장하는 경우도 위스퍼는 중개, 수신인이 결정하는 반면 PSS는 발신인이 결정고 있으며 API 암호화도 위스퍼는 의무적으로 해야하지만 PSS는 선택적이이다. 키 교환의 경우도 위스퍼는 적용되지 않지만 PSS는 선택적으로 적용할 수 있으며 메시지 보존 기간의 경우 위스퍼는 발신인이 결정하고 PSS는 의도한 노드에 각각 전달되기만 한다.[2]

각주[편집]

  1. 장진호, 〈위스퍼(Whisper)란 무엇이고 어떻게 사용할 수 있을까?〉, 《구글드라이브》, 2019-05-28
  2. Status Korea 공식, 〈이더리움 개발 위스퍼(Whisper), PSS 비교〉, 《네이버 블로그》, 2018-10-22

참고자료[편집]

같이보기[편집]


  검수요청.png검수요청.png 이 위스퍼 프로토콜 문서는 블록체인 기술에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.