본문 바로가기

IT/Did(Edge-sandbox)

암호화된 데이터 저장소 EDV 개요(Encrypted Data Vaults 0.1)

digitalbazaar.github.io/encrypted-data-vaults/

 

Encrypted Data Vaults 0.1

We store a significant amount of sensitive data online, such as personally identifying information (PII), trade secrets, family pictures, and customer information. The data that we store is often not protected in an appropriate manner. This specification d

digitalbazaar.github.io

요약

우리는 개인 식별 정보 (PII), 영업 비밀, 가족 사진 및 고객 정보와 같은 상당한 양의 민감한 데이터를 온라인에 저장합니다. 우리가 저장하는 데이터는 종종 적절한 방식으로 보호되지 않습니다. 이 사양은 스토리지 공급자에서 암호화 된 데이터를 저장, 인덱싱 및 검색하기위한 개인 정보 보호 메커니즘을 설명합니다. 개인이나 조직이 스토리지 공급자가 데이터를보고, 분석, 집계 또는 재판매 할 수없는 방식으로 데이터를 보호하려는 경우 종종 유용합니다. 이 접근 방식은 또한 애플리케이션 데이터가 이동 가능하고 스토리지 제공 업체 데이터 침해로부터 보호되도록합니다.

 

1. 소개

이 섹션은 비표준입니다.

우리는 개인 식별 정보 (PII), 영업 비밀, 가족 사진 및 고객 정보와 같은 상당한 양의 민감한 데이터를 온라인에 저장합니다. 우리가 저장하는 데이터는 종종 적절한 방식으로 보호되지 않습니다.

일반 데이터 보호 규정 GDPR(유럽연합 일반 개인정보 보호법 'General Data Protection Regulation')과 같은 입법은 주로 데이터 유출시 공급자가 책임을 지게함으로써 개인의 프라이버시를 더 잘 보존하도록 서비스 공급자를 장려합니다. 이러한 책임 압력으로 인해 공급자는 종종 고객을 적절하게 보호 할 수있는 기술을 갖추고 있지 않은 기술적 격차가 드러났습니다. 암호화된 데이터 볼트(EDV)는이 격차를 메우고 다양한 다른 이점을 제공합니다.

이 사양은 스토리지 공급자에서 암호화 된 데이터를 저장, 인덱싱 및 검색하기위한 개인 정보 보호 메커니즘을 설명합니다. 개인이나 조직이 스토리지 공급자가 데이터를보고, 분석하고, 집계하거나, 재판매 할 수없는 방식으로 데이터를 보호하려는 경우 유용합니다. 이 접근 방식은 또한 애플리케이션 데이터를 이동 가능하고 스토리지 공급자 데이터 침해로부터 보호합니다.

 

1.1 암호화 된 데이터 저장소(EDV)가 필요한 이유는 무엇입니까?

이 섹션은 비표준입니다.

  • 이슈 1
왜 개인과 조직이 이 기술을 사용하여 개인 정보, 영업 비밀을 보호하고 데이터 이동성을 보장하려는 이익을 받는 지 설명해야함. 어떻게 사용자 데이터 저장을 위한 주어진 표준 API로 자용자 자신의 저장소를 가져와 정보를 제어하는 방법을 설명해야함. 표준 API에 대해 작성된 애플리케이션을 설명하고 사용자가 자신의 스토리지를 가져올 것이라고 가정하면 애플리케이션의 기능에 관심을두고 집중할 수 있으므로 스토리지 인프라를 처리 할 필요가 없습니다.(사용자에 의해 선택된 전문의 서비스 제공자에게 남기지 않음)

사용자가 여러 장치에 데이터를 저장하고 다른 사용자와 데이터를 공유 할 수 있도록하고,

동시에 모든 데이터 및 메타 데이터에 대해 클라이언트 측 (에지) 암호화를 요구하고,

또 동시에 검색이나 쿼리 가능한 데이터를 보유하는 것은 역사적으로 하나의 시스템으로 구현하기가 매우 어려웠습니다.

 

1.2 생태계 개요

이 섹션은 비표준입니다.

분산형 데이터 저장 문제는 다양한 각도에서 접근되어 왔으며, 분산형 또는 기타 방식의 개인 데이터 저장소(PDS)는 상업 및 학업계에서 오랜 역사를 가지고 있습니다. 다양한 접근 방식으로 인해 용어와 아키텍처가 다양해졌습니다. 아래 다이어그램은 새롭게 등장하는 구성 요소의 유형과 그 역할을 보여줍니다. 암호화된 데이터 볼트(EDV)는 스토리지 역할을 수행합니다.

이 섹션에서는이 사양이 유용 할 것으로 예상되는 생태계에서 핵심 행위자의 역할과 이들 간의 관계를 설명합니다. 역할은 다양한 방식으로 구현 될 수있는 추상화입니다. 역할 분리는 표준화를 위한 인터페이스와 프로토콜을 제안합니다. 이 사양에는 다음 역할이 도입되었습니다.

 

  • 데이터 볼트 컨트롤러
    데이터 저장소를 생성, 관리 및 삭제하여 엔티티가 수행 할 수있는 역할입니다. 이 엔티티는 또한 자신이 제어하는 데이터 저장소에 대한 스토리지 에이전트에 대한 권한 부여와 취소를 담당합니다.
  • 스토리지 에이전트
    데이터 저장소에서 데이터를 생성, 업데이트 및 삭제하여 엔터티가 수행할 수있는 역할입니다. 이 엔티티는 일반적으로 데이터 저장소 컨트롤러가 데이터 저장소에 액세스 할 수있는 권한을 부여받습니다.
  • 스토리지 제공자
    데이터 저장소 컨트롤러에 원시 데이터 저장 메커니즘을 제공하여 엔티티가 수행 할 수 있는 역할입니다. 이 엔터티는 저장중인 데이터를 볼 수 없습니다. 모든 데이터가 저장 상태에서 암호화되고 저장소 공급자와 주고받는 중이기 때문입니다.

 

1.3 사용 사례

다음 네 가지 사용 사례는 일반적인 사용 패턴을 대표하는 것으로 확인되었습니다 (단독은 아니지만).

1.3.1 데이터 저장 및 사용

내 데이터를 안전한 위치에 저장하고 싶습니다. 스토리지 제공 업체가 내가 저장 한 데이터를 볼 수 없도록하고 싶습니다. 이는 나만 데이터를 보고 사용할 수 있음을 의미합니다.


1.3.2 검색 데이터

시간이 지남에 따라 많은 양의 데이터를 저장할 것입니다. 데이터를 검색하고 싶지만 서비스 제공 업체가 내가 무엇을 저장하거나 검색하는지 알기를 원하지 않습니다.

 

1.3.3 하나 이상의 엔터티와 데이터 공유

내 데이터를 다른 사람 및 서비스와 공유하고 싶습니다. 데이터를 처음 저장할 때 또는 이후 단계에서 다른 엔터티가 내 저장 영역의 데이터에 액세스하도록 할 수 있습니다. 저장소는 내가 각 항목에 대해 명시 적으로 동의 한 경우에만 다른 사람에게 액세스 권한을 부여해야합니다.

언제든지 다른 사람의 액세스 권한을 취소 할 수 있기를 원합니다. 데이터를 공유 할 때 제 3자가 내 데이터에 액세스 할 수있는 만료일을 포함 할 수 있습니다.

1.3.4 동일한 데이터를 여러 곳에 저장

하나가 실패 할 경우를 대비하여 여러 저장소 위치에 데이터를 백업하고 싶습니다. 이러한 위치는 서로 다른 저장소 공급자가 호스팅 할 수 있으며 서로 다른 프로토콜을 통해 액세스 할 수 있습니다. 한 위치는 내 휴대폰에서 로컬 일 수 있고 다른 위치는 클라우드 기반 일 수 있습니다. 위치는 서로 동기화 할 수 있어야 데이터를 생성하거나 업데이트하는 방법에 관계없이 두 위치에서 데이터가 최신 상태로 유지되며, 가능한 한 내 도움없이 자동으로 수행되어야합니다.

 

1.3.5 배포 토폴로지

사용 사례를 기반으로 다음 배포 토폴로지를 고려합니다.

  • 모바일 장치 전용 : 서버와 클라이언트가 동일한 장치에 있습니다. 볼트는 암호화 된 데이터베이스를 제공하기 위해 로컬 저장소를 사용하는 바이너리 API를 통해 기능을 제공하는 라이브러리입니다.
  • 모바일 장치 플러스 클라우드 스토리지 : 모바일 장치는 클라이언트 역할을하며 서버는 네트워크 기반 API (예 : HTTPS를 통한 REST)를 통해 스토리지를 노출 한 원격 클라우드 기반 서비스 제공 업체입니다. 데이터는 모바일 장치에 저장되지 않습니다.
  • 여러 장치 (단일 사용자) 및 클라우드 스토리지 : 단일 사용자가 관리하는 장치를 더 추가 할 때 볼트를 사용하여 장치간에 데이터를 동기화 할 수 있습니다.
  • 여러 장치 (여러 사용자) 및 클라우드 스토리지 : 여러 사용자를 클라우드 스토리지와 페어링 할 때 볼트를 사용하여 복제 및 병합 전략을 통해 여러 사용자간에 데이터를 동기화 할 수 있습니다.

1.4 요구 사항

이 섹션은 비표준입니다.
다음 섹션에서는 핵심 사용 사례에서 수집 한 요구 사항에 대해 자세히 설명합니다.


1.4.1 개인 정보 보호 및 다자간 암호화

이 시스템의 주요 목표 중 하나는 스토리지 제공 업체를 포함하여 권한이없는 당사자가 액세스 할 수 없도록 엔티티 데이터의 프라이버시를 보장하는 것입니다.

이를 위해서는 데이터가 전송되는 동안 (네트워크를 통해 전송되는 동안) 및 저장되는 동안 (스토리지 시스템에서) 데이터가 암호화되어야합니다.

데이터가 둘 이상의 엔티티와 공유 될 수 있기 때문에 암호화 메커니즘이 여러 당사자에게 데이터 암호화를 지원하는 것도 필요합니다.


1.4.2 공유 및 승인

하나 이상의 엔티티간에 암호화 된 정보의 승인 된 공유를 가능하게하는 메커니즘이 필요합니다.
시스템은 하나의 필수 권한 부여 체계를 지정하지만 다른 대체 권한 체계도 허용해야합니다. 인증 체계의 예로는 OAuth2, 웹 액세스 제어 및 [ZCAP] (인증 기능)가 있습니다.


1.4.3 식별자

시스템은 식별자와 무관해야합니다. 일반적으로 URN 또는 URL 형식의 식별자가 선호됩니다. [DID-CORE] (분산 식별자, DID)는 시스템에서 몇 가지 중요한 방식으로 사용되는 것으로 추정되지만 구현을 DID에 하드 코딩하는 것은 안티 패턴이 될 것입니다.


1.4.4 버전 관리 및 복제

정보는 지속적으로 백업 될 것으로 예상됩니다. 이러한 이유로 시스템은 하나 이상의 필수 버전 관리 전략과 하나의 필수 복제 전략을 지원하지만 다른 대체 버전 관리 및 복제 전략도 허용해야합니다.


1.4.5 메타 데이터 및 검색

이 시스템을 사용하여 많은 양의 데이터가 저장 될 것으로 예상되며이를 효율적이고 선택적으로 검색해야합니다. 이를 위해 암호화 된 검색 메커니즘은 시스템의 필수 기능입니다.

클라이언트가 메타 데이터를 검색 할 수 있도록 데이터와 연관시킬 수 있어야합니다. 동시에 데이터와 메타 데이터의 개인 정보 보호가 핵심 요구 사항이므로 메타 데이터는 암호화 된 상태로 저장되어야하며 서비스 제공 업체는 이러한 검색을 불투명하고 개인 정보를 보호하는 방식으로 수행 할 수 있어야합니다. 메타 데이터를 참조하십시오.


1.4.6 프로토콜

이 시스템은 다양한 운영 환경에 상주 할 수 있기 때문에 최소한 하나의 프로토콜이 필수이지만 다른 프로토콜도 설계에 의해 허용되는 것이 중요합니다. 프로토콜의 예로는 HTTP, gRPC, Bluetooth 및 다양한 바이너리 온더 와이어 프로토콜이 있습니다. HTTPS API는 § 6. 데이터 볼트 HTTPS API에 정의되어 있습니다.

 

1.5 디자인 목표

이 섹션은 비표준입니다.

이 섹션에서는 암호화 된 데이터 저장소를 형성하는 여러 가지 기본 원칙 및 설계 목표에 대해 자세히 설명합니다.

1.5.1 계층화 및 모듈 식 아키텍처

계층화 된 아키텍처 접근 방식을 사용하여 시스템의 기반을 쉽게 구현하는 동시에 더 복잡한 기능을 낮은 기반 위에 계층화 할 수 있습니다.
예를 들어, 레이어 1에는 가장 기본적인 시스템에 대한 필수 기능이 포함될 수 있고, 레이어 2에는 대부분의 배포에 유용한 기능이 포함될 수 있으며, 레이어 3에는 에코 시스템의 작은 하위 집합에 필요한 고급 기능이 포함될 수 있으며, 레이어 4에는 다음과 같은 매우 복잡한 기능이 포함될 수 있습니다. 생태계의 아주 작은 부분 집합이 필요합니다.

 

1.5.2 개인 정보 우선 순위 지정

이 시스템은 기업의 개인 정보를 보호하기위한 것입니다. 새로운 기능을 탐색 할 때 항상 "이것이 개인 정보 보호에 어떤 영향을 미칠까요?"라고 질문하십시오. 개인 정보에 부정적인 영향을 미치는 새로운 기능은 절충 사항이 새로운 기능의 가치가 있는지 확인하기 위해 극도의 조사를 거쳐야합니다.

 

1.5.3 클라이언트에 구현 복잡성 푸시

이 시스템의 서버는 암호화 된 데이터의 저장 및 검색에 중점을 둔 기능을 제공 할 것으로 예상됩니다. 서버가 더 많이 알수록 데이터를 저장하는 주체의 개인 정보에 대한 위험이 커지고 서비스 공급자가 데이터를 호스팅하는 데 더 많은 책임이있을 수 있습니다. 또한 클라이언트에 복잡성을 부여하면 서비스 제공 업체가 안정적인 서버 측 구현을 제공 할 수 있고 클라이언트는 혁신을 수행 할 수 있습니다.

 

1.6 적합성

비표준으로 표시된 섹션뿐만 아니라이 사양의 모든 작성 지침, 다이어그램, 예제 및 참고 사항은 비표준입니다. 이 사양의 다른 모든 내용은 표준입니다. 이 문서의 키워드 MAY와 MUST는 BCP 14 [RFC2119] [RFC8174]에 설명 된대로 여기에 표시된대로 모두 대문자로 표시되는 경우에만 해석되어야 합니다.

미정

 

2. 전문용어

이 섹션은 비표준입니다.

다음 용어는이 사양의 개념을 설명하는 데 사용됩니다.

  • 엔티티(entity)
    생태계에서 하나 이상의 역할을 수행하는 사람, 조직 또는 장치와 같이 고유하고 독립적인 존재가있는 것.
  • 사용자 에이전트
    이 사양에서 다양한 역할 간의 통신을 중재하는 브라우저 또는 기타 웹 클라이언트와 같은 프로그램.
  • URI
    [RFC3986]에 정의 된 식별자.

3. 핵심 개념

이 섹션은 비표준입니다.
다음 섹션에서는이 사양의 기반을 형성하는 암호화된 저장소와 같은 핵심 개념을 간략하게 설명합니다.

 

3.1 암호화 된 저장소

암호화 된 데이터 저장소의 중요한 고려 사항은 아키텍처의 어떤 구성 요소가 (암호화되지 않은) 데이터에 액세스 할 수 있는지 또는 개인 키를 제어하는 ​​사람입니다. 대략적으로 세 가지 접근 방식이 있습니다 : 스토리지 사이드에서의 암호화, 클라이언트 사이드의(에지)의 암호화 그리고 게이트웨이 사이드의 암호화(이전 두 가지의 하이브리드 형태)

사용자가 임의의 데이터를 저장할 수있는 모든 데이터 스토리지 시스템은 또한 가장 기본적인 수준에서 클라이언트 측 암호화를 지원합니다. 즉, 사용자가 데이터를 직접 암호화 한 다음 저장할 수 있습니다. 그렇다고 이러한 시스템이 암호화된 데이터에 최적화되어 있다는 의미는 아닙니다. 암호화된 데이터에 대한 쿼리 및 액세스 제어가 어려울 수 있습니다.

스토리지 측 암호화는 일반적으로 전체 디스크 암호화 또는 파일 시스템 수준 암호화로 구현됩니다. 이것은 널리 지원되고 이해되며 모든 유형의 호스팅된 클라우드 스토리지는 스토리지 측 암호화를 사용할 가능성이 높습니다. 이 시나리오에서 개인 키는 데이터를 저장하는 사용자와는 다른 엔티티 일 수있는 스토리지 서버의 서비스 제공자 또는 컨트롤러에 의해 관리됩니다. 디스크에 상주하는 동안 데이터를 암호화하는 것은 스토리지 하드웨어에 대한 물리적 액세스가 손상 될 경우 유용한 보안 조치이지만 데이터를 저장 한 원래 사용자 만 액세스 할 수 있다는 보장은 없습니다.

반대로, 클라이언트 측 암호화는 특히 메타 데이터도 암호화 할 수 있는 경우 높은 수준의 보안 및 개인 정보 보호를 제공합니다. 암호화는 일반적으로 키 체인이나 지갑 클라이언트에 의해 지원되는 개별 데이터 개체 수준에서 수행되므로 사용자는 개인 키에 직접 액세스 할 수 있습니다. 그러나 키 관리 및 복구의 중요한 책임이 최종 사용자에게 전가되기 때문에 비용이 발생합니다. 또한 데이터를 공유해야 할 때 키 관리 문제가 더욱 복잡해집니다.

게이트웨이 측 암호화 시스템은 스토리지 측 및 클라이언트 측 암호화 아키텍처의 기술을 결합하는 접근 방식을 취합니다. 일반적으로 다중 서버 클러스터 또는 일부 "플랫폼으로서의 암호화" 클라우드 서비스 제공 업체 사이에서 발생하는 이러한 스토리지 시스템은 클라이언트 측 키 관리가 일부 사용자 및 사용 사례에 너무 어려울 수 있음을 인식하고 자체적으로 암호화 및 복호화를 수행 할 수 있습니다. 클라이언트 애플리케이션에 투명한 방식입니다. 동시에 개인 암호 해독 키에 액세스 할 수 있는 구성 요소 (스토리지 서버)의 수를 최소화하는 것을 목표로합니다. 결과적으로 키는 일반적으로 데이터를 스토리지 서버로 전달하기 전에 암호화하는 "게이트웨이"서버에 상주합니다. 암호화 / 암호 해독은 클라이언트에 투명하고 데이터는 스토리지 서버에 대해 불투명하며 결과적으로 모듈식 / 플러그 형이 될 수 있습니다. 게이트웨이 측 암호화는 스토리지 측 시스템에 비해 몇 가지 이점을 제공하지만 단점도 공유합니다. 게이트웨이 sysadmin이 사용자가 아닌 키를 제어합니다.

 

3.2 구조화된 문서

데이터 저장소의 기본 저장 단위는 암호화 된 구조화 된 문서로, 암호 해독시 JSON 및 CBOR(JSON 기반 직렬화 방식)과 같은 인기있는 구문으로 표현할 수있는 데이터 구조를 제공합니다. 문서는 구조화 된 데이터와 구조화 된 데이터에 대한 메타 데이터를 저장할 수 있습니다. 구조화 된 문서 크기는 16MB로 제한됩니다.

 

3.3 스트림

16MB보다 큰 파일 또는 오디오, 비디오 및 사무실 생산성 파일과 같은 원시 바이너리 데이터 형식의 경우 데이터 저장소에서 데이터를 스트리밍 할 수있는 스트리밍 API가 제공됩니다. 스트림은 구조화된 문서를 사용하여 설명되지만 데이터의 저장소는 암호화 된 콘텐츠에 대한 해시 링크를 사용하여 구조화 된 문서와 분리됩니다.

 

3..4 Indexing

데이터 저장소는 다양한 종류의 매우 많은 문서를 저장할 것으로 예상됩니다. 즉, 문서를 적시에 검색 할 수 있어야하므로 콘텐츠가 암호화 될 때 스토리지 공급자에게 문제가 발생합니다. 이전에는이 문제가 데이터 개체에 첨부 된 암호화되지 않은 일정량의 메타 데이터로 해결되었습니다. 또 다른 가능성은 필터링 된 데이터 하위 집합에 대한 포인터의 암호화되지 않은 목록입니다.

데이터 볼트의 경우, 데이터 볼트 클라이언트가 메타 데이터 인덱싱을 수행하면서 메타 데이터를 스토리지 공급자에게 유출하지 않도록하는 보안 데이터 볼트에 대해 암호화 된 검색 체계가 제공됩니다.

 

4. 아키텍처

문제 3
적절하게 규범적이어야하는 언어에 대해 이 섹션을 검토하십시오.

이 섹션에서는 클라이언트-서버 관계의 형태로 암호화 된 데이터 저장소 프로토콜의 아키텍처를 설명합니다. 볼트는 서버로 간주되고 클라이언트는 볼트와 상호 작용하는 데 사용되는 인터페이스 역할을합니다.

이 아키텍처는 본질적으로 계층화되어 있으며, 기본 계층은 최소한의 기능을 가진 운영 체제로 구성되고 고급 기능이 위에 계층화됩니다. 구현시 기본 계층 만 구현하거나 선택적으로 고급 사용 사례를 위해 더 풍부한 기능 세트로 구성된 추가 계층을 구현하도록 선택할 수 있습니다.

 

5. Data Model

다음 섹션에서는 데이터 저장소의 데이터 모델을 간략하게 설명합니다.

5.1 DataVaultConfiguration

데이터 볼트 구성은 특정 데이터 볼트가 가질 속성을 지정합니다.

프로퍼티 설명
sequence 클라이언트가 데이터 저장소에 올바르게 동기화되도록하기위한 데이터 저장소의 고유 카운터입니다. 값은 필수이며 부호없는 64 비트 숫자여야합니다.
controller 데이터 저장소를 제어하는 엔티티 또는 암호화 키입니다. 값은 필수이며 URI 여야합니다.
invoker 데이터 저장소의 구성을 수정하거나 읽기 또는 쓰기를위한 권한 부여 기능을 호출 할 권한이있는 루트 엔터티 또는 암호화 키입니다. 값은 선택 사항이지만 존재하는 경우 URI 또는 URI 배열이어야합니다. 이 값이 없으면 컨트롤러 속성의 값이 동일한 용도로 사용됩니다
delegator 데이터 저장소의 구성을 수정하거나 읽기 또는 쓰기를 위해 권한 부여 기능을 위임 할 권한이있는 루트 엔터티 또는 암호화 키입니다. 값은 선택 사항이지만 존재하는 경우 URI 또는 URI 배열이어야합니다. 이 값이 없으면 컨트롤러 속성의 값이 동일한 용도로 사용됩니다.
referenceId 애플리케이션 별 참조 식별자를 표현하는 데 사용됩니다. 값은 선택 사항이며 존재하는 경우 문자열이어야합니다.
keyAgreementKey.id 키 계약 키의 식별자입니다. 값은 필수이며 URI 여야합니다. 키 계약 키는 수신자를위한 키 암호화 키를 생성하는 데 사용되는 비밀을 파생하는 데 사용됩니다.
keyAgreementKey.type 키 계약 키의 유형입니다. 값은 필수이며 URI이거나 URI에 매핑되어야합니다.
hmac.id HMAC 키의 식별자입니다. 값은 URI이거나 URI에 매핑되어야합니다.
hmac.type HMAC 키의 유형입니다. 값은 필수이며 URI이거나 URI에 매핑되어야합니다.
{
  "sequence": 0,
  "controller": "did:example:123456789",
  "referenceId": "my-primary-data-vault",
  "keyAgreementKey": {
    "id": "https://example.com/kms/12345",
    "type": "X25519KeyAgreementKey2019"
  },
  "hmac": {
    "id": "https://example.com/kms/67891",
    "type": "Sha256HmacKey2019"
  }
}

5.2 StructuredDocument

구조화 된 문서는 애플리케이션 데이터와 애플리케이션 데이터에 대한 메타 데이터를 저장하는 데 사용됩니다. 이 정보는 일반적으로 암호화 된 다음 데이터 저장소에 저장됩니다.

 

프로퍼티 설명
 id 구조화 된 문서의 식별자입니다. 이 값은 필수이며 Base58로 인코딩 된 128 비트 임의 값이어야합니다.
meta 구조화 된 문서와 관련된 키-값 메타 데이터입니다.
content 구조화 된 문서의 키-값 콘텐츠입니다.

 

{
  "id": "urn:uuid:94684128-c42c-4b28-adb0-aec77bf76044",
  "meta": {
    "created": "2019-06-18"
  },
  "content": {
    "message": "Hello World!"
  }
}

 

5.3 EncryptedDocument

EncryptedDocument는 데이터 컨트롤러의 동의 없이는 어떤 엔티티도 정보를 읽을 수 없도록 구조화 된 문서를 저장하는 데 사용됩니다.

프로퍼티 설명
id 암호화 된 문서의 식별자입니다. 이 값은 필수이며 Base58로 인코딩 된 128 비트 임의 값이어야합니다.
sequence 클라이언트가 데이터 저장소에 올바르게 동기화되도록하기위한 데이터 저장소의 고유 카운터입니다. 값은 필수이며 부호없는 64 비트 숫자 여야합니다.
jwe or cwe 디코딩된 경우 해당 StructuredDocument를 생성하는 JSON 웹 암호화 또는 COSE 암호화 값입니다.
{
  "id":"z19x9iFMnfo4YLsShKAvnJk4L",
  "sequence":0,
  "indexed":[
    {
      "hmac":{
        "id":"did:ex:12345#key1",
        "type":"Sha256HmacKey2019"
      },
      "sequence":0,
      "attributes":[
      ]
    }
  ],
  "jwe":{
    "protected":"eyJlbmMiOiJDMjBQIn0",
    "recipients":[
      {
        "header":{
          "kid":"urn:123",
          "alg":"ECDH-ES+A256KW",
          "epk":{
            "kty":"OKP",
            "crv":"X25519",
            "x":"d7rIddZWblHmCc0mYZJw39SGteink_afiLraUb-qwgs"
          },
          "apu":"d7rIddZWblHmCc0mYZJw39SGteink_afiLraUb-qwgs",
          "apv":"dXJuOjEyMw"
        },
        "encrypted_key":"4PQsjDGs8IE3YqgcoGfwPTuVG25MKjojx4HSZqcjfkhr0qhwqkpUUw"
      }
    ],
    "iv":"FoJ5uPIR6HDPFCtD",
    "ciphertext":"tIupQ-9MeYLdkAc1Us0Mdlp1kZ5Dbavq0No-eJ91cF0R0hE",
    "tag":"TMRcEPc74knOIbXhLDJA_w"
  }
}

 

6. 데이터 볼트 HTTPS API

이 섹션에서는 데이터 저장소 및 해당 콘텐츠와 상호 작용하기위한 HTTPS API를 소개합니다.

 

6.1 서비스 엔드 포인트 검색

웹 사이트는 최상위 HTML 웹 페이지에 JSON-LD를 포함하여 서비스 엔드 포인트 검색을 제공 할 수 있습니다.(e.g. at https://example.com/):

 

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>Example Website</title>
    <link rel="stylesheet" href="style.css">
    <script src="script.js"></script>
    <script type="application/ld+json">
{
  "@context": "https://w3id.org/encrypted-data-vaults/v1",
  "id": "https://example.com/",
  "name": "Example Website",
  "dataVaultManagementService": "https://example.com/data-vaults"
}
    </script>
  </head>
  <body>
    <!-- page content -->
  </body>
</html>

콘텐츠 협상을 통해 서비스 설명을 요청할 수도 있습니다. 다음 예에서는 JSON 호환 서비스 설명이 제공됩니다. (e.g. curl -H "Accept: application/json" https://example.com/):

예 6 : JSON 기반 서비스 설명의 예

{
  "@context": "https://w3id.org/encrypted-data-vaults/v1",
  "id": "https://example.com/",
  "name": "Example Website",
  "dataVaultCreationService": "https://example.com/data-vaults"
}

6.2 데이터 볼트 생성

데이터 볼트는 dataVaultCreationService에 대한 DataVaultConfiguration의 HTTP POST를 수행하여 생성됩니다. 이 서비스에 대해 다음 HTTP 상태 코드가 정의됩니다.

HTTP 상태 설명
201 데이터 볼트 생성에 성공했습니다. HTTP 위치 헤더에는 새로 생성 된 데이터 저장소의 URL이 포함됩니다.
400 데이터 볼트 생성에 실패했습니다.
409 중복 데이터 저장소가 있습니다.

데이터 저장소 생성의 교환 예는 다음과 같습니다.

POST /data-vaults HTTP/1.1
Host: example.com
Content-Type: application/json
Accept: application/json, text/plain, */*
Accept-Encoding: gzip, deflate

{
  "sequence": 0,
  "controller": "did:example:123456789",
  "referenceId": "urn:uuid:abc5a436-21f9-4b4c-857d-1f5569b2600d",
  "keyAgreementKey": {
    "id": "https://example.com/kms/12345",
    "type": "X25519KeyAgreementKey2019"
  },
  "hmac": {
    "id": "https://example.com/kms/67891",
    "type": "Sha256HmacKey2019"
  }
}

 

컨트롤러 속성의 목적을 루트 권한에 설명하십시오. HTTP 서명을 통해 Authorization Capabilities를 생성하고 호출하여 데이터 저장소에서 읽기 및 쓰기 권한을 부여하는 방법을 설명합니다.

 

데이터 저장소 생성에 성공하면 HTTP 201 상태 코드가 반환됩니다.

EXAMPLE 8: Successful data vault creation response
HTTP/1.1 201 Created
Location: https://example.com/encrypted-data-vaults/z4sRgBJJLnYy
Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
Expires: 0
Date: Fri, 14 Jun 2019 18:35:33 GMT
Connection: keep-alive
Transfer-Encoding: chunked

 

6.3 문서 생성

구조화 된 문서는 구조화 된 문서를 암호화 된 문서로 인코딩 한 다음 § 6.2 데이터 저장소 생성을 통해 생성 된 데이터 저장소 끝점에 대해 HTTP POST를 수행하여 데이터 저장소에 저장됩니다. 이 서비스에 대해 다음 HTTP 상태 코드가 정의됩니다.

HTTP 상태 설명
201 구조화 된 문서 생성에 성공했습니다. HTTP 위치 헤더에는 새로 생성 된 문서의 URL이 포함됩니다.
400 구조화 된 문서 생성에 실패했습니다.

StructuredDocument를 EncryptedDocument로 변환하기 위해 구현자는 StructuredDocument를 JWE 또는 COSE Encrypted 객체로 인코딩해야합니다. 문서가 암호화되면 문서 생성 서비스로 보낼 수 있습니다.

 

문서 생성의 프로토콜 예는 다음과 같습니다.

 

EXAMPLE 9: data vault document creation request
POST /encrypted-data-vaults/z4sRgBJJLnYy/docs HTTP/1.1
Host: example.com
Content-Type: application/json
Accept: application/json, text/plain, */*
Accept-Encoding: gzip, deflate

{
  "id": "urn:uuid:94684128-c42c-4b28-adb0-aec77bf76044",
  "sequence": 0,
  "jwe": {
    "protected": "eyJlbmMiOiJDMjBQIn0",
    "recipients": [{
      "header": {
        "alg": "A256KW",
        "kid": "https://example.com/kms/zSDn2MzzbxmX"
      },
      "encrypted_key": "OR1vdCNvf_B68mfUxFQVT-vyXVrBembuiM40mAAjDC1-Qu5iArDbug"
    }],
    "iv": "i8Nins2vTI3PlrYW",
    "ciphertext": "Cb-963UCXblINT8F6MDHzMJN9EAhK3I",
    "tag": "pfZO0JulJcrc3trOZy8rjA"
  }
}

구조화 된 문서 생성에 성공하면 HTTP 201 상태 코드가 반환됩니다.

Successful data vault document creation response
HTTP/1.1 201 Created
Location: https://example.com/encrypted-data-vaults/z4sRgBJJLnYy/docs/zMbxmSDn2Xzz
Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
Expires: 0
Date: Fri, 14 Jun 2019 18:37:12 GMT
Connection: keep-alive
Transfer-Encoding: chunked

 

6.4 문서 읽기

데이터 저장소에서 문서 읽기는 EncryptedDocument를 검색 한 다음 이를 StructuredDocument로 해독하여 수행됩니다. 이 서비스에 대해 다음 HTTP 상태 코드가 정의됩니다.

HTTP 상태 설명
200 암호화된 문서 검색에 성공했습니다.
400 암호화된 문서 검색에 실패했습니다.
404 주어진 ID를 가진 EncryptedDocument를 찾을 수 없습니다.

EncryptedDocument를 StructuredDocument로 변환하기 위해 구현자는 반드시 JWE 또는 COSE Encrypted 객체에서 EncryptedDocument를 디코딩해야합니다. 문서가 해독되면 웹 응용 프로그램에서 처리 할 수 있습니다.

 

문서 검색의 프로토콜 예는 다음과 같습니다.

 

URL 경로 구조가 모든 데이터 저장소에 대해 고정되어있어 사용자가 데이터 저장소 서비스 공급자를 변경할 수 있도록 허용하면서 특정 문서를 참조하는 안정적인 URL (예 : DID URL을 통해) 및 이식성을 사용할 수 있습니다. 이것이 어떻게 이식성을 가능하게하는지 설명하십시오.

 

 

'IT > Did(Edge-sandbox)' 카테고리의 다른 글

ORY Hydra  (0) 2021.03.08
trustbloc 도큐먼트 번역  (0) 2021.01.26
Encrypted Data Vaults 0.1  (0) 2021.01.25
openAPI.yml 분석  (0) 2020.11.25
edv 실행순서  (0) 2020.11.24