[00:00.540 --> 00:10.340] Okay, so what I want to talk to you about is a problem that I've been faced with my whole professional career. [00:10.840 --> 00:16.800] Now, what is the hardest problem in computer science, in computer security? [00:17.340 --> 00:17.900] Anybody? [00:21.960 --> 00:29.540] Getting, it's not identity, it's getting real people to use the stuff you make. [00:30.640 --> 00:37.220] You know, it's, you know, the world is not going to be secured by shelfware. [00:38.520 --> 00:49.740] And given our political situation, we've got to be delivering security infrastructure that can be used by tens of millions of resistors. [00:50.340 --> 00:54.700] Not just by a handful of geeks who can grok PGP. [00:56.660 --> 01:07.100] And this leads me to the crisis in identity, which, you know, as a protocol designer, I face two choices, and neither of them is good. [01:07.740 --> 01:13.000] Either you can use a name, you know, Phil.Hallenbaker, really easy to use. [01:13.240 --> 01:15.360] But, you know, how do you register it? [01:15.540 --> 01:16.840] How do you validate it? [01:16.840 --> 01:20.700] How do you bind it to a public key for end-to-end security? [01:22.100 --> 01:26.460] Or, we can use public keys or public key fingerprints. [01:26.900 --> 01:35.080] Get the security there, but the result is completely indigestible by the regular purse user. [01:36.560 --> 01:45.440] And, you know, when we look at these systems that have escaped into the real world for identity, you know, they're kind of crappy. [01:45.440 --> 01:56.700] I mean, this is OpenID, probably the most widely used system on the web today for logging in. [01:56.920 --> 02:00.220] And, as you can see there, you know, it's open. [02:00.520 --> 02:13.300] I can come here and log in with one identity anywhere, provided that I have an identity issued by one of these four Monopoly providers. [02:14.700 --> 02:23.960] And if I want to go to New York Times, not that I do anymore, I've only got two that I can pick. [02:24.780 --> 02:33.660] So, you know, we need an open identity system, not something that's run by a cartel. [02:35.740 --> 02:56.900] And I think there's a solution out there, which the Blue Sky folk, you know, this is one of those things where you have all those pieces of apparatus in the junk room, and they've not quite gone together, and then some person comes in with that last one piece, [02:56.900 --> 02:59.080] and suddenly it all works. [02:59.540 --> 03:02.680] Well, Blue Sky are the folk who came in with the last piece. [03:03.240 --> 03:06.840] So, on Blue Sky, my identifiers are DNS names. [03:07.560 --> 03:13.480] So, hallam.bsky.social was my original Blue Sky identity. [03:14.580 --> 03:20.920] And if you have your own domain, or somebody else will let you use their domain, you can flip it. [03:20.920 --> 03:26.320] You can use your own DNS name as your handle on Blue Sky. [03:26.840 --> 03:43.780] And the way you do that is by inserting a record into the DNS that has a binding from phil.hallambaker.com, the DNS label, to, well, that's the fingerprint of a public key. [03:44.400 --> 03:49.120] And so, here we have a solution to that identity problem. [03:49.120 --> 03:55.520] We have, on the outside, we have a nice, user-friendly identifier. [03:56.020 --> 04:11.220] And then on the inside, we have a secure, permanent identifier that can be a lifelong identifier for that user if they have personal control of the corresponding private key. [04:12.580 --> 04:21.320] And the Blue Sky Protocol AT protocol is building there on a profile of the IETF OAuth2 protocol. [04:23.540 --> 04:30.820] And that gets me... got me excited, and I'm thinking, well, that's good for Blue Sky, but I want more. [04:31.580 --> 04:35.260] I want to use that one identifier everywhere. [04:35.740 --> 04:38.240] I want to be able to use it on Mastodon. [04:38.240 --> 04:40.480] I want to be able to use it on a blog site. [04:40.640 --> 04:46.380] I want to use it everywhere, whether it's running AT protocol, Mastodon, whatever. [04:47.880 --> 04:52.080] And so, I knocked up a website. [04:53.520 --> 04:59.860] And as you can see here, I'm typing in phil.hallambaker.com. [04:59.860 --> 05:07.200] So, Mplace2.social has absolutely no concept of accounts. [05:07.410 --> 05:14.200] It doesn't track accounts, email addresses, do callback passwords, or whatever. [05:14.540 --> 05:30.500] You enter your DNS handle, and if it's according to the AT protocol profile, it will then bounce you to wherever the identity provider servicing that identifier is. [05:31.160 --> 05:42.740] In this case, I'm happy to be using Blue Sky, but AT protocol is federated, and you can potentially use different identity providers. [05:42.740 --> 05:50.380] And so, go through the authorization, and heck, here I am, and I'm into a place that looks... [05:51.100 --> 05:59.740] Well, it's a place where you can have groups that are of interest, you know, interest groups, and also a personal blog for me. [05:59.900 --> 06:03.500] Well, you know, my handle is phil.hallambaker.com. [06:03.680 --> 06:10.100] Wouldn't you expect phil.hallambaker.com to be my personal blog? [06:10.100 --> 06:19.920] And the thing is that people can go to those sites and comment using their same account that they used to comment on the atmosphere. [06:21.740 --> 06:27.260] So, this isn't a presentation on this particular blogging engine. [06:27.260 --> 06:36.980] The point is, this is a template that we can use across the whole of the Internet, the whole of the blogosphere. [06:38.020 --> 06:45.840] Current status is Bluesky came to the Madrid ITF a few weeks ago, and I talked to them there. [06:45.940 --> 06:51.180] They're planning to bring their profile to ITF as a standards item. [06:52.260 --> 06:56.280] Oh, ITF is the Internet Engineering Task Force. [06:56.560 --> 07:12.140] It's the standards body that sets the standards for HTTP, for TCP, IP, for OAuth, for most of the lower-level Internet protocols that you use every day. [07:12.160 --> 07:14.320] It doesn't do HTML. [07:14.900 --> 07:16.420] That's the web consortium. [07:17.740 --> 07:24.500] And so, they've got 35 million people using this already. [07:25.110 --> 07:36.320] So, while we may change the specs in that standards process, as sometimes happens, we're going to have to have a backwards compatibility story. [07:37.120 --> 07:37.900] Okay. [07:38.220 --> 07:45.620] So, what I'm here for is that I need help in that we need to change social media. [07:45.780 --> 07:47.120] We need to take it back. [07:47.940 --> 07:50.100] And I can't do it all on my own. [07:50.860 --> 08:03.540] I need help from people who are going to take legacy blogging platforms and enable them to use the common identity profile. [08:03.980 --> 08:08.760] I'm calling it anywhere simply because I need a name to call it by. [08:08.900 --> 08:11.340] But, you know, it may turn out to be something else in the end. [08:13.220 --> 08:16.800] People who are willing to run identity providers for people. [08:17.080 --> 08:19.580] You know, issue the DNS handles to them. [08:20.240 --> 08:23.480] Provide the DNS service required to make them go. [08:25.120 --> 08:30.080] And that's a set of servicings that I am calling a handle service provider. [08:30.200 --> 08:32.380] I'll come back to that a bit later on. [08:32.820 --> 08:33.300] Okay. [08:33.380 --> 08:34.660] So, why does all that matter? [08:35.300 --> 08:45.080] Well, it matters because Facebook grew to the size it did through positive feedback, through the network effect. [08:45.360 --> 08:49.800] Everybody went onto Facebook because that's where everybody was. [08:50.000 --> 08:54.520] And if you weren't on Facebook, well, people weren't seeing your stuff. [08:54.860 --> 09:04.800] And so, there used to be a huge blogosphere, hundreds of thousands of independent blogs being maintained individually. [09:04.800 --> 09:13.820] And all that got sucked into the maw of Facebook because if you weren't on Facebook, most of the audience wasn't there. [09:14.540 --> 09:18.740] Now imagine if there was a different path. [09:19.040 --> 09:37.740] Now imagine that we could have a common identity, a common account across a whole federated blogosphere where the only thing that is shared is the account identifier. [09:37.780 --> 09:46.780] So that people can roll up to any blog, post a comment, if they're authorized, you know, maybe some gating there. [09:50.020 --> 09:50.780] Comment. [09:51.080 --> 10:03.220] And we can provide people with the equivalent of what Facebook is providing, but in an open system that is where the fascism is optional. [10:05.460 --> 10:09.500] You know, I mean, I'm not going to say this is going to be a system that's fascism free. [10:09.760 --> 10:14.260] I mean, you know, if you do open systems, the fascists can use them. [10:14.740 --> 10:18.700] So I don't object to them setting up their own blogs and using this. [10:18.920 --> 10:33.140] What I object to is the fact that when I'm on Facebook and I measure this, one-third of my feed is fascism that Zuckerberg wants to ram down my craw. [10:33.740 --> 10:35.780] And that's why I don't like it. [10:36.740 --> 10:37.300] Okay. [10:37.740 --> 10:41.720] So the first thing, first ask is help me take back social media. [10:43.460 --> 10:44.940] But there's another. [10:46.200 --> 10:56.540] You see, the thing is that the next thing after social media is, well, you know, if Alice and Bob are talking online through a blog, aren't they going to want to be able to talk offline? [10:56.960 --> 10:59.580] Aren't they going to want to send direct messaging? [10:59.960 --> 11:04.100] Aren't they going to want to send emails, set up video chats and so on? [11:05.440 --> 11:10.420] Well, yes, and what identifier would they be wanting to use for that? [11:10.760 --> 11:13.820] Isn't the obvious one, the DNS handle? [11:14.300 --> 11:17.020] So they've got one handle that they can use for, [11:23.460 --> 11:24.140] I'll get to that later. [11:26.080 --> 11:35.380] And so my first idea of end-to-end secure direct messages for Mastodon or Blue Sky was, okay, let's just use Signal. [11:35.940 --> 11:49.980] Okay, so the same binding as before, only instead of it being AT protocol that we're binding that DNS name to, let's bind it to my Signal account. [11:50.260 --> 11:52.280] And that is my Signal account. [11:53.400 --> 11:55.840] Do you see something problematic there? [11:59.580 --> 12:01.940] Well, there's something more problematic. [12:02.580 --> 12:04.480] There's no public key fingerprint. [12:06.600 --> 12:12.120] That's just binding to an account that, you know, how do you know that it's me at the other end? [12:14.160 --> 12:16.760] I don't like that approach for two reasons. [12:16.920 --> 12:18.180] First, centralization. [12:18.740 --> 12:28.600] You know, if everybody in the world, if we're going to have everybody using Signal as the way of talking direct messaging, well, shouldn't anybody shouldn't be open? [12:29.160 --> 12:31.620] Shouldn't it be so that anybody can set up a service? [12:32.580 --> 12:43.940] I mean, like, yes, I know that they're kind of sort of, yeah, we're not for profit, but I've got a long list of not-for-profits that have turned, oh, yes, we're a profit company now. [12:45.480 --> 12:48.700] And the other problem is Signal isn't really end-to-end secure. [12:49.800 --> 12:51.940] It's only end-to-end encrypted. [12:52.640 --> 12:57.180] And, you know, before you get to your head, because, no, I'm not saying that it is insecure. [12:58.100 --> 13:04.000] I'm saying that it is not sufficiently secure given our current threat environment. [13:04.500 --> 13:08.360] When it came out 10, 15 years ago, it was fine. [13:10.020 --> 13:12.160] But fascism has got worse since. [13:12.680 --> 13:13.840] We've got to do better. [13:13.940 --> 13:14.720] And I'll show you the problem. [13:15.480 --> 13:17.820] See, the problem is who controls the public key? [13:17.820 --> 13:24.240] When Alice is talking to Bob, that communication is secured by a public key. [13:24.480 --> 13:30.020] So, if it's Alice sending a message to Bob, she's going to encrypt it under Bob's public key. [13:31.000 --> 13:33.540] Where does that public key come from? [13:34.740 --> 13:40.800] Well, in the first instance, it comes from a server run by Signal. [13:42.160 --> 13:46.500] And that's a problem because that's a single point of failure. [13:50.210 --> 13:54.590] if the brown shirts turn up and say, you've got a choice here. [13:55.170 --> 14:01.870] Either you're going to be sending not Bob's key to Alice or you're off to Alligator Auschwitz. [14:02.370 --> 14:13.390] And in that situation, the very best outcome that you can hope for is they shut Signal down and it's a denial of service attack. [14:15.910 --> 14:20.250] We cannot rely rely on a single service. [14:20.550 --> 14:22.890] We've got to have redundancy. [14:23.230 --> 14:25.410] We've got to have fault tolerance. [14:25.870 --> 14:40.570] And so we need a mechanism that allows us to have multiple messaging communications protocols specified and multiple means of securing those protocols. [14:41.870 --> 14:44.630] So who should control the public keys? [14:45.350 --> 14:48.350] Well, it should be Alice and Bob. [14:48.850 --> 14:52.950] Alice should have a list of the public keys that she relies on. [14:53.530 --> 14:57.950] Bob should have a list of the public keys he relies on. [14:58.090 --> 15:09.270] And they should have the tools that allow them to curate those lists in person with transparency so that they can see what is going on. [15:10.270 --> 15:12.470] Okay, how do we go about that? [15:13.230 --> 15:22.930] Well, there is actually a solution and surprisingly enough, it's a solution that we've already got in the attic of things that we've not been using. [15:24.130 --> 15:25.290] JS contact. [15:25.770 --> 15:27.730] Anybody here use JS contact? [15:29.650 --> 15:30.670] Possibly you have. [15:30.790 --> 15:32.190] Anybody here use vcard? [15:33.490 --> 15:41.990] Well, JS contact is exactly the same as vcard, only it's in JSON and it's better. [15:42.470 --> 15:49.910] Well, actually, there are real advantages to going to JSON because the vcard format is kind of honky. [15:50.110 --> 15:52.890] It's a pain to work with. [15:54.430 --> 16:01.810] So, the idea here is I take all my contact addresses that I want people to be able to reach reach-me-by. [16:02.030 --> 16:14.030] So, my email, my phone, my websites, my git, commit key, my code signing keys, all that information, dump it into a JS contact. [16:14.990 --> 16:26.430] All the cryptographic credentials used to secure those communications mechanisms, and then we're going to publish that through the DNS and so on. [16:28.450 --> 16:36.150] And so, when I started taking a look at JS contact and applying it to this problem, you know, 95% of it was there. [16:36.290 --> 16:37.610] There was just two things missing. [16:38.390 --> 16:47.490] One was, yeah, you can dump all the information in, but it lacks clarity as to which key goes with which network service. [16:47.890 --> 16:50.730] So, that's an extension that I proposed. [16:51.150 --> 16:54.290] And the other bit is that it's got no update mechanism. [16:54.450 --> 16:57.110] I'll come back to the update mechanism in a bit. [16:57.490 --> 17:10.790] And I just came back from the ITF in Madrid, where this JS contact extension was dispatched to the Calcify working group, which is responsible to JS contact. [17:11.110 --> 17:20.930] So, this is, we hope, something that will be starting to be supported by the contact managers on various platforms in due course. [17:23.670 --> 17:24.170] Okay. [17:24.990 --> 17:28.250] So, the next thing we've got to do, we've got a bunch of data. [17:29.390 --> 17:35.930] How are we going to authenticate that data so that we can authenticate updates? [17:36.270 --> 17:38.910] And so, there's another bit of technology called DARE Envelope. [17:39.410 --> 17:43.050] It's just a means of wrapping that with a signature. [17:46.590 --> 17:52.590] The next, the final bit of technology is a bit of encryption, or a bit of cryptography. [17:53.530 --> 17:58.010] And, yeah, PHP, you're going to see some crypto at my talks. [17:58.250 --> 17:59.390] That's the way I roll. [18:00.070 --> 18:16.890] So, the idea of an EARL, it started off, I was having this discussion with Ron Rivest at MIT, and somebody had sent me this bizarre scheme for using MD5, which Rivest had written, for compression. [18:17.550 --> 18:22.970] And the idea is, hey, you can take any piece of data and compress it to 128 bits. [18:24.250 --> 18:28.650] And Ron's response was, yeah, but how do you decompress? [18:30.450 --> 18:32.090] And actually, there is a solution. [18:32.850 --> 18:42.170] What you do is, you dump the bits onto a disk somewhere, and then use the MD5 hash as the retrieval key. [18:42.990 --> 18:45.850] And you can compress the data and none and compress it. [18:46.070 --> 18:51.110] It's not really compression the way we normally think about it, but it does the function. [18:51.530 --> 19:00.730] Now, from a cryptographic point of view, it's not quite what we want because, you know, that data is sitting there, as plain text. [19:01.250 --> 19:07.510] I want to be able to encrypt that data as well because, you know, I might have more than one contact. [19:08.110 --> 19:19.050] I might have the contact I give out to my friends and family, and I might have the contact I give out to the Dalek Builders Guild. [19:20.670 --> 19:27.050] You know, you know, people who come to me asking, you know, I might not want people to have all my contact information. [19:27.050 --> 19:29.870] And I say to them, then don't give them it. [19:30.670 --> 19:37.490] Don't put the FetLife account on your contact you give to your grandmother. [19:38.830 --> 19:40.550] Unless, of course, she's on, you know. [19:42.830 --> 19:52.630] So, yes, the idea here is, we start off, we take the plain text, we wrap it in that envelope I mentioned earlier. [19:52.630 --> 20:03.250] We take the digest, Shah 3 digested the result, and we render that as a base 32 key. [20:03.970 --> 20:14.870] We then take, to get the cipher text, we encrypt under, we encrypt the plain text under another key that we've derived from that digest. [20:15.310 --> 20:19.990] And then we have a third digest that we use to create a locator. [20:19.990 --> 20:23.310] And this is base 64 encoded. [20:23.570 --> 20:27.910] Splice that onto a well-known website. [20:28.390 --> 20:34.950] And we can take the method, JSContact. [20:35.170 --> 20:42.470] The authority part is the domain of the website where we are putting this stuff. [20:42.690 --> 20:52.410] And then the final bit is the multipurpose key that we're going to use to locate, decrypt and authenticate that chunk of data. [20:53.030 --> 20:55.010] So it's a little bit of technology. [20:55.010 --> 21:01.930] It might sound a bit, but you don't really, as users, you don't really need to understand that. [21:02.090 --> 21:10.430] All you need to know is, there we have 55 bytes, you know, 64 if the domain name's particularly long. [21:10.430 --> 21:20.770] And that is a means of passing a contact record that is as long as you like. [21:21.190 --> 21:25.570] And we can pass that via multiple mechanisms. [21:25.930 --> 21:38.150] So if we meet in person, we probably get our phones out and either we QR code or near-field communication exchange the contact information. [21:38.770 --> 21:43.390] Or can render it as a QR code, put it on a business card. [21:43.850 --> 21:49.210] We could, you know, 64 bytes additional for every email you send. [21:49.210 --> 21:52.130] Yeah, we can dump it into an SMTP header. [21:56.710 --> 21:59.970] We can exchange it by a large number of means. [22:00.210 --> 22:15.910] And of course, we can exchange it by DNS text records, like we are doing the DNS handles that are powering the web ID system. [22:16.990 --> 22:24.550] And in future, yes, you could take this platform and you could build on things like personal endorsements, web of trust type things. [22:24.750 --> 22:26.710] So yeah, I know Fred. [22:27.270 --> 22:29.070] Yes, here's Fred's key. [22:29.210 --> 22:29.970] You can trust me. [22:30.110 --> 22:31.470] I met him in person. [22:31.870 --> 22:33.230] This really is Fred. [22:33.490 --> 22:37.670] Or it might be Fred is a doctor. [22:38.190 --> 22:45.770] Yes, I've checked and I'm an accredited CA that's in the business of providing that type of accreditation. [22:46.330 --> 22:49.650] Yes, Mr. Insurer, you can take his data. [22:53.190 --> 22:59.830] One application that I'm particularly interested in applying this to is code development. [23:01.050 --> 23:21.110] Because the thing, you know, one of the biggest holes that we have in the Internet supply chain is all those projects that depend upon some open-source software that's been developed by some team that But never met. [23:22.690 --> 23:31.890] This is a way that you can... when you join one of those groups, you can provide the group with your Git commit signing key. [23:32.270 --> 23:36.390] So when the updates are uploaded to the server, they know that they're from you. [23:37.350 --> 23:40.330] SSH client key, so you can get access to the repo. [23:40.710 --> 23:46.850] And code signing key, so that they can... people can run your development builds. [23:48.050 --> 24:00.330] And I think if we had the means of authenticating each other in a convenient way, it would be a start to locking down that software supply chain. [24:01.910 --> 24:05.730] Okay, so I mentioned automatic updates. [24:05.870 --> 24:10.710] And that's the reason for having a signature on this JS contact. [24:10.710 --> 24:23.290] Because what happens then is the permanent identifier in this system isn't the domain name or however it got... that contact got to me. [24:23.450 --> 24:29.830] The permanent identifier is the signature key used to authenticate updates. [24:29.830 --> 24:39.930] And what that means is say you've exchanged contacts with Alice and you add a new email address to your contact. [24:40.810 --> 24:45.210] People can start reaching you with that email address immediately. [24:45.750 --> 24:47.330] Same for a new website. [24:48.030 --> 24:53.710] Same for a completely new end-to-end secure messaging protocol. [24:54.390 --> 24:59.750] You know, there's a session on open mail in Tobin next session. [24:59.890 --> 25:02.910] I've not been... I don't know the protocol at all. [25:03.190 --> 25:20.270] But people who want to use that should be able to use it as soon as they set up their account and drop the credentials and their address into their JS contact. [25:20.910 --> 25:30.490] You know, this is a future-proof way of exchanging the messaging... exchanging contact information. [25:30.490 --> 25:34.930] And that's what I believe that we need at the current moment. [25:35.330 --> 25:42.870] Because what it's providing us with is a self-healing, authenticated social network. [25:43.310 --> 25:52.690] So if the brown shirts come in, shut down your favourite site that your community uses to organise... [25:52.690 --> 26:08.170] Well, if you've got the social network expressed in JS contact files as assigned with an update mechanism, that social network can rebuild itself automatically. [26:08.890 --> 26:18.990] Because it's not depending upon the website or the messaging infrastructure or the service provider for continuance. [26:20.250 --> 26:28.130] The community can rebuild based on the peer-to-peer graph of social connections. [26:29.030 --> 26:31.550] Okay, so the ask here is... [26:31.550 --> 26:36.490] Well, start using JS contact credentials, but... [26:36.490 --> 26:40.010] Give me a few months to fix them first, because... [26:41.010 --> 26:46.290] Yes, this is one of the perils of doing stuff on standards track. [26:47.650 --> 26:50.690] Normally, I would say, please use this immediately, but... [26:51.170 --> 26:53.630] There's just a few things I need to fix. [26:54.270 --> 26:58.570] Because what I don't want to do is to have everybody using something and then say, oops. [27:00.570 --> 27:02.710] And then have to deal with backwards compatibility. [27:04.050 --> 27:04.490] But... [27:04.490 --> 27:06.570] Write code to support this system. [27:07.670 --> 27:09.890] All the specifications are open. [27:10.410 --> 27:14.030] Yes, you may have to change your code a bit when we go into production. [27:14.030 --> 27:36.030] But, you know, if we can build a community of people who are implementing these specs, building contact managers that are using them, exchanging the contacts, pulling the contacts out and feeding them into applications, that would do a lot to make this happen. [27:36.030 --> 27:41.850] And finally, this is going to require a little bit of service provision. [27:42.650 --> 27:54.330] And, you know, most of the folk here, you know, many of you can probably au fait with editing DNS names and adding, you know, pushing stuff into services and so on. [27:54.750 --> 27:56.810] A large number of people aren't. [27:56.810 --> 27:58.990] They're going to need a bit of help. [27:59.290 --> 27:59.870] They're going to need a bit of help. [27:59.870 --> 28:02.710] So, help publishing their DNS records. [28:03.430 --> 28:04.030] Help. [28:04.330 --> 28:08.130] You know, a website that will publish that blob of data. [28:10.690 --> 28:22.230] And at some point, if we get to the point where we've got a large number of people using it, at that point, it will become interesting to have automated update mechanisms. [28:22.230 --> 28:32.350] So, instead of the update mechanism being, oh, I've added an e-mail address to my contact, I'll send out a hundred update notifications. [28:32.890 --> 28:42.230] You know, we may come up to something, it will be worthwhile doing something a bit more robust and less expensive. [28:42.230 --> 28:43.270] Okay. [28:44.130 --> 28:51.210] So, anywhere is an account that you can use at any website. [28:52.090 --> 28:56.930] Anyone is how you can communicate with anyone on the Internet. [28:59.210 --> 29:02.070] Anywhere has a different motivation. [29:03.610 --> 29:05.690] Anybody else got one of these? [29:06.730 --> 29:07.990] You know what it is? [29:09.790 --> 29:13.050] Google Nest, first generation. [29:14.930 --> 29:19.290] To be discontinued sometime this fall. [29:20.190 --> 29:23.610] I have a thousand bucks worth of these in various places. [29:24.070 --> 29:26.670] I'm really rather peeved. [29:28.310 --> 29:35.370] And, you know, what peeves me is this is how Google sees the device I paid for. [29:35.370 --> 29:43.530] It is a device I paid 250 bucks for, which I talked to through their cloud. [29:44.710 --> 29:53.170] And this is the model of IoT things that corporate America has been pushing at us for the past 20 years. [29:53.590 --> 29:54.390] Yes. [29:55.470 --> 29:56.270] Yes. [29:57.130 --> 29:58.630] Double plus un-good. [30:00.670 --> 30:02.650] I want to disrupt that. [30:03.490 --> 30:10.130] And so, the question that comes up for me is, you know, how do I want to interact with that thermostat? [30:11.770 --> 30:14.310] Well, I want it to have a web page. [30:14.530 --> 30:19.130] And I want to go to it through a DNS name that I control. [30:21.010 --> 30:24.870] And I want to have a web PKI certificate on it. [30:24.970 --> 30:26.170] So, I have security. [30:26.910 --> 30:33.450] And to add users, to authorize users to use that thermostat and set the temperature on it. [30:34.250 --> 30:41.290] All I want to do is to list the DNS handle in the list of authorized users. [30:41.290 --> 30:46.950] That's what I consider an Internet of thing to be. [30:47.430 --> 30:56.830] Today, we have things that connect to a cloud service that just happen to use IP protocol to talk to it. [30:57.350 --> 30:59.630] They're not IoT things. [31:02.410 --> 31:02.970] Okay. [31:03.210 --> 31:04.110] What does that take? [31:04.410 --> 31:06.130] Well, surprisingly little. [31:07.870 --> 31:10.310] So, to onboard a device... [31:10.310 --> 31:11.630] So, I buy a new device. [31:11.850 --> 31:18.410] I'm going to get my phone out, run a configurator app, scan a QR code or an NFT tag. [31:18.410 --> 31:23.630] And that will cause the device to be onboarded to my network. [31:23.770 --> 31:28.490] It will get the 802.11 credentials. [31:28.690 --> 31:30.770] It needs to talk. [31:31.050 --> 31:35.470] And once it's online, it's going to get its DNS name given to it. [31:35.610 --> 31:43.610] And it's going to have a means of getting its web PKI certificates so that it can feed its TLS certificate, TLS server. [31:45.470 --> 31:49.850] So, this mechanism, very similar to the JS contact system. [31:50.230 --> 32:00.810] Only this time, instead of it being JS contact, it's JS device, which is a new JSON specification that has a description of a device. [32:01.070 --> 32:04.270] And the first half of it is, could be any device. [32:04.430 --> 32:06.170] You know, could be a microphone. [32:07.170 --> 32:09.310] You know, here's a picture of the microphone. [32:09.590 --> 32:10.670] Here's the model number. [32:10.810 --> 32:11.770] Here's a serial number. [32:11.970 --> 32:13.070] Here's the documentation. [32:13.070 --> 32:23.890] You know, if I'm going through inventorying things, being able to scan a QR code and automatically add that microphone to my inventory. [32:24.290 --> 32:25.650] Pretty useful, huh? [32:27.150 --> 32:36.730] If it is a connected device, also, that record can say, here's the onboarding protocols I support. [32:37.330 --> 32:38.890] Needn't just be one. [32:39.230 --> 32:47.890] Needn't be one of these, oh yes, we've got this IoT club, and we're all going to do open stuff that's going to be really great for the consumer. [32:48.430 --> 32:50.190] Oh, can I see your specifications? [32:51.170 --> 32:52.250] Of course you can! [32:52.470 --> 32:54.570] Just pay the $25,000! [32:57.270 --> 33:04.910] Yeah, and the thing that gets me is that when I'm talking to other folk in the ITF about this, and say, oh, Phil, you know, you'll never... [33:06.650 --> 33:07.050] Yeah. [33:08.270 --> 33:10.230] We've got to set the devices free. [33:11.910 --> 33:13.670] And so that what I'm... [33:13.670 --> 33:14.330] What I've... [33:14.330 --> 33:17.730] I've currently got this in bits, IoT Relay. [33:18.110 --> 33:23.110] It's a small protocol that mediates the connection of the device to the network. [33:23.290 --> 33:36.330] So the device, once it's hooked up, it's given this relay to talk to, and that's how it requests publication of DNS record entries, if it might need them, to advertise its services. [33:36.330 --> 33:43.270] And it can also acquire web PKI certificates for its various uses. [33:44.050 --> 33:47.390] In future, it might also do VPN stuff. [33:48.970 --> 33:49.890] Okay. [33:50.350 --> 33:53.190] But, Phil, manufacturers don't want that. [33:53.810 --> 33:58.570] Manufacturers don't want to produce devices that set users free. [33:59.570 --> 34:00.490] No. [34:00.930 --> 34:08.750] American providers don't want to produce devices devices of the type I'm talking about. [34:09.110 --> 34:20.050] Because they were all brought up at MBA school, where they were taught that recurring revenue, razor and blades, is the holy trinity. [34:20.270 --> 34:24.110] You know, if you're not getting your recurring revenue, you're such a failure. [34:25.230 --> 34:28.730] Well, that's not the only place that has MBA school. [34:28.730 --> 34:39.230] And in Chinese MBA school, the approach is, make the stuff, ship it, forget it. [34:41.470 --> 35:05.430] So all I need to do is to get a few prototype devices that are open-source hardware, do a Kickstarter for them, have the Kickstarter fulfilled in China, and before those deliveries come back, there will be a hundred knock-offs available. [35:09.890 --> 35:11.890] Yeah, you've got to think about it. [35:11.970 --> 35:14.810] My purpose here is not selling the device. [35:14.810 --> 35:21.150] My purpose here is getting revenge for that Nest thermostat. [35:28.160 --> 35:31.320] Okay, so this is a bit loosey-goosey at the moment. [35:31.540 --> 35:34.220] I do have all the parts working in isolation. [35:35.220 --> 35:37.320] I need to integrate them. [35:38.200 --> 35:42.060] And I'm looking for co-authors who might be interested in writing a spec. [35:42.060 --> 35:44.800] So the ask here is architects. [35:45.180 --> 35:49.540] You know, folk are interested in getting in and building this system. [35:50.280 --> 35:59.920] You know, because, you know, hope, most of you are much more into the hardware level than I have been able to. [36:00.940 --> 36:08.920] So there are probably a lot more people, a lot of people here that are more expert at the stuff I need than I am. [36:10.000 --> 36:18.160] Developers, you know, if you're writing, if you're developing IoT stuff, you know, let's write JS device descriptions of them. [36:18.260 --> 36:21.060] Let's try putting QR codes onto them. [36:23.260 --> 36:35.800] Adopt IoT Relay as a means of onboarding and provisioning your device so that it can be a real Internet device and not some slave to a cloud service. [36:37.140 --> 36:38.560] Handle service providers. [36:38.800 --> 36:39.980] Well, yeah, this is another... [36:39.980 --> 36:43.180] Running that relay is going to be another job we're going to give off to them. [36:43.740 --> 36:44.240] And hackers? [36:46.180 --> 36:47.380] Any hackers there? [36:48.620 --> 36:51.580] I'm really looking for somebody to jailbreak the nest. [36:57.770 --> 37:00.350] Okay, so who are these handle service providers? [37:01.010 --> 37:02.670] Well, potentially, you. [37:03.450 --> 37:04.670] If you've got the technical... [37:04.670 --> 37:09.770] You know, many of the people here are going to have the technical chops to run it for themselves. [37:09.950 --> 37:10.510] And that's great. [37:11.570 --> 37:15.930] What I would ask though is, you know, could you also run it for some friends and family? [37:18.010 --> 37:21.810] Some of you may have little consulting business, provide some services. [37:22.210 --> 37:26.910] You know, set up a handle service provider. [37:27.290 --> 37:29.710] You know, maybe find a way to make money off it. [37:30.350 --> 37:33.810] You know, after all, we're not all communists. [37:35.510 --> 37:36.490] Some are. [37:37.710 --> 37:46.890] And in the future, this is something that I think that DNS registrars, VPN providers, malware providers could be... [37:49.190 --> 37:54.510] could be persuaded was part of the service package they should be delivering to their users. [37:55.330 --> 37:55.950] Okay. [37:56.350 --> 37:58.610] One final thing before I close. [37:58.610 --> 38:01.610] Because, yes, it is enshittification protected. [38:02.530 --> 38:13.930] I'm not leading you down the garden path here where being in the more of the Zuckerberg is replaced by slavery to a handle service provider. [38:14.990 --> 38:16.350] The protocol... [38:16.350 --> 38:26.270] I can't go through the proofs, but the protocols are designed so that users can change their handle service provider at any time with no switching costs. [38:28.270 --> 38:29.270] So, yes. [38:29.510 --> 38:32.650] So, even if you aren't a communist, yes, this... [38:33.270 --> 38:35.970] this might not be as profitable as you... [38:38.010 --> 38:38.610] Okay. [38:38.610 --> 38:43.410] So, in summary, I presented three identity systems. [38:43.790 --> 38:44.390] Anywhere. [38:44.790 --> 38:49.610] A single account that we can use across the whole Internet. [38:50.150 --> 38:51.210] Any one. [38:51.210 --> 39:07.690] a mechanism that allows people to communicate with each other securely with end-to-end credentials protected by direct trust and anything which is all about solving my problem with a damn nest thermostat. [39:09.910 --> 39:11.070] Thank you very much. [39:17.980 --> 39:19.620] Dr. Phil, can I call you Dr. Phil? [39:20.060 --> 39:20.100] Yeah. [39:20.100 --> 39:23.100] A couple of questions on the online. [39:23.380 --> 39:28.360] Are you planning to create a default provider for identities a la B-Sky Social? [39:29.000 --> 39:34.760] And what's the solution to the public versus friends and family contact info having several JS contacts? [39:35.280 --> 39:36.980] Or did they misunderstand? [39:39.100 --> 39:40.180] Okay, if you... [39:41.360 --> 39:48.180] Yes, I am planning to be setting up a handle service provider myself and providing free handles. [39:50.280 --> 39:50.800] Yes. [39:51.100 --> 39:52.260] I mean, like... [39:52.260 --> 39:53.920] It kind of goes with the territory. [39:55.400 --> 39:57.120] So, yes, that would be one thing. [39:57.260 --> 40:00.680] But I don't want to be the one person that everybody relies on. [40:01.320 --> 40:05.820] And, you know, I want to encourage people to come in early. [40:05.820 --> 40:10.760] You know, if somebody was to come in and say, Hey, Phil, I've got all the hardware. [40:11.280 --> 40:12.560] I can just do it. [40:12.700 --> 40:15.160] You know, I wouldn't need to do it at all. [40:15.300 --> 40:15.520] You know? [40:15.780 --> 40:18.680] So, you know, I'm not anxious to be doing a service. [40:19.500 --> 40:20.780] But I will be... [40:20.780 --> 40:21.920] I am planning to do it. [40:22.080 --> 40:23.960] In terms of the... [40:23.960 --> 40:26.740] Having the separate JS contacts. [40:28.520 --> 40:29.400] Yeah, it... [40:30.700 --> 40:36.780] You can have a single name potentially going to more than one contact card. [40:37.000 --> 40:39.840] And that's when you get into encrypting the pieces. [40:40.540 --> 40:42.140] You know, basically the thing is that... [40:43.000 --> 40:47.880] Your public card might just be a bootstrap to... [40:47.880 --> 40:48.300] Okay. [40:48.740 --> 40:50.780] I exchange with you. [40:51.160 --> 40:51.600] Oh! [40:52.500 --> 40:53.260] Hackertown. [40:54.180 --> 40:55.180] Give you... [40:55.180 --> 40:59.760] And then give you another contact that has rather more information. [40:59.760 --> 41:00.760] Thank you. [41:01.760 --> 41:02.320] Thank you. [41:02.400 --> 41:03.020] Great presentation. [41:04.560 --> 41:09.580] Have you considered, as an example, government or hacker over... [41:09.580 --> 41:10.840] taking over domains? [41:11.100 --> 41:16.280] Like, you say that the handle service providers are portable, but like, how do they deal with, like, the U.S. [41:16.420 --> 41:18.020] Marshals coming in and taking your domain name? [41:18.260 --> 41:18.860] Thank you. [41:19.180 --> 41:19.480] Okay. [41:19.640 --> 41:21.800] That's a very important question. [41:23.560 --> 41:24.200] So... [41:25.920 --> 41:31.800] The answer is, in all of these systems, we go back to that slide where we've got... [41:33.660 --> 41:37.440] There are two identity systems going in parallel here. [41:41.180 --> 41:45.160] We have the name, and we have the public key fingerprint. [41:46.300 --> 41:54.560] The name is really a coupon that you exchange for the key fingerprint. [41:55.120 --> 42:02.700] Once you've exchanged the coupon for the key fingerprint, the coupon's job is done. [42:05.000 --> 42:16.780] If the domain passes to somebody else, you're fine, because the fingerprint, or in the case of JS contact, the signature key is the persistent identifier. [42:17.540 --> 42:30.680] Now, for anywhere, it does get a bit more complicated, because, you know, you have the thing that your IoT device is sitting on a DNS name. [42:32.640 --> 42:45.200] However, if you run your network sensibly, you're going to be connecting them all up to a DNS service that you control, not one that is controlled by the brown shirts. [42:46.440 --> 42:51.540] And so, there are ways that we can get the IoT services running. [42:52.820 --> 42:55.200] That gets a lot more involved, though. [42:56.340 --> 43:02.660] You know, it's kind of like, I need a large number of epicycles, and it's more than I could fit into the presentation. [43:03.940 --> 43:07.540] So, yes, I have thought about it, but the answer is longer than I can give here. [43:12.330 --> 43:14.330] Hi, thank you for your talk. [43:15.130 --> 43:28.470] I've also been working on some similar developments, especially the decentralized identity, where you own the private key. [43:28.470 --> 43:39.190] And my main question is, how easy is it for me to generate a key pair for the system without necessarily using your code? [43:39.330 --> 43:53.670] Would I be able, is there like a spec that I could follow to not necessarily re-implement the cryptography part, but using existing crypto components to write a new key generator? [43:54.130 --> 43:54.970] Okay, yeah. [43:55.410 --> 44:00.690] So, all my stuff is based as closely as possible on open standards. [44:00.690 --> 44:10.890] So, the crypto... So, the signature standard that I'm using is Jose, JSON object signing and encryption, which is an ITS standard. [44:11.150 --> 44:13.770] It's supported by a large number of libraries. [44:14.110 --> 44:16.030] They can generate the key pairs. [44:16.250 --> 44:17.650] They can express them. [44:17.930 --> 44:22.950] The total amount of code that I'm adding isn't very large. [44:24.690 --> 44:26.990] And certainly none of it's proprietary. [44:27.110 --> 44:30.490] So, you should have no difficulty using your own code. [44:33.090 --> 44:47.190] Some of the, you know, some of the systems that I use on top, behind the scenes for provisioning out keys, you might need to tweak existing libraries. [44:47.190 --> 45:04.190] So, I've not talked about it here, but the business of when I bring a device into my personal set of devices, I'm using a protocol called Mesh Connect, and that uses threshold cryptography. [45:04.690 --> 45:15.650] And that's something that is not likely to be supported by generic crypto libraries, but it's something that's fully standardized and specified. [45:15.770 --> 45:22.070] And I can provide you with help on extending the library to do that if you're interested. [45:22.970 --> 45:23.730] Thank you. [45:27.230 --> 45:33.820] How are you imagining a typical, like, user experience? [45:35.250 --> 45:45.910] Because, like, you know, PGP is great, but it's like, the reason why normal people don't use it is because it's like, you know, too confusing. [45:46.570 --> 45:57.850] But, like, if I'm trusting some random website to not save my private key, you know, how do I... [45:57.850 --> 46:00.050] Oh, the website will never see your private key. [46:00.350 --> 46:03.690] The website will only ever see your public key. [46:04.550 --> 46:07.110] And when you use public... [46:08.330 --> 46:12.930] In the example, I was showing a password-based authentication to the... [46:13.690 --> 46:18.750] The system could potentially support public key authentication. [46:20.590 --> 46:21.310] You... [46:21.310 --> 46:30.750] The thing that's great about public key cryptography is that I can prove that I know the private key without revealing the private key. [46:31.200 --> 46:37.130] So, I can prove that I know the authentication secret without divulging the authentication secret. [46:37.470 --> 46:46.110] So, in terms of the user experience, I want it to be absolutely seamless. [46:46.110 --> 46:58.490] In that, you know, I have a really bad reputation in the IETF because, you know, my version of IETF security is zero-click security. [46:59.010 --> 47:08.710] I want the secure version of whatever I do to be at least as easy to use as the insecure version. [47:08.710 --> 47:12.710] So, no additional user pain. [47:13.710 --> 47:15.430] So, if we are going to... [47:15.430 --> 47:18.790] If you want to talk to me, you would... [47:18.790 --> 47:20.990] You know, let's go to the final slide. [47:23.770 --> 47:24.310] You... [47:24.310 --> 47:25.850] Say we're remote. [47:27.290 --> 47:32.270] You type in at phil.hallenbaker into your... [47:34.510 --> 47:36.850] Into your client as... [47:37.750 --> 47:39.090] Instead of an email address. [47:39.970 --> 47:41.950] And then up would come a dialogue. [47:42.170 --> 47:43.450] How do you want to talk to me? [47:43.890 --> 47:45.310] Do you want to send me a chat? [47:45.750 --> 47:47.170] Do you want to send me a mail? [47:47.590 --> 47:49.730] Do you want to send me a large file? [47:50.270 --> 47:53.230] You know, two terabytes of video file. [47:53.230 --> 47:57.490] Do you want to start a streaming voice communication? [47:58.030 --> 48:00.010] Do you want me to start streaming video? [48:00.270 --> 48:02.450] So, that's the options that you would see. [48:02.930 --> 48:06.430] You'd pick one, and then that would just start. [48:06.990 --> 48:13.170] So, I'm not talking about the user having any additional burden. [48:13.670 --> 48:18.030] If the user has to think about security, you've lost. [48:18.030 --> 48:27.590] The only time in which I want the user to be involved thinking about security is when the user's actually got a problem. [48:27.950 --> 48:37.870] When they're asking themselves, is this really Apple computer that I'm talking to giving me this update advice? [48:38.470 --> 48:41.350] You know, that's the point where they're thinking, yes. [48:41.990 --> 48:45.990] Then they want to be able to go to and find that it really is Apple computer. [48:46.290 --> 48:47.290] Okay, last question. [48:51.380 --> 48:53.160] Hello, thank you for all the good ideas. [48:53.160 --> 49:05.120] You made a point of the dispatch kind of pushing upgrades to JS contact to consumers' phones. [49:05.880 --> 49:14.420] I'm curious about the case where someone may need to sunset a handle service provider or move it to another domain or location. [49:15.520 --> 49:19.820] Is there room in the spec for maybe a migration path? [49:20.860 --> 49:23.260] Today, you're getting the JS contact from me. [49:23.500 --> 49:25.220] Tomorrow, you should ask for it here. [49:26.220 --> 49:34.520] Yes, actually, that's a great point and one that we have experienced a few times in the Fediverse. [49:35.300 --> 49:46.460] You know, with people who got really, really excited about running a Fediverse node in the days when the Twitter turned into the sans serif swastika. [49:48.620 --> 49:52.080] Yeah, and then they kind of like stop doing it. [49:52.600 --> 49:53.860] Yeah, so yes. [49:55.540 --> 50:06.780] If your handle service provider stopped publishing your DNS, well, then people would be unable to resolve your domain name. [50:06.780 --> 50:17.700] So what you need to do there is to find a new HSP, give them the permanent identifier, and then... [50:17.700 --> 50:26.180] And this is something that we can make fairly seamless in the client, so the user doesn't have to think about it. [50:26.180 --> 50:38.520] So there will be a set of technical steps, but from the user's point of view, it can be as simple as click here to change your service provider. [50:39.840 --> 50:46.980] And I designed it so that the old service provider doesn't need to give permission for you to switch. [50:46.980 --> 50:57.100] That's what I was meaning about the de-scientification proofness and the ability to switch your handle service providers. [50:57.260 --> 50:58.740] It's absolutely vital. [50:59.560 --> 51:00.380] Thank you. [51:01.720 --> 51:02.880] Thank you very much. [51:02.980 --> 51:03.280] Thank you.