[02:47.500 --> 02:48.060] Hi. [02:48.460 --> 02:49.200] Hello, everyone. [02:49.520 --> 02:50.440] How are you doing? [02:51.300 --> 02:52.980] Are you enjoying HOPE so far? [02:53.300 --> 02:58.240] We are approaching the end, unfortunately, but it's been fun, no? [02:59.380 --> 03:00.140] All right. [03:00.320 --> 03:03.660] So, who here creates their own passwords? [03:05.440 --> 03:06.000] No? [03:06.760 --> 03:07.680] Almost everybody. [03:07.920 --> 03:09.420] Who uses a password manager? [03:09.560 --> 03:09.980] Yes. [03:10.620 --> 03:11.340] Oh, okay. [03:11.400 --> 03:12.080] That's also good. [03:12.080 --> 03:21.880] So, we're going to start our next talk, which is We'll Pound You with Your Wattpad Profile by Roman Hoiknew. [03:22.200 --> 03:24.900] So, please welcome him and have fun. [03:36.390 --> 03:36.850] Test. [03:39.290 --> 03:45.430] If you know the enemy and know yourself, you need not fear the result of a hundred battles. [03:46.750 --> 03:49.770] That's a quote from Sun Tzu's The Art of War. [03:49.770 --> 03:52.970] Though, of course, he probably originally wrote it in classical Chinese. [03:53.950 --> 03:58.970] This is an attitude many of the cybersecurity professionals in the audience may be familiar with. [03:59.530 --> 04:05.710] Before learning to blue team to defend your army or company, you learn to red team. [04:06.130 --> 04:12.390] You practice the techniques black hat hackers use for crime in order to better defend against those hackers. [04:13.770 --> 04:20.510] I would argue, however, that even the average Internet user could benefit from learning the ways of their adversaries. [04:21.110 --> 04:26.830] You see, whether you like it or not, you're already fighting a hundred battles, and all at once. [04:26.830 --> 04:28.710] And the result of those battles? [04:29.390 --> 04:35.270] Some guy on a hacking forum could drop 12 gigs of leaked user credentials from that website you signed up for. [04:35.510 --> 04:36.430] You know that one. [04:36.590 --> 04:38.210] Used it once years ago. [04:38.730 --> 04:40.430] And completely forgot about it. [04:40.930 --> 04:46.230] And hidden in the leak is your old password and username, finally revealed for the public to see. [04:47.710 --> 05:01.190] However, if you know your enemy, if you know how and why hackers try to get their grimy hands on credential dumps from insecure websites, and what they try to do with them, you need not fear this result. [05:02.650 --> 05:03.170] Hi. [05:03.410 --> 05:04.990] My name is Roman Hoikson-Neil. [05:05.170 --> 05:08.790] I'm an undergraduate computer science student at the University of Texas at Dallas. [05:09.710 --> 05:14.210] An officer for my school's Open Source Software Club and our Cybersecurity Group. [05:14.550 --> 05:23.670] And the director of ACM Research, which is a project-based initiative to give undergraduate students computer science research experience. [05:25.270 --> 05:36.790] Last semester, I directed one of the projects under the program where we used machine learning to guess people's passwords based on the information in their Wattpad profile. [05:36.790 --> 05:44.810] And in my talk, I'd like to tell you about the project and, more generally, give you a behind-the-scenes look into password cracking. [05:46.850 --> 05:54.050] You might already know that it's a good idea to use long, complex passwords with a mix of symbols and numbers that are different for every account. [05:55.250 --> 05:57.390] But have you ever stopped to think about why? [05:58.290 --> 06:02.430] I've found that most resources don't go into detail about what threats you're up against. [06:02.430 --> 06:06.630] And as a result, they don't give you an insight into what password security really means. [06:07.790 --> 06:18.550] By the end of my presentation, you all have visited the mind of a cybercriminal and gleaned a deeper understanding into why you should think about the passwords you choose in the first place, how hackers get to them, and what you can do to stop them. [06:21.770 --> 06:22.770] All right, team. [06:23.450 --> 06:24.830] Welcome back to another meeting. [06:25.230 --> 06:27.610] It's really great to see all of your evil faces. [06:28.030 --> 06:32.770] As you know, H Society is looking for more ways to expand our illegal business. [06:33.070 --> 06:33.650] That's right. [06:33.770 --> 06:38.110] We stopped the protests and now we're into black hat crime. [06:39.790 --> 06:43.370] Our cryptocurrency rug pull scams are doing well for us so far. [06:44.650 --> 06:48.550] But as the recent crypto crashes show, people are catching on fast. [06:48.750 --> 06:52.430] And I'm not sure how long this revenue stream is going to keep up. [06:53.150 --> 06:56.750] That's why I like to branch out into black hat hacking. [06:57.610 --> 06:59.090] So hear me out, team. [07:00.030 --> 07:07.690] When someone signs up for an account on a website, the website somehow needs to store their password in a database in order to authenticate them the next time they sign in. [07:08.510 --> 07:19.090] I did a bit of research, and I learned that if the website doesn't store it safely, we might be able to swoop in and access the database to see the passwords of everyone who's made an account on the site. [07:20.210 --> 07:27.910] For example, just last year, an attacker gained access to a system used by GoDaddy to provision their managed WordPress pages. [07:28.650 --> 07:35.570] And in short, this allowed them to see, in plain text, the credentials of 1.2 million users. [07:38.030 --> 07:39.690] Now, I know what you're thinking. [07:40.370 --> 07:44.210] How exactly are we going to make money using a bunch of suckers' account credentials? [07:45.130 --> 07:53.130] Well, because so many of them tend to reuse the same password across their online accounts, 66% according to a recent survey. [07:53.870 --> 08:00.530] Once we have our hands on one of their passwords, we can try our luck by using it to sign into other services. [08:02.290 --> 08:04.430] Apparently, this is called credential stuffing. [08:04.990 --> 08:11.270] I guess the idea is we take known credentials from a breach of one site and stuff them into other sites. [08:12.910 --> 08:19.130] For example, say Julia used the password kittensandguns123 for her WordPress server. [08:19.130 --> 08:24.930] So maybe we can log into our online bank account with the same credentials and drain it. [08:27.930 --> 08:33.130] But the problem is that this only works a tenth of a percent of the time on average. [08:33.130 --> 08:45.950] But with automated scripts that try the leaked username-password combinations across many different sites, we can turn millions of guesses into thousands of results, which is pretty good, right? [08:48.150 --> 08:56.170] But right now, we aren't exactly a skilled enough team to hack into account databases by ourselves. [08:56.170 --> 09:01.450] So instead, plenty of more experienced hackers have already done the work for us. [09:02.330 --> 09:08.050] They gather the data into a convenient package, which we can buy online with that cryptocurrency we've been pulling. [09:08.410 --> 09:09.630] And yeah, that's right. [09:09.770 --> 09:14.590] If you can believe it, there was a time where mainstream crypto users weren't just day traders. [09:14.890 --> 09:19.790] They actually used it for useful things, like buying drugs and stolen credentials online. [09:21.850 --> 09:25.110] Even hackers have to specialize to survive in this economy. [09:27.670 --> 09:29.350] So here's the plan, right? [09:29.590 --> 09:31.290] We buy leaked user credentials. [09:31.850 --> 09:36.610] We use them to commit fraud and identity theft and make off with some cash. [09:37.230 --> 09:44.330] But this is all under the assumption that we can go straight from acquiring a credential dump to exploiting it. [09:44.570 --> 09:47.670] But the truth is, passwords play hard to get. [09:50.490 --> 09:54.790] Unfortunately, many organizations nowadays hash the passwords in their database. [09:55.770 --> 09:56.510] Annoying, right? [09:57.950 --> 10:02.470] And this allows them to authenticate people without even having to know what their passwords are. [10:02.630 --> 10:04.230] So how are they able to do this? [10:04.610 --> 10:12.790] Well, a cryptographic hash function is an algorithm that takes some data as input, like a password, and maps it to a hash value as output. [10:12.790 --> 10:16.790] The defining feature is that outputs should be effectively unique. [10:17.790 --> 10:20.230] No two inputs should map to the same output. [10:21.270 --> 10:26.890] This means, for example, if you know the hashes of two files are the same, you can... [10:27.950 --> 10:31.870] You know, by definition, that the files are the same, also the same. [10:31.990 --> 10:32.530] They're duplicates. [10:34.730 --> 10:37.630] However, in practice... [10:39.330 --> 10:42.530] In practice, you... [10:43.450 --> 10:48.050] There are only finite possible hash values if they're a fixed length. [10:48.330 --> 10:55.390] But there's infinitely many possible strings or files of arbitrary length. [10:55.390 --> 11:02.090] And so, via a theorem called the pigeonhole principle, you... [11:02.090 --> 11:08.890] By definition, you can't, like, compress files into, you know, a finite number of hashes. [11:09.070 --> 11:11.830] And so, it's guaranteed that there's at least... [11:11.830 --> 11:14.530] Well, there's infinitely many files that have the same hash. [11:15.410 --> 11:22.610] But in real implementations of good hashing algorithms, this is so absurdly rare that it's effectively impossible. [11:23.330 --> 11:34.470] For example, the SHA-256 hash function, you'd have to calculate two to the 128 different hashes to have a 50% chance of encountering at least one collision. [11:35.570 --> 11:37.370] But the global network... [11:37.370 --> 11:45.610] And the global network of Bitcoin miners currently performs 212 quintillion SHA-256 operations per second. [11:45.830 --> 11:49.390] So, how long do you think it's going to take for us to find a collision? [11:49.850 --> 11:50.090] Right? [11:50.190 --> 11:50.910] Anyone want to guess? [11:53.690 --> 11:54.210] Yeah. [11:54.950 --> 11:56.350] It's hard to guess, right? [11:56.650 --> 12:01.230] But at that rate, it would take them more than 50 billion years to reach this number. [12:01.970 --> 12:04.730] And that's just any hash collision. [12:04.730 --> 12:19.890] The reason why it's 2 to the 128 instead of 2 to the 255, which is the half of the number of combinations of hashes, is because of something called the birthday paradox. [12:20.970 --> 12:23.410] Or in this case, it's a birthday attack. [12:23.990 --> 12:35.330] And that just means that if you're not finding a specific hash, you're just finding any two hashes that are the same from different files. [12:35.870 --> 12:37.910] You only need 2 to the half of the number. [12:38.130 --> 12:51.690] So, if you had a specific file or a specific password and you tried to find a hash collision, it would take 2 to the 255 combinations, which is so absurdly, like, bigger than that even. [12:55.540 --> 13:03.260] So, that inputs uniquely mapped to hash values means that websites don't have to store users' passwords. [13:03.480 --> 13:06.760] They just need to store the hashes of passwords. [13:06.760 --> 13:16.320] So, when someone logs in, they run the entered password through the hash function and compare the result to the hash value they have on file instead of the password itself. [13:16.600 --> 13:20.040] And if it matches, then you know they entered the right password. [13:21.880 --> 13:24.200] So, that's the first feature, right? [13:24.900 --> 13:30.680] The second defining feature is what differentiates cryptographic hashing from just hashing. [13:30.680 --> 13:36.800] And that is that cryptographic hashing is like a one-way function. [13:37.680 --> 13:43.660] So, there shouldn't be any way to glean what the input is for a given hash value. [13:43.900 --> 13:46.500] There shouldn't be any way to, like, reverse the algorithm. [13:48.600 --> 13:56.680] Unlike cryptographic hash functions, you can sort of reverse the output of an encryption algorithm only if you know the key, though. [13:56.680 --> 14:00.740] So, cryptographic hash functions don't have a key in this regard. [14:03.020 --> 14:12.900] So, unfortunately for us, this means most databases we might get a hold of are databases with password hashes, not the passwords themselves. [14:13.220 --> 14:20.940] And so, we can't easily reverse the hashes to get the passwords to, you know, use to make the money. [14:22.600 --> 14:24.560] But there are ways to get past this. [14:24.560 --> 14:38.100] If we run thousands of guesses through the same hashing algorithm that the vulnerable site used, we can compare the hashes of the guesses to the hashes in the data leak. [14:38.260 --> 14:39.920] And this is called password cracking. [14:41.360 --> 14:44.380] We're not directly reversing the one-way function. [14:44.540 --> 14:46.380] We're just passing a bunch of guesses through. [14:47.700 --> 14:55.720] And normally if you tried to do this live on, like, a live website, it wouldn't work because they'd lock you out after so many times. [14:56.000 --> 15:02.960] But if you already have the database downloaded, you can just perform trillions and trillions of operations on your own computer. [15:04.680 --> 15:07.980] The most naive way to make these guesses is with brute force. [15:08.940 --> 15:16.640] You compare the hash of aaa, then aaa, and then aaa, then aac, and then so on. [15:17.220 --> 15:18.960] But this only works for shorter passwords. [15:19.380 --> 15:27.200] I think once you get past, like, ten characters, it becomes computationally infeasible for any average cracker. [15:27.200 --> 15:28.780] Or even eight characters. [15:29.440 --> 15:31.940] It changes per year with Moore's Law. [15:35.600 --> 15:42.080] And programs like Hashcat can do this with millions and millions and millions, you know, every second. [15:45.560 --> 15:48.740] But to go further, right, because most passwords are not this short. [15:48.940 --> 15:54.420] And some websites, a lot of websites, even restrict you from having passwords that are even this short. [15:54.420 --> 15:55.960] We have to be a little clever. [15:57.220 --> 15:59.760] So, that's where dictionary attacks come in. [16:00.860 --> 16:06.940] Dictionary attacks make use of the fact that humans don't choose passwords composed of equally random letters. [16:07.140 --> 16:08.220] Well, most of us, anyway. [16:09.300 --> 16:12.080] Humans are predictable, especially at a large scale. [16:12.320 --> 16:19.720] They choose common, memorable words and phrases, like their favorite sports team, or their lover's name, or their pet's name. [16:21.080 --> 16:29.860] And as you can see, by far the most common passwords are, you know, password123, password123456789. [16:30.700 --> 16:35.820] Now, a tiny minority of people actually do use these passwords, even if they're the most common. [16:36.480 --> 16:41.500] Something like less than 1% of people actually do use 123456 as their password. [16:42.620 --> 16:46.080] But again, with millions of guesses, we can get thousands of results. [16:47.280 --> 17:00.200] And in our case, after we've gone through all the brute force combinations of, like, eight characters, we can start going through the list of the most common passwords overall. [17:03.100 --> 17:04.820] So, yeah, what's next? [17:04.840 --> 17:13.040] After we've, you know, used the Rock U dataset, which is a dataset with just millions and millions of the most common passwords. [17:13.820 --> 17:16.920] Once we've ran through that, I mean, it takes a few seconds. [17:18.120 --> 17:21.780] We can go even further by combining common words. [17:21.960 --> 17:26.200] So we create new guesses from scratch, ones that aren't included in previous datasets. [17:26.800 --> 17:39.940] So, it's at the point now where you can basically just take the entire English dictionary, for example, and create every combination of two or three words with numbers. [17:40.760 --> 17:43.200] And you run through that, and maybe that takes a few minutes. [17:43.660 --> 17:49.300] And so, then you go through and you change all those to lead speak. [17:50.500 --> 17:54.080] That's a technique that people use when they think they're being clever. [17:54.080 --> 17:59.060] And when they're making a password is they replace an E with a three, or an S with a dollar sign. [18:00.840 --> 18:02.220] You go through and do all that. [18:02.300 --> 18:05.840] Okay, that maybe takes, like, another two seconds, or five minutes, or whatever. [18:08.740 --> 18:15.520] And it even works for tricks that seem like they should be resistant against this kind of attack. [18:16.400 --> 18:20.940] One technique that I've heard is... and let me know if you've ever heard of this, too. [18:21.140 --> 18:28.480] Is you think of a really common phrase, like... or a phrase that's memorable. [18:28.980 --> 18:33.660] Like, oh, I'm standing in front of the HOPE 2022 conference. [18:33.920 --> 18:38.420] And then you take the first letter of each word in that phrase, and maybe you change some of them to lead speak. [18:39.440 --> 18:43.580] And the result is something that's easy to remember, but it looks random, right? [18:44.860 --> 18:49.520] Because it looks like a jumbled mess of letters, because you don't know what the underlying phrase is. [18:50.240 --> 18:55.820] And so people, you know, they wipe the sweat off their forehead, and they say, great, I'm resistant against these kind of attacks. [18:56.120 --> 18:59.620] But they're really not, because nowadays, what password crackers are doing is... [18:59.620 --> 19:11.720] they take the list of, like, the 240 million most common phrases in the English language, and then they take the first letter of each word in the sentence, and they do exactly that. [19:12.680 --> 19:17.080] And then they crack a few more hundred passwords or so. [19:19.500 --> 19:24.080] So, choosing a secure password is harder than it seems at first. [19:24.240 --> 19:26.940] And most people don't really know how to do it. [19:30.020 --> 19:30.740] Let's see. [19:32.540 --> 19:41.300] Now, at this point, we've had a lot of success breaking into people's accounts by cracking their hashes and stuffing credentials from previous leaks. [19:42.200 --> 19:46.280] But all hacking groups have to diversify, or else they risk falling behind. [19:46.280 --> 19:50.120] So, are there any other ways we can exploit people's weak password choices? [19:52.100 --> 19:53.180] Well, there is one way. [19:53.920 --> 20:01.640] We can go after those particularly important accounts, like those from celebrities or influencers, by trying to guess their password in particular. [20:02.020 --> 20:11.880] But if we can't find their password in a previous leak, or they use a different password than the one that was leaked for a different account, it means we'll have to make a blind guess. [20:13.920 --> 20:15.240] I want to see some hands. [20:15.680 --> 20:15.780] I want to see some hands. [20:15.780 --> 20:19.680] Can anyone guess what Donald Trump's Twitter password was in October of 2020? [20:25.620 --> 20:26.440] Password, yeah? [20:27.220 --> 20:28.020] What about you? [20:29.840 --> 20:30.760] Oh, yeah? [20:31.580 --> 20:32.660] Anyone that doesn't know it? [20:35.380 --> 20:35.880] Right. [20:38.080 --> 20:39.280] That one's pretty close. [20:45.630 --> 20:46.310] Right? [20:46.570 --> 20:46.670] Yeah. [20:48.270 --> 20:59.010] So, the Dutch hacker Victor Gevers claimed to have successfully logged into Trump's Twitter account by guessing the password, MAGA2020 exclamation mark. [21:01.030 --> 21:04.470] I believe the Dutch authorities tried to arrest him for this. [21:04.470 --> 21:10.150] But because he used responsible disclosure, didn't actually get into any trouble. [21:11.090 --> 21:16.610] And it illustrates the fact that people use familiar information to make more memorable passwords. [21:17.210 --> 21:27.730] So, if you know more information about someone, like this person's political slogan, it might be easier to try to guess their password. [21:28.310 --> 21:36.030] Now, most people don't have a presidential slogan, but they do have the names of their pets, or their loved ones, or perhaps their favorite baseball team. [21:36.450 --> 21:43.310] And so, we can use open source intelligence gathering to find out this information. [21:43.870 --> 21:57.490] You can imagine going around to some of the most popular celebrities, Lady Gaga, Barack Obama, I don't know, and doing the same process, and coming up with a massive list. [21:58.530 --> 22:05.970] You might only get around 100 tries per account, and you might have to do it... [22:05.970 --> 22:08.250] And you'll have to do all this manually, right? [22:08.270 --> 22:11.090] You'll have to put your brain to work trying to guess their password. [22:11.090 --> 22:13.230] So, this doesn't really scale well. [22:13.670 --> 22:16.810] And again, we live in a competitive economy. [22:16.950 --> 22:18.710] You've got to specialize, and you've got to scale. [22:20.490 --> 22:27.790] So, in this case, I got together some of my smartest researchers, and we tried to automate this process. [22:31.530 --> 22:32.570] What if... [22:34.610 --> 22:36.930] So, has anyone heard of GPT-3? [22:38.770 --> 22:40.190] Cool, yeah, glad to hear it. [22:41.470 --> 22:54.310] Basically, it's a massive text transformer, which is just a neural network model that tries to guess the next word in a series of words, or in the next token, technically. [22:54.810 --> 22:58.730] So, it's just a really fancy text prediction model, like the one on your mobile keyboard. [22:59.710 --> 23:00.910] But it's like massive. [23:01.470 --> 23:02.730] It has billions of parameters. [23:03.010 --> 23:06.670] It took, I believe, like, millions of dollars to train. [23:07.250 --> 23:14.250] The training day they used was basically, like, the text of every website that was linked to on Reddit ever. [23:15.790 --> 23:16.350] Ridiculous. [23:16.350 --> 23:21.390] And there are bigger and more advanced models nowadays. [23:22.130 --> 23:23.950] This came out a couple years ago. [23:24.510 --> 23:26.890] But it is by far the most famous one. [23:28.050 --> 23:34.390] And it's closed-source, which kind of goes against OpenAI, which is the company that made it. [23:35.650 --> 23:38.750] But it's accessible via a public API. [23:39.530 --> 23:44.910] And one of the API parameters is a refining API. [23:45.570 --> 23:51.250] They've already trained it on millions and millions of, well, okay, maybe trillions of tokens. [23:53.130 --> 23:57.450] So, you can sort of tap into this intelligence that it already has. [23:57.590 --> 24:04.090] But if you want to use it for a more specific use case, you can send it more examples of what you want it to generate. [24:05.790 --> 24:08.630] In our case, enter Wattpad. [24:08.870 --> 24:13.690] So, this is a website where people could write stories. [24:16.210 --> 24:21.690] And I believe it was 2018, they had a massive data breach. [24:21.930 --> 24:25.230] It was 500 million users' credentials were leaked. [24:26.990 --> 24:46.510] And the special attribute of this leak in particular is that it not only contained people's usernames and their passwords, but it also contained their email addresses, their Twitter username, their status, their bio, I believe their phone number, a lot of stuff. [24:47.390 --> 24:50.010] It did not include their stories, unfortunately. [24:50.950 --> 24:53.750] Well, maybe fortunately for me, because I had to go through the data set. [24:54.450 --> 24:56.670] But it... [24:56.670 --> 24:57.410] But, yeah. [24:59.750 --> 25:09.030] These passwords were also hashed with the bcrypt algorithm, which is not very trivial to go through... to crack. [25:09.530 --> 25:14.630] But fortunately, we obtained the plain text passwords through this website called HashMob. [25:17.230 --> 25:24.750] So, we had our data set, which is millions of people's passwords, as well as their personal information. [25:25.430 --> 25:34.830] And what we did is we fed all this information to GPT-3 via the API to refine our instance of their model. [25:35.670 --> 25:45.510] So, you can see here, you have to craft the prompt, because it doesn't, by nature, have an input-output kind of structure. [25:45.690 --> 25:51.090] You have to turn it into a string of text that will protect the next word. [25:51.090 --> 25:56.890] In this case, you see someone's... this is Jane Doe. [25:58.890 --> 26:02.510] And they... let's see... I forgot by now. [26:02.750 --> 26:04.790] They work at Goldman Sachs, some other things. [26:06.230 --> 26:13.090] And we refined our model by showing it a ton of these examples to... [26:13.590 --> 26:16.810] to... and the idea was... and 10,000, to be precise. [26:17.110 --> 26:26.770] And the idea was, if we showed it enough examples, it might start to learn, to pick out specifically how to guess someone's password based on this info of theirs. [26:28.150 --> 26:43.050] The idea was, okay, maybe this is such a big model, it might pick up on nuances like, if they mention their pet's name, it's much more likely that that word is going to be in their password as opposed to some other random word, like the word the, that comes up in the description. [26:44.930 --> 26:45.870] And the results? [26:47.790 --> 27:04.110] It... even though we only trained with 10,000 examples, which is a tiny fraction of the data that was available to us, and we used the smallest possible instance of the model that we could, the least advanced model, because we are not a professional team. [27:04.230 --> 27:05.230] We're just a bunch of undergraduates. [27:05.230 --> 27:06.550] We had like 20 bucks in funding. [27:08.330 --> 27:13.490] We produced password guesses that were three times as accurate as a brute force method. [27:14.430 --> 27:22.710] And this is actually, in fact, with only, I believe, three guesses allowed, but the top hundred... [27:22.710 --> 27:24.650] or no, ten passwords allowed. [27:25.910 --> 27:36.050] But the brute force, like choosing from the list of most common passwords, like someone... you over there, you mentioned, you guessed Trump's password was password. [27:36.510 --> 27:40.490] That's an example of going through the most common passwords to try to guess someone's account. [27:41.890 --> 27:47.170] But MAGA 2020 is an example of a targeted password guess. [27:49.510 --> 27:50.330] Let's see. [27:50.470 --> 27:52.780] We also did some similarity analysis. [27:52.780 --> 28:11.200] So, the orange hump is the graph of the similarity between a guess that we made using the most common passwords data set, and the actual person's password. [28:11.520 --> 28:17.060] And that hump peaks around 0.5 and has a small tail end. [28:17.980 --> 28:20.280] And the blue hump is our model. [28:20.640 --> 28:27.600] Now, if you're particularly astute, you might notice that our model peaks a bit before the orange one. [28:28.120 --> 28:33.700] And this should be interpreted as our model is worse on average. [28:33.700 --> 28:39.220] It has a less similarity to the real password. [28:40.640 --> 28:47.400] But that's because the data points in this graph pick from, out of the guesses I could make, what was the most similar. [28:48.420 --> 28:53.600] And for the orange, the top 100 passwords, we could choose from 100 and pick the most similar. [28:53.900 --> 28:58.240] But for the blue, our model, you could choose from... [28:58.240 --> 28:59.460] I believe it was 10. [29:00.880 --> 29:10.400] But if you do notice, on the very tail end, all the way on the right, the blue one has a larger spike than the orange one. [29:12.000 --> 29:14.520] So...and that's the side that really matters, right? [29:14.640 --> 29:17.160] It doesn't actually matter how similar our guess is. [29:20.160 --> 29:23.980] Because if it's just one letter off, it's not gonna...it's gonna have a completely different hash. [29:24.100 --> 29:24.760] It's not gonna work. [29:26.420 --> 29:28.780] And so it's this end that really matters. [29:29.140 --> 29:33.240] And you can see our blue hump just, at the last final stretch, goes back up. [29:34.640 --> 29:43.000] So...even though we only had 10 guesses instead of 100, it was more accurate on the tail end. [29:45.080 --> 29:45.720] Let's see. [29:45.860 --> 29:46.700] What else did I have? [29:54.790 --> 29:55.390] All right. [29:55.730 --> 29:59.850] The next section is how you could defend against these attacks. [30:01.490 --> 30:05.770] So, I'm going to exit out of HSociety mode. [30:08.790 --> 30:18.990] Now, you might have already gleaned how you can defend against password cracking, just by learning a bit about how passwords are cracked, how passwords are guessed. [30:20.190 --> 30:30.190] You might have already guessed that you should use long, complex passwords that have a lot of entropy, and that you shouldn't use personal information in your passwords. [30:32.170 --> 30:40.210] You'll note that our most vulnerable victims were the ones who reused passwords across accounts because we could do credential stuffing. [30:40.810 --> 30:48.330] And they're also ones that used shorter passwords and passwords that contained common words. [30:49.890 --> 31:01.110] So, the actual strategy for how you're supposed to defend against these attacks is, first of all, as you might have guessed, you've got to use a password manager. [31:02.130 --> 31:08.770] It is literally impossible to remember all the passwords that you have. [31:09.190 --> 31:10.030] Can I get a show of hands? [31:10.170 --> 31:15.350] How many passwords do you think you have? [31:15.430 --> 31:16.810] How many accounts do you think you have? [31:17.210 --> 31:18.270] Does anyone want to say? [31:20.350 --> 31:21.230] 300, right? [31:22.170 --> 31:22.670] 200? [31:23.490 --> 31:24.750] Yeah, that sounds about right. [31:24.890 --> 31:25.550] At least for this crowd. [31:25.690 --> 31:26.650] Yeah, mine is about that. [31:27.870 --> 31:28.790] Yeah, me too. [31:31.230 --> 31:31.730] Exactly. [31:32.150 --> 31:32.650] Right? [31:34.190 --> 31:34.970] And so... [31:38.110 --> 31:50.000] Yeah, it's completely reasonable that people that don't know about this will use the same password across everything because it's unreasonable to expect that they'd remember different ones, and especially ones that are complex enough. [31:52.260 --> 31:53.900] So, I recommend... [31:53.900 --> 31:58.680] So, what a password manager does is it stores all your passwords in one database. [32:00.980 --> 32:03.980] That's hashed, of course, and stored securely. [32:04.380 --> 32:09.110] And you can have, like, a browser extension, for example, that fills in your credentials automatically. [32:09.610 --> 32:17.540] And it also lets you generate these long, complex strings to automatically fill in when you're signing up for a site. [32:18.320 --> 32:21.020] So, you don't have to even think of the passwords yourself. [32:22.280 --> 32:32.900] This is the only way, in my opinion, to have a reasonable digital life and still have secure passwords. [32:36.780 --> 32:43.260] And, at first, it might feel kind of uneasy because it's sort of like putting all of your eggs in one basket. [32:45.520 --> 32:53.520] But, if you don't use this method, you're essentially putting... spreading all of your eggs across many different baskets. [32:53.520 --> 33:00.480] And all the different baskets, you don't really know how safe they are, you know, how strong their handles are. [33:00.860 --> 33:03.520] Oh, and if one egg cracks, all the eggs crack. [33:05.320 --> 33:10.660] And, instead, with a password manager, it's basically, like, one really strong basket with, like, a steel handle. [33:12.200 --> 33:18.380] I recommend Bitwarden as, like, a cloud-based password manager that syncs across devices. [33:19.050 --> 33:30.840] But, if you don't want to keep your passwords in the cloud, because it's just someone else's computer, you can use KeePassXC to another open source password manager that you store on your own computer. [33:33.590 --> 33:41.540] However, there are some critical passwords that you should memorize just to be safe, when it would be difficult to paste them from your password manager. [33:41.800 --> 33:48.110] Like the ones to your bank account, or your laptop, or your email, or your PGP Cree, or even your Bitcoin wallet. [33:50.040 --> 33:58.000] These ones are either... you know, you can't really paste into your laptop's field when you're signing in. [33:58.000 --> 34:01.840] And maybe some of these are so important, you want to back up. [34:02.540 --> 34:04.000] So, you should memorize them anyway. [34:06.440 --> 34:09.700] In that case, I recommend looking into Diceware, hence the image. [34:10.360 --> 34:23.520] Diceware is a method for generating passwords where you have a big list of words, and next to each word is a number in Cenary, or... no, that's right. [34:23.520 --> 34:30.220] In base seven, which is just... each of the digits are from one to six. [34:32.560 --> 34:39.880] And to pick a word from the list, you roll, in this case, five dice, and it gives you a unique number. [34:40.500 --> 34:52.110] And you go down the list of words in the list, and you pick out the word that the numbers on the dice correspond to, and that's your random word. [34:52.700 --> 34:58.480] And you repeat this however many times, depending on how secure you want your password to be. [35:00.660 --> 35:03.140] At first, it might... [35:03.720 --> 35:07.360] Can anyone think of a problem with this approach for generating passwords? [35:07.760 --> 35:11.050] Just a series of random words picked from a list? [35:13.640 --> 35:14.520] Too long? [35:26.040 --> 35:27.320] Yeah, that's a good problem. [35:29.320 --> 35:31.240] The first problem, actually... [35:31.240 --> 35:32.320] I'm going to get to that later. [35:32.570 --> 35:34.840] But the problem I had in mind was... [35:34.840 --> 35:39.660] you can imagine you could do the same brute force approach with Diceware. [35:39.980 --> 35:50.900] If you know the word list that someone used, you can try to brute force all the possible combinations of words they chose, just like the brute force method earlier. [35:53.000 --> 35:57.820] But the difference is that you can have a predictably... [35:57.820 --> 36:09.980] a password that has a predictable amount of entropy, which is essentially the number of combinations that you could have picked your password from out of all the possible combinations your password could be. [36:11.240 --> 36:22.280] If you have a 8-character password that each has a lowercase letter, that's 26 to the 8 possible combinations. [36:22.680 --> 36:26.540] And to get the bits of entropy, you take the log base 2 of that. [36:28.740 --> 36:37.640] With Diceware, just like this, you can also have a predictable amount of entropy, which says how long it would take to crack your password if you have all the information available to you. [36:41.280 --> 36:54.360] For example, I'm completely comfortable saying in front of a crowd and online that I use passwords that have 8 words in them from the EFF short Diceware word list. [36:54.760 --> 37:02.360] And I'm comfortable saying that because each of those passwords has 80 bits of entropy. [37:02.360 --> 37:06.800] So it's picked from a list of 2 to the 80 possible combinations. [37:07.050 --> 37:15.570] And that has about the same amount of security as a 13-character password with random letters, numbers, and symbols. [37:16.460 --> 37:18.780] Which normally would be impossible to remember. [37:19.200 --> 37:22.140] But my passwords are just a series of 8 words. [37:22.480 --> 37:28.980] And so I can just make a sentence that strings them together to remember it easily. [37:30.420 --> 37:35.550] As you can imagine, as you mentioned earlier, this might not fit in all password fields. [37:36.070 --> 37:39.820] And the solution is actually the Diceware list that I mentioned. [37:40.720 --> 37:44.720] That one in particular, you would have to roll 4 dice instead of 5. [37:45.020 --> 37:46.420] So it's a shorter list. [37:46.860 --> 37:51.150] But each of the words has a unique 3-character prefix. [37:51.980 --> 37:53.820] The first 3 letters of each word are different. [37:54.400 --> 38:02.780] And so once you've memorized the words, you don't actually have to type in all of the letters in each word. [38:02.860 --> 38:04.070] You can just type out the first 3. [38:04.240 --> 38:05.340] And it has the same amount of entropy. [38:05.420 --> 38:06.590] It's the same number of combinations. [38:08.130 --> 38:10.780] In that case, it's around 28 characters. [38:12.360 --> 38:16.040] Which still doesn't fit into as many password fields. [38:16.040 --> 38:24.090] But you can lower the amount of entropy based on your threat model to account for that. [38:26.070 --> 38:28.050] Let's see if there's anything else I was going to get to. [38:36.260 --> 38:36.700] Yeah. [38:37.580 --> 38:38.720] That's actually about it. [38:42.520 --> 38:55.040] By knowing a bit about how hackers crack passwords, you can more easily defend against those hackers by choosing passwords that you know are not vulnerable to those attacks. [38:55.520 --> 38:56.280] Thank you. [39:03.790 --> 39:05.810] Now I'm open to questions. [39:11.300 --> 39:12.000] That's right. [39:12.080 --> 39:13.260] There's a microphone over here. [39:14.180 --> 39:15.700] But I wouldn't mind if you yelled. [39:18.400 --> 39:19.460] Oh, that's right. [39:23.810 --> 39:25.330] And we're all wearing black t-shirts. [39:26.550 --> 39:27.970] Well, congratulations, Roman. [39:29.950 --> 39:31.930] First is second year undergrad project. [39:32.550 --> 39:33.930] You know, pretty cool methodology. [39:34.270 --> 39:34.610] Thank you. [39:34.850 --> 39:35.830] And you get to present a hope. [39:36.650 --> 39:47.090] So if I understand this correctly, you're kind of using OSINT to help inform the attacker with a more specific sort of sniper input, right? [39:47.090 --> 39:47.430] That's right. [39:48.030 --> 39:51.430] So in your proof of concept, did you... [39:51.430 --> 39:53.750] Was the OSINT gathering manual? [39:54.270 --> 39:56.030] Or was it automated process? [39:58.670 --> 40:02.490] The actual automation of our process would be an extension to our research. [40:02.710 --> 40:03.090] Okay. [40:03.310 --> 40:04.790] All we did is create the model. [40:04.970 --> 40:09.170] And we actually made a web app to demonstrate it. [40:09.230 --> 40:10.610] I might actually be able to pull that up. [40:10.610 --> 40:11.710] I actually forgot about that. [40:12.270 --> 40:16.990] Where you can put in any info you want, and it guesses the password based on that. [40:17.430 --> 40:26.170] So we can take any of the data points from our Wattpad data set. [40:26.470 --> 40:32.430] But in practice, you know, maybe you would write a web scraper to find all this information automatically. [40:33.450 --> 40:33.930] Okay. [40:34.070 --> 40:34.310] That's great. [40:34.530 --> 40:39.370] And does your research team have any future plans to extend this work? [40:41.250 --> 40:44.530] This is an anecdote I forgot to mention actually. [40:45.510 --> 40:51.950] This is overtly against the terms of service for the GPT-3 API. [40:53.270 --> 41:00.870] It explicitly says you cannot try to guess information about someone based on their public information. [41:01.170 --> 41:02.870] Which is kind of exactly what we're doing. [41:03.670 --> 41:09.190] So, if they catch us after this talk, maybe we won't have a future extension for this research. [41:10.990 --> 41:13.910] Right now, I don't think we're actually planning an extension. [41:15.930 --> 41:20.930] Like I said, the ACM research program I'm directing next semester. [41:21.130 --> 41:27.930] And in the past, we've had teams across semesters extend previous research. [41:28.090 --> 41:33.890] So, if that's something any of the leads are wanting to do this semester, they might do it. [41:33.970 --> 41:35.050] But I don't believe they are. [41:39.950 --> 41:41.430] Does that answer your question? [41:41.650 --> 41:42.070] Cool. [41:43.650 --> 41:44.130] Hi. [41:44.890 --> 41:45.350] Hello. [41:45.350 --> 41:47.190] Thank you for your talk. [41:47.410 --> 41:55.850] I'm interested in utilizing things like natural language processing, et cetera, to better be able to predict passwords. [41:56.630 --> 41:57.790] Do you have any... [41:57.790 --> 42:08.550] Well, have you or do you have any future plans to compare results of this process that you've created with the... [42:11.090 --> 42:20.150] other password guessing processes and software such as COOL, for example, that's C-E-W-L, if folks in the audience aren't familiar? [42:21.410 --> 42:22.630] That's a good question. [42:23.090 --> 42:34.570] In our preliminary research, I did not come across COOL, but I did come across a paper that also had the scope of automated targeted password guessing. [42:34.570 --> 42:57.770] And they took distinct pieces of information such as people's email addresses and their phone numbers and created a...like a specifically engineered pipeline to take sections of those pieces of data and use machine learning to figure out which...where each of those combinations goes. [42:57.770 --> 43:06.110] For example, the model might have learned that often when people have a birthday in their password, they put it at the end. [43:07.830 --> 43:22.030] The motivation behind our research was we wanted to just let the knowledge of GPT-3 figure all that stuff out by itself and learn to draw inferences like people use birthdays in their password. [43:25.310 --> 43:27.230] I had not actually heard about COOL. [43:27.350 --> 43:30.290] Do you think you could expand on what...how that works? [43:31.170 --> 43:31.710] Of course. [43:31.850 --> 43:32.970] I've only used it. [43:33.170 --> 43:34.970] I'm not a contributor to COOL. [43:35.370 --> 43:35.430] Oh, wow. [43:35.430 --> 43:48.810] But for those that aren't familiar, the general premise is that the tool is pointed at a URL, at which point it will pull down the text within how many of...and it is recursive as well. [43:48.810 --> 43:54.470] So it will follow links on the page that you pass as a parameter. [43:55.250 --> 44:01.610] And it will generate word lists based off of the text in the URL and the URLs that are associated with it. [44:02.310 --> 44:04.350] Is that to guess a specific user's password? [44:05.670 --> 44:09.430] It can be used to create a word list which can be... [44:09.430 --> 44:09.890] Oh, I see. [44:11.290 --> 44:15.570] Either used in fuzzing or in tools such as Hashcat or John the Ripper. [44:16.670 --> 44:21.150] Right now, we don't have any plans to keep going with this research. [44:21.270 --> 44:30.010] But if I was interested in picking this up again, that would be a great extension to compare it to other methods. [44:31.550 --> 44:36.170] We only ended up having enough time during the semester to compare it to the brute force method. [44:37.910 --> 44:38.630] But, yeah. [44:38.830 --> 44:39.770] That would be a good idea. [44:39.950 --> 44:40.690] Does that answer your question? [44:41.070 --> 44:41.690] Yes, it does. [44:41.830 --> 44:42.390] Thank you for your time. [44:42.750 --> 44:43.310] Thank you so much. [44:46.160 --> 44:46.540] All right. [44:46.860 --> 44:47.140] All right. [44:47.480 --> 44:48.300] Really great talk. [44:48.760 --> 44:49.580] I was curious. [44:49.760 --> 44:52.800] So you're working with some user data, and it's been a while since I've done anything like that. [44:52.900 --> 44:55.780] Did you speak to any kind of institutional review board or anything like that? [44:56.380 --> 44:57.160] That's a good question. [44:58.860 --> 45:01.680] We did think about the ethics of our research. [45:02.060 --> 45:02.440] I mean, did you? [45:02.520 --> 45:03.880] You said you broke the terms of service. [45:06.640 --> 45:06.960] So... [45:07.420 --> 45:08.940] Man, I didn't know I'd be put on the spot. [45:09.300 --> 45:11.460] I mean, you're presenting research. [45:11.880 --> 45:12.380] Yeah, no, that's right. [45:12.380 --> 45:13.620] To be clear, I also think it's good. [45:13.820 --> 45:15.060] But I'm going to ask you hard questions. [45:15.320 --> 45:15.960] Yes, thank you. [45:17.740 --> 45:19.420] Our program isn't... [45:19.420 --> 45:20.440] It has... [45:20.440 --> 45:22.460] It's not officially related to the university. [45:22.460 --> 45:28.260] It's not a research program that's a part of University of Texas at Dallas. [45:29.220 --> 45:30.620] We do have... [45:30.620 --> 45:34.260] We did have an advisor from UT Dallas, and it's part of a... [45:35.320 --> 45:41.580] Our school has a local chapter of the Association for Computing Machinery, ACM. [45:42.060 --> 45:46.840] And that chapter has a program called ACM Research. [45:47.640 --> 45:52.960] And so, because it's one layer separated, I kind of had free reign to do whatever I wanted. [45:55.040 --> 45:57.480] And there is no institutional review board. [45:57.780 --> 46:03.880] We figured that this research was ethical because all this is... [46:05.300 --> 46:08.280] I don't want to say trivial, but it's pretty straightforward stuff. [46:08.500 --> 46:11.820] We didn't have to actually get our hands deep with the real machine learning part. [46:11.820 --> 46:12.680] We just use the API. [46:13.240 --> 46:17.580] And so, I believe this kind of thing probably has been done before. [46:17.800 --> 46:19.840] But it's done behind closed doors. [46:20.140 --> 46:27.000] And it's not out in the open where I can tell a bunch of people that I did it, and we can update our security protocols to cover this. [46:28.660 --> 46:29.600] That answer your question? [46:30.620 --> 46:31.060] Yes. [46:31.300 --> 46:32.580] Is it okay if I ask you one other one? [46:32.820 --> 46:33.400] Yeah, go ahead. [46:34.520 --> 46:36.020] This is not as aggressive. [46:36.820 --> 46:43.400] So, are you aware of any points that people using this, using some of these techniques from more of a threat hunting perspective? [46:43.640 --> 46:45.760] So, for example, you've got somebody who's off on the dark web. [46:46.140 --> 46:47.320] They're an annoying little shit. [46:47.880 --> 46:50.800] We have either their password or the hash of their password. [46:50.980 --> 46:55.000] And then going off, you know, to some threat center or something in Microsoft, Google, et cetera. [46:55.300 --> 47:02.360] Sort of see if we can find, you know, dumb shit McDumbson, you know, was off on the dark web, off on the clear web, link two accounts together kind of thing. [47:04.380 --> 47:06.120] I don't quite understand your question. [47:06.260 --> 47:06.740] I'm sorry. [47:06.780 --> 47:07.880] I'm phrasing this poorly. [47:08.080 --> 47:09.180] Because you're talking about... [47:09.180 --> 47:09.680] Oh, sorry. [47:09.780 --> 47:11.000] You're talking about credential stuffing. [47:11.200 --> 47:13.820] I was wondering if you've also used that not just... [47:13.820 --> 47:15.360] Maybe if you have some... [47:15.360 --> 47:17.620] I'm not even sure if this is possible is what I'm asking. [47:17.740 --> 47:28.940] It's like, instead of trying to go and log into some service and steal somebody's credentials with this information, instead just try and see if you can link accounts together from more of a, you know, you've got this threat actor, like this hypothetical, [47:29.060 --> 47:32.820] you know, person, and trying to link an account together rather than... [47:32.820 --> 47:33.860] And then... [47:33.860 --> 47:34.480] Never mind. [47:34.540 --> 47:35.360] I'm phrasing this poorly. [47:35.700 --> 47:36.720] No, I... [47:36.720 --> 47:39.080] I believe I understand what you're proposing. [47:39.840 --> 47:43.740] The de-animalization of someone's pseudonym online. [47:43.740 --> 47:47.000] Yeah, and then maybe using, like, for example, if they had this password on... [47:47.000 --> 47:53.440] off somewhere and we've got this suspect or whatever, that then you can do this munging that you're talking about in a similar manner. [47:53.780 --> 48:01.740] Like, you might not be a forensic match, but you could go, like, this guy was off on the dark web and his password was, like, torchwood12346. [48:02.780 --> 48:02.820] Right. [48:02.820 --> 48:07.480] And we sort of munged that a bit and we found somebody else using a similar one off on the clear web. [48:07.600 --> 48:09.160] Maybe these two accounts are, like, kind of thing. [48:10.220 --> 48:10.900] That's a good idea. [48:10.900 --> 48:13.220] I definitely think you could do something like that. [48:13.620 --> 48:16.120] I've heard some very... [48:16.120 --> 48:18.860] Some people that are very paranoid about... [48:18.860 --> 48:20.100] Well, not paranoid. [48:20.380 --> 48:28.780] That are really concerned about Internet privacy that have started discussing the use of natural language processing to actually do exactly that. [48:29.040 --> 48:35.260] To link someone's real persona with, for example, the text and pseudonymous blog post... [48:35.260 --> 48:36.800] or blog site that they have. [48:36.800 --> 48:56.700] And so the proposed solution to that was using some sort of model to automatically reword what they wrote in order to prevent a natural language model from automatically learning their mannerisms and learning their style of writing to connect... [48:56.700 --> 49:00.700] Or even the content they use to connect their pseudonym to their real-life profile. [49:03.420 --> 49:04.980] But, yeah, that's a good idea. [49:07.820 --> 49:08.220] Hey. [49:08.840 --> 49:09.280] Yeah. [49:09.660 --> 49:10.480] Impressive research. [49:10.480 --> 49:13.040] So for such a small project. [49:13.300 --> 49:14.400] I'm just wondering... [49:14.400 --> 49:16.000] So you said that you do... [49:16.000 --> 49:19.980] You allowed up to 10 matches to see if you can guess it with your model, right? [49:20.200 --> 49:20.480] That's right. [49:20.480 --> 49:20.560] Okay. [49:21.120 --> 49:25.940] Have you done any analysis on what the complexity of the passwords are that you don't guess? [49:26.180 --> 49:34.480] So how complex, let's say, in number of words or entropy, that you don't guess where that barrier is? [49:34.740 --> 49:36.020] Because that would be interesting. [49:36.640 --> 49:51.280] So for the not-so-smart people that sort of guess passwords that you know, these kinds of complexities are sort of guessable, and these are probably not guessable if you're looking at the threat model of an online attack. [49:51.920 --> 49:52.640] Mm-hmm. [49:53.360 --> 49:54.380] That's a good question. [49:54.560 --> 50:05.700] If I understand correctly, you're asking for an analysis of how our model deals with entropy in general, the idea being... [50:05.700 --> 50:08.320] Yeah, just if you can get... [50:08.860 --> 50:19.080] If you looked at a measure of entropy to see where is sort of the barrier in terms of entropy of where we cannot guess the passwords anymore. [50:21.160 --> 50:21.820] I see. [50:22.080 --> 50:23.820] We did not do any analysis on that. [50:24.440 --> 50:24.600] Mm-hmm. [50:24.860 --> 50:27.000] But, again, that would be another good extension. [50:27.260 --> 50:28.180] I should write these down. [50:29.200 --> 50:29.340] Okay. [50:31.140 --> 50:40.780] I'd imagine that our model is able to guess passwords that, at first glance, have more entropy than if you had no information about the target. [50:41.380 --> 50:49.400] Because that's kind of essentially what you're doing, is you're bringing more information to reduce the amount of entropy in a not-so-clear way. [50:50.160 --> 50:51.280] I have a question. [50:51.500 --> 50:51.820] I don't... [50:51.820 --> 50:52.520] Go ahead. [50:52.660 --> 50:53.820] Of course, the golden question. [50:53.960 --> 50:55.500] Have you tried to... [50:55.500 --> 50:56.600] Bitcoin wallets? [50:59.000 --> 51:06.180] You know, the Bitcoin wallets or the mnemonic 12 words that create a Bitcoin wallet? [51:06.320 --> 51:08.160] Have you guys looked into that? [51:09.560 --> 51:10.040] Yeah. [51:10.040 --> 51:12.300] You said the mnemonic 12 words that make up a... [51:12.300 --> 51:17.860] Usually, you know, when a regular person creates a wallet, they provide them with 12 words in a Bitcoin wallet. [51:18.280 --> 51:18.440] Mm-hmm. [51:18.440 --> 51:20.320] That creates the private key. [51:21.600 --> 51:26.920] In our case, our model would not be able to do anything about that. [51:27.140 --> 51:31.480] In fact, like I was talking about earlier, that's essentially what Diceware uses. [51:35.640 --> 51:48.180] The only reason our model would be able to be more effective than a brute force approach, which is what you would use for your Bitcoin wallet, is because the human created the password. [51:48.340 --> 51:58.580] And in theory, we have some more information that helps us get in their mind and learn what sort of strings they could have used to create the password. [51:58.580 --> 52:02.080] So in this case, because a human didn't choose the password, there's nothing we can do. [52:02.780 --> 52:05.580] Because it was provided by the randomized program. [52:06.600 --> 52:06.760] I see. [52:06.900 --> 52:07.180] That's right. [52:07.300 --> 52:08.540] It defeats the whole purpose. [52:09.640 --> 52:09.920] Mm-hmm. [52:10.280 --> 52:11.620] Unless they use their own words. [52:11.820 --> 52:12.180] That's the difference. [52:12.180 --> 52:12.680] After all. [52:13.320 --> 52:13.540] Right. [52:17.340 --> 52:18.140] I'm gonna... [52:18.140 --> 52:19.660] I have, like, two minutes. [52:19.680 --> 52:21.920] I'm gonna pull up the web demo for our project. [52:22.940 --> 52:23.500] Let's see. [52:40.490 --> 52:41.230] Oh, my God. [52:41.410 --> 52:42.790] My search results are there. [52:45.230 --> 52:45.930] There it is. [52:46.890 --> 52:47.910] Except there's nothing there. [52:52.780 --> 52:56.140] Now, it might actually take a while to load, but... [52:56.980 --> 52:57.520] Uh-oh. [52:59.560 --> 53:00.360] Don't tell anyone. [53:01.980 --> 53:02.760] Oh, there it is. [53:03.920 --> 53:07.680] So in our case, we have everyone's, this person's info. [53:07.960 --> 53:13.140] And in theory, you could put in any info you want, even your own, which you shouldn't. [53:15.220 --> 53:17.600] This is at guessmypassword.harokuapp.com. [53:22.000 --> 53:24.680] And I believe it takes a minute for this app to spin up. [53:24.800 --> 53:27.300] So I might actually not have enough time to show the password. [53:27.360 --> 53:27.920] Oh, there it is. [53:29.380 --> 53:33.340] Yeah, in our case, it guesses Jane 23, Jane 1, 2, 3. [53:35.100 --> 53:35.660] Ninety nights. [53:35.900 --> 53:36.700] I don't know what that means. [53:40.540 --> 53:41.760] You can guess as many as you want. [53:46.090 --> 53:46.950] All right, I'm out of time. [53:47.050 --> 53:47.510] Thank you so much.