Thinking of this for file storage, for a decentralised and t...

npub1zthq85gksjsjthv8h6rec2qeqs2mu0emrm9xknkhgw7hfl7csrnq6wxm56
hex
f9fe4e3287ca462dc0cfaee232b8d95ed3963d9b79e43759f487800fb53d7544nevent
nevent1qqs0nljwx2ru533dcr86ac3jhrv4a5uk8kdhnepht86g0qq0k57h23qprpmhxue69uhhyetvv9ujuem4d36kwatvw5hx6mm9qgsp9msr6ytgfgf9mkrmapuu9qvsg9d78ua3ajntfmt580t5llvgpesemywxrKind-1 (TextNote)
Thinking of this for file storage, for a decentralised and trust-minimised approach, with redundancy and privacy:
-
Merkle trees (or something similar) to represent the stored files, so that large files and directory structures can be stored, and Merkle proofs so that service providers can easily prove that they have every (part of) your file. If a provider loses your data, you can prove it publicly. With the right design of this, we can support making lots of small changes very efficiently and updating the root quickly
-
encrypt the data
-
Redundancy. Store your data with multiple providers, with a watchtower to test providers regularly (using the Merkle proofs) to identify gaps
-
as well as encrypting the data, also encrypt the data a second time with a different key for each provider. This forces providers to really store your data, instead of just 'proxying' another provider's copy of your data
-
Your watchtower(s) doesn't need to know the main encryption key. They just need to know your secondary - per-provider - keys. This gives your watchtower enough information to quickly copy your data to other service providers, always ensuring that you have at least N copies of each fragment of data
-
the providers sign the Merkle root, giving you a promise to store that data. Making a small change to a huge file system is an efficient process. When you change some data, you sign an event which releases the old root
-
paid with bitcoin of course. If making many small changes, a system that allows high-frequency micropayments (e.g. Cashu Spilman channels) would help to pay on demand
Let's make a simple web-based client for this, perhaps a PWA that uses Nostr to store state
Raw JSON
{
"kind": 1,
"id": "f9fe4e3287ca462dc0cfaee232b8d95ed3963d9b79e43759f487800fb53d7544",
"pubkey": "12ee03d11684a125dd87be879c28190415be3f3b1eca6b4ed743bd74ffd880e6",
"created_at": 1773475151,
"tags": [
[
"alt",
"A short note: Thinking of this for file storage, for a decentral..."
]
],
"content": "Thinking of this for file storage, for a decentralised and trust-minimised approach, with redundancy and privacy:\n\n- Merkle trees (or something similar) to represent the stored files, so that large files and directory structures can be stored, and Merkle proofs so that service providers can easily prove that they have every (part of) your file. If a provider loses your data, you can prove it publicly. With the right design of this, we can support making lots of small changes very efficiently and updating the root quickly\n\n- encrypt the data\n\n- Redundancy. Store your data with multiple providers, with a watchtower to test providers regularly (using the Merkle proofs) to identify gaps\n\n- as well as encrypting the data, also encrypt the data a second time with a different key for each provider. This forces providers to really store your data, instead of just 'proxying' another provider's copy of your data\n\n- Your watchtower(s) doesn't need to know the main encryption key. They just need to know your secondary - per-provider - keys. This gives your watchtower enough information to quickly copy your data to other service providers, always ensuring that you have at least N copies of each fragment of data\n\n- the providers sign the Merkle root, giving you a promise to store that data. Making a small change to a huge file system is an efficient process. When you change some data, you sign an event which releases the old root\n\n- paid with bitcoin of course. If making many small changes, a system that allows high-frequency micropayments (e.g. Cashu Spilman channels) would help to pay on demand\n\nLet's make a simple web-based client for this, perhaps a PWA that uses Nostr to store state",
"sig": "2ff69bf1081d26eef59bafef0a18305966bf856a859e955f3128f56c4c2ae05ff949ae43bb85d1a854f6eef72f5886c598c12e7b38a01c65e95a7f3e78c0a8a4"
}