바이수 2019. 4. 10. 15:12

원서 : https://hyperledger-fabric.readthedocs.io/en/release-1.4/private-data/private-data.html

  • What is private data?
    • channel에 있는 특정 organization들만이 공유하고싶은 'private data'가 있을 경우에~ 그들만의 channel을 새로 파는것이 하나의 방법이 될수는있습니다. 그러나, 새로운 channel은 만드는건... 일단 그 자체가 관리비용을 높입니다. (chaincode version, 정책, MSP 등등 유지비용) 그리고 'private data'를 유지하면서, 모든 channel 참가자가 transaction을 보도록 할수는 없습니다.
    • 그래서 'private data collection' 라는것이 도입 되었습니다. channel의 organizations에 특정 부분집합만이  어떤 'private data'를 보증, 커밋, 쿼리 등을 하는것이죠. 
  • What is a private data collection?
    • 'private data collection'은 두가지의 요소로 이루어져있어요.
      • 1. The actual private data :
      • 'gossip protocol'을 통한 P2P 통신으로 전파되는~ 승인된 organization만이 볼 수있는 데이터를 말합니다.
      • 이 데이터는 승인된 organization peer의 'private state database'에 저장 됩니다. (SideDB라고 불림) 또 이 데이터는 승인된 organization peer의 chaincode으로만 접근을 할수있습니다.
      • 중요한점은, orderer가 이 유동과정에 포함되지 않는다는 것 입니다. 즉! 해당 'private data'는 orderer도 볼 수 가 없습니다. 
      • 'gossip protocol'을 통해서 승인된 organization간 'private data'을 모두 공유해야 하기 때문에, channel에 'anchor peer'라는것을 정해야 합니다. (peer마다 설정값 CORE_PEER_GOSSIP_EXTERNALENDPOINT으로 함)
      • 2. A hash of that data :
      • channel의 모든 peer들의 ledger에 보증 및 순서화 되어 쓰여진 데이터를 말합니다.
      • 해쉬값이란, 특정 transaction의 유니크값이고, 상태검증 및 감사용도로 사용될수있습니다.
    • 기존 ledger에 별도의 독립적인 'private data' 저장소가 생긴거 이겠군요
    • 'private data collection' 맴버들은 'private data'를 (분쟁에 휘말렸거나, 제3자에게 양도 등의 목적으로) 다른 대리인에게 제공할수있습니다. 이럴경우 이 대리인은 'private data hash'값을 계산하여, channel의 ledger와 매칭해보고, 특정시점 이 맴버들간의 상황을 알수있을것 입니다. (분쟁시엔 충분히 오픈되어 법치를 받을수있다는 이야기겠죠?ㅎㅎ) 
  • When to use a collection within a channel vs. a separate channel
    • separate channel : 전체 transaction 및 ledger가 모두 기밀인 경우에 권장.
    • collection within channel : 전반적으로 transaction 및 ledger가 organization에게 공유 되어야 하긴 하는데, 부분적으로 기밀유지가 필요할때 권장. 또한! 'private data'는 block단위로 유통되는것이 아니라~ P2P으로 전파되기 때문에! orderer에게도 해당 transaction이 기밀로 유지된다는점! 명심하세요.
  • A use case to explain collections
    • 무역을 하는 다섯 organization들을 예로 설명해 보겠습니다.
      • 농부(Farmer) : 상품을 해외에 판매.
      • 유통업자(Distributor) : 상품을 국내 이동.
      • 수송업자(Shipper) : 상품을 해외 이동.
      • 도매상인(Wholesaler) : 수송업자 및 유통업자 으로부터 구매.
      • 소매상인(Retailer) : 도매상인 으로부터 구매.
    • '유통업자'는 '농부 및 수송업자'와의 'private data'를 '도매상인 및 소매상인'에기 기밀로 하고 싶을것 입니다. (유통비용 마진을 최대한 때먹어야죠...) 그리고 또 '도매상인'과도 경매내용을 비밀로 하고싶을것 입니다.
    • '도매상인'도 역시 '수송업자' 및 '소매상인'과 기밀을 유지하고 싶습니다.
    • 이럴경우 각각 개별 channel을 만드는것 보다는, 한 channel으로 여러게의 'private data collections(PDC)'을 정의하는게 편하겠죠?
    • 유통업자 peer-node의 ledger에는 복수게의 'private data collections'을 가지게 됩니다. (PDC1,PDC2) 즉, 각 독입적인 SideDB으로 저장됩니다.
      • PDC1 : '농부' - '유통업자' - '수송업자'
      • PDC2 : '유통업자' - '도매상인'
      • PDC3 : '수송업자' - '도매상인' - '소매상인'
  • Transaction flow with private data
    • chaincode에서 'private data collection'을 참조할때는 기존의 transaction 처리방식과 약간다릅니다. 이 'private data'을 transaction 처럼 제안, 보증, 커밋 등 할때~ 비밀보안을 해야하기 때문이죠. 그런 한번 알아보까요?
      • 1. (생략~)
      • 2. (생략~)
      • 3. (생략~)
      • 4. (생략~)
      • 5. (생략~)
  • Purging private data
    • 매우 민감란 데이터가 있을때, 설사 해당 'private data'를 공유하는 당자자라도~ 정부규정 때문이라도~ 백업을 해야 합니다.? 주기적으로 peer의 데이터를 purge 하면서, 차후 immutable한 증거가 될수있도록~ blockchain에 'private data hash'값을 기록하는 작업을 해야 한다는 의미입니다.
    • 이런경우에 'private data'는 peer의 외부DB에 복제되기 건까지는 내부DB에 존재해야 합니다. 즉, chaincode 비지니스 프로세스가 완전 다 계약완료 될때까지는 잘 보관을 의무적으로 해야한다는 의미겠죠.
    • 'private data'가 구성가능한 block수에 맞게 수정되지 않으면, purge 될수있습니다. 'purged private data'는 chaincode으로 쿼리 할 수는 없고, 다른 타peers에서는 사용할수 없습니다.
  • How a private data collection is defined
    • (생략~)

-끝-