From cef9ef9f9a357427f5b595c45d8aadcf3fdf334f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=A7=89=20infominer?= Date: Thu, 26 Nov 2020 19:26:34 -0500 Subject: [PATCH] storage compute --- .../2020-11-26-storage-compute.md | 59 ++++++++++++++++++ images/storage-compute-head.webp | Bin 0 -> 6466 bytes images/storage-compute-teaser.webp | Bin 0 -> 3038 bytes 3 files changed, 59 insertions(+) create mode 100644 _posts/organizations/identity-foundation-DIF/working-groups/2020-11-26-storage-compute.md create mode 100644 images/storage-compute-head.webp create mode 100644 images/storage-compute-teaser.webp diff --git a/_posts/organizations/identity-foundation-DIF/working-groups/2020-11-26-storage-compute.md b/_posts/organizations/identity-foundation-DIF/working-groups/2020-11-26-storage-compute.md new file mode 100644 index 00000000..6585db9a --- /dev/null +++ b/_posts/organizations/identity-foundation-DIF/working-groups/2020-11-26-storage-compute.md @@ -0,0 +1,59 @@ +--- +date: 2020-11-26 +title: DIF - Secure Data Storage +description: data models for storage and transport, syntax, data at rest protection, CRUD API, access control, synchronization, and at least a minimum viable HTTP-based interface compatible with W3C DIDs/VCs. +excerpt: > + Secure, encrypted, privacy-preserving storage and computation of data is a critical component of decentralized identity systems. As with identifiers and names must be self-sovereign to the owning entity, a user's identity data must remain private, only accessible to the entities they allow. DIF members are actively developing specs and reference implementations for provider-agnostic, run-anywhere solutions that provides these features. +permalink: organizations/identity-foundation/wg/secure-data-storage/ +canonical_url: https://decentralized-id.com/organizations/identity-foundation/wg/secure-data-storage/ +categories: ["Identity Foundation (DIF)","Web Standards"] +tags: ["Storage and Compute WG","DIF","Secure Data Storage","Hubs"] +header: + image: /images/storage-compute-head.webp + teaser: /images/storage-compute-teaser.webp +last_modified_at: 2020-11-26 +--- + +[Webpage](https://identity.foundation/working-groups/storage-compute.html) - [Wiki](https://dif.groups.io/g/sds-wg/wiki) - [GitHub](https://github.com/decentralized-identity/confidential-storage/) + +> Secure, encrypted, privacy-preserving storage and computation of data is a critical component of decentralized identity systems. As with identifiers and names must be self-sovereign to the owning entity, a user's identity data must remain private, only accessible to the entities they allow. DIF members are actively developing specs and reference implementations for provider-agnostic, run-anywhere solutions that provides these features. + +- [Mailing List](https://dif.groups.io/g/sds-wg/wiki/home) + - [Working Group Wiki](https://lists.identity.foundation/g/sds-wg/wiki) + > Create one or more specifications to establish a foundational layer for secure data storage (including personal data), specifically data models for storage and transport, syntax, data at rest protection, CRUD HTTP API, access control, synchronization, and a minimum viable HTTP-based interface compatible with W3C DIDs/VCs. +- [Secure Data Storage Working Group Charter](https://drive.google.com/file/d/1vf2CsD9QZstzrd6CJ4WFVHw0WKwwNLHf/view) + > - Create one or more specifications to establish a foundational layer for secure data storage (including personal data), specifically data models for storage and transport, syntax, data at rest protection, CRUD API, access control, synchronization, and at least a minimum viable HTTP-based interface compatible with W3C DIDs/VCs. + > - The [Identity Hubs](https://github.com/decentralized-identity/identity-hub/blob/master/explainer.md) and [Encrypted Data Vaults](https://digitalbazaar.github.io/encrypted-data-vaults/) documents will be used as a use case, requirements, and technical input for the collaborative effort. + +## Specs & Projects + +The active work items that are underway in the DIF Storage and Compute Working Group + +### Confidential Storage + +- [decentralized-identity/confidential-storage/](https://github.com/decentralized-identity/confidential-storage/) +- [Latest Editors Draft](https://identity.foundation/confidential-storage/) + > 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 describes a privacy-respecting mechanism for storing, indexing, and retrieving encrypted data at a storage provider. It is often useful when an individual or organization wants to protect data in a way that the storage provider cannot view, analyze, aggregate, or resell the data. This approach also ensures that application data is portable and protected from storage provider data breaches. + +### Identity Hubs (Archived) + +Encrypted personal datastore for identity interactions and decentralized apps. + +* [Identity Hubs](https://github.com/decentralized-identity/identity-hub/) + * [Explainer](https://github.com/decentralized-identity/identity-hub/blob/master/explainer.md) + > Hubs let you securely store and share data. A Hub is a datastore containing semantic data objects at well-known locations. Each object in a Hub is signed by an identity and accessible via a globally recognized API format that explicitly maps to semantic data objects. Hubs are addressable via unique identifiers maintained in a global namespace. +* [System Diagram](https://raw.githubusercontent.com/decentralized-identity/hubs/master/diagrams/full-system.png) + +[![](https://raw.githubusercontent.com/decentralized-identity/hubs/master/diagrams/full-system.png)](https://raw.githubusercontent.com/decentralized-identity/hubs/master/diagrams/full-system.png) + +### Encrypted Data Vaults (Archived) + +* [Encrypted Data Vaults](https://digitalbazaar.github.io/encrypted-data-vaults/) + > 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. + > + > Legislation, such as the General Data Protection Regulation (GDPR), incentivizes service providers to better preserve individuals' privacy, primarily through making the providers liable in the event of a data breach. This liability pressure has revealed a technological gap, whereby providers are often not equipped with technology that can suitably protect their customers. Encrypted Data Vaults fill this gap and provide a variety of other benefits. + > + > This specification describes a privacy-respecting mechanism for storing, indexing, and retrieving encrypted data at a storage provider. It is often useful when an individual or organization wants to protect data in a way that the storage provider cannot view, analyze, aggregate, or resell the data. This approach also ensures that application data is portable and protected from storage provider data breaches. + diff --git a/images/storage-compute-head.webp b/images/storage-compute-head.webp new file mode 100644 index 0000000000000000000000000000000000000000..6d1f2bcad5a5c43353c4d336671005f4424a87a1 GIT binary patch literal 6466 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ɽDUk`aQUuhL6_TODWgh%1yIR4{ zHhN%3RWjlob%LbzT^c!Wvk23x)baDe(Kb{XE>3lpWFZ6MO2J6obcqZ;J&UXr9D$Kw z_y8^`fe4mx|M^s=e0|d{>+5@#2|I~%^;yE?+LO!4neP$l%`&$)X-+u7kOul+B`9kV z-j>R5=6@?VV%f>zw%$TJj(Ip*Pu@Xm)>m7BleX;{LM)zBD|=}`ItHk2{)Fvkc+EHa z-;!7_)^gwPGu8Yc@1@kZpcsxEOdKPyFV9{y%$fnKNc&Zb48XdDqkBb72z9~#bVHp- zw_cxImT^(_lM%vf>HssHf#<3>z`moo;!^*_0f01}{f%NsZSN9CRQjWj&Mypud79*4LdMsgFj7>c94r+#QWN4*oQ|3y1Aobi zXpPT8KlXfJ9a=kjJa!AMt&3GRB50eFqk;a_8N&cGRZ)hbDCR4XmaXwvT*J1KAZ95jhk;eRHej9IgXUKkY`9Olb@cTee%P^wFk&8e-26Y zEgc4u@|KfyMn?Zr`TgxZm?Bd7OZBfw{PQDK2mMIfH##JtwMRlRO5TZ)9RwSxaEVYg zc7#3Ew@xLr<$lU}y^=>H!oSUsK+Y|#4T_C4xKl4eEn)BVsjmch7|P$Y_ZmG4A785x zKVlVjnn*Wit<7;nv@Kyb3^6ii6(8!bSbBX53&GFbw8CSY3F>qt(l2snD3%ALY6lF} zG(M}PSF|fi87&7_R2WvJ9l*vOLzkl?r-u> z3LRqfNpfPe81zvQ5ink~+(wzcbnefKnV!|Gn8a=TrJou9UO8!bIY>=kId!vJX?9&s znWdc(=ZPNN(+8#fV`|Kt_a{fK3b^dnbq9f~8OcjBl-}QBn|T;hfs&+EGix=&@n(F3;tCM_L)Lp$)=XBiWc^%@?tBzr9s+g7a9|VLZcl{3ptC?Uo3nwEuDkkeiZI&iSuWy^R6TVVp|8r_sD) zxFKntjoGj)ua7QFT@EkUIB@vYiOL<y1D9^lB$k|EJx`?d6SVWwhIoSPT>4EcnfZ8R6lsd?~gzrO7g7kCUwio@` zaNqX}!75iBz9OpKi;%|=eyx4=2tQWh1miyUSxjTf9FfV-cWJtSmp$y4AQP_E+jWEz|oMthAJ=ckvo+%c15qs1)kxFrWJh%s9Ko$z1F9dQW& literal 0 HcmV?d00001 diff --git a/images/storage-compute-teaser.webp b/images/storage-compute-teaser.webp new file mode 100644 index 0000000000000000000000000000000000000000..20ba88ba63bbabe25a12abd3d518d8a2f038d084 GIT binary patch literal 3038 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 gMgOS6Kf)|mfp0(gJ?J24YZ9y