1 00:00:00,000 --> 00:00:05,660 Hi, my name is Christian Dulldog Ryu, and this is Caitlin Medus for Bowdoin. 2 00:00:06,800 --> 00:00:12,960 We are members of the Cult of the Dead Cow and here to present to you an unveiling of Valid. 3 00:00:13,100 --> 00:00:15,480 We've been pumping this thing up for six months online. 4 00:00:16,000 --> 00:00:19,740 A lot of interesting stories about what it could and couldn't be. 5 00:00:20,620 --> 00:00:24,840 We're just ready to pull back the curtain a bit and talk about what is Valid. 6 00:00:26,840 --> 00:00:30,560 So today we are about to drop some fantastic code. 7 00:00:30,780 --> 00:00:36,760 We are about to drop some really cool apps and things and we are about to make some cool announcements. 8 00:00:37,100 --> 00:00:43,280 But I think above all, I really hope that everybody understands that the biggest thing we're doing here is presenting an idea. 9 00:00:43,680 --> 00:00:48,660 And that idea is that some things are just worth doing, even if it's not monetary. 10 00:00:49,000 --> 00:00:53,300 I think we all found ourselves in hacking for one reason or another. 11 00:00:53,300 --> 00:00:58,240 And that was to make a difference, to do something that's worthwhile. 12 00:00:58,780 --> 00:01:03,480 You know, if you wanted to go make a bunch of money, you'd be over a black hat right now, but you're here. 13 00:01:04,200 --> 00:01:09,100 Okay, so we want to inspire all of you to hack the planet with us today. 14 00:01:15,420 --> 00:01:18,060 So in short, the Valid mission. 15 00:01:18,680 --> 00:01:22,720 We exist to develop, distribute, and maintain a privacy-focused communication 16 00:01:23,300 --> 00:01:27,040 platform and protocol for the purposes of defending human and civil rights. 17 00:01:27,140 --> 00:01:28,260 There's a big mission there. 18 00:01:28,400 --> 00:01:34,000 We spent a lot of time thinking about this thing before we started writing code on it. 19 00:01:34,500 --> 00:01:37,700 We want to affect a particular outcome on the world. 20 00:01:37,800 --> 00:01:40,800 We're not interested in just writing cool code for the sake of it. 21 00:01:40,980 --> 00:01:52,340 You know, we want to rethink the way applications are built so that the things people take for granted about application development change. 22 00:01:53,300 --> 00:01:55,400 You don't have to monetize everything. 23 00:01:56,040 --> 00:01:59,780 You don't have to sell users out just to make your cloud bill get paid. 24 00:02:01,000 --> 00:02:03,220 That kind of future is the future we should have had. 25 00:02:03,420 --> 00:02:04,920 So let's get into a little bit. 26 00:02:06,640 --> 00:02:08,080 Others have come before us. 27 00:02:08,300 --> 00:02:10,240 We had some inspiration from other tools. 28 00:02:11,600 --> 00:02:16,440 You know, we looked at the world, we said, you know, we want to build things that are better. 29 00:02:16,740 --> 00:02:18,580 What tools exist already today? 30 00:02:18,940 --> 00:02:21,940 And Tor was there, front and center. 31 00:02:22,060 --> 00:02:22,300 I... 32 00:02:22,820 --> 00:02:23,280 I... 33 00:02:23,280 --> 00:02:34,400 I remember hanging out with Roger and Nick early in their development days and seeing how they had a similar mission to make things private that just weren't back in the day. 34 00:02:34,940 --> 00:02:45,260 I looked at IPFS, you know, which is pretty novel in its use of distributed hash tables and all these crazy technologies to make interplanetary file systems. 35 00:02:45,420 --> 00:02:45,740 I mean, that's... 36 00:02:45,740 --> 00:02:47,340 It just sounds huge, doesn't it? 37 00:02:48,060 --> 00:02:50,120 And there's a lot of other efforts in this space. 38 00:02:50,300 --> 00:02:52,580 Peer-to-peer has been bounced around for... 39 00:02:52,580 --> 00:02:56,720 20 years since Napster and BitTorrent and everything else. 40 00:02:57,800 --> 00:03:02,060 We are at a time now where everyone has a supercomputer in their pocket. 41 00:03:02,360 --> 00:03:04,140 You got a terabyte of storage. 42 00:03:05,080 --> 00:03:11,540 And it begs the question, what if the cloud was everyone's computer, not just Jeff Bezos's? 43 00:03:12,980 --> 00:03:13,800 That's right. 44 00:03:14,260 --> 00:03:15,320 Thank you. 45 00:03:15,680 --> 00:03:16,180 Thank you. 46 00:03:18,400 --> 00:03:22,440 Valid is an open source, peer-to-peer, mobile... 47 00:03:22,580 --> 00:03:24,820 First, networked application framework. 48 00:03:25,300 --> 00:03:33,300 What this means is that it's like Tor and IPFS had sex and produced this thing, okay? 49 00:03:33,740 --> 00:03:51,640 Imagine a world where your apps can talk directly to each other, bypassing all the middlemen, not taking storage in the cloud or requiring some central authority for things like identity and storage or whatever. 50 00:03:53,040 --> 00:04:03,280 I looked at the web 3.0 people and the things that are coming down the pipe, you know, there's been a lot of talk about decentralization lately. 51 00:04:03,400 --> 00:04:11,280 You've seen Mastodon and Blue Sky and these things where we're moving from centralized networks down to more feudal control. 52 00:04:11,760 --> 00:04:19,260 This is sort of the next logical step toward individual nodes all being peers in the same level. 53 00:04:19,680 --> 00:04:20,920 No hierarchy. 54 00:04:21,440 --> 00:04:22,560 But how do you affect that? 55 00:04:22,580 --> 00:04:23,260 How do you build that? 56 00:04:23,320 --> 00:04:24,080 How do you make it work? 57 00:04:24,300 --> 00:04:26,160 So here's what we're going to do. 58 00:04:28,340 --> 00:04:31,820 We put some design goals together for this project. 59 00:04:32,620 --> 00:04:35,580 And obviously, security was first. 60 00:04:36,040 --> 00:04:44,360 You know, if you're going to be asking people to do something new with their applications or mobile devices, you have to be thinking like an attacker. 61 00:04:44,440 --> 00:04:45,440 How would you tear this apart, right? 62 00:04:45,800 --> 00:04:46,820 So security first. 63 00:04:46,880 --> 00:04:47,540 We wrote it in Rust. 64 00:04:47,940 --> 00:04:52,420 It is now over 100,000 lines of Rust. 65 00:04:52,580 --> 00:04:54,080 Lovingly hand-coded. 66 00:04:55,420 --> 00:04:57,000 Built for memory and type safety. 67 00:04:58,100 --> 00:04:59,360 It runs everywhere. 68 00:04:59,760 --> 00:05:01,360 You know, Rust is extremely portable. 69 00:05:01,640 --> 00:05:09,540 We have a core that runs on Linux, Mac, Windows, Android, iOS, and in browser WASM today that works. 70 00:05:11,160 --> 00:05:13,100 We use standard Internet protocols. 71 00:05:13,300 --> 00:05:14,620 You can think of this as an overlay network. 72 00:05:14,900 --> 00:05:17,380 So we're not going all the way down and writing a kernel. 73 00:05:17,860 --> 00:05:22,360 You know, but we're also not building on top of things like blockchains and, you know. 74 00:05:23,540 --> 00:05:25,100 Transactional protocols and all this. 75 00:05:25,540 --> 00:05:26,600 We use UDP. 76 00:05:26,760 --> 00:05:27,280 We use TCP. 77 00:05:27,480 --> 00:05:32,080 And we use WebSockets because these are the tools that are rock solid and available on all these platforms. 78 00:05:32,980 --> 00:05:34,240 It's all in network. 79 00:05:34,680 --> 00:05:36,380 We don't have external services. 80 00:05:36,500 --> 00:05:39,820 We don't rely on Google's stun servers to do hole punching. 81 00:05:40,280 --> 00:05:43,680 We avoid DNS because that's a giant information leak. 82 00:05:44,920 --> 00:05:47,700 There's a tiny little bit to DNS, but we'll explain why that doesn't matter. 83 00:05:48,560 --> 00:05:52,340 And, you know, we have all of the services that make Valid possible. 84 00:05:52,340 --> 00:05:55,340 Inside the Valid network itself. 85 00:05:55,600 --> 00:05:56,600 It's self-contained. 86 00:05:56,820 --> 00:05:57,840 You just link it in. 87 00:05:57,920 --> 00:05:59,040 Everything is working. 88 00:05:59,340 --> 00:06:00,560 All nodes are equal. 89 00:06:01,460 --> 00:06:03,040 Privacy focus was really important. 90 00:06:03,220 --> 00:06:06,280 When I looked at IPFS, it was not designed with privacy in mind. 91 00:06:07,120 --> 00:06:11,720 You know, Tor obviously was designed with privacy in mind, but it wasn't designed with performance in mind. 92 00:06:11,880 --> 00:06:13,840 And it was more about, like, proxying. 93 00:06:13,980 --> 00:06:21,640 And it really enabled, you know, websites to talk, you know, to be reached anonymously. 94 00:06:21,640 --> 00:06:29,400 But that's not sort of a bidirectional privacy when, you know, the NSA runs 100 exit nodes, you know. 95 00:06:29,460 --> 00:06:35,300 So what if there were no exit nodes and, in fact, there were tens of millions of nodes? 96 00:06:35,620 --> 00:06:40,160 It would be really hard to monitor tens of millions of nodes instead of a couple exit nodes. 97 00:06:40,360 --> 00:06:42,320 So privacy focus from the beginning. 98 00:06:43,660 --> 00:06:46,640 And keeping nodes and identities distinct. 99 00:06:46,940 --> 00:06:49,480 I'm going to get to why that's important and how we do it. 100 00:06:49,940 --> 00:06:50,620 Resiliency matters. 101 00:06:51,640 --> 00:06:57,200 You know, mobile networks, if you're going to be mobile first, you have to be able to handle networks that come and go. 102 00:06:57,540 --> 00:07:02,160 Driving through the tunnel, losing your cell connection, coming onto a Wi-Fi, all of that. 103 00:07:02,220 --> 00:07:03,620 It's got to be able to context switch real fast. 104 00:07:04,780 --> 00:07:08,300 So we thought about all these things early on, and we had to write code to support it. 105 00:07:09,080 --> 00:07:11,960 So feel free to cover this. 106 00:07:12,640 --> 00:07:19,800 So when we built this, we, when Dil first came to me with this idea, you know, he had the tech in his head. 107 00:07:19,900 --> 00:07:21,620 But what it really needed. 108 00:07:21,620 --> 00:07:26,520 And I feel that this is really important and something that is often overlooked is the human side of things. 109 00:07:26,780 --> 00:07:37,740 What is the point of building these amazing technological fantastic privacy things like Tor if no one except for the people in this room understand how to use it? 110 00:07:38,180 --> 00:07:40,180 How does that benefit our parents? 111 00:07:40,280 --> 00:07:43,880 How does that benefit the people that might not be as comfortable with the Internet? 112 00:07:44,960 --> 00:07:49,040 What we needed to do was really focus on what the user needs. 113 00:07:49,160 --> 00:07:50,900 How to make this approachable. 114 00:07:50,900 --> 00:07:53,400 Because, frankly, everybody deserves privacy. 115 00:07:53,820 --> 00:07:54,380 Everybody. 116 00:07:55,420 --> 00:07:55,980 Okay? 117 00:07:57,440 --> 00:08:04,880 When it came, you know, and not everything does need to be centralized. 118 00:08:05,880 --> 00:08:07,800 We've seen the problems with that. 119 00:08:07,920 --> 00:08:15,060 Human beings are flawed, and they are going to, you know, put some of themselves into anything that they have control over. 120 00:08:15,120 --> 00:08:16,700 We've seen that with Mark Zuckerberg. 121 00:08:16,740 --> 00:08:18,000 We've seen that with Elon Musk. 122 00:08:18,000 --> 00:08:24,680 We want to make sure that this is something that no human imperfections can, you know, destroy. 123 00:08:24,880 --> 00:08:26,040 There's not going to be an algorithm. 124 00:08:26,260 --> 00:08:29,100 There's not going to be somebody pushing their ideals on you. 125 00:08:29,400 --> 00:08:32,900 This entire network is going to be what we all need it to be. 126 00:08:38,280 --> 00:08:39,000 All right. 127 00:08:39,140 --> 00:08:42,020 So let's start getting into the nitty-gritty of how this works. 128 00:08:43,480 --> 00:08:47,980 All valid nodes are applications running the valid network. 129 00:08:48,000 --> 00:08:48,320 All valid core. 130 00:08:49,300 --> 00:08:51,440 This means that no nodes are special. 131 00:08:51,960 --> 00:08:52,480 Okay? 132 00:08:52,620 --> 00:08:54,080 There are no special nodes. 133 00:08:54,340 --> 00:09:01,160 You don't have to have an admin running servers or any kind of, you know, special. 134 00:09:01,420 --> 00:09:02,900 Everyone's running exactly the same thing. 135 00:09:03,060 --> 00:09:07,600 In fact, every application that is a valid application looks the same to each other. 136 00:09:08,160 --> 00:09:11,500 So the network gains strength from a single popular app. 137 00:09:11,720 --> 00:09:17,980 Even for the less popular apps, they're all in the, you know, the water level is raised by that one app. 138 00:09:17,980 --> 00:09:19,620 That's very popular. 139 00:09:19,800 --> 00:09:20,080 Right? 140 00:09:20,120 --> 00:09:24,900 So you don't have to build a really popular app and build your own valid network. 141 00:09:25,060 --> 00:09:26,100 You can if you want. 142 00:09:26,240 --> 00:09:29,460 But the big valid network is supported by the entire ecosystem. 143 00:09:29,920 --> 00:09:35,320 Not just, you know, your app sailing away in a, with a sea of eight users. 144 00:09:36,580 --> 00:09:42,040 So there's basically two kinds of uses today for the valid core. 145 00:09:42,640 --> 00:09:44,800 Applications that are intended for end users. 146 00:09:45,120 --> 00:09:47,600 And, well, headless nodes. 147 00:09:47,980 --> 00:09:50,420 That could be used as a way to contribute to the network. 148 00:09:50,560 --> 00:09:56,620 If any of you guys that are Linux nerds like I am want to take the, what we're calling valid server. 149 00:09:56,940 --> 00:09:59,380 It's not aptly named because it's not really a server per se. 150 00:09:59,460 --> 00:10:02,040 It's just valid without any app. 151 00:10:02,360 --> 00:10:03,860 It's just running valid. 152 00:10:04,240 --> 00:10:05,840 Runs the RPC mechanism. 153 00:10:06,120 --> 00:10:07,780 Passes data around. 154 00:10:08,120 --> 00:10:13,220 If you want to help the network out, the way you do it is by running that and just let it sit there. 155 00:10:13,420 --> 00:10:14,500 You don't have to do anything. 156 00:10:14,820 --> 00:10:17,020 You're not, you know, passing. 157 00:10:17,980 --> 00:10:20,220 You're just running encrypted traffic around and storing encrypted things to disk. 158 00:10:20,360 --> 00:10:20,940 And that's it. 159 00:10:21,100 --> 00:10:28,080 So today we have bindings for different languages. 160 00:10:28,300 --> 00:10:28,940 We're going to get to that. 161 00:10:31,160 --> 00:10:33,420 Again, the protocols are all low level. 162 00:10:33,980 --> 00:10:47,080 So UDP and TCP programmers that are writing apps can choose whether they want to talk over a more reliable sequenced protocol. 163 00:10:47,980 --> 00:10:52,140 Or if they would rather just have something be fast and unreliable. 164 00:10:52,460 --> 00:10:55,240 So all right. 165 00:10:55,280 --> 00:10:56,000 Let's kind of go through. 166 00:10:56,120 --> 00:10:57,440 I'm going to spend a little time on this slide. 167 00:10:57,600 --> 00:11:00,120 But let's go through what happens when you turn a node on. 168 00:11:00,900 --> 00:11:02,320 There is a bootstrap mechanism. 169 00:11:03,280 --> 00:11:05,660 So this is the only time that we're going to use DNS. 170 00:11:06,120 --> 00:11:13,380 And that is when you turn your node on, it will make a few text message requests to bootstrap.valid.com. 171 00:11:14,180 --> 00:11:16,100 This pulls down some public keys. 172 00:11:16,100 --> 00:11:18,060 And some dial information. 173 00:11:18,580 --> 00:11:20,560 I'll get into what a dial info is exactly. 174 00:11:20,740 --> 00:11:23,960 But you can think of it as an IP address with a little more augmentation. 175 00:11:25,760 --> 00:11:29,620 This gets you access to a few other valid nodes. 176 00:11:29,720 --> 00:11:31,440 It just says, oh, by the way, the network is over here. 177 00:11:31,820 --> 00:11:38,680 And here is a public key that you can use to make sure that you're talking to the right nodes. 178 00:11:40,460 --> 00:11:41,980 You contact those nodes. 179 00:11:42,380 --> 00:11:45,140 And download a chunk of routing table. 180 00:11:46,100 --> 00:11:54,380 And the valid server stores those routes and can then proceed to query all the other nodes in the routing table and find more routes. 181 00:11:54,700 --> 00:12:03,380 And it builds this routing table up and applies a distance metric, which is an XOR of a public key that is assigned to each node. 182 00:12:03,560 --> 00:12:06,160 The node generates the public key, private key pair. 183 00:12:06,900 --> 00:12:08,700 Nodes are identified by a public key. 184 00:12:09,060 --> 00:12:14,980 And the distance in the graph of nodes is measured by the XOR. 185 00:12:16,100 --> 00:12:20,860 It's sort of like if you were to subtract the nodes addresses. 186 00:12:21,260 --> 00:12:25,000 But XOR has that property where it doesn't matter. 187 00:12:25,140 --> 00:12:25,640 It's commutative. 188 00:12:26,720 --> 00:12:29,940 So we use that for a nodal distance. 189 00:12:30,340 --> 00:12:31,660 And that's important later on. 190 00:12:32,020 --> 00:12:34,880 So all of the nodes do the same thing. 191 00:12:35,000 --> 00:12:36,660 So desktop apps reach out to Bootstrap. 192 00:12:36,740 --> 00:12:37,660 They download the routing table. 193 00:12:37,800 --> 00:12:41,340 The next time you launch it, it doesn't try to Bootstrap again. 194 00:12:41,440 --> 00:12:45,380 It tries to reach out to the previous nodes that it has talked to before. 195 00:12:45,380 --> 00:12:47,980 So Bootstrap operation is very lightweight. 196 00:12:48,240 --> 00:12:55,560 And assuming that you've talked to some nodes that are going to be long-lived, it probably doesn't need to happen with every single time you switch into a valid app. 197 00:12:56,680 --> 00:13:00,080 Again, there's mobile apps and progressive web apps. 198 00:13:00,220 --> 00:13:01,880 And they all have slightly different network characteristics. 199 00:13:02,500 --> 00:13:10,000 But the first things that are going to happen is we're going to ask those Bootstraps to find themselves. 200 00:13:10,520 --> 00:13:14,080 And when I mean that, you're going to be finding nodes that are close to the Bootstraps. 201 00:13:14,080 --> 00:13:15,520 And then close to yourself. 202 00:13:17,360 --> 00:13:20,500 We're going to be doing a NAT detection operation. 203 00:13:20,840 --> 00:13:22,140 Which is somewhat like stun. 204 00:13:22,520 --> 00:13:23,500 You ever heard of stun? 205 00:13:23,800 --> 00:13:27,440 It's a detection of your public IP address. 206 00:13:27,760 --> 00:13:30,760 But also kind of tells you how you can be reached. 207 00:13:31,040 --> 00:13:33,500 It's a way of calculating what kind of NAT you're on. 208 00:13:33,720 --> 00:13:40,600 So your network address translation is like you're either fully firewalled or you have a full cone NAT or port or address restricted NAT. 209 00:13:40,780 --> 00:13:42,700 Or symmetric NAT. 210 00:13:42,700 --> 00:13:48,200 If you're on one of those weird carrier grade phone networks where every place that you go gives you a different IP address. 211 00:13:48,480 --> 00:13:49,980 Makes it a little more complicated. 212 00:13:50,620 --> 00:13:54,500 But valid nodes need to understand where they stand in the world. 213 00:13:54,700 --> 00:13:57,640 They need to understand how they could be reached from the outside. 214 00:13:57,840 --> 00:14:00,820 And if they need any help achieving connectivity. 215 00:14:01,320 --> 00:14:04,440 So that operation happens very quickly at the beginning. 216 00:14:04,580 --> 00:14:06,520 About five seconds after a node starts up. 217 00:14:06,640 --> 00:14:10,740 It's figured out its public IP address from other nodes that it knows about. 218 00:14:10,740 --> 00:14:13,200 And calculates its dial info. 219 00:14:13,500 --> 00:14:18,840 The dial info says if I publish this to you, you'll be able to use this information to be able to reach me somehow. 220 00:14:19,740 --> 00:14:25,440 So basically we sign this information with that same public key for the node. 221 00:14:25,700 --> 00:14:34,460 That way when you pass it around, people can't forge your dial info and redirect your traffic by claiming that your dial info goes to somewhere else. 222 00:14:35,980 --> 00:14:40,720 No other overlay networks that I know of actually use signing on. 223 00:14:40,740 --> 00:14:42,040 On the routing table itself. 224 00:14:42,720 --> 00:14:44,320 They pass around a lot of information. 225 00:14:44,520 --> 00:14:47,160 But nodes are just trusted to not modify it in transit. 226 00:14:47,340 --> 00:14:48,480 That doesn't really make sense to me. 227 00:14:49,080 --> 00:14:51,200 So all of the node information is signed and valid. 228 00:14:52,820 --> 00:14:54,280 So yes, network class detection. 229 00:14:54,600 --> 00:14:56,580 It determines if you're inbound capable or not. 230 00:14:56,900 --> 00:14:57,940 You know, the symmetric NAT. 231 00:14:58,060 --> 00:14:59,980 You just can't be inbound capable without help. 232 00:15:01,460 --> 00:15:02,800 Relays are used in that case. 233 00:15:02,940 --> 00:15:09,020 Every node in valid is expected to relay encrypted traffic to the best of its ability to help out other nodes. 234 00:15:09,020 --> 00:15:16,560 So if a node is a cell phone on a cell network going through a tunnel and it just can't receive inbound traffic, 235 00:15:16,760 --> 00:15:22,320 it's going to use a relay from the network to help get inbound traffic. 236 00:15:22,460 --> 00:15:29,260 It'll make an outbound connection and that relay's IP address is going to be part of its dial info as signed and published. 237 00:15:29,940 --> 00:15:37,800 So that way, you know, you don't have to relay forever and relays can start rejecting stuff and then the nodes will automatically pick a new one. 238 00:15:39,160 --> 00:15:43,020 After that, you just have to know whether or not nodes are alive. 239 00:15:43,440 --> 00:15:48,180 Whether or not they've continued to pass packets if they're still there. 240 00:15:48,460 --> 00:15:56,940 And we have an exponential back off mechanism of pinging those nodes over the same value protocol to determine if nodes are still alive in the routing table. 241 00:15:57,060 --> 00:16:00,860 This turns out to be a statistical effort almost entirely. 242 00:16:01,380 --> 00:16:06,980 You're really trying to understand the performance characteristics of other nodes 243 00:16:06,980 --> 00:16:08,340 and how... 244 00:16:09,580 --> 00:16:10,400 alive they are. 245 00:16:10,660 --> 00:16:11,740 Should I talk to them? 246 00:16:11,920 --> 00:16:14,760 Can I trust them to keep being there, you know? 247 00:16:14,920 --> 00:16:19,920 Turns out that, like, if a node's been around for five minutes, chances are it's going to be around for another five. 248 00:16:20,460 --> 00:16:23,800 If a node's been around for half an hour, it's going to be around for another half an hour. 249 00:16:24,080 --> 00:16:25,660 It's just the math behind it, sort of. 250 00:16:26,600 --> 00:16:31,040 If a node's only been around for a couple seconds, you probably shouldn't be relying on it for, say, your private routing, 251 00:16:31,100 --> 00:16:33,360 because chances are it's going to just drop off soon. 252 00:16:33,740 --> 00:16:36,660 So we keep this math and we do it on a per-node basis. 253 00:16:37,740 --> 00:16:38,100 So... 254 00:16:39,160 --> 00:16:39,760 All right. 255 00:16:41,200 --> 00:16:47,620 So what we're here to do with y'all is to help you, you know, inspire you to build stuff on this. 256 00:16:47,820 --> 00:16:53,860 I'm sure you can imagine, after hearing all of that, the many, many ways that this, you know, can be used and built upon. 257 00:16:54,040 --> 00:16:58,280 And I'm sure everyone is sitting there noodling over what projects could be built with this. 258 00:16:59,020 --> 00:17:04,840 You know, whether it's a peer-to-peer messenger, whether it's social media, the possibilities here are endless. 259 00:17:05,060 --> 00:17:07,620 And we really want to give you the tools to do that. 260 00:17:07,620 --> 00:17:10,960 All devices are going to be welcome and treated fairly. 261 00:17:11,160 --> 00:17:12,080 It's all equal. 262 00:17:13,400 --> 00:17:18,520 And then, we're only as strong as the weakest node. 263 00:17:18,640 --> 00:17:21,080 Like, every node is equal, and I think that's pretty cool. 264 00:17:22,980 --> 00:17:28,860 And, yeah, you're welcome to use the Baylet network on its own, or you can just build on it. 265 00:17:28,920 --> 00:17:31,920 And we really hope that everybody takes the opportunity to build on it. 266 00:17:34,960 --> 00:17:35,440 Okay. 267 00:17:35,580 --> 00:17:37,600 So let's get into some of the things that we're going to talk about today. 268 00:17:37,600 --> 00:17:38,160 Some deeper stuff. 269 00:17:38,840 --> 00:17:42,040 What is this cryptography that enables what we're doing here? 270 00:17:42,940 --> 00:17:49,640 Devil's in the details, and I know I've already had a ton of lovely contrarian conversations with all of you at some point. 271 00:17:50,220 --> 00:17:52,140 How does this actually function? 272 00:17:52,900 --> 00:17:53,420 Okay. 273 00:17:53,600 --> 00:17:58,120 Well, we have a cryptography suite that we have blessed for this project. 274 00:17:59,000 --> 00:18:00,520 We're calling it VLD0. 275 00:18:01,100 --> 00:18:02,100 I'll give you a hint. 276 00:18:02,240 --> 00:18:04,420 If we have to change it, it would be VLD1. 277 00:18:07,600 --> 00:18:09,600 It's a set of tools that we've vetted. 278 00:18:10,380 --> 00:18:12,380 We did not roll our own crypto. 279 00:18:12,920 --> 00:18:14,160 We know better than that. 280 00:18:18,920 --> 00:18:22,600 But we're hoping to put things together that are known good. 281 00:18:24,340 --> 00:18:28,040 Authentication is done with ED25519 on curve 25519. 282 00:18:28,560 --> 00:18:33,140 So we have a very fast public private key authentication signing system. 283 00:18:33,480 --> 00:18:37,080 All node IDs are effectively ED25519. 284 00:18:39,900 --> 00:18:49,520 Key exchange is done with the DH that is, you know, came on curve 25519 shortly after ED25519 was made. 285 00:18:52,000 --> 00:19:00,620 And, yeah, so the same nodes can also be used to generate a, the same node IDs can be used to generate a symmetric key between nodes. 286 00:19:00,880 --> 00:19:05,480 So everything that, if you have somebody's public key and you have your own secret key, 287 00:19:05,580 --> 00:19:07,580 you can DH those to produce the key. 288 00:19:07,600 --> 00:19:08,600 It's not a shared secret. 289 00:19:08,860 --> 00:19:16,300 Once you have that, you have to have a stream cipher or something to encrypt with that in an appropriate way. 290 00:19:16,600 --> 00:19:18,780 That is invalid. 291 00:19:18,980 --> 00:19:28,740 We're using the extended nonce version of cha-cha 20 poly 1305, which is a stream cipher that comes with an AEAD built in. 292 00:19:28,880 --> 00:19:34,760 It is an associated encryption, well, associated data encryption system. 293 00:19:34,760 --> 00:19:41,920 So you can do things like partially encrypt a packet, include a header in the signing part, 294 00:19:42,120 --> 00:19:47,560 and have the, the signing identity as part of the encryption all in one go. 295 00:19:48,020 --> 00:19:52,140 You don't have to worry about do I sign first or do I hash MAC and all this other stuff. 296 00:19:52,220 --> 00:19:53,080 No, it's all just built in. 297 00:19:53,140 --> 00:19:54,000 You don't have to worry about it. 298 00:19:54,020 --> 00:20:00,100 If you got a symmetric key and you want it to be, you know, a signed transfer of information, 299 00:20:00,400 --> 00:20:02,580 you can just use that, that mechanism. 300 00:20:03,560 --> 00:20:04,000 Um. 301 00:20:06,020 --> 00:20:07,580 And then, uh, yeah. 302 00:20:07,660 --> 00:20:12,460 So message digest would be being done with the Blake 3, which again is a fast cipher, fast hash. 303 00:20:12,800 --> 00:20:14,600 Um, it's extremely, extremely fast. 304 00:20:15,020 --> 00:20:18,200 Um, everything in this key space, by the way, is 256 bit. 305 00:20:18,280 --> 00:20:23,380 So, uh, all of these algorithms here are tuned for a 256 bit key space. 306 00:20:23,780 --> 00:20:29,720 Um, and key derivation is done with Argon 2, which won the, uh, 2015 password hashing competition. 307 00:20:30,060 --> 00:20:34,740 Uh, and that is a very slow hash intended to slow down and stymie data. 308 00:20:34,760 --> 00:20:36,080 And this is a GP to a GPU based attacks on passwords. 309 00:20:36,320 --> 00:20:40,960 So all of that is in the VLD zero suite for people to use as part of our framework. 310 00:20:41,200 --> 00:20:47,680 Uh, if we have to change things though, veiled has been built with an upgradable crypto system from the beginning. 311 00:20:47,780 --> 00:20:54,240 We recognized that cryptography is going to fail us through the advancement of technology, 312 00:20:54,600 --> 00:20:56,280 CPU speeds, memory, availability, 313 00:20:56,640 --> 00:20:57,560 GPU attacks, 314 00:20:57,820 --> 00:20:59,560 whatever it is differential this, 315 00:20:59,660 --> 00:21:01,220 that the other things stuff falls apart. 316 00:21:01,400 --> 00:21:03,600 We know that we'll have to change some of this down the line. 317 00:21:04,760 --> 00:21:09,020 ability to upgrade the cryptography from day one. You don't have to understand necessarily 318 00:21:09,020 --> 00:21:15,560 every cryptographic decision that's being made. Every new version of our cryptosystem is 319 00:21:15,560 --> 00:21:21,820 supported alongside the old ones. So we can add a new cryptosystem, wait for it to become 320 00:21:21,820 --> 00:21:27,520 popular and then deprecate the old one. Everything has typed keys as a result so you know 321 00:21:27,520 --> 00:21:32,420 which cryptosystem was used with the key. We have migration support built in so if data 322 00:21:32,420 --> 00:21:37,500 was persisted with an old cryptosystem, it can be automatically re-encrypted with the new 323 00:21:37,500 --> 00:21:46,240 cryptosystem. And we can use, again, simultaneous cryptosystems to do transitional, have both of 324 00:21:46,240 --> 00:21:52,520 them alive at the same time. This enables a bunch of different kinds of storage. Vailit has 325 00:21:52,520 --> 00:22:01,140 secure storage. We have completely cross-platform support for device level secrets so we're using 326 00:22:01,140 --> 00:22:05,680 iOS and MacOS keychains, we have the Android key store. We have Windows protected store, Linux 327 00:22:05,680 --> 00:22:13,260 secret service. We have a table store which is an encrypted key value data base so nothing needs to 328 00:22:13,260 --> 00:22:19,300 be stored at all on the filesystem without being encrypted. Keep all of those private keys in 329 00:22:19,300 --> 00:22:26,960 the protected store, encrypt everything to the table store and then that enables the actual 330 00:22:27,520 --> 00:22:31,120 record store and block store which are a distributed hash table that contains the keys that the key 331 00:22:31,140 --> 00:22:38,980 and the content addressable storage. So on the wire everything all these protocols use the same 332 00:22:38,980 --> 00:22:43,480 encryption, everything is encrypted and signed, everything is time stamped and all of the node 333 00:22:43,480 --> 00:22:48,720 information is signed. I mean it's very little of what we do has an opportunity to be spoofed 334 00:22:48,720 --> 00:22:58,360 and it really wouldn't matter if you did. So the reason that I am up here is because at 335 00:22:58,360 --> 00:23:03,560 one point somebody got into my ex's phone, took some pictures out of it that I didn't want to be 336 00:23:03,560 --> 00:23:09,120 shared and they shared it online because my ex didn't understand the importance of his own 337 00:23:09,120 --> 00:23:14,240 privacy. He didn't understand how important it was to keep his phone locked. That is one reason 338 00:23:14,240 --> 00:23:20,440 that we really wanted to push that all of our storage is encrypted at rest. It's going to 339 00:23:20,440 --> 00:23:28,200 always be safe no matter what like even unless they actually know how to get into everything 340 00:23:28,360 --> 00:23:34,020 it doesn't matter like it's going to be safe and that is the point. Um we want to really address 341 00:23:34,020 --> 00:23:38,940 the fact that everybody you know we want everyone to understand the value of their privacy. 342 00:23:39,420 --> 00:23:44,600 That's part of this is to understand what you're giving away and what you're trading in order 343 00:23:44,600 --> 00:23:49,840 to use a lot of these websites. Um your data is protected even if you lose your device and 344 00:23:49,840 --> 00:23:53,700 uh we're just making sure that everything is going to be safe and things like what happened to 345 00:23:53,700 --> 00:23:55,140 me don't happen to other people. 346 00:24:02,420 --> 00:24:06,480 And I know I said I wasn't going to drop any zero days or anything but you really should do an 347 00:24:06,480 --> 00:24:10,640 iPhone backup of a lot of your popular encrypted messenger apps and take a look at what stuff is 348 00:24:10,640 --> 00:24:19,220 actually encrypted on disk because you might be surprised about uh that. Okay. RPC protocols. 349 00:24:19,520 --> 00:24:24,180 Um okay so between nodes how are they talking to each other? Time check. I'm doing alright. 350 00:24:24,840 --> 00:24:28,340 Um so how are they talking to each other? What is on the wiring? What are they talking to each 351 00:24:28,360 --> 00:24:32,860 other exactly? Well first off everything is encrypted so you run a sniffer you'll see chatter 352 00:24:33,380 --> 00:24:39,780 encrypted small chunks of stuff going over a bunch of protocols I picked port 5150 as the default 353 00:24:39,780 --> 00:24:45,920 if you kind of want to smell around for it but other ports get used if necessary so nodes will 354 00:24:45,920 --> 00:24:50,680 find each other one way or another. I think if you put it on port 53 you can just use it on the 355 00:24:50,680 --> 00:24:58,340 airplane without paying for that anyway. Um. Yeah. Um so that was the first one. So first is the 356 00:24:58,360 --> 00:25:07,560 So, the schema language that we're using is an in-schema, upgradeable, documented RPC called Captain Proto. 357 00:25:07,900 --> 00:25:15,900 Captain Proto is written by the same guy who started the protobuf project at Google, 358 00:25:16,060 --> 00:25:24,900 but it was meant to fix a lot of the schema upgrade problems and produce a zero-copy deserialization system. 359 00:25:24,900 --> 00:25:32,380 So, we're talking about something that uses the same decrypted on-the-line message format as the same as the in-memory format. 360 00:25:32,500 --> 00:25:36,180 That way there's no marshalling and moving shit around to slow things down. 361 00:25:37,980 --> 00:25:42,300 The RPC itself fully supports private routing, and we're going to get to that. 362 00:25:42,460 --> 00:25:47,800 And it has schema evolution built in, so the next version available doesn't break apps that only use the previous version. 363 00:25:48,340 --> 00:25:49,700 And it's cryptography independent. 364 00:25:51,200 --> 00:25:54,080 I'm going to skip over a couple of slides because we have about 15 minutes left, 365 00:25:54,180 --> 00:25:54,880 but effectively... 366 00:25:54,900 --> 00:26:01,860 the RPC operations are a nested set of Captain Proto definitions 367 00:26:01,860 --> 00:26:08,780 that define a series of operations like pinging and status finding nodes 368 00:26:08,780 --> 00:26:13,300 and then doing things like distributed hash table value gets and value sets. 369 00:26:14,100 --> 00:26:18,540 And again, some RPCs are unidirectional, some are bidirectional. 370 00:26:18,680 --> 00:26:19,640 They expect a response. 371 00:26:21,040 --> 00:26:24,280 Distributed hash tables get a lot of press 372 00:26:24,280 --> 00:26:24,880 because... 373 00:26:24,900 --> 00:26:27,760 they're like the backbone of a lot of the file-sharing tools. 374 00:26:28,080 --> 00:26:32,120 They're used in things like BitTorrent and old-school Nutella. 375 00:26:32,260 --> 00:26:36,340 You know, if you wanted to download executable files that said they were MP3s. 376 00:26:38,520 --> 00:26:41,160 DHT is basically just search, though. 377 00:26:41,480 --> 00:26:50,880 And the valid DHT is a better DHT because it enforces data locality to the related data. 378 00:26:51,680 --> 00:26:54,500 Effectively, all the DHTs that you're going to see out there, 379 00:26:54,500 --> 00:26:56,940 for like IPFS, store little tiny bits of stuff, 380 00:26:57,100 --> 00:27:01,480 very distributed across the hash space. 381 00:27:03,100 --> 00:27:06,960 And what ours does is it actually lets you store a bigger chunk of stuff, 382 00:27:07,140 --> 00:27:08,980 we're talking like a megabyte per key, 383 00:27:09,560 --> 00:27:16,080 across an array of subkeys that can be allocated on a per-writer basis. 384 00:27:16,300 --> 00:27:16,880 And what does that mean? 385 00:27:17,060 --> 00:27:20,800 Well, DHT keys are signed key pairs with a public key. 386 00:27:20,940 --> 00:27:23,120 It represents its location in the hash. 387 00:27:23,120 --> 00:27:27,520 And the private key lets you sign the data that's pushed to the key's value. 388 00:27:29,800 --> 00:27:35,820 No other DHTs right now let there be multiple writers to subchunks of those keys. 389 00:27:36,320 --> 00:27:40,320 You can build some pretty powerful distributed synchronization 390 00:27:40,320 --> 00:27:43,380 and data structural paradigms there 391 00:27:43,380 --> 00:27:48,320 if you can allow people to commingle data on the same hash key. 392 00:27:49,280 --> 00:27:51,860 That means that, you know, you have a conversation. 393 00:27:51,860 --> 00:27:55,720 You can put it in line in one place and have, you know, 394 00:27:55,720 --> 00:27:59,860 sure, private-routed, but you can have the data located in the same place. 395 00:27:59,920 --> 00:28:03,020 That allows for that sort of caching to happen 396 00:28:03,020 --> 00:28:07,460 and for related data to be all together in one place. 397 00:28:07,640 --> 00:28:10,720 It means you don't have to search the whole network every time you need to find a new thing. 398 00:28:11,300 --> 00:28:12,720 This makes our DHT faster. 399 00:28:16,080 --> 00:28:18,760 So one of the reasons that we wanted to do things this way 400 00:28:18,760 --> 00:28:21,340 is that we could avoid using, you know, blockchain 401 00:28:21,860 --> 00:28:22,200 or a coin. 402 00:28:22,740 --> 00:28:25,920 To me, using a coin is an accessibility issue. 403 00:28:26,100 --> 00:28:28,800 It's making sure that people that aren't as comfortable with the internet 404 00:28:28,800 --> 00:28:29,900 are not going to be using it. 405 00:28:29,940 --> 00:28:33,560 It also is putting a price on something that I feel is priceless. 406 00:28:34,000 --> 00:28:35,600 You shouldn't have to pay for privacy. 407 00:28:35,860 --> 00:28:37,920 It should not be behind a paywall. 408 00:28:38,340 --> 00:28:42,460 Privacy should be free, accessible, and available to everybody from the start. 409 00:28:42,700 --> 00:28:43,620 And that is it. 410 00:28:49,680 --> 00:28:51,840 One of the things that we want to do 411 00:28:51,860 --> 00:28:52,960 that's really built in with Valid 412 00:28:52,960 --> 00:28:55,720 was to make sure that we are building it for the people in this room. 413 00:28:56,240 --> 00:28:59,240 We are building it for the people outside of this room. 414 00:28:59,400 --> 00:29:02,040 We are building it for the people that are still on Facebook 415 00:29:02,040 --> 00:29:06,200 because that is the only app that has made itself accessible to them. 416 00:29:06,660 --> 00:29:12,220 We want to build this for the people that don't want to see the privacy, 417 00:29:12,480 --> 00:29:14,040 like what goes on behind the curtains. 418 00:29:14,100 --> 00:29:16,660 They just want to click and things are going great. 419 00:29:16,900 --> 00:29:17,840 And that's what they wanted. 420 00:29:18,020 --> 00:29:18,840 They don't want to wait. 421 00:29:19,920 --> 00:29:21,840 And the one thing that I really love about this, 422 00:29:21,860 --> 00:29:22,700 about what we're doing here, 423 00:29:22,760 --> 00:29:23,840 is that we're making sure it's seamless. 424 00:29:24,520 --> 00:29:26,340 Privacy is there, but it's just the baseline. 425 00:29:26,660 --> 00:29:27,600 And that's how it should be. 426 00:29:34,980 --> 00:29:38,600 And we can get into why this is not a free lunch for infinite storage. 427 00:29:39,520 --> 00:29:41,940 There is some tricks to it, 428 00:29:42,020 --> 00:29:43,100 but generally speaking, 429 00:29:43,360 --> 00:29:46,080 you're going to be able to use the DHT to store a whole lot of stuff 430 00:29:46,080 --> 00:29:48,440 and the network will support you. 431 00:29:49,560 --> 00:29:51,100 So, talk about private routing. 432 00:29:51,860 --> 00:29:52,980 How is this sort of like Tor? 433 00:29:53,140 --> 00:29:55,540 How is this protecting people's IP addresses? 434 00:29:55,720 --> 00:29:59,820 If I launch my valid powered messaging application, 435 00:30:00,320 --> 00:30:03,600 how is it that it maintains its speed 436 00:30:03,600 --> 00:30:07,580 and keeps people's IP addresses private? 437 00:30:08,840 --> 00:30:09,400 Okay. 438 00:30:09,540 --> 00:30:10,700 I'm going to define some terms. 439 00:30:12,500 --> 00:30:17,080 There's a safety route, a private route, and a compiled route. 440 00:30:17,520 --> 00:30:19,180 This is a little different than Tor. 441 00:30:19,180 --> 00:30:23,240 Tor has things like guard nodes and entry and exit nodes, 442 00:30:23,360 --> 00:30:24,180 if you're familiar with those. 443 00:30:24,840 --> 00:30:27,020 Safety route is sort of like a guard node, 444 00:30:27,200 --> 00:30:29,820 if you're thinking in terms of Tor terminology. 445 00:30:30,200 --> 00:30:33,520 So, the idea is that if you have two people talking, 446 00:30:34,420 --> 00:30:37,460 if only one end of the conversation 447 00:30:38,740 --> 00:30:41,180 can control the entire route, 448 00:30:42,020 --> 00:30:43,140 then you've lost. 449 00:30:43,440 --> 00:30:45,720 They could pick nodes that are adversarial 450 00:30:45,720 --> 00:30:48,020 or phoning home with everything. 451 00:30:49,180 --> 00:30:50,380 And that's no good, right? 452 00:30:50,520 --> 00:30:55,540 If you want to truly be able to keep yourself private, 453 00:30:55,760 --> 00:30:57,700 neither node needs to, 454 00:30:57,780 --> 00:30:59,220 you should be able to have to trust each, 455 00:30:59,320 --> 00:31:00,940 you know, the construction of the route. 456 00:31:01,380 --> 00:31:05,160 So, what we do is we build our routes in two chunks. 457 00:31:05,580 --> 00:31:09,520 The sender allocates a safety route for sender privacy 458 00:31:09,520 --> 00:31:12,280 and the receiver publishes a private route 459 00:31:12,280 --> 00:31:14,200 for receiver privacy. 460 00:31:14,580 --> 00:31:17,600 Those are compiled together to build the circuit 461 00:31:17,600 --> 00:31:19,200 that the communication happens over 462 00:31:19,200 --> 00:31:23,080 and the nodes in the middle don't understand necessarily 463 00:31:23,600 --> 00:31:27,380 where the end of the route is. 464 00:31:27,500 --> 00:31:31,960 So, you have to assume that if I look at A, N8 and N7, 465 00:31:32,380 --> 00:31:34,180 A is choosing those nodes 466 00:31:35,200 --> 00:31:39,160 and N6, N5 and B, B is choosing those nodes. 467 00:31:39,400 --> 00:31:40,800 But when they snap together, 468 00:31:41,780 --> 00:31:43,640 the nodes don't know any different 469 00:31:43,640 --> 00:31:46,360 and, you know, you have a circuit 470 00:31:46,360 --> 00:31:47,500 that is connected. 471 00:31:48,140 --> 00:31:52,120 And we actually snap them together 472 00:31:52,120 --> 00:31:56,420 in this onion-style encrypted payload 473 00:31:56,420 --> 00:32:00,600 where the addresses and public keys of the next hop 474 00:32:00,600 --> 00:32:06,720 are embedded in an onion-style peel-off-a-layer-as-you-go, 475 00:32:07,700 --> 00:32:08,840 you know, system. 476 00:32:08,940 --> 00:32:12,600 So, this blob of stuff has a private key 477 00:32:13,660 --> 00:32:15,780 associated with the route itself. 478 00:32:16,660 --> 00:32:17,840 Not with the nodes. 479 00:32:18,140 --> 00:32:19,440 So, everything gets signed, 480 00:32:19,660 --> 00:32:23,020 but it's associated with the private route 481 00:32:23,020 --> 00:32:23,940 or the safety route, 482 00:32:24,020 --> 00:32:25,660 not with the node ID or an identity. 483 00:32:26,360 --> 00:32:28,400 And that's allocated on a per-route basis 484 00:32:28,400 --> 00:32:30,280 and these things are coming and going all the time. 485 00:32:30,440 --> 00:32:33,260 This is one of the reasons why we don't necessarily require 486 00:32:34,320 --> 00:32:36,000 perfect forward security. 487 00:32:36,440 --> 00:32:38,440 You know, we don't need to worry about 488 00:32:38,440 --> 00:32:45,720 long encrypted people monitoring 489 00:32:45,720 --> 00:32:47,920 a single node for a long time 490 00:32:47,920 --> 00:32:49,060 and then going back in time 491 00:32:49,060 --> 00:32:50,660 and cracking that conversation 492 00:32:50,660 --> 00:32:52,400 because it's moving around all the time. 493 00:32:52,500 --> 00:32:53,540 These routes are coming and going. 494 00:32:53,780 --> 00:32:55,660 You'd have to monitor the entire VALID network 495 00:32:55,660 --> 00:32:57,540 to be able to generate enough information 496 00:32:57,540 --> 00:33:00,420 to be able to utilize some of those differential crypto attacks. 497 00:33:02,200 --> 00:33:04,160 So, that envelope that you build 498 00:33:04,500 --> 00:33:07,220 has this header and an encrypted chunk of stuff 499 00:33:07,220 --> 00:33:10,640 that is guaranteed to be DH'd across 500 00:33:10,640 --> 00:33:12,940 just the private route and the safety route. 501 00:33:14,040 --> 00:33:14,560 And 502 00:33:14,560 --> 00:33:16,660 as it goes from node to node, 503 00:33:16,860 --> 00:33:18,480 we're shrinking those payloads 504 00:33:18,480 --> 00:33:20,800 and eventually it drops off 505 00:33:20,800 --> 00:33:24,380 where the end can receive the encrypted blob. 506 00:33:24,840 --> 00:33:26,940 All of these slides are going to be available online 507 00:33:26,940 --> 00:33:31,480 if you want to tear apart the exact cryptographic implementation 508 00:33:31,480 --> 00:33:33,420 and, of course, the code is open, too, 509 00:33:33,460 --> 00:33:34,000 if you want to read it. 510 00:33:35,420 --> 00:33:36,600 So, toward the future, 511 00:33:36,760 --> 00:33:38,520 there are ways to improve private routing. 512 00:33:38,960 --> 00:33:42,400 We want to do per-hop payload keying as well. 513 00:33:43,280 --> 00:33:44,540 We want to minimize the nodes. 514 00:33:44,540 --> 00:33:45,220 We want to minimize the number of things 515 00:33:45,220 --> 00:33:47,960 that you can glean about traffic 516 00:33:47,960 --> 00:33:51,780 from sniffing the wire directly. 517 00:33:53,020 --> 00:33:55,240 So, reducing the number of things 518 00:33:55,240 --> 00:33:56,480 that are common between packets 519 00:33:56,480 --> 00:33:58,480 is a good goal over time. 520 00:33:59,620 --> 00:34:02,120 Right now, we also do some internal hop counting. 521 00:34:02,420 --> 00:34:03,880 That was for debug purposes. 522 00:34:04,320 --> 00:34:05,440 We can just drop that. 523 00:34:07,060 --> 00:34:09,060 We have bidirectional routes today. 524 00:34:09,680 --> 00:34:11,240 Allocations are done directionally. 525 00:34:11,320 --> 00:34:11,960 We could drop that 526 00:34:11,960 --> 00:34:13,880 and just go with bidirectional routes to begin with. 527 00:34:14,560 --> 00:34:16,420 And we could do things like hop caching 528 00:34:16,420 --> 00:34:18,740 and increasing our hop counts if we wanted to. 529 00:34:18,900 --> 00:34:20,960 Right now, our hop count is effectively equal 530 00:34:20,960 --> 00:34:22,080 to Tor's hop count, 531 00:34:22,880 --> 00:34:24,660 and they did a whole lot of math 532 00:34:24,660 --> 00:34:27,420 on why a single guard node 533 00:34:27,420 --> 00:34:30,240 and a single exit node would be sufficient. 534 00:34:30,940 --> 00:34:34,380 We actually have two extra nodes in there, 535 00:34:34,480 --> 00:34:36,580 but the reasons why is to make sure 536 00:34:36,580 --> 00:34:38,480 that no node can look to the left or to the right 537 00:34:38,480 --> 00:34:41,620 and know anything about who they're talking to. 538 00:34:48,180 --> 00:34:50,240 As we said in the beginning, 539 00:34:51,000 --> 00:34:53,420 we really wanted to make sure that this is private. 540 00:34:53,700 --> 00:34:56,360 Make sure that nobody can see your location 541 00:34:56,360 --> 00:34:57,600 and can't get your IP address. 542 00:34:58,160 --> 00:34:59,700 You have to invite somebody 543 00:35:00,380 --> 00:35:01,860 to be a part of your network. 544 00:35:03,720 --> 00:35:05,760 Nothing is going to be forced upon you 545 00:35:05,760 --> 00:35:06,720 or put in an algorithm, 546 00:35:08,180 --> 00:35:11,500 so that means that you have a lot more say as a user 547 00:35:11,500 --> 00:35:14,100 in how this is being used. 548 00:35:15,260 --> 00:35:17,460 The no IP address means no tracking, 549 00:35:17,580 --> 00:35:18,640 collection, or correlation. 550 00:35:19,060 --> 00:35:20,060 That's right, no tracking. 551 00:35:21,300 --> 00:35:24,520 As of right now, that is the biggest way. 552 00:35:26,700 --> 00:35:28,040 Let's give it up for no tracking. 553 00:35:28,340 --> 00:35:29,180 How nice is that? 554 00:35:30,160 --> 00:35:31,540 Right now, that is the biggest way 555 00:35:31,540 --> 00:35:33,560 that people are monetizing our internet use. 556 00:35:34,000 --> 00:35:39,160 When I was a kid, I was told about the internet 557 00:35:39,160 --> 00:35:40,600 way back in the day, 558 00:35:40,640 --> 00:35:41,540 and I was learning about it, 559 00:35:41,580 --> 00:35:43,620 and I was told it was going to be this open, free place 560 00:35:44,540 --> 00:35:46,480 where people can learn and they can connect to each other. 561 00:35:46,900 --> 00:35:49,040 Instead, we have had billionaires 562 00:35:49,040 --> 00:35:51,720 that have decided to monetize those connections 563 00:35:51,720 --> 00:35:55,280 and seep every little bit of information and data 564 00:35:55,280 --> 00:35:58,580 out of each connection and use that they can. 565 00:35:58,920 --> 00:35:59,640 You know what? 566 00:35:59,800 --> 00:36:01,440 A lot of people are falling for that. 567 00:36:02,740 --> 00:36:06,240 Like I said, privacy has to be accessible for everybody. 568 00:36:06,640 --> 00:36:09,020 We have to make sure people understand what that means, 569 00:36:09,180 --> 00:36:12,120 and we have to make things that are going to entice them, 570 00:36:12,280 --> 00:36:13,840 that are going to be inviting, 571 00:36:14,540 --> 00:36:14,720 that are going to be fun to everybody. 572 00:36:15,140 --> 00:36:18,480 If we do things like build social media networks, 573 00:36:19,080 --> 00:36:22,800 you know, if we get our parents off Facebook, 574 00:36:23,080 --> 00:36:23,860 we're all free. 575 00:36:24,460 --> 00:36:25,020 Okay? 576 00:36:26,380 --> 00:36:28,140 So let's build that. 577 00:36:28,280 --> 00:36:29,880 Come build that with us. 578 00:36:30,160 --> 00:36:31,200 Let's do a thing. 579 00:36:33,960 --> 00:36:34,520 Okay. 580 00:36:34,740 --> 00:36:36,680 So how do you do this with us? 581 00:36:36,820 --> 00:36:38,140 Valed loves rust. 582 00:36:38,540 --> 00:36:39,300 We are crabs. 583 00:36:39,600 --> 00:36:40,180 We have crabs. 584 00:36:40,380 --> 00:36:41,080 We want more crabs. 585 00:36:43,820 --> 00:36:44,800 Valed is written in rust. 586 00:36:44,860 --> 00:36:45,940 The crates are going to be published. 587 00:36:47,000 --> 00:36:49,160 I wrote this before I said that the crates are going to be published. 588 00:36:49,240 --> 00:36:51,480 The crates are on the Git lab, 589 00:36:51,760 --> 00:36:53,640 and we'll explain that a little bit more. 590 00:36:53,740 --> 00:36:55,840 We haven't published everything because we're still working on rust doc 591 00:36:56,340 --> 00:36:58,220 because when you're rushing a product out the door, 592 00:36:58,360 --> 00:37:00,980 you don't get time for making sure the documentation is right. 593 00:37:01,060 --> 00:37:01,500 We're getting there. 594 00:37:01,660 --> 00:37:03,960 The crates will be on crates.io in about a month probably 595 00:37:03,960 --> 00:37:08,560 as we make sure the docs look as spiffy as they deserve to be. 596 00:37:10,280 --> 00:37:11,060 There is a pipeline. 597 00:37:11,060 --> 00:37:11,980 It's a power user quick start. 598 00:37:13,560 --> 00:37:16,760 When you are ready to run your own Valed server, 599 00:37:17,020 --> 00:37:20,520 you'll be able to do that by either cloning the code and running it 600 00:37:20,520 --> 00:37:27,320 or you can get deb, APT, or RPM packages from our package servers today. 601 00:37:27,720 --> 00:37:32,320 Just download it, install it, turn on automatic or unattended upgrades 602 00:37:32,320 --> 00:37:33,800 because we're going to keep changing this thing, 603 00:37:33,880 --> 00:37:36,980 and keeping everyone up to date will help the network out. 604 00:37:37,740 --> 00:37:41,040 There is a really cool vaporwave-looking CD. 605 00:37:41,060 --> 00:37:42,620 It's a VLI that you can use to talk to your node 606 00:37:42,620 --> 00:37:44,620 and send little weird messages and shit, 607 00:37:44,740 --> 00:37:46,360 so knock yourself out with that. 608 00:37:49,580 --> 00:37:51,320 We also love Flutter. 609 00:37:51,980 --> 00:37:56,440 Flutter is a cross-platform, mobile-first application development framework. 610 00:37:56,720 --> 00:38:00,840 It powers all kinds of cool apps like your Instacart and DoorDash 611 00:38:00,840 --> 00:38:01,600 and all that kind of stuff. 612 00:38:03,320 --> 00:38:07,440 It is Dart internally, which is a JavaScript overlay 613 00:38:08,060 --> 00:38:10,720 that does a really good job 614 00:38:11,060 --> 00:38:13,680 of providing asynchronous programming 615 00:38:13,680 --> 00:38:18,460 to environments that deserve it, like the web. 616 00:38:18,900 --> 00:38:23,540 We have a first-class FFI and JavaScript WASM plug-in 617 00:38:23,540 --> 00:38:25,180 for Dart today. 618 00:38:26,420 --> 00:38:29,540 We have actually written an app using it 619 00:38:29,540 --> 00:38:32,180 that we will talk about later, maybe at the party tonight. 620 00:38:32,480 --> 00:38:33,580 Are you going to come to the party? 621 00:38:35,040 --> 00:38:36,360 I hope so. 622 00:38:38,440 --> 00:38:40,040 We love Python, too. 623 00:38:40,040 --> 00:38:42,180 If you want to learn how to use VALID 624 00:38:42,180 --> 00:38:45,200 and just hack on it and mess with it, 625 00:38:45,240 --> 00:38:48,220 we support Python today through a JSON API 626 00:38:48,220 --> 00:38:51,740 that's a no-compile way of talking to a VALID server. 627 00:38:52,000 --> 00:38:53,860 So apt install VALID server, 628 00:38:54,200 --> 00:38:57,300 pull down the VALID bindings for Python, 629 00:38:57,500 --> 00:39:01,160 and you can start writing little apps and scripts and things 630 00:39:01,160 --> 00:39:02,940 that talk over VALID today. 631 00:39:03,180 --> 00:39:05,480 Our demo lab tomorrow at 10 632 00:39:06,180 --> 00:39:10,020 is going to talk and demo the Python side 633 00:39:10,040 --> 00:39:13,540 of things and show you how you can make your own little chat app 634 00:39:13,540 --> 00:39:17,020 that is completely private, distributed, and encrypted, 635 00:39:17,260 --> 00:39:18,580 both at rest and on the wire. 636 00:39:19,560 --> 00:39:21,780 And so, how can you help? 637 00:39:23,220 --> 00:39:25,020 We need coders and hackers. 638 00:39:25,440 --> 00:39:27,600 But more so, we need regular people. 639 00:39:28,460 --> 00:39:28,960 Everybody. 640 00:39:29,300 --> 00:39:30,720 Okay, we need everybody. 641 00:39:30,880 --> 00:39:32,000 It takes a team. 642 00:39:32,060 --> 00:39:34,260 It takes an entire village to build something 643 00:39:34,260 --> 00:39:36,420 that is approachable and usable for everybody. 644 00:39:36,880 --> 00:39:38,860 I mean, I love all of you coders. 645 00:39:38,860 --> 00:39:40,060 I love all of you hackers. 646 00:39:40,380 --> 00:39:42,000 But we need people. 647 00:39:42,780 --> 00:39:43,920 We need human beings. 648 00:39:44,340 --> 00:39:45,040 Regular people. 649 00:39:45,100 --> 00:39:46,800 We need to speak to human beings. 650 00:39:46,980 --> 00:39:49,960 So let's make sure that everybody here has a voice 651 00:39:49,960 --> 00:39:50,760 and it all matters. 652 00:39:53,420 --> 00:39:55,000 So you can find us online. 653 00:39:55,560 --> 00:39:56,760 VALID.com is up. 654 00:39:57,480 --> 00:39:58,300 We have a Twitter. 655 00:39:58,520 --> 00:40:01,400 You've probably seen it ad nauseam for the last six months. 656 00:40:01,580 --> 00:40:02,540 But it's there. 657 00:40:02,620 --> 00:40:03,680 We're also on Mastodon. 658 00:40:03,780 --> 00:40:04,540 We love Federation. 659 00:40:05,000 --> 00:40:06,600 We want to do more with that. 660 00:40:07,260 --> 00:40:09,020 We have a Discord coming up. 661 00:40:09,620 --> 00:40:13,340 And we have a GitLab that is going to be open now. 662 00:40:13,860 --> 00:40:17,500 So feel free to go poke at it and see what we've built. 663 00:40:18,200 --> 00:40:22,560 Also, if you are here looking for a flag for a certain CTF, 664 00:40:22,600 --> 00:40:23,660 it is not here. 665 00:40:23,860 --> 00:40:24,980 It is in that code. 666 00:40:25,380 --> 00:40:26,500 You might have to read the code. 667 00:40:27,440 --> 00:40:28,400 It's in there somewhere. 668 00:40:30,220 --> 00:40:32,020 So you can see it live tonight. 669 00:40:32,420 --> 00:40:34,300 We have a release party at 8 p.m. 670 00:40:34,320 --> 00:40:35,120 We're rocking the house. 671 00:40:35,120 --> 00:40:36,800 We've got all kinds of cool bands and shit. 672 00:40:36,880 --> 00:40:38,360 It's going to be a wild time. 673 00:40:38,600 --> 00:40:40,020 CDC hijinks, you name it. 674 00:40:40,100 --> 00:40:42,500 Have you ever heard of a little think up BO2K? 675 00:40:43,360 --> 00:40:44,400 Let's bring that back. 676 00:40:44,480 --> 00:40:45,580 Let's bring that vibe. 677 00:40:45,640 --> 00:40:50,080 That feeling that you can do something that we can just mess the world up. 678 00:40:50,280 --> 00:40:51,680 We've got the cult of the dead cow. 679 00:40:52,020 --> 00:40:52,600 In force. 680 00:40:52,940 --> 00:40:53,560 They're here. 681 00:40:53,960 --> 00:40:54,660 Come on. 682 00:40:57,560 --> 00:41:00,160 Let's all do a hacktivism together. 683 00:41:00,640 --> 00:41:01,080 Awesome. 684 00:41:01,180 --> 00:41:01,500 See you guys. 685 00:41:01,500 --> 00:41:01,980 Let's do it. 686 00:41:02,100 --> 00:41:03,340 If you have any questions, 687 00:41:03,340 --> 00:41:07,800 you can bug us out in the smoking area outside in about ten minutes. 688 00:41:07,960 --> 00:41:08,300 All right. 689 00:41:08,340 --> 00:41:09,100 Talk to you soon. 690 00:41:09,560 --> 00:41:10,180 Thanks, everyone.