[00:00.000 --> 00:00.920] Welcome to HOPE. [00:01.020 --> 00:02.740] This is the first talk in this room. [00:02.940 --> 00:06.800] So please also applaud to our volunteers who are helping them. [00:07.100 --> 00:08.420] They're a great team. [00:08.560 --> 00:11.000] They're helping us to set up all of this stuff. [00:11.320 --> 00:11.760] Wonderful. [00:12.480 --> 00:14.140] So, hello, hello. [00:14.280 --> 00:15.180] My name is Mikolaj. [00:16.700 --> 00:19.380] It's nice to have HOPE 16. [00:19.820 --> 00:22.300] And I'm glad to be here. [00:22.300 --> 00:29.200] And on one of these events, we talk about giving people control over their digital life. [00:30.000 --> 00:44.240] And in this show, I'll show you a comprehensive and solid theoretical way of actually doing precisely that, followed by implementation. [00:44.860 --> 00:51.360] So theory will take us about 15 minutes, and then we'll do it in the demonstration, and you'll see how it will flow. [00:52.760 --> 01:06.760] Now, when regular, non-savvy people are asked about the Internet, you know, about digital world, what do they think, this is something that they draw about it, you know, what's in their minds. [01:06.760 --> 01:13.520] Note how in this picture, there are other users, their friends, you know, their colleagues. [01:14.480 --> 01:17.440] There is no big tag in the picture, right? [01:17.780 --> 01:22.400] And these personal clouds of computation, like near each of the user. [01:22.400 --> 01:34.060] And there's, I like this, many lines, different colors, suggesting different interactions that users do in the vastness of their networked world. [01:34.420 --> 01:39.720] Now, let's build the user's world from actually what they think, right? [01:40.120 --> 01:44.020] And let's do this step-by-step, layer-by-layer. [01:44.120 --> 01:46.380] So we start from what we saw. [01:46.480 --> 01:48.740] They need that arrow, that line. [01:51.340 --> 01:59.320] And for this need, for example, that was sending the message, we make an app with convenient layout, you know, beautiful graphics. [01:59.800 --> 02:06.920] Well, when I say we, I'm a back-end engineer, sorry. [02:07.400 --> 02:13.080] I mean, the developer who actually focuses, understands the user experience. [02:13.080 --> 02:19.720] And dwelling on the low-level details is not what those developers actually want to do. [02:19.920 --> 02:30.820] And dwelling on direct user experience is way more fun and way more rewarding for our developers, right? [02:31.860 --> 02:33.580] So we need a platform. [02:33.760 --> 02:38.840] We need a platform that provides to an app developer a surface. [02:39.720 --> 02:41.700] And we call it API service. [02:42.100 --> 02:46.100] So for example, here, apps will want to send a message. [02:46.320 --> 02:52.840] And message sending in this particular example should be secure, private, resilient. [02:52.840 --> 02:58.820] And so security and privacy aspects, we have talked a lot about them. [02:58.960 --> 03:07.160] But resilience against bad behavior by providers is something that is also needed. [03:07.160 --> 03:07.220] Okay. [03:07.840 --> 03:10.580] Else, the initiation happens. [03:11.080 --> 03:14.300] And we can see it in this case, right? [03:14.360 --> 03:19.120] It's no longer an abstract idea or concept. [03:19.500 --> 03:30.900] So this particular platform right now implementation called PrivacySafe is the client platform layer that provides utility APIs to the apps at the top. [03:30.900 --> 03:34.620] So PrivacySafe runs on user device. [03:34.840 --> 03:36.140] This is a user device. [03:36.260 --> 03:39.700] Hence, it is ultimately controlled by the user. [03:41.100 --> 03:46.520] Detail, PrivacySafe, open-source, of course, copies on the GitHub. [03:46.940 --> 03:48.540] I'm working my talk. [03:48.540 --> 03:52.160] That means I have my own GitLab installations, right? [03:52.160 --> 03:52.200] We're under right. [03:54.740 --> 03:55.800] Messaging apps. [03:56.180 --> 03:59.640] Tells the platform to send the message across the Internet. [04:00.260 --> 04:00.360] Right. [04:00.460 --> 04:01.580] Now, there's detail. [04:02.300 --> 04:03.620] For our example. [04:03.840 --> 04:08.040] Let it be a Romeo at Montague sending a message to Juliet at Capulet. [04:08.400 --> 04:08.540] Right. [04:09.180 --> 04:15.740] So Romeo's platform makes a DNS request to find an inbox service for Capulet domain. [04:15.740 --> 04:29.600] Romeo knows Juliet's address, and the naming system tells Romeo's device how to connect to a server that services Juliet's domain. [04:30.620 --> 04:41.300] Now, Romeo's platform encrypts the message to Juliet key, connects over the Internet, and leaves this end-to-end encrypted bytes in Juliet's inbox. [04:42.140 --> 04:51.800] Romeo's platform only tells Inbox that bytes are for Juliet, but it doesn't tell who these bytes are from. [04:52.600 --> 04:57.140] There's no need for Inbox to know who the message is from. [04:58.260 --> 05:03.180] Now, Juliet's platform gets notification about new bytes available, and it picks them up. [05:03.780 --> 05:20.380] Juliet's platform checks which known key can decrypt the message bytes, and when it is Romeo's key that successfully opens the message, Juliet learns that message comes from Romeo, because end-to-end encryption gives this assurance. [05:20.380 --> 05:39.500] Note how in this architecture, recipient learns who the sender is in a cryptographically-based way, while the server doesn't know who the sender is. [05:40.800 --> 05:46.320] So, Juliet sends a message back to Romeo, repeats this process symmetrically. [05:46.940 --> 05:58.480] Juliet's platform finds Inbox service via domain, via naming system, which is the DNS in the usual case. [05:59.720 --> 06:15.240] So, for Montague domain, encrypts the message for Romeo's keys, then reaches over through the Internet, into the Romeo's inbox, where it just says, hey, there's like these opaque blobs for Romeo. [06:15.740 --> 06:21.220] Romeo's platform picks them up, finds the keys, and then it's like, oh, this is a message from Juliet. [06:21.580 --> 06:33.980] Our developer gets, you know, the event and something like that, and Vitaly is actually doesn't have to worry about metadata, about end-to-end encryption. [06:34.060 --> 06:38.520] Vitaly is just doing a wonderful job on the app level. [06:38.900 --> 06:44.800] Now, let's see how message flows. [06:48.660 --> 06:54.800] Montague servers and Capulet servers, they don't talk in this picture. [06:55.960 --> 06:58.760] While Romeo and Juliet do. [07:01.900 --> 07:04.460] You cannot unseen it after you see it, right? [07:05.240 --> 07:09.900] The servers don't talk, while users can. [07:10.240 --> 07:14.800] So, we call this communication architecture a web-style federation. [07:15.180 --> 07:21.120] Because different domains can have their own servers, hence it is non-centralized, federated. [07:21.120 --> 07:29.340] Looking up a service location via DNS, it is what web browsers have been doing since 1990s. [07:29.420 --> 07:32.520] Hence, it is a web-style federation. [07:33.580 --> 07:40.260] Now, web-style federation doesn't require providers' cooperation for services to function. [07:40.440 --> 07:42.080] So, it makes it resilient. [07:42.540 --> 07:50.120] Users from different domains can talk to each other, even when providers have antagonistic relationship with one another. [07:50.120 --> 07:56.860] So, servers in the web-style federation have no means of constraining the user. [07:59.240 --> 08:06.100] Now, in contrast, communication pattern in the classical federation is different. [08:06.640 --> 08:09.220] Note the 1980s at the bottom. [08:09.220 --> 08:14.980] The most prominent example of classical federation is email or SMTP. [08:15.560 --> 08:21.740] In the classical-style federation, client connects only to home server of the user. [08:22.200 --> 08:24.860] And server does everything else on client's behalf. [08:25.320 --> 08:31.680] So, client... it is client who instructs the server about the message's destination. [08:31.680 --> 08:34.980] Because the server is delivering it on the user's behalf. [08:35.240 --> 08:44.040] As a result... as a result of complete instructing by client, the server in classical federation knows who is talking to whom. [08:44.720 --> 08:51.580] The metadata is given to provider by design in this classical federation. [08:51.580 --> 08:54.740] So, client gives complete metadata to server. [08:56.260 --> 09:02.940] And even if the end... even if the content is end-to-end encrypted with PGP... [09:03.580 --> 09:05.980] I mean, they kill based on metadata, right? [09:06.940 --> 09:07.600] Yeah. [09:07.600 --> 09:12.280] So, metadata is this food for surveillance. [09:12.640 --> 09:18.720] And when service providers are benevolent and good, classical federation runs smoothly, wonderful. [09:19.100 --> 09:23.060] But commercial surveillance allows bad actions to discriminate. [09:23.060 --> 09:28.060] So, the bigger player just, for some reason, defederates the rest of it. [09:28.580 --> 09:29.140] Yeah. [09:29.340 --> 09:34.260] And so, the word defederation exists in the classical federation. [09:34.260 --> 09:37.400] It doesn't exist in the web-style federation. [09:38.220 --> 09:47.240] So, unlike physical space, like this space here, where we can touch things, physical space is given to us. [09:47.380 --> 09:50.720] Like, we cannot really change the laws of physics. [09:51.560 --> 09:55.500] Like, you know, Planck constant cannot be changed, right? [09:56.120 --> 10:01.780] But the cybersphere, we shape it. [10:01.780 --> 10:02.900] We banned it. [10:03.140 --> 10:08.800] And we have to just stop splashing metadata into civilians' fire. [10:09.040 --> 10:11.220] You know, and hoping that everything will be fine. [10:11.620 --> 10:13.500] So, Web-style federation is resilient. [10:13.820 --> 10:19.460] And this is why it is a main ingredient in the 3NWeb protocols used as our foundation. [10:19.960 --> 10:24.780] We are currently baking documentation in 3NWeb standards under IEEE. [10:24.780 --> 10:27.100] So, that's somewhere. [10:27.920 --> 10:31.240] Now, 3NWeb is a small set of protocols. [10:32.480 --> 10:40.360] It's a set that is complete to allow building different varieties of apps on top of the client-side platform. [10:40.760 --> 10:44.120] So, let's see the other examples. [10:44.120 --> 10:49.400] So, for example, user needs a video chat, right? [10:49.940 --> 10:56.440] So, video chat asks platform to securely establish connection between two users. [10:56.900 --> 11:01.000] It's like... it's called session setup. [11:01.900 --> 11:06.440] And then it runs the WebRTC connection. [11:06.440 --> 11:17.660] So, note that this initial flow for the session setup goes via our already existing protocol for the texting messages. [11:18.000 --> 11:26.580] And here we have a mere combination of protocols to provide another experience for the user. [11:28.340 --> 11:30.840] So, another example. [11:30.840 --> 11:36.200] The user may want to have a convenient cloud storage and share files from them. [11:38.160 --> 11:44.260] Now, PrivacySafe provides files a platform system API. [11:45.180 --> 11:54.000] And for synchronization, a platform packs stuff into blobs. [11:54.420 --> 11:57.000] They have random names. [11:57.000 --> 12:01.880] The server doesn't know what the structure of the folders are. [12:02.100 --> 12:05.300] The platform can just put the blob. [12:05.680 --> 12:10.060] And if the server is guessing what's in the blob, it's called a noise. [12:10.620 --> 12:16.040] You know, like name guys would say noise in the networking flow. [12:16.240 --> 12:19.480] This is a noise in what I'm sharing, in what I'm storing. [12:19.760 --> 12:26.340] Also, the platform, when it's synchronized stuff, it may say it doesn't synchronize right away. [12:26.340 --> 12:28.320] So, there's a timing game. [12:28.540 --> 12:35.000] And these are the things that we can play with on this kind of platforms. [12:38.900 --> 12:48.980] So, Romeo somehow, say, in the chat, tells Juliet, here's some ID for the blob, here's the key. [12:48.980 --> 12:52.700] So, Juliet knows it's Romeo's server. [12:53.100 --> 13:00.600] It goes, finds the DNS where the service is, and directly talks to the storage. [13:00.820 --> 13:05.720] And I want to point your attention that there are these anonymity masks. [13:06.160 --> 13:16.300] So, the first layer of anonymity is that in the application protocol, we don't give an unnecessary metadata, right? [13:16.300 --> 13:17.600] The server doesn't need it. [13:18.000 --> 13:22.180] But then, there's like this, how about the transport? [13:22.420 --> 13:23.320] The IP? [13:23.720 --> 13:25.280] Oh, that's very simple. [13:25.560 --> 13:28.740] It either just runs over Tor or over NIM. [13:29.320 --> 13:32.040] So, NIM guys, are you in here? [13:32.300 --> 13:34.060] Well, I guess we'll talk with you. [13:34.300 --> 13:41.220] So, that's how you, with this, we can have full, complete privacy. [13:41.220 --> 13:43.320] The solution is here. [13:45.950 --> 14:07.160] All examples of the above, they have kind of crystallized the thing where all the richness, all the usefulness to the user is provided by the 3N Web app that runs on top of the privacy client platform, but it's all at the top. [14:08.720 --> 14:11.360] And then, there's nothing at the bottom. [14:11.560 --> 14:20.120] Like, the servers, like the providers for the utility servers, they are given no plain text. [14:20.340 --> 14:22.880] They are not given unnecessary metadata. [14:23.200 --> 14:27.120] As a result, there's nothing to abuse on the server. [14:28.980 --> 14:38.400] So, hence, 3N Web style federation to ensure there cannot be defederation between Romeo and Juliet. [14:38.820 --> 14:40.520] Now, it's time for the demo. [14:42.860 --> 14:47.860] May I please ask people to pray demo gods? [14:53.200 --> 14:53.920] May I please ask people to pray demo gods. [14:53.920 --> 14:58.120] Okay, so, that's the dashboard. [14:59.900 --> 15:00.620] That's... [15:02.600 --> 15:05.700] So, let me do this easier. [15:05.980 --> 15:07.100] Let's turn this off. [15:08.220 --> 15:09.360] Let's do... [15:09.360 --> 15:11.840] So, let's add an... [15:14.200 --> 15:17.460] PrivacySafe is an app that I download and install on my... [15:18.440 --> 15:19.260] That's correct. [15:21.000 --> 15:25.200] So, when we just download an app... [15:26.860 --> 15:28.420] I'm trying to see the contrast. [15:29.620 --> 15:35.260] So, when we download an app, there's an option that, you know, some existing users. [15:35.820 --> 15:38.480] Right here, we want to create account, right? [15:38.680 --> 15:46.240] So, of course, PrivacySafe service is for helping our development team. [15:47.520 --> 15:49.320] IvyCyber.com. [15:50.760 --> 15:53.520] Or, there's the custom server. [15:54.220 --> 15:55.840] The custom server. [15:56.860 --> 16:04.060] So, I told you about the different [16:07.830 --> 16:08.290] domains. [16:08.930 --> 16:14.090] So, let's say I want to serve my own domain. [16:14.090 --> 16:17.510] What should I do with email? [16:18.350 --> 16:18.950] Right? [16:19.250 --> 16:19.770] Don't ask. [16:20.050 --> 16:21.690] That's rhetorical questions. [16:22.070 --> 16:23.730] What should I do with the three and one? [16:24.210 --> 16:31.230] I make sure that for my domain, PrivacySafe.me, I put TXT records just in that form. [16:32.310 --> 16:33.030] That's it. [16:33.170 --> 16:33.830] That's enough. [16:34.110 --> 16:36.030] I'm already serving a domain. [16:36.030 --> 16:40.010] I need no permissions to do that. [16:40.710 --> 16:41.370] None. [16:42.030 --> 16:44.010] Nobody can defederate me. [16:44.190 --> 16:48.270] Well, they can just raid my place or something, right? [16:48.270 --> 16:50.350] So, yeah. [16:55.550 --> 16:59.430] When we set the platform, it really is that. [16:59.610 --> 17:04.610] So, for example, this first thing is a start. [17:04.830 --> 17:07.030] I'm as a user, a simple user. [17:07.250 --> 17:14.530] I want to just enter my existing or some other login and put in the password, right? [17:14.530 --> 17:19.730] And this particular case, which you download right now, is done for the use case one. [17:20.070 --> 17:21.750] From my password, we use sscript. [17:22.250 --> 17:23.910] And then we get the key. [17:24.390 --> 17:26.490] And the platform just needs the key. [17:27.170 --> 17:32.870] So, if you are in your organization, you're kind of fancy. [17:33.050 --> 17:34.790] You want a USB key, right? [17:35.210 --> 17:37.410] Or you want UB keys, right? [17:37.710 --> 17:40.590] So, all you need to do is just change that piece. [17:40.590 --> 17:45.450] And that would feed, will create, will find keys in your way. [17:45.630 --> 17:51.730] Or, for example, you'll have an organization where, for a team of people, you need something. [17:51.990 --> 18:03.650] So, the design of the parts is such that you are not restricted to just this solution, which is right now downloadable for users, for simple users. [18:04.590 --> 18:08.290] Now, of course, there's, like, these ideas of contacts. [18:08.650 --> 18:10.350] So, there's, for example, me. [18:11.490 --> 18:17.570] There's something like, hey, there's keys that people can start talking to me. [18:18.410 --> 18:19.890] There's the chat app. [18:20.750 --> 18:23.270] So, there's, like, you know, usual stuff. [18:23.510 --> 18:25.330] We start chat, we complete a chat. [18:27.730 --> 18:28.830] 12, 18. [18:29.750 --> 18:31.430] I think we're good for time. [18:34.440 --> 18:35.740] We're good for time. [18:37.660 --> 18:38.300] Cancel. [18:53.990 --> 18:58.190] So, the reality of the... [19:02.470 --> 19:03.290] So, yeah. [19:04.190 --> 19:07.310] So, do you have questions so far? [19:08.330 --> 19:14.430] So, the concept of the platform... [19:17.590 --> 19:18.510] Is it clear? [19:19.690 --> 19:19.950] Yep. [19:20.230 --> 19:21.890] Can we scale with audio issues? [19:26.420 --> 19:29.300] I actually want you to help with that. [19:29.700 --> 19:36.920] In terms of that, you go, download the thing, and create me a problem with the users. [19:41.020 --> 19:42.160] That's number one. [19:42.300 --> 19:42.800] Number two. [19:43.060 --> 19:53.360] So, we've been talking with cloud providers, of course, Iceland, and Cloud68 in Europe. [19:54.140 --> 19:59.520] Basically, trying to have a partnership so that they can do something for us. [19:59.520 --> 20:02.640] Like, they serve the SPAC server. [20:02.760 --> 20:07.220] By the way, the SPAC server, besides the platform, is also available. [20:09.180 --> 20:12.660] And they ask this question, what are the requirements? [20:12.760 --> 20:18.500] And the server itself doesn't know anything about it. [20:18.880 --> 20:19.300] Right? [20:19.580 --> 20:26.080] So, actually, all it does is, like, quickly get the files, quickly send back the files. [20:26.080 --> 20:28.300] Make sure I store the files. [20:28.980 --> 20:30.180] That's about it. [20:31.100 --> 20:32.000] And, yeah. [20:32.180 --> 20:33.900] That's an interesting pattern. [20:34.320 --> 20:41.200] So, you may also know that these are local computations things. [20:41.400 --> 20:41.480] Right? [20:41.940 --> 20:46.380] So, what if you decide, well, I want to run a huge computation. [20:46.700 --> 20:46.760] Right? [20:47.960 --> 20:54.480] So, that now drops, not on the 3N Web as a thing, but you create a different app. [20:54.780 --> 20:58.240] And then, you talk, that app talks to it. [20:58.400 --> 21:04.400] And then, all of your security and privacy concerns starts to be attaching to that app. [21:04.680 --> 21:07.500] So, for example, you're running a big LLM in your lab. [21:08.320 --> 21:09.400] Or that lab is for one. [21:11.380 --> 21:11.640] Yeah. [21:11.640 --> 21:16.260] Is this only for one-on-one communication? [21:16.660 --> 21:19.280] Or, like, could you have a group chat, say? [21:19.540 --> 21:21.860] That's for the group chat. [21:29.130 --> 21:33.850] But, basically, it's a matter of... [21:39.140 --> 21:40.700] Let's just do this. [21:41.000 --> 21:41.060] Right? [21:41.880 --> 21:49.710] So, I know that there's Nikolai at kwlog.org exists. [21:49.710 --> 21:54.670] Of course, I was showing this on my locate kwlog. [21:54.870 --> 21:58.690] This thing also checks that that kwlog guy exists. [21:59.370 --> 22:02.010] If we'll type something like... [22:04.630 --> 22:11.810] Nikolai, say, google.com, that doesn't like it. [22:12.710 --> 22:13.510] And... [22:13.510 --> 22:13.610] Yeah. [22:15.190 --> 22:17.390] So, there's Nikolai. [22:17.630 --> 22:25.090] And let's add another Nikolai at privacy.safe.me. [22:32.330 --> 22:33.010] See? [22:33.170 --> 22:34.630] That's why this check is available. [22:35.610 --> 22:39.670] And since we're in the progress, some of the... [22:40.050 --> 22:40.390] Yeah. [22:42.070 --> 22:42.750] Cool. [22:43.870 --> 22:45.430] So, we do this. [22:45.630 --> 22:46.270] We do that. [22:47.130 --> 22:49.030] Can we please do next? [22:52.150 --> 22:53.630] That's Nikolai's chat. [22:56.590 --> 22:57.170] Right? [22:58.290 --> 22:59.770] Can we please do my chat? [23:00.730 --> 23:01.310] Chat. [23:03.650 --> 23:05.510] Now, it created this chat. [23:05.750 --> 23:07.510] It sent an invitation to everybody. [23:07.770 --> 23:09.270] I should pull up the other device. [23:09.510 --> 23:17.830] So, the way the group chat works is that your device sends messages to all other ones. [23:18.570 --> 23:19.310] Okay? [23:19.790 --> 23:25.170] So, if you are of the mind of how do I do Discord, right? [23:30.050 --> 23:32.390] Add a Discord user interface. [23:33.030 --> 23:38.250] Don't confuse people of sticking all of the user flows into the same app. [23:38.910 --> 23:39.770] You know what I mean? [23:39.910 --> 23:40.030] You know what I mean? [23:40.030 --> 23:45.730] So, say for big organization, you want some different devices. [23:45.730 --> 23:46.730] And... [23:53.130 --> 23:53.890] There's... [23:57.150 --> 24:00.890] There's a little trick that I wanted to play. [24:01.770 --> 24:02.290] Yeah. [24:03.190 --> 24:03.850] Yeah. [24:03.970 --> 24:05.130] So, here's the logo. [24:05.970 --> 24:06.350] Select. [24:06.950 --> 24:07.710] Yes. [24:07.890 --> 24:09.990] And that logo looks better on this. [24:09.990 --> 24:17.870] So, you see, all of a sudden, I have one account, like this particular account. [24:18.110 --> 24:22.430] I can add the logos so that they are separate. [24:22.750 --> 24:30.210] And so, it helps me as a user to be focused that I'm talking within this particular scope with that person. [24:30.210 --> 24:31.510] So, I'm not getting confused. [24:32.110 --> 24:42.510] At the same time, if you are designing something for an organization, so the flow will be that the admin will do that. [24:42.670 --> 24:46.970] And users will be given, like, you know, logins or something. [24:46.970 --> 24:48.130] They log in. [24:48.330 --> 24:50.410] They got... [24:50.970 --> 24:52.990] They press on the company's logo. [24:53.130 --> 24:57.530] And they open up something which has an apps for their needs. [24:58.910 --> 25:03.410] Now, what's important to note is that... [25:06.620 --> 25:07.580] Come on. [25:14.510 --> 25:16.910] So, this brings up... [25:17.970 --> 25:19.410] I just... [25:19.730 --> 25:24.610] I think the light thing works on the presentation better. [25:25.450 --> 25:25.650] Yeah. [25:29.150 --> 25:29.870] So, [25:32.960 --> 25:33.680] right. [25:35.800 --> 25:36.920] So, that's the storage. [25:37.120 --> 25:40.480] That's kind of a start, like, you know, different formats. [25:42.480 --> 25:44.040] Nothing in here yet. [25:44.520 --> 25:51.520] Now, if we do this show system folders, this funny stuff shows up. [25:52.560 --> 25:55.160] These are app data. [25:55.580 --> 26:02.020] Like, you know, in Android, you have an app, and then that app has a place for my data. [26:02.560 --> 26:07.720] And it has a place for synchronized storage, for local storage. [26:07.720 --> 26:11.220] Depending on my app needs, some things temporary. [26:11.380 --> 26:12.260] I just save them. [26:13.200 --> 26:17.440] And all of that is saved as if it's on the server. [26:17.580 --> 26:21.600] So, it's just blobs labeled with whatever. [26:21.600 --> 26:24.600] So, once you unlock from this system... [26:25.360 --> 26:27.160] Well, there are some blobs. [26:27.900 --> 26:29.100] Nobody can read them. [26:32.920 --> 26:35.120] The app code... [26:35.120 --> 26:36.700] The app code... [26:38.660 --> 26:39.380] The... [26:39.380 --> 26:40.240] No. [26:41.300 --> 26:42.340] Can we do this? [26:42.580 --> 26:43.000] Yeah. [26:43.320 --> 26:45.440] So, there's this complete partial. [26:45.480 --> 26:51.060] It's because when you download the updates, we have to do some of that elements, right? [26:51.260 --> 26:59.080] And so, in here, all of these are apps that are currently on this app. [27:12.520 --> 27:16.320] So, think of it this way. [27:16.460 --> 27:17.820] Like, I am the user. [27:18.060 --> 27:20.300] I am in control of what's there. [27:20.300 --> 27:20.400] Yeah. [27:20.600 --> 27:22.520] I decide a new app. [27:22.820 --> 27:23.380] You know. [27:23.700 --> 27:25.480] So, it's my decision. [27:25.840 --> 27:26.940] What I can do. [27:27.700 --> 27:32.800] Now, also wanted to really show this thing. [27:34.620 --> 27:37.300] Really, a shout out to the... [27:41.120 --> 27:41.980] Hold on. [27:44.220 --> 27:45.040] Yeah. [27:45.920 --> 27:57.980] So, on the tablet, so user experience, basically, you know, there's an inbox shape for your conversations. [28:00.480 --> 28:01.640] Oh, come on. [28:02.700 --> 28:03.160] Okay. [28:03.180 --> 28:05.640] Guys, you are not praying enough. [28:07.000 --> 28:07.820] Exactly. [28:08.580 --> 28:10.460] You are not praying enough. [28:10.460 --> 28:14.200] So, same storage, same stuff. [28:15.230 --> 28:16.700] So, here's the contacts. [28:17.500 --> 28:21.000] So, here's like this guy was already talking to someone else. [28:21.880 --> 28:23.880] So, there's a hope 16. [28:24.280 --> 28:25.720] These are the keys. [28:26.180 --> 28:34.580] So, basically, the rotation keys, like, you know, when we exchange the messages, there should be that exchange, all of that. [28:34.840 --> 28:37.960] So, some of the show comes in here. [28:38.520 --> 28:44.020] It's also important to mention is that I put out the key. [28:44.720 --> 28:46.400] I may not put out the key. [28:46.580 --> 28:52.080] I gave you the key through the physical interface, and there is a startup which takes the physical interface. [28:52.080 --> 28:59.860] The important thing is that the key, which algorithm in there, is directed by me, not somebody else. [29:00.300 --> 29:00.560] Right? [29:01.160 --> 29:08.080] Now, the second thing is that you add to your own thing quantum proof. [29:09.480 --> 29:16.440] The DGB should provide us, you know, replacements for salt, post-quantum salt. [29:16.660 --> 29:19.760] So, you just do that key. [29:20.680 --> 29:28.040] Your implementation either, like, implementation of your peers either will work with that or you'll tell them, hey, Bob, update it, please. [29:28.040 --> 29:29.980] So, yeah. [29:30.900 --> 29:32.680] So, these are the keys. [29:33.660 --> 29:41.840] Now, shout out to the guys who are doing the Linux form. [29:42.900 --> 29:46.680] So, of course, like, we are a really small team, right? [29:47.140 --> 29:53.600] And the reality is that you cannot go to the big crowd and tell them, oh, you have messaging. [29:53.820 --> 29:59.140] And everybody will be like, well, where's... it's on the phone, right? [29:59.140 --> 30:06.420] So, of course, the easiest way to do stuff is on the Linux phone, right? [30:06.680 --> 30:16.780] And what you see in front of you is actually... it's a pine phone, that first generation pine phone. [30:17.400 --> 30:22.240] And it actually opens this thing and this kind of not yet optimized. [30:22.240 --> 30:25.300] So, yeah. [30:25.620 --> 30:31.740] And so, the guys... we are... oh, sweet. [30:34.930 --> 30:36.390] Oh, no, that's crazy. [30:36.670 --> 30:46.630] So, the... so, the guys from Capeco, right? [30:46.750 --> 30:48.830] You've had these little stickers. [30:49.110 --> 30:52.390] We will hopefully be working with them. [30:52.390 --> 30:56.470] And, you know, bringing this stuff together. [30:57.010 --> 30:58.270] They are actually very good. [30:58.510 --> 31:00.430] So, this phone... [31:00.430 --> 31:02.970] This is Fairphone 4. [31:03.370 --> 31:05.090] And the eSIM. [31:05.290 --> 31:08.990] And there's some kind of problem with the eSIM and Linux phone. [31:09.170 --> 31:10.350] And they nailed it down. [31:10.630 --> 31:12.830] So, Cape.co. [31:14.630 --> 31:15.270] Yeah. [31:15.570 --> 31:16.690] So, that's the shoutout. [31:17.750 --> 31:19.230] Now, how... for time? [31:19.610 --> 31:19.810] Questions? [31:20.130 --> 31:20.250] Yes. [31:20.250 --> 31:25.990] How does someone know that the key that's supposed to be for me is really from me? [31:26.150 --> 31:26.750] Perfect. [31:26.750 --> 31:31.690] Do we have to do key signing or actually physically go meet that person and do a key exchange? [31:32.050 --> 31:32.490] Perfect. [31:32.490 --> 31:40.870] So, the question is essentially about how do I solve the first contact problem? [31:41.210 --> 31:55.610] So, currently in this thing for the user, where we just have this, I put my key on my inbox server. [31:55.610 --> 32:02.950] But I put it certified with the mailer ID certificates. [32:03.350 --> 32:07.250] So, in that set of protocols, I showed you two. [32:09.510 --> 32:10.870] In fact... [32:17.630 --> 32:18.310] Yeah. [32:18.690 --> 32:21.090] So, as mail, that was text. [32:21.570 --> 32:23.670] 3N storage is storage. [32:23.910 --> 32:25.670] And mailer ID is actually identity. [32:26.290 --> 32:29.890] Identity protocol is really useful and needed in the network. [32:30.170 --> 32:34.490] Now, the origin of name mailer ID comes from browser ID. [32:34.490 --> 32:40.150] Modzilla did a great thing for non-tracking identity protocol. [32:40.510 --> 32:44.690] Now, it had a browser part which was hacked. [32:45.150 --> 32:46.630] Very nicely hacked. [32:47.150 --> 32:52.610] Unfortunately, Modzilla threw away with the bathwater the baby, right? [32:52.610 --> 32:55.630] But we kept the baby... [32:55.630 --> 33:02.850] So, essentially, the process of identity, how you do the identity. [33:03.150 --> 33:05.110] It's about the encryption and stuff. [33:06.230 --> 33:08.330] So, I... [33:08.330 --> 33:10.550] There's this identity provider. [33:11.770 --> 33:16.830] I asked my device, ask identity provider, give me a certificate. [33:16.830 --> 33:19.410] So, you certify that I am who I am. [33:19.950 --> 33:20.510] It goes... [33:20.510 --> 33:22.710] There is like a chain, basically, of certificates. [33:23.090 --> 33:27.150] And when I sign anything, I give you the certificates. [33:27.430 --> 33:37.470] And then you check the chain of the certificates all the way up to the root certificate, which you then go or somehow know that it can be checked. [33:37.470 --> 33:49.870] Because it's a check of just one root certificate, the service provider for identity doesn't learn who is using the identity and whose identity is used. [33:50.170 --> 33:57.430] So, unlike OpenID, there's like this metadata, you know, not giving out the metadata in the process. [33:57.430 --> 33:59.090] So, that's kind of the important part. [33:59.270 --> 34:05.730] So, in this simple setup, I sign up my key with mailer ID. [34:06.530 --> 34:12.890] When you are first time sending a message, your platform actually opens it up. [34:12.970 --> 34:15.190] And it's like, yeah, it says Michelin. [34:15.390 --> 34:17.090] Okay, here's the certificates. [34:17.630 --> 34:18.390] It checks all of them. [34:18.510 --> 34:24.010] And then it's like, yeah, it checks out with whoever should be providing identity for that domain. [34:24.010 --> 34:27.090] It goes on the Internet over there, checks it. [34:27.230 --> 34:29.310] And then it says, yeah, I kind of trust it. [34:30.170 --> 34:34.910] You may not like this kind of good enough approach. [34:35.570 --> 34:38.010] You can attach different one, right? [34:38.230 --> 34:40.570] That's the whole point of this modularity. [34:41.470 --> 34:43.110] The fact that... [34:43.110 --> 34:47.430] So, the first conduct problem doesn't have a solution. [34:47.510 --> 34:48.630] We don't have a solution, right? [34:49.410 --> 34:53.030] Somebody comes and says, like, I have a solution for first conduct problem. [34:53.030 --> 34:58.690] Like, they are basically saying that speed of light is, like, infinite... [34:59.270 --> 35:00.170] Similar, right? [35:00.270 --> 35:01.210] Similar stuff. [35:01.530 --> 35:06.670] So, we should be able just to roll out any solution. [35:06.690 --> 35:09.710] And so, what we present is one of them. [35:10.690 --> 35:13.030] Physical key exchange is the best, of course. [35:16.130 --> 35:16.790] So, yeah. [35:17.690 --> 35:25.270] Going off that question, though, what about in the situation where you've hijacked the DNS server to make a road to DNS? [35:26.570 --> 35:28.690] That's a very good question. [35:28.790 --> 35:32.530] So, let's imagine I'm already talking to you. [35:33.770 --> 35:39.570] And your DNS is hijacked, so my client is trying to connect to you. [35:39.570 --> 35:44.590] So, the hacker will see, well, somebody is leaving bytes for you. [35:45.210 --> 35:47.290] Well, have they lent anything more? [35:48.030 --> 35:48.550] Nothing. [35:49.050 --> 35:56.810] As long as there's no man in the middle for the keys, they lent nothing. [35:56.810 --> 35:56.930] Nothing. [35:58.050 --> 36:05.230] Now, the fact that, for example, Capuleti and Montague, they were different servers, right? [36:07.590 --> 36:15.550] Like, you need both ends flowing through one point in order to set up the proper man in the middle attack. [36:17.310 --> 36:20.390] Without the check, physical check. [36:21.630 --> 36:22.610] Okay. [36:25.030 --> 36:26.010] Okay. [36:26.550 --> 36:32.770] The second additional thing can be, like, DNS always TPS. [36:33.330 --> 36:39.750] We've done it on our previous proof of concept running on the Android. [36:40.590 --> 36:44.190] We just shoved Node.js code that we had in there. [36:44.430 --> 36:47.510] But there was, like, come and do the DNS. [36:47.810 --> 36:49.210] So, like, HTTP over DNS. [36:49.490 --> 36:50.990] So, that's kind of a thing. [36:51.330 --> 36:51.890] Yeah. [36:52.210 --> 36:56.290] But mostly, you rely on the fact that server doesn't have anything. [36:56.790 --> 37:00.430] In a way, it's what Tor guys are doing. [37:00.690 --> 37:08.310] In a way, it's like what most, you know, privacy mixers in NIM network also doing. [37:08.310 --> 37:12.450] So, very good questions. [37:15.870 --> 37:16.270] Yeah. [37:16.770 --> 37:22.190] If the server has no metadata, is there any defense against, like, denial of service? [37:22.490 --> 37:26.490] Like, let's say I want to shove, like, a good terabyte of written bytes to someone. [37:26.970 --> 37:28.810] Like, will they have to download that? [37:29.050 --> 37:29.450] Yeah. [37:29.770 --> 37:32.130] So, A, that's a very good question. [37:32.130 --> 37:35.150] So, on the last... [37:35.150 --> 37:39.190] So, this is already going a little bit into detail. [37:39.550 --> 37:39.650] So... [37:39.650 --> 37:40.450] Can I repeat the question? [37:40.870 --> 37:41.370] Oh, yeah. [37:41.530 --> 37:56.050] The question is, like, if a server doesn't have enough metadata, who the message coming from, will, then maybe those, like, somebody can just leave too much stuff and create kind of denial of service attack. [37:58.810 --> 38:08.350] And this is kind of an excuse to always not try to implement... basically to always ask for your identity of people. [38:08.930 --> 38:10.670] But we can do tricks. [38:11.390 --> 38:16.230] And in the messaging protocol, we're having one trick. [38:16.910 --> 38:19.350] First of all, trick is such that... [38:21.870 --> 38:23.370] Server says, I have a message. [38:23.510 --> 38:23.770] Wonderful. [38:23.990 --> 38:33.170] I need 40 bytes to decrypt, find proper key, and just know that it exists, or whether I don't know the keys, so it's kind of spam. [38:33.790 --> 38:35.150] 40 bytes for download. [38:35.550 --> 38:36.930] That's a step number one. [38:36.930 --> 38:39.510] I mean, stage number one for this. [38:40.090 --> 38:44.170] Stage number two, when I'm... [38:44.790 --> 38:54.250] The blobs that are coming in there, they also have a little field where it's a kind of identifier. [38:54.510 --> 38:59.030] I give to my peers little identifiers, which they can shove. [38:59.030 --> 39:02.890] So basically, some kind of numbers from some set. [39:03.050 --> 39:04.510] So they can mix. [39:04.790 --> 39:06.590] But they know the numbers. [39:06.790 --> 39:08.910] Attackers doesn't know the numbers. [39:10.790 --> 39:21.110] So if you don't know the numbers, the server... and the server is told, like, guys with these labels, they're allowed to leave the gigabyte message. [39:21.110 --> 39:28.270] Everybody else, first introductory message, 10KB should be enough for that rest of the world. [39:28.450 --> 39:28.550] Right? [39:28.550 --> 39:35.430] So that kind of help in this denial of service attack. [39:36.790 --> 39:38.970] The other thing is like... [39:38.970 --> 39:41.970] So I left my key on my inbox. [39:42.150 --> 39:42.290] Right? [39:42.290 --> 39:50.230] And it means, like, everybody can encrypt stuff for my keys and the introductory message and have tons of them. [39:50.990 --> 39:54.090] Well, I have an option not to leave the key. [39:54.570 --> 39:56.450] I'm actually an interesting person. [39:56.810 --> 40:03.670] I was trying to get into many of conferences like this about privacy, security. [40:03.670 --> 40:07.810] And they ask for Twitter handle. [40:13.650 --> 40:17.630] I'm from KW Live, from Kitchener Waterloo. [40:18.050 --> 40:25.330] So in Kitchener Waterloo, Ian Goldberg is the guy who, you know, XMPP, all of that stuff. [40:25.330 --> 40:32.610] So when we come together and he's like, again, like, here's my flip phone. [40:32.970 --> 40:36.010] I'm like, I'm showing him, here's my flip phone. [40:36.150 --> 40:39.630] But it's not my phone number. [40:41.310 --> 40:42.850] So we're playing these games. [40:43.190 --> 40:43.790] Yeah. [40:49.020 --> 40:50.100] Any other questions? [40:50.420 --> 40:51.280] Sorry, I'm rumbling. [40:51.620 --> 40:52.840] And it's 14 minutes already. [40:52.840 --> 40:56.300] Yeah, I just, I came in late, but I'm still showing your website. [40:56.680 --> 40:58.500] Do you guys charge for the service? [41:00.100 --> 41:08.580] So, right now, if you just open the thing, I have no way of honestly knowing that you're there. [41:09.440 --> 41:20.840] When you go and buy the thing and say, I'm buying the service, somewhere there, it will say that by October, you're going to have, like, really solid stuff. [41:21.140 --> 41:22.060] October this year? [41:22.060 --> 41:22.760] That's correct. [41:22.980 --> 41:23.680] That's correct. [41:23.860 --> 41:24.320] That's correct. [41:24.320 --> 41:36.760] So, the, the, can I please put this, put up the slides, put up the slides. [41:40.440 --> 41:43.920] So, there are tons of layers, tons of layers. [41:43.920 --> 41:48.260] And you would say, like, well, the little team, how can they do it by October? [41:49.880 --> 41:52.800] We follow the good engineering practice. [41:53.040 --> 42:03.840] So, it means that at this layer between the server and the thing, there's the set of tests. [42:04.500 --> 42:10.760] If you want to call yourself a 3N web protocol server, you have to run those automated tests. [42:11.040 --> 42:14.080] In, in, in the source code, they are included, right? [42:14.320 --> 42:20.800] So, we also have tests for all of the capabilities that the platform provides to the application. [42:20.800 --> 42:24.000] And like 300 something. [42:24.940 --> 42:28.880] So, that kind of assurance that, yes, by October. [42:29.420 --> 42:29.540] Yep. [42:30.540 --> 42:38.060] In, in fact, it's, so some of the things are, I have tests and I'm sure that it has to be... [42:38.060 --> 42:43.380] And I'm sure you guys take crypto payments or Monero and stuff like that. [42:43.580 --> 42:45.640] Because, I mean, if I'm going to give you my credit card... [42:45.640 --> 42:47.200] Sean says the... [42:48.140 --> 42:51.980] Yeah, you can go through the, the shopping cart. [42:52.200 --> 42:54.100] You can do a bunch of different cryptos. [42:54.260 --> 42:56.800] It will just give you a QR code and you just manually do it. [42:57.240 --> 43:01.900] Obviously, you have to reach out to us in some way, though, so that we would know. [43:02.120 --> 43:02.300] Yeah. [43:04.420 --> 43:06.560] And the most important is that... [43:06.560 --> 43:07.260] Yeah. [43:07.700 --> 43:08.320] Yeah. [43:08.540 --> 43:16.840] And for those times when you just want to run your own server, it also like available either right now or... [43:16.840 --> 43:20.900] So, what I suggest you to do is help our team. [43:23.120 --> 43:27.620] Get the QR code if you need a phone number from a cave.co. [43:28.420 --> 43:29.540] That's number one. [43:29.940 --> 43:33.620] Go to our, uh, IvyCyber or this privacy safe. [43:34.120 --> 43:35.720] Yeah, we probably should go. [43:35.720 --> 43:37.500] So, in the wrap-up. [43:38.720 --> 43:44.260] And if you want to just sign up with us at the conference, you know, I'll be here. [43:44.660 --> 43:45.500] You can just... [43:45.500 --> 43:47.880] I have plenty of crypto wallets working here. [43:48.780 --> 43:49.320] Yes. [43:50.580 --> 43:51.420] No. [43:53.940 --> 43:55.200] 43 minutes. [43:57.360 --> 43:59.040] Now, the... [43:59.040 --> 44:01.800] So, do you have any other questions? [44:03.360 --> 44:05.320] Have I answered? [44:05.800 --> 44:06.040] Yeah. [44:06.040 --> 44:06.100] Yeah. [44:06.480 --> 44:12.040] So, maybe, uh, since I have two more minutes, I want to give you another... [44:13.920 --> 44:15.680] kind of... [44:17.200 --> 44:18.560] kind of... [44:18.560 --> 44:18.920] kind of... [44:18.920 --> 44:19.980] kind of... [44:19.980 --> 44:21.560] enticing thought. [44:22.200 --> 44:22.380] Yeah. [44:22.480 --> 44:23.180] Enticing thought. [44:26.880 --> 44:32.920] So, these apps, these apps, right now, they're 3NWeb apps. [44:34.680 --> 44:43.020] The 3NWeb, yes, it's that 3NWeb, I think. [44:45.680 --> 44:46.940] Did that happen? [44:47.100 --> 44:47.840] Yes, it did. [44:48.220 --> 44:48.720] Yes. [44:49.000 --> 44:49.940] Oh, come on. [44:51.600 --> 44:54.260] Oh, sorry, it's a different screen. [44:54.680 --> 44:54.760] Yeah. [44:55.580 --> 45:06.280] So, the platform actually runs your application components in the different runtimes. [45:06.520 --> 45:13.840] At this point in time, we have a Web GUI runtime into which this object is injected. [45:14.400 --> 45:18.140] This is a capabilities model, right? [45:18.380 --> 45:26.060] At this time, we're also have a headless JavaScript runtime, Dino, same kind of stuff. [45:26.380 --> 45:34.960] We also plan to have Wozzy runtime, because out of that runtime, it's difficult to get out. [45:35.220 --> 45:45.340] So, if you have... your code got broken, something hacky, there's an isolation element that goes into this thing. [45:45.580 --> 45:49.080] Now, if you ever... [45:49.080 --> 45:52.880] looked at next cloud applications, right? [45:53.220 --> 46:00.820] You know that the next cloud has some kind of object like that, that will do other services that are needed. [46:01.240 --> 46:06.720] And some of that services sooner or later will need, say, storage. [46:08.360 --> 46:11.380] Or some of them will be talking to mail. [46:12.340 --> 46:21.700] And in this way, you actually, right now, you can think, and you can just put your next cloud to here. [46:23.800 --> 46:25.340] Just a thought. [46:29.450 --> 46:30.630] Okay. [46:36.910 --> 46:39.270] Come on. [46:43.730 --> 46:45.410] Thank you very much. [46:45.410 --> 46:45.490] Thank you very much. [46:45.490 --> 46:46.470] And this is the second one.