The Dark Forest: A Distributed File System for P2P Applications

A presentation at Strange Loop 2022 in September 2022 in St. Louis, MO, USA by Brooklyn Zelenka

Slide 1

Slide 1

! The Dark Forest ” A Distributed File System for Secure P2P Applications github.com/wnfs-wg github.com/fission-codes

Slide 2

Slide 2

Brooklyn Zelenka @expede

Slide 3

Slide 3

Brooklyn Zelenka @expede • Cofounder & CTO at Fission • @FissionCodes • https://fission.codes • Infra & SDK for edge apps • Standards: UCAN, EIPs, FVM, Multiformats, CAR Pool, WNFS,&c

Slide 4

Slide 4

Meta WNFS

Slide 5

Slide 5

Meta WNFS WN FS

Slide 6

Slide 6

Meta WNFS First principles, flipped tradeoffs “Can’t be done” → super hard but works & scales! Sharp corners Under explored design space Databases, blind busses, nym servers, etc Novel ways to recombine a few ideas WN FS

Slide 7

Slide 7

Meta WNFS First principles, flipped tradeoffs “Can’t be done” → super hard but works & scales! Sharp corners Under explored design space Databases, blind busses, nym servers, etc Novel ways to recombine a few ideas ) e l i F ( H C TE WN FS

Slide 8

Slide 8

Meta WNFS First principles, flipped tradeoffs “Can’t be done” → super hard but works & scales! Sharp corners Under explored design space Databases, blind busses, nym servers, etc Novel ways to recombine a few ideas ) e l i F ( ⅔ H C TE Secret Filesystem WN FS ⅓ Public Filesystem

Slide 9

Slide 9

Video Killed the Radio Star A New Environment #

Slide 10

Slide 10

A New Environment # New Environment, Who Dis?

Slide 11

Slide 11

A New Environment # New Environment, Who Dis? Then $ Now “

Slide 12

Slide 12

A New Environment # New Environment, Who Dis? Need Then $ Now ” Convenient % Critical &

Slide 13

Slide 13

A New Environment # New Environment, Who Dis? Then $ Now ” Need Convenient % Critical & Location Data Centre ’ Powerful Clients (M1, IoT) ⌚)*

Slide 14

Slide 14

A New Environment # New Environment, Who Dis? Then $ Now ” Need Convenient % Critical & Location Data Centre ’ Powerful Clients (M1, IoT) ⌚)* + , Access

Slide 15

Slide 15

A New Environment # New Environment, Who Dis? Then $ Now ” Need Convenient % Critical & Location Data Centre ’ Powerful Clients (M1, IoT) ⌚)* + , Bandwidth - Latency ⏲ Access Bottleneck

Slide 16

Slide 16

A New Environment # New Environment, Who Dis? Then $ Now ” Need Convenient % Critical & Location Data Centre ’ Powerful Clients (M1, IoT) ⌚)* + , Bandwidth - Latency ⏲ /0 123 … 4 Access Bottleneck Market

Slide 17

Slide 17

A New Environment # Toxic Data • 2005: Credit card data in DB • 2015: Personal info in DB • 2025: Nothing in DB

Slide 18

Slide 18

A New Environment # What LAMP Has Wrought

Slide 19

Slide 19

A New Environment # What LAMP Has Wrought Users 5678 Developer 9

Slide 20

Slide 20

A New Environment # What LAMP Has Wrought Users 5678 Browser + REST / JSON-RPC / GraphQL ↕ Server ⚙ Data Store < DevOps = Developer 9

Slide 21

Slide 21

A New Environment # What LAMP Has Wrought Users 5678 Browser + REST / JSON-RPC / GraphQL ↕ Server ⚙ Data Store < DevOps = Developer 9

Slide 22

Slide 22

A New Environment # Federate Data, Not Apps

Slide 23

Slide 23

A New Environment # Federate Data, Not Apps Alice’s Stuff Bob’s Stuff Carol’s Stuff

Slide 24

Slide 24

A New Environment # Federate Data, Not Apps Photo Gallery

Alice’s Stuff Bob’s Stuff Carol’s Stuff

Slide 25

Slide 25

A New Environment # Federate Data, Not Apps Photo Gallery

Alice’s Stuff Bob’s Stuff Carol’s Stuff Social Media ?

Slide 26

Slide 26

A New Environment # Federate Data, Not Apps Photo Gallery

Alice’s Stuff Bob’s Stuff Music Player @ Carol’s Stuff Social Media ?

Slide 27

Slide 27

A New Environment # Common Needs

Slide 28

Slide 28

A New Environment # Common Needs

  1. A Local-first access control 2. B Arbitrary metadata 3. C Mutability 4. D Versioning (→ concurrency)

Slide 29

Slide 29

A New Environment # Common Needs

  1. A Local-first access control 2. B Arbitrary metadata 3. C Mutability 4. D Versioning (→ concurrency)

Slide 30

Slide 30

A New Environment # Ideally Invisible & General

Slide 31

Slide 31

A New Environment # Ideally Invisible & General Web Apps e.g. Fission Drive, Diffuse Music

Slide 32

Slide 32

A New Environment # Ideally Invisible & General Web Apps e.g. Fission Drive, Diffuse Music

Slide 33

Slide 33

A New Environment # Ideally Invisible & General Web Apps e.g. Fission Drive, Diffuse Music Tools for Thought e.g. TiddlyWiki

Slide 34

Slide 34

A New Environment # Ideally Invisible & General Web Apps e.g. Fission Drive, Diffuse Music Tools for Thought e.g. TiddlyWiki Data Science e.g. Qri

Slide 35

Slide 35

A New Environment # Ideally Invisible & General Web Apps e.g. Fission Drive, Diffuse Music Tools for Thought e.g. TiddlyWiki Data Science e.g. Qri Storage Networks WIP

Slide 36

Slide 36

A New Environment # WNFS API

Slide 37

Slide 37

A New Environment # WNFS API add cat ls mkdir rm mv write

Slide 38

Slide 38

A New Environment # WNFS API add cat ls mkdir rm mv write https://guide.fission.codes/developers/webnative/file-system-wnfs

Slide 39

Slide 39

A New Environment # WNFS API add cat ls mkdir rm mv write https://guide.fission.codes/developers/webnative/file-system-wnfs

Slide 40

Slide 40

Content Addressing Primer From a File System Perspective E

Slide 41

Slide 41

Content Addressing E

Slide 42

Slide 42

Content Addressing E The limitation of local knowledge is the fundamental fact about the setting in which we work, and it is a very powerful limitation – Nancy Lynch, A Hundred Impossibility Proofs for Distributed Computing

Slide 43

Slide 43

Content Addressing E Addressing Stack

Slide 44

Slide 44

Content Addressing E Addressing Stack Virtual (Machine) Location E (42.123.45.6/path)@t0 = content1 (42.123.45.6/path)@t1 = content2

Slide 45

Slide 45

Content Addressing E Addressing Stack Named Location F Virtual (Machine) Location E {DNS → IP} (42.123.45.6/path)@t0 = content1 (42.123.45.6/path)@t1 = content2

Slide 46

Slide 46

Content Addressing E Addressing Stack Universal Content ID {hash(content) → content} Named Location F {DNS → IP} Virtual (Machine) Location E (42.123.45.6/path)@t0 = content1 (42.123.45.6/path)@t1 = content2

Slide 47

Slide 47

Content Addressing E IPLD Node

Slide 48

Slide 48

Content Addressing E IPLD Node Bytes 0101000101001001010

Slide 49

Slide 49

Content Addressing E IPLD Node Bytes 0101000101001001010 Links Foo Bar

Slide 50

Slide 50

Content Addressing E Raw IPLD Node IPLD Node Bytes 0101000101001001010 Links bafy12345 Foo Bar

Slide 51

Slide 51

Content Addressing E Raw IPLD Node IPLD Node Bytes 0101000101001001010 Links bafy12345 Foo bafyABCDE Bar bafyVWXYZ

Slide 52

Slide 52

Content Addressing E Mutability

Slide 53

Slide 53

Content Addressing E Mutability TXT _dnslink.akiko.example.com

Slide 54

Slide 54

Content Addressing E Mutability TXT _dnslink.akiko.example.com bafy12345

Slide 55

Slide 55

Content Addressing E Mutability TXT _dnslink.akiko.example.com bafy12345

Slide 56

Slide 56

Content Addressing E Mutability TXT _dnslink.akiko.example.com bafyABCDE bafy12345

Slide 57

Slide 57

Content Addressing E Mutability TXT _dnslink.akiko.example.com bafyABCDE bafy12345

Slide 58

Slide 58

Content Addressing E Mutability TXT _dnslink.akiko.example.com bafyABCDE bafy12345 Decoupled: atomic, reductions, etc

Slide 59

Slide 59

Content Addressing E Mutability TXT _dnslink.akiko.example.com bafyABCDE bafy12345 Decoupled: atomic, reductions, etc

Slide 60

Slide 60

Content Addressing E Hard & Soft Links

Slide 61

Slide 61

Content Addressing E Hard & Soft Links akiko.example.com

Slide 62

Slide 62

Content Addressing E Hard & Soft Links akiko.example.com boris.example.com

Slide 63

Slide 63

Content Addressing E Hard & Soft Links akiko.example.com Hard Links New for the web! Direct reference 2 pointers ~ deduplicate boris.example.com

Slide 64

Slide 64

Content Addressing E Hard & Soft Links akiko.example.com Hard Links New for the web! Direct reference 2 pointers ~ deduplicate boris.example.com

Slide 65

Slide 65

Content Addressing E Hard & Soft Links akiko.example.com Hard Links New for the web! Direct reference 2 pointers ~ deduplicate boris.example.com Soft Links Symlink or web link (URL) Pointer ~ latest Latest may break

Slide 66

Slide 66

Content Addressing E Data Partitioning & Selective Replication

Slide 67

Slide 67

Content Addressing E Data Partitioning & Selective Replication ,

Slide 68

Slide 68

Content Addressing E Data Partitioning & Selective Replication ,

Slide 69

Slide 69

Content Addressing E Data Partitioning & Selective Replication ,

Slide 70

Slide 70

Content Addressing E Layout

Slide 71

Slide 71

Content Addressing E Layout WNFS Root

Slide 72

Slide 72

Content Addressing E Layout WNFS Root Owner DID G

Slide 73

Slide 73

Content Addressing E Layout WNFS Root Public H Photos Avatars Owner DID G Apps

Slide 74

Slide 74

Content Addressing E Layout WNFS Root Public H Photos Avatars Owner DID G Apps Secret I Photos Apps Family Photos My Gallery

Slide 75

Slide 75

Content Addressing E Layout WNFS Root Public H Photos Avatars Owner DID G Apps Photos Family Photos Secret I Apps My Gallery Sharing Out = Keys & Pointers

Slide 76

Slide 76

Content Addressing E Layout WNFS Root Public H Photos Avatars Owner DID G Apps Photos Family Photos Secret I Apps My Gallery Sharing In J Sharing Out = Keys and Keys and Keys & Pointers Pointers Pointers Keys & Pointers

Slide 77

Slide 77

Content Addressing E Layout WNFS Root Public H Photos Avatars Owner DID G Apps Photos Family Photos Secret I Apps My Gallery Sharing In J Sharing Out = Keys and Keys and Keys & Pointers Pointers Pointers Keys & Pointers

Slide 78

Slide 78

Content Addressing Primer E Semantic Layers

Slide 79

Slide 79

Content Addressing Primer E Semantic Layers Noun Files Data

Slide 80

Slide 80

Content Addressing Primer E Semantic Layers Noun Visibility Decrypted Files Encrypted Data

Slide 81

Slide 81

Content Addressing Primer E Semantic Layers Noun Visibility Decrypted → Files → Encrypted Data →

Slide 82

Slide 82

Content Addressing Primer E Semantic Layers Noun Visibility Decrypted Example → Paths & Content → Headers & Node Layout → Merkle Set Files Encrypted Data

Slide 83

Slide 83

Content Addressing Primer E Semantic Layers Noun Visibility Decrypted Example → Paths & Content → Headers & Node Layout → Merkle Set Files Encrypted Data

Slide 84

Slide 84

Public Files K WNFS Data Model Public Photos Avatars Apps

Slide 85

Slide 85

Public Files K Virtual Nodes

Slide 86

Slide 86

Public Files K Virtual Nodes Raw Content (Hash Linked Binary Data)

Slide 87

Slide 87

Public Files K Virtual Nodes Raw Content (Hash Linked Binary Data) File Node

Slide 88

Slide 88

Public Files K Virtual Nodes Raw Content (Hash Linked Binary Data) File Node Kernel Header

Slide 89

Slide 89

Public Files K Virtual Nodes Raw Content (Hash Linked Binary Data) File Node Kernel Header Userland Raw Data

Slide 90

Slide 90

Public Files K Virtual Nodes Raw Content (Hash Linked Binary Data) File Node Kernel Header Userland Raw Data Userland Metadata

Slide 91

Slide 91

Public Files K Virtual Nodes Raw Content (Hash Linked Binary Data) File Node Kernel Header Userland Raw Data Userland Metadata

Slide 92

Slide 92

Public Files K Virtual Nodes Raw Content (Hash Linked Binary Data) Virtual Node File Node Kernel Header Userland Raw Data Consistent interface Arbitrary metadata Tags, creators, MIME, sources, &c Userland Metadata

Slide 93

Slide 93

Public Files K Virtual Nodes Raw Content (Hash Linked Binary Data) Virtual Node File Node Kernel Header Userland Raw Data Consistent interface Arbitrary metadata Tags, creators, MIME, sources, &c Userland Metadata Directory Node Kernel Header Index Metadata

Slide 94

Slide 94

Public Files K Hash-Linked Layout

Slide 95

Slide 95

Public Files K Hash-Linked Layout bafyVWXYZ beach.png

Slide 96

Slide 96

Public Files K Hash-Linked Layout bafy12345 Vacation bafyVWXYZ beach.png

Slide 97

Slide 97

Public Files K Hash-Linked Layout bafy12345 Vacation bafyVWXYZ beach.png caricature.jpg bafyLMNOP

Slide 98

Slide 98

Public Files K Hash-Linked Layout bafy12345 Vacation Avatars@r0 bafyABCDE bafyVWXYZ beach.png caricature.jpg bafyLMNOP

Slide 99

Slide 99

Public Files K Hash-Linked Layout bafy0000 Photos@r0 bafy12345 Vacation Avatars@r0 bafyABCDE bafyVWXYZ beach.png caricature.jpg bafyLMNOP

Slide 100

Slide 100

Public Files K Hash-Linked Layout Photos@r0 Vacation Avatars@r0 beach.png caricature.jpg

Slide 101

Slide 101

Public Files K Persistent Versioning Photos@r0 Vacation Avatars@r0 beach.png caricature.jpg

Slide 102

Slide 102

Public Files K Persistent Versioning Photos@r0 Vacation Avatars@r0 beach.png caricature.jpg Revision 0

Slide 103

Slide 103

Public Files K Persistent Versioning Photos@r0 Vacation Avatars@r0 beach.png caricature.jpg Revision 0 L

Slide 104

Slide 104

Public Files K Persistent Versioning Photos@r0 Vacation Avatars@r0 beach.png caricature.jpg Revision 0 Revision 1 L

Slide 105

Slide 105

Public Files K Persistent Versioning Photos@r0 Vacation Avatars@r0 beach.png caricature.jpg Revision 0 smiling.png Revision 1 L

Slide 106

Slide 106

Public Files K Persistent Versioning Photos@r0 Vacation Avatars@r0 Avatars@r1 beach.png caricature.jpg smiling.png Revision 0 Revision 1 L

Slide 107

Slide 107

Public Files K Persistent Versioning Photos@r0 Vacation Avatars@r0 Avatars@r1 beach.png caricature.jpg smiling.png Revision 0 Revision 1 L

Slide 108

Slide 108

Public Files K Persistent Versioning Photos@r0 Photos@r1 Vacation Avatars@r0 Avatars@r1 beach.png caricature.jpg smiling.png Revision 0 Revision 1 L

Slide 109

Slide 109

Public Files K Persistent Versioning Photos@r0 Photos@r1 Vacation Avatars@r0 Avatars@r1 beach.png caricature.jpg smiling.png Revision 0 Revision 1 L

Slide 110

Slide 110

Public Files K Persistent Versioning Photos@r0 Photos@r1 Vacation Avatars@r0 Avatars@r1 beach.png caricature.jpg smiling.png Revision 0 Revision 1 L

Slide 111

Slide 111

Public Files K Persistent Versioning Photos@r0 Photos@r1 Vacation Avatars@r0 Avatars@r1 beach.png caricature.jpg smiling.png Revision 0 Revision 1 L

Slide 112

Slide 112

Public Files K Persistent Versioning Photos@r0 ChildHasEvent Vacation Avatars@r0 beach.png caricature.jpg Photos@r1 InsertNew Revision 0 smiling.png Revision 1 L Avatars@r1

Slide 113

Slide 113

Public Files K Persistent Versioning Photos@r0 ChildHasEvent Vacation Avatars@r0 beach.png caricature.jpg Photos@r1 InsertNew Revision 0 smiling.png Revision 1 L Avatars@r1

Slide 114

Slide 114

Public Files K Rearranged Photos@r1 ChildHasEvent Avatars@r1 Photos@r0 InsertNew Vacation Avatars@r0 beach.png caricature.jpg headshot.png

Slide 115

Slide 115

Public Files K Rearranged Photos@r1 M ChildHasEvent Avatars@r1 Photos@r0 InsertNew Vacation Avatars@r0 beach.png caricature.jpg headshot.png

Slide 116

Slide 116

Public Files K Rearranged Photos@r1 M ChildHasEvent Avatars@r1 Photos@r0 InsertNew Vacation Avatars@r0 beach.png caricature.jpg headshot.png

Slide 117

Slide 117

Public Files K It’s All Just Maps

Slide 118

Slide 118

Public Files K It’s All Just Maps

Slide 119

Slide 119

Public Files K It’s All Just Maps

Slide 120

Slide 120

Public Files K It’s All Just Maps Multiple?! (More on this later)

Slide 121

Slide 121

Public Files K It’s All Just Maps

Slide 122

Slide 122

Public Files K It’s All Just Maps

Slide 123

Slide 123

Public Files K Single Public File History

Slide 124

Slide 124

Public Files K Single Public File History Single File History / “Causal Shadow”

Slide 125

Slide 125

Public Files K Single Public File History A Single File History / “Causal Shadow”

Slide 126

Slide 126

Public Files K Single Public File History A B Single File History / “Causal Shadow”

Slide 127

Slide 127

Public Files K Single Public File History A B Single File History / “Causal Shadow” C

Slide 128

Slide 128

Public Files K Single Public File Confluence B C A Single File History / “Causal Shadow”

Slide 129

Slide 129

Public Files K Single Public File Confluence B C A X W Single File History / “Causal Shadow” Y

Slide 130

Slide 130

Public Files K Single Public File Confluence B C ≠ A X W Single File History / “Causal Shadow” Y

Slide 131

Slide 131

Public Files K Single Public File Confluence B C A X W Single File History / “Causal Shadow” Y

Slide 132

Slide 132

Public Files K Single Public File Confluence B C Z A X W Single File History / “Causal Shadow” Y

Slide 133

Slide 133

Public Files K Single Public File Confluence B C A Z W X Y

Slide 134

Slide 134

Public Files K Directory History B C A Z W X Y

Slide 135

Slide 135

Public Files K Directory History PB PC PA PZ PW PX B PY C A Z W X Y

Slide 136

Slide 136

Public Files K Directory History + Extra Updates PB + 1 PB PC + 1 PC PA PZ PW PX + 1 PX B PY C A Z W X Y

Slide 137

Slide 137

Public Files K Directory History + Extra Updates PB + 1 PB PC + 1 PC PA PZ PW PX + 1 PX B PY C A Z W X Y

Slide 138

Slide 138

Public Files K Directory History + Extra Updates PB + 1 PB PC + 1 PC PA PZ PW PX + 1 PX B PY C A Z W X Y

Slide 139

Slide 139

Public Files K Diff Checkpointing

Slide 140

Slide 140

Public Files K Diff Checkpointing bafyZYX bafyY00 bafyABC

Slide 141

Slide 141

Public Files K Diff Checkpointing bafy123 bafyZYX bafyY00 bafyABC bafy789 bafyhai

Slide 142

Slide 142

Public Files K Diff Checkpointing bafy123 bafyZYX bafyY00 bafy789 bafyABC bafyX00 bafy456 bafyhai

Slide 143

Slide 143

Public Files K Diff Checkpointing bafy123 bafyZYX bafyY00 bafy789 bafyhai bafyABC bafyX00 bafy456 bafy0Y2

Slide 144

Slide 144

Public Files K Diff Checkpointing Skip to nodes ending in “00” bafy123 bafyZYX bafyY00 bafy789 bafyhai bafyABC bafyX00 bafy456 bafy0Y2

Slide 145

Slide 145

Public Files K Diff Checkpointing Skip to nodes ending in “00” bafy123 bafyZYX bafyY00 bafy789 bafyhai bafyABC bafyX00 bafy456 bafy0Y2

Slide 146

Slide 146

Public Files K Diff Checkpointing Skip to nodes ending in “00” bafy123 bafyZYX bafyY00 bafy789 bafyhai bafyABC bafyX00 bafy456 bafy0Y2

Slide 147

Slide 147

Public Files K Diff Checkpointing Skip to nodes ending in “00” bafy123 bafyZYX bafyY00 bafy789 bafyhai bafyABC bafyX00 bafy456 bafy0Y2

Slide 148

Slide 148

Public Files K Diff Checkpointing Skip to nodes ending in “00” bafy123 bafyZYX bafyY00 bafy789 bafyhai bafyABC bafyX00 bafy456 bafy0Y2

Slide 149

Slide 149

Public Files K Diff Checkpointing Skip to nodes ending in “00” bafy123 bafyZYX bafyY00 bafy789 bafyhai bafyABC bafyX00 bafy456 bafy0Y2

Slide 150

Slide 150

Public Files K Diff Checkpointing Skip to nodes ending in “00” bafy123 bafyZYX bafyY00 bafy789 bafyhai bafyABC bafyX00 bafy456 bafy0Y2

Slide 151

Slide 151

Public Files K Diff Checkpointing Skip to nodes ending in “00” bafy123 bafyZYX bafyY00 bafy789 bafyhai bafyABC bafyX00 bafy456 bafy0Y2

Slide 152

Slide 152

Public Files K Diff Checkpointing Skip to nodes ending in “00” bafy123 bafyZYX bafyY00 bafy789 bafyhai bafyABC bafyX00 bafy456 bafy0Y2

Slide 153

Slide 153

Public Files K …Moving On…

Slide 154

Slide 154

Public Files K …Moving On…

Slide 155

Slide 155

㊙ Secret Files O Distributed Storage When The Pipes Are Broken P

Slide 156

Slide 156

Slide 157

Slide 157

Cryptography is a tool for turning lots of different problems into key management problems Dr. Lea Kissner, Google’s Global Lead of Privacy Technologies

Slide 158

Slide 158

Secret Files O Dark Forest

Slide 159

Slide 159

Secret Files O Dark Forest

Slide 160

Slide 160

Secret Files O Dark Forest CHAMP (weight 16)

Slide 161

Slide 161

Secret Files O Dark Forest 163 > 4k buckets CHAMP 164 > 65k buckets (weight 16) 165 > 1M buckets

Slide 162

Slide 162

Secret Files O Dark Forest Append-only Quick Read/Write Merkleized Concurrency Friendly 163 > 4k buckets CHAMP 164 > 65k buckets (weight 16) 165 > 1M buckets

Slide 163

Slide 163

Secret Files O Dark Forest

Slide 164

Slide 164

Secret Files O Dark Forest One Pointer Machine Many (Secret) Roots

Slide 165

Slide 165

Secret Files O Dark Forest One Pointer Machine Many (Secret) Roots

Slide 166

Slide 166

Secret Files O Useful: Arbitrary Merge

Slide 167

Slide 167

Secret Files O Useful: Arbitrary Merge ∪

Slide 168

Slide 168

Secret Files O Useful: Arbitrary Merge ∪ Common

Slide 169

Slide 169

Secret Files O Useful: Arbitrary Merge ∪ Common

Slide 170

Slide 170

Secret Files O Useful: Arbitrary Merge Visibility Noun Decrypted Example → Paths & Content → Headers & Node Layout → Merkle Set Files Encrypted Data ∪ Common

Slide 171

Slide 171

Secret Files O Multivalues

Slide 172

Slide 172

Secret Files O Multivalues

Slide 173

Slide 173

Secret Files O Multivalues bafy123

Slide 174

Slide 174

Secret Files O Multivalues bafy123 Header

Slide 175

Slide 175

Secret Files O Multivalues bafy123 Header Content 1 Content 2 Content 3 Content 4

Slide 176

Slide 176

Secret Files O Multivalues bafy123 Header Content 1 Content 2 Content 3 Content 4 Witness 1 Witness 2 Witness 3 Witness 4

Slide 177

Slide 177

Secret Files O Single Private Node

Slide 178

Slide 178

Secret Files O Single Private Node Binary Encrypted Node Q

Slide 179

Slide 179

Secret Files O Single Private Node Binary AES-256 (file) Encrypted Node Q R File Kernel Header Raw Data Metadata

Slide 180

Slide 180

Secret Files O Single Private Node Directory Kernel Header Index Binary AES-256 (file) Encrypted Node Q R Metadata File Kernel Header Raw Data Metadata

Slide 181

Slide 181

Secret Files O Single Private Node Binary AES-256 (dir) Encrypted Node Q R Binary AES-256 (file) Encrypted Node Q R Directory Kernel Header Index Metadata File Kernel Header Raw Data Metadata

Slide 182

Slide 182

Secret Files O Single Private Node Binary AES-256 (dir) Encrypted Node Q R Binary Encrypted Node Q ??? AES-256 (file) R Directory Kernel Header Index Metadata ??? File Kernel Header Raw Data Metadata

Slide 183

Slide 183

Secret Files O Keys… Lots of Keys Encrypted Node Q R Encrypted Node Q R Encrypted Node Q R Encrypted Node Q R

Slide 184

Slide 184

Secret Files O Keys… Lots of Keys Encrypted Node Q R Encrypted Node Q R Encrypted Node Q R Encrypted Node Q R

Slide 185

Slide 185

Secret Files O Keys… Lots of Keys Encrypted Node Q Encrypted Node Q Encrypted Node Q Encrypted Node Q R

Slide 186

Slide 186

Secret Files O Dark Forest

Slide 187

Slide 187

Secret Files O Dark Forest R

Slide 188

Slide 188

Secret Files O Dark Forest R

Slide 189

Slide 189

Secret Files O Dark Forest R

Slide 190

Slide 190

Secret Files O Dark Forest R

Slide 191

Slide 191

Secret Files O Cryptree

Slide 192

Slide 192

Secret Files O Cryptree Binary Encrypted Node Q Encrypted Node Q Encrypted Node Q

Slide 193

Slide 193

Secret Files O Cryptree Binary CBOR Encrypted Node Q Directory Kernel Header Encrypted Node Q Index Encrypted Node Q R R Metadata

Slide 194

Slide 194

Secret Files O Cryptree Binary CBOR Encrypted Node Q AES256 Encrypted Node Q Directory Kernel Header R Index Encrypted Node Q R R Metadata

Slide 195

Slide 195

Secret Files O Cryptree Binary CBOR Encrypted Node Q AES256 Encrypted Node Q Directory Kernel Header R Index Encrypted Node Q R R Metadata

Slide 196

Slide 196

Secret Files O Read Window Directory Kernel Header Directory Kernel Header R Index R R Metadata R R R Index Metadata

Slide 197

Slide 197

Secret Files O Offline Access Control / Photos/ SL/ food.jpg Iceland/ stage.png Docs/ notes.md harpa.svg

Slide 198

Slide 198

Secret Files O Offline Access Control / S Photos/ SL/ food.jpg Iceland/ stage.png Docs/ notes.md harpa.svg

Slide 199

Slide 199

Secret Files O Offline Access Control / S Photos/ SL/ food.jpg Iceland/ stage.png Docs/ notes.md harpa.svg

Slide 200

Slide 200

Secret Files O Offline Access Control / S Photos/ SL/ Iceland/ Docs/ notes.md S food.jpg stage.png harpa.svg

Slide 201

Slide 201

Secret Files O Offline Access Control / S Photos/ Docs/ S SL/ Iceland/ notes.md S food.jpg stage.png harpa.svg

Slide 202

Slide 202

Secret Files O Offline Access Control / S Photos/ Docs/ S SL/ Iceland/ notes.md S food.jpg stage.png harpa.svg

Slide 203

Slide 203

Secret Files O Offline Access Control / S Photos/ Docs/ S SL/ Iceland/ notes.md S food.jpg stage.png harpa.svg

Slide 204

Slide 204

Secret Files O Offline Access Control / S Photos/ Docs/ S SL/ Iceland/ notes.md S food.jpg stage.png harpa.svg

Slide 205

Slide 205

Secret Files O Offline Access Control / S Photos/ Docs/ S SL/ ⚙➡S Iceland/ notes.md S food.jpg stage.png harpa.svg notes.md @rev2

Slide 206

Slide 206

Secret Files O Offline Access Control / S Photos/ Docs/ S SL/ ⚙➡S Iceland/ notes.md S food.jpg stage.png harpa.svg notes.md @rev2

Slide 207

Slide 207

Secret Files O Offline Access Control / S Photos/ Docs/ S SL/ ⚙➡S Iceland/ notes.md S food.jpg stage.png harpa.svg notes.md @rev2

Slide 208

Slide 208

Temporal Cryptree ⏱ Secrets in Space & Time “

Slide 209

Slide 209

Temporal Cryptree ⏱ Access Control in Space & Time V

Slide 210

Slide 210

Temporal Cryptree ⏱ Access Control in Space & Time V / Header

Slide 211

Slide 211

Temporal Cryptree ⏱ Access Control in Space & Time V / Header /Docs/ Header

Slide 212

Slide 212

Temporal Cryptree ⏱ Access Control in Space & Time V / Header / Header /Docs/ Header /Docs/ Header

Slide 213

Slide 213

Temporal Cryptree ⏱ Access Control in Space & Time V / Header / Header /Docs/ Header /Docs/ Header /sl.md Header

Slide 214

Slide 214

Temporal Cryptree ⏱ Access Control in Space & Time V / Header / Header /Docs/ Header /Docs/ Header /sl.md Header Revision X Revision X+1

Slide 215

Slide 215

Temporal Cryptree ⏱ Access Control in Space & Time V / Header / Header /Docs/ Header /Docs/ Header /sl.md Header Revision X Revision X+1

Slide 216

Slide 216

Temporal Cryptree ⏱ Access Control in Space & Time V / Header /Docs/ Header ⚙ ⚙ / Header /Docs/ Header /sl.md Header Revision X Revision X+1

Slide 217

Slide 217

Temporal Cryptree ⏱ Access Control in Space & Time V / Header / Header /Docs/ Header /Docs/ Header /sl.md Header Revision X Revision X+1

Slide 218

Slide 218

Temporal Cryptree ⏱ Access Control in Space & Time V / Header / Header / Header /Docs/ Header /Docs/ Header /Docs/ Header /sl.md Header /sl.md Header Revision X Revision X+1 Revision X+2

Slide 219

Slide 219

Temporal Cryptree ⏱ Access Control in Space & Time V / Header / Header / Header /Docs/ Header /Docs/ Header /sl.md Header /sl.md Header / Content /Docs/ Header Revision X Revision X+1 Revision X+2

Slide 220

Slide 220

Temporal Cryptree ⏱ Access Control in Space & Time V / Header / Header / Header /Docs/ Header /Docs/ Header /sl.md Header /sl.md Header / Content /Docs/ Header /Docs/ Content Revision X Revision X+1 Revision X+2

Slide 221

Slide 221

Temporal Cryptree ⏱ Access Control in Space & Time V / Header / Header / Header /Docs/ Header /Docs/ Header /sl.md Header /sl.md Header / Content /Docs/ Header /Docs/ Content Revision X Revision X+1 Revision X+2

Slide 222

Slide 222

Temporal Cryptree ⏱ Access Control in Space & Time V / Header / Header / Header /Docs/ Header /Docs/ Header /sl.md Header /sl.md Header / Content /Docs/ Header /Docs/ Content Revision X Revision X+1 Revision X+2

Slide 223

Slide 223

Temporal Cryptree ⏱ Access Control in Space & Time V / Header / Header / Content /Docs/ Header / Header / Content /Docs/ Header /Docs/ Content /Docs/ Header /Docs/ Content /sl.md Header Revision X Revision X+1 /sl.md Header /sl.md Content Revision X+2

Slide 224

Slide 224

Temporal Cryptree ⏱ Access Control in Space & Time V / Header / Header / Content /Docs/ Header / Header / Content /Docs/ Header /Docs/ Content /Docs/ Header /Docs/ Content /sl.md Header Revision X / Content Revision X+1 /Docs/ Content /sl.md Header /sl.md Content Revision X+2 /sl.md Content

Slide 225

Slide 225

Temporal Cryptree ⏱ Access Control in Space & Time V / Header / Header / Content /Docs/ Header / Header / Content /Docs/ Header /Docs/ Content / Content /Docs/ Header /Docs/ Content /sl.md Header /Docs/ Content /sl.md Header /sl.md Content /sl.md Content

Slide 226

Slide 226

Temporal Cryptree ⏱ Access Control in Space & Time V / Header / Header / Content / Header / Content /Docs/ Header /Docs/ Header /Docs/ Content / Content /Docs/ Header /Docs/ Content /sl.md Header /Docs/ Content /sl.md Header /sl.md Content /sl.md Content

Slide 227

Slide 227

Temporal Cryptree ⏱ Access Control in Space & Time V / Header / Header / Content / Header / Content /Docs/ Header /Docs/ Header /Docs/ Content / Content /Docs/ Header /Docs/ Content /sl.md Header /Docs/ Content /sl.md Header /sl.md Content /sl.md Content

Slide 228

Slide 228

Temporal Cryptree ⏱ Access Control in Space & Time V / Header / Header / Content / Header / Content /Docs/ Header /Docs/ Header /Docs/ Content / Content /Docs/ Header /Docs/ Content /sl.md Header /Docs/ Content /sl.md Header /sl.md Content /sl.md Content

Slide 229

Slide 229

Temporal Cryptree ⏱ Access Control in Space & Time V / Header / Header / Content / Header / Content /Docs/ Header /Docs/ Header /Docs/ Content / Content /Docs/ Header /Docs/ Content /sl.md Header /Docs/ Content /sl.md Header /sl.md Content /sl.md Content

Slide 230

Slide 230

Temporal Cryptree ⏱ Access Control in Space & Time V / Header / Header / Content / Header / Content /Docs/ Header /Docs/ Header /Docs/ Content / Content /Docs/ Header /Docs/ Content /sl.md Header /Docs/ Content /sl.md Header /sl.md Content /sl.md Content

Slide 231

Slide 231

Temporal Cryptree ⏱ Lazy Rooting

Slide 232

Slide 232

Temporal Cryptree ⏱ Lazy Rooting

Slide 233

Slide 233

Temporal Cryptree ⏱ Lazy Rooting

Slide 234

Slide 234

Temporal Cryptree ⏱ Lazy Rooting

Slide 235

Slide 235

Temporal Cryptree ⏱ Lazy Rooting Rev 0

Slide 236

Slide 236

Temporal Cryptree ⏱ Lazy Rooting Rev 0 Rev 1 (Partial)

Slide 237

Slide 237

Temporal Cryptree ⏱ Lazy Rooting Attachment progress Unrooted?! W Rev 0 Rev 1 (Partial)

Slide 238

Slide 238

Temporal Cryptree ⏱ Lazy Rooting Rev 0 Rev 1 (Partial)

Slide 239

Slide 239

Temporal Cryptree ⏱ Lazy Rooting Rev 0 Rev 1 (Partial) Rev 2 (Partial)

Slide 240

Slide 240

Temporal Cryptree ⏱ Lazy Rooting Rev 3 (Complete) Rev 0 Rev 1 (Partial) Rev 2 (Partial)

Slide 241

Slide 241

Temporal Cryptree ⏱ Lazy Rooting Rev 3 (Complete) Rev 0 Rev 1 (Partial) Rev 2 (Partial)

Slide 242

Slide 242

Temporal Cryptree ⏱ Lazy Rooting Rev 3 (Complete) Rev 0 Rev 1 (Partial) Rev 2 (Partial)

Slide 243

Slide 243

What’s In a Name? I Hiding Paths In Plain Sight X

Slide 244

Slide 244

What’s In a Name? I Why Hidden Paths? • TL;DR correlation is bad • File hierarchy (space) • File history (time)

Slide 245

Slide 245

What’s In a Name? I Quasi-Commutative Hash

Slide 246

Slide 246

What’s In a Name? I Quasi-Commutative Hash X

Slide 247

Slide 247

What’s In a Name? I Quasi-Commutative Hash X Y1

Slide 248

Slide 248

What’s In a Name? I Quasi-Commutative Hash Hash X Y1

Slide 249

Slide 249

What’s In a Name? I Quasi-Commutative Hash Hash X Y1 Y2

Slide 250

Slide 250

What’s In a Name? I Quasi-Commutative Hash Hash Hash X Y1 Y2

Slide 251

Slide 251

What’s In a Name? I Quasi-Commutative Hash Hash Hash Hash X Hash Y1 Y2 X

Slide 252

Slide 252

What’s In a Name? I Quasi-Commutative Hash Hash Hash Hash X Hash Y1 Y2 X Y2 Y1

Slide 253

Slide 253

What’s In a Name? I Quasi-Commutative Hash Hash Hash Hash X Y1 Y2 ↔ Hash X Y2 Y1

Slide 254

Slide 254

What’s In a Name? I Cryptographic Accumulator

Slide 255

Slide 255

What’s In a Name? I Cryptographic Accumulator / root i-number /Strange Loop/ SL i-number /Photos/ Photos i-number /stage.png stage.png i-number stage.png@42 hash(AES Key)

Slide 256

Slide 256

What’s In a Name? I Cryptographic Accumulator / root i-number /Strange Loop/ SL i-number /Photos/ Photos i-number stage.png@42 hash(AES Key) /stage.png stage.png i-number

Slide 257

Slide 257

What’s In a Name? I Cryptographic Accumulator / root i-number /Strange Loop/ SL i-number /Photos/ Photos i-number Parent Accumulator stage.png@42 hash(AES Key) /stage.png stage.png i-number

Slide 258

Slide 258

What’s In a Name? I Cryptographic Accumulator / root i-number /Strange Loop/ SL i-number /Photos/ Photos i-number Parent Accumulator stage.png@42 hash(AES Key) /stage.png stage.png i-number

Slide 259

Slide 259

What’s In a Name? I Cryptographic Accumulator / root i-number /Strange Loop/ SL i-number /Photos/ Photos i-number Parent Accumulator stage.png@42 hash(AES Key) /stage.png stage.png i-number

Slide 260

Slide 260

What’s In a Name? I Cryptographic Accumulator / root i-number /Strange Loop/ SL i-number /Photos/ Photos i-number Parent Accumulator Witness (Encrypted Component) stage.png@42 hash(AES Key) /stage.png stage.png i-number

Slide 261

Slide 261

What’s In a Name? I Cryptographic Accumulator / root i-number /Strange Loop/ SL i-number /Photos/ Photos i-number Parent Accumulator Witness (Encrypted Component) stage.png@42 hash(AES Key) /stage.png stage.png i-number Commitment (Encrypted Path)

Slide 262

Slide 262

What’s In a Name? I Cryptographic Accumulator / root i-number /Photos/ Photos i-number /Strange Loop/ SL i-number stage.png@42 hash(AES Key) /stage.png stage.png i-number

Slide 263

Slide 263

What’s In a Name? I Cryptographic Accumulator / root i-number stage.png@42 hash(AES Key) /Strange Loop/ SL i-number /stage.png stage.png i-number /Photos/ Photos i-number

Slide 264

Slide 264

What’s In a Name? I Cryptographic Accumulator / root i-number Parent Accumuator stage.png@42 hash(AES Key) /Strange Loop/ SL i-number /stage.png stage.png i-number /Photos/ Photos i-number

Slide 265

Slide 265

What’s In a Name? I Cryptographic Accumulator / root i-number Parent Accumuator stage.png@42 hash(AES Key) /Strange Loop/ SL i-number /stage.png stage.png i-number /Photos/ Photos i-number

Slide 266

Slide 266

What’s In a Name? I Cryptographic Accumulator / root i-number Parent Accumuator stage.png@42 hash(AES Key) /Strange Loop/ SL i-number /stage.png stage.png i-number /Photos/ Photos i-number

Slide 267

Slide 267

What’s In a Name? I Cryptographic Accumulator / root i-number Parent Accumuator Witness 1/2 (Secret Component) stage.png@42 hash(AES Key) /Strange Loop/ SL i-number /stage.png stage.png i-number /Photos/ Photos i-number

Slide 268

Slide 268

What’s In a Name? I Cryptographic Accumulator / root i-number Parent Accumuator Witness 1/2 (Secret Component) stage.png@42 hash(AES Key) /Strange Loop/ SL i-number /stage.png stage.png i-number Witness 2/2 (Revealed Component) /Photos/ Photos i-number

Slide 269

Slide 269

What’s In a Name? I Cryptographic Accumulator / root i-number Parent Accumuator Witness 1/2 (Secret Component) stage.png@42 hash(AES Key) /Strange Loop/ SL i-number Commitment (Encrypted Path) /stage.png stage.png i-number Witness 2/2 (Revealed Component) /Photos/ Photos i-number

Slide 270

Slide 270

Wrap Up Y

Slide 271

Slide 271

Wrap Up Y Is That All? • Hash linked files • Privacy-preserving paths • Cryptrees: one key per entrypoint • Temporal access control • History & fork/merge on public and private data

Slide 272

Slide 272

Wrap Up Y Future Work • Wasm & native SDKs based on rs-wnfs — soon! • Local-first, encrypted-at-rest, collaborative datalog • Faster, more reliable networking • ZK-ify private tree certificates • FUSE support

Slide 273

Slide 273

Wrap Up Y Where To Get Started guide.fission.codes github.com/wnfs-wg/spec github.com/wnfs-wg/rs-wnfs

Slide 274

Slide 274

Slide 275

Slide 275

The Difficult is that which can be done immediately; the Impossible that which takes a little longer. — George Santayana

Slide 276

Slide 276

WN FS Z Thank You, Strange Loop @expede brooklyn@fission.codes https://fission.codes discord.gg/fissioncodes ✨ github.com/wnfs-wg(/spec) ✨