Project Recall: Part Two

Submitted by C B Wright on
Robert Thorpe's Office

“Failed again. What the hell did great-grandfather do to this file?”

Jenny Forrest doesn't bother to hide the frustration in her voice.

“He didn't want the bad guys to crack it, I guess.” CB doesn't sound nearly as concerned—in fact, he sounds bored, which frustrates Jenny even more.

“Did he want the good guys to crack it?” Her words almost come out as a snarl, and a moment later she takes a long, slow breath. “I mean, I assume he wanted you to be able to access it. But from what little I've learned of the encryption he used, that's not going to happen unless you have the key.”

They're working in Robert Thorpe's private office. Jenny's computer sits on one of the long tables set against the walls, tethered to the Institute's network via a long, slender cable. The laptop's display is mirrored on a large flat panel on the wall behind it. Jenny sits hunched over the laptop's keyboard, blonde hair falling down in a curtain over her face, though a brief length of exposed jawline suggests she is scowling.

“Well, I don't have a key.” CB is sprawled out in a chair in front of Robert's desk, his feet propped up on another chair. His head leans back, his eyes are half-closed, and he doesn't look like he's giving his full attention to the problem at hand. “I don't know why Alex would think I would.”

“He never sent you anything that might be used as a key?”

“He never sent me anything,” CB says. “I was keeping my location a secret, remember? We only talked by email.”

Jenny turns, brushing her hair out of her eyes to glare at him. “A key is something that would be emailed to you, CB.”

CB frowns. “Well, yeah. OK. But he never sent me anything like that.”

Jenny shakes her head. “That doesn't make sense. You don't just encrypt a file like this, not the way he did, and then send it to someone without making sure the person you're sending it to has a way to open it.”

“Maybe he never intended it to be opened,” CB says. “Maybe he was pretending he knew more than he did in an attempt to force the bad guys to act more openly than they wanted. Maybe once the encryption is broken, all we'll find is a text file that reads 'sure spent a lot of time trying to get here, didn't you?'”

Jenny's anger falters for a moment. “Do you think that's something he'd do?”

“No,” CB says. “It's definitely something I'd do, but it's not his style. Of course, if he was trying to outwit people who were familiar with his style—like Richter—then he might try to deliberately do something that wasn't his style. That would be his style.”

“You are not being helpful,” Jenny says, sighing.

“Don't know what you expect me to do,” CB says. “I'm not really on your level when it comes to computer stuff. Robert's really who you want to talk to about this.”

“But great-grandfather didn't send it to him,” Jenny says. “He could have, right? You all have each others email addresses and everything?”

“Yeah,” CB says, “but it's not like we talk all the time.”

“I know. You all go off to your man-caves and hide. It's a little embarrassing. But my point is he could have sent it to Dr. Thorpe—Robert—if he'd really wanted to. But he didn't. He sent it to you, and he did it on purpose. He wanted you to be the one who got it.”

CB raises his head to stare at Jenny thoughtfully. “Yeah.”

“He didn't choose the super-genius who could program a computer in his sleep—probably literally—he chose a guy who had a lot less experience. I mean, you're not incompetent or anything, it's just that you never needed to learn how to break encryption.”

“That's true,” CB says. “Usually I'd just find the password when it mattered.”

Jenny raises an eyebrow. “What do you mean?”

“Well I don't want to insult the computer security professional,” CB says, “but mostly people are lazy and cultivate a lot of really bad habits where computer security is concerned. If you look long enough you'll eventually find a password written down somewhere. Occasionally it'll even be labeled 'Secret Files Access'—don't laugh, I'm not kidding. And I can… you know… push a little, and make it more likely to stumble across the one guy who has his password taped to the bottom of his monitor, or whatever.”

“Huh,” Jenny says. “I wonder if you could do that here.”

“I doubt Alex wrote down the password anywhere.”

“No,” Jenny says, “not that. Could you push your… whatever it is you do, and try guess what the encryption key is? Like, just type random crap on the keyboard and eventually stumble across it?”

The door to Robert's office slide open, and Robert Thorpe limps into the room, leaning heavily on his cane.

“Stumble across what?” Robert asks.

CB is sitting up now, eyes closed as he tries to sort everything out. “There's precedent for it, but—”

“Precedent for what?” Robert asks.

“I'm not sure,” Jenny says. “I want CB to guess the encryption key.”

Robert raises an eyebrow. “Oh. That.”

Jenny looks from one man, to the other, and suppresses the urge to roll her eyes. “Either of you want to share?”

A brief silence follows as Robert makes his way over to his desk and sits, leaning his cane against the desk corner. Jenny notices Robert wince slightly as he sits. CB pretends not to.

Robert sighs softly as he sinks into the thick leather cushions. “It was in Wasteland. There was a machine that my… ah… counterpart had been working on that was supposed to bridge realities. We used CB to crack the password.”

“That's what I want him to do now,” Jenny says, pushing back a surge of excitement. “How did you do it then?”

“We brute forced it,” Robert says. “We sat him down in front of the terminal and told him to guess the password while concentrating on making something happen.”

“So this could work!” Jenny says.

Robert glances at the panel display above Jenny's laptop. “I'm not sure. What you want to do is a lot more complicated. Passwords are shorter—and passwords back then were trivial compared to what they are today. I've seen CB do a lot of incredible things, but I think asking him to randomly generate an entire encryption key out of thin air in time for it to be of any use to us is more than he can deliver.”

“So you think CB's ability would be bogged down by the length of the key?”

“Looks that way,” CB says. “We tried an experiment once. You remember, Robert, the Monkey-Shakespeare thing.”

Robert smiles. “I set up a programmable keyboard and randomly assigned characters to keys, so CB never knew what any of the keys were mapped to. And I asked him to concentrate on typing something coherent—not Shakespeare, though. I think it was the Gettysburg Address. He didn't know what key did what, and he didn't have a monitor…”

“So I started hitting keys at random,” CB says.

“Didn't work?” Jenny asks.

“It worked more than I expected,” Robert says. “He actually managed to type out 'Four score and seven' before it devolved into random text. But it didn't work to the degree you'd need it to.”

Jenny turns back to stare at her laptop, the scowl threatening to return. Then her eyes widen. “How do you do with a coin toss?”

“Get it every time,” CB says.

“When you do the toss? Or does it matter?”

CB shrugs. “Doesn't matter.”

Jenny turns back to look at Robert. “That's it, then. We just need to break down the problem into a series of very small problems, which we use to solve the big one.”

CB blinks in surprise. Robert stares at Jenny thoughtfully.

“That's interesting,” Robert says.

“Interesting, as in 'yes, it could work?'” Jenny asks hopefully.

Robert closes his eyes, tilts his head back, and furrows his brow. Jenny can see his eyes moving back and forth under his eyelids. Half a minute passes.

“Yes,” Robert says. “I think so. What we'd need to do is narrow the search. Do we know the length of the encryption key?”

“Yes,” Jenny says. “4096 bits.”

Robert nods. “Then we know the range of possible values the encryption key might be. So all we need to do is come up with a program that allows CB to systematically discard portions of that range until we pare it down to a small enough range of possible values—a few billion or so should do it—that we can use our computers to brute force it.”

“Binary,” Jenny says. “Binary is essentially flipping a coin—zero or one—so we have CB guess the binary string, one bit at a—“

“That’s not going to work,” CB says.

“Why not?” Jenny asks. “It’s exactly the same thing as flipping a coin.”

“No it isn’t,” CB says. “I understand flipping a coin. I don’t understand binary numbers. I mean, I know what they are, but it’s not ingrained. I wouldn’t know what to focus on when I was pushing. I doubt it would do what you want.”

Jenny stares at Robert blankly. Robert shrugs. “It’s not my power.”

“OK,” Jenny says, “what about counting. You understand counting, right?”

CB gives her a flat look.

“So what if I Put it this way: we’re trying to find a specific number between zero and… well, it’s a big number, it’s…” Jenny fumbles as she tries to find a way to put the top value of that range in context.

“It’s one thousand, two hundred and thirty-four digits long,” Robert says.

CB looks from Jenny to Robert. “A thousand doesn’t seem that big.”

“That’s not the number,” Robert says. “That’s the number of digits in the number.”

CB blinks. “OK. That’s a big number.”

“Right,” Jenny says. “Big. So picture this: I’ll set up a program that asks you to guess if the number is between zero to half of that top value, or between ‘half that plus one’ to the end. Once you choose, it’ll then ask you if the number is between the lower half of the range you just chose, or the upper half. And then again, and again, until we’ve got it narrowed down to a small enough range of numbers that it’ll be faster for a computer to do the rest of it. Could you approach it that way?”

CB thinks it over. “Yeah, I think I can manage that. I’ll have to smoke though. Sorry Robert.”

Robert shakes his head. “You and your crutches.”

* * *

The unpleasant smell of burning nicotine and tar fills Robert’s office as CB sits in front of Jenny's laptop, cigarette dangling from the corner of his mouth, large headphones covering his ears. An empty ceramic cup serving as a makeshift ashtray is a quarter full of ash and spent cigarettes. His right hand hovers over the keyboard, thumb resting on the space bar, middle finger lightly touching the I. CB mutters a string of curses quietly to himself as he alternates between pressing the space bar and the I key in an apparently random order.

It’s been an hour so far. Jenny thinks she might scream.

“I hate waiting,” she says. It’s not the first time she’s said it, and every time she says it again her frustration climbs.

Robert laughs. “Before you came up with this idea our best course of action would have taken years.”

“I still hate waiting,” Jenny says. “It's just the way it goes. Also I'm a little afraid CB will get bored and quit.”

Robert laughs again. “You'd better hope he can't hear you through those headphones. He might do it just to spite you.”

She stares at CB's back, watching him choose between the space bar and the I key over and over again. “Is he doing his… is he using his whatever the heck it is he does? To 'make things happen?'”

“I assume so,” Robert says.

“I don't feel anything,” Jenny says. “I mean, when I've seen him in action in the past, I didn't feel anything then, either, but I always figured it was because I wasn't paying attention, or I was too busy being shot at, or something like that. But there's actually nothing. No electricity in the air, no feeling of power.”

“There never is. He claims he feels something when he's using it, but I've never been able to record anything. He doesn't even register as a metahuman.”

“It sounds like you tested him a lot,” Jenny says.

“When the Guardians were active I tested all of us. I thought if we understood how our abilities worked we could coordinate better, and if we understood what our limits were we might be able to work around them when necessary. And it was. It saved our lives more than a few times. But CB's tests were always the least useful of the batch.”

Robert studies Jenny for a moment. “Red Shift told me a bit about how he helped you train after you cocooned. One of his regrets was not being able to help you determine your physical limits. If you're interested, I have facilities here that allow me to conduct the kind of testing I did back then. It would provide some of those answers, and do it relatively quickly.”

Jenny shifts her weight uncomfortably.

“Only if you're interested,” Robert says. “I can understand why you wouldn't be. It is testing, and I would keep a record of it. I don't share that information—too many people would be tempted to misuse it—but there's still a certain amount of risk in letting someone keep it on file, even if that someone is me. Consider it a standing offer.”

“I'll think about it,” Jenny says. “Do you do this a lot?”

“When I have the opportunity, I make the offer,” Robert says. “I've made the offer to everyone else in your group. CB and Roger, of course, from way back. Red Shift accepted, which surprised me. Scrapper Jack declined, which didn't surprise me at all. Vigilante is thinking it over, which is more than I expected in his case. Both of the agents—Mr. Grant and Ms. Hu—have accepted, which will probably complicate their lives a little, but Travers tells me they're pretty cheerful when it comes to making things more complicated.”

“Red Shift accepted?” Jenny shakes her head. “I didn't think anyone in Crossfire would trust anyone enough for that.”

“He's a scientist,” Robert says. “That helps a bit.”

“Done.” CB stands up, takes off the headphones, and puts them on the table. He turns to face them, sticking a finger in his right ear and rubbing furiously. “That tone you used as a signal itches like crazy…”

Jenny and Robert stare at CB in surprise. Jenny looks up at the flat panel display, watching the clock continue to count down.

“The program says you aren’t finished yet,” Jenny says.

CB shrugs. “You said it would start beeping like crazy when I was done. Well… it’s beeping like crazy. I'm done.”

Robert looks at the terminal on his desk. “He's right. The sample is small enough for us to take over.”

“It was supposed to take a lot longer than that,” Jenny says. “You broke it.”

CB grins. “Jenny, I’ve been pushing nonstop for the last few hours, I have the mother of all headaches, and if I had to do this much longer I was going to pick up your damned laptop and throw it across the room as hard as I could manage, so I think we should call it a win. If this works, I only broke it a little.”

“I just don't see how—” Jenny starts to respond, then stops when Robert utters a cry of mild surprise. He stares at the terminal on his desk in bemusement.

“It worked,” Robert says.

Jenny's complaint dies on her lips. “Already?”

“There was a match on eighty-third combination,” Robert says. He looks at CB, eyebrow raised. “Are you still pushing?”

CB shakes his head. “I stopped as soon as I heard the tone.”

“Well,” Robert says, turning back to the terminal, “I guess we got lucky. The file is open.”


Comments are active for 30 days after publication. If you wish to comment after 30 days please use the Forums.

“You all have each others

“You all have each others email addresses and everything?” Each others', I think. You need the apostrophe to make it a possessive. It's after the s because plural possessive, to match you all.

“Could you push your… whatever it is you do, and try guess what the encryption key is?” Try to guess.

“The door to Robert's office slide open,” Door slides, or doors slide.

““You broke my program,” Jenny said.” This should be says.


Obligatory cryptography

Obligatory cryptography objection: many cryptography keys are just numbers, in any base. Very long numbers, but still just a single number*, which can be represented in binary. If they're dividing and conquering. I have no problem with CB guessing each bit, in order. But mathematically, finding all the single digit numbers, in order, that could add up to a specific N digit number is a much harder problem.

As presented, it did seem like CB was just guessing the bits, but the "technical explanation" between the computer professionals in the room didn't seem to accurately describe that to me. In particular, the "add up the digits" part confused me. I'm guessing you meant "concatenate" but that's not really adding, and since you're talking about hexadecimal anyway, the whole bits as coin flips thing sort of gets muddled.

If I've totally misunderstood the words you used, and this is just incomprehensible noise, feel free to delete this comment. :-)

*Ignoring group keys and pictographic ciphers and other methods which are outside the scope of this comment.

So this is how I was thinking

So this is how I was thinking it through, and I freely admit I may be off base, but...

Jenny and Robert aren't interested in using CB to do any "real math" to find the specific hexidecimal sequence that will produce the key needed to decrypt the file. But they do need to figure out a way to divide all the possible combinations into groups that CB can choose between.

So... if the key can be represented as a hex string (i.e., F507ab...3a8, etc.) AND if you know how long the string is, I figured you could use that to speed up narrowing down the search (assuming you were using a metahuman with really weird powers).

For example: let's say the hex string was


(which is really, really too short for a key, but work with me.)

In decimal that's 4120486427

For CB to choose that number, the idea is you'd take the length of the string (in this case 10 spaces) and then calculate the maximum and minimum value, which would be

FFFFFFFFFF (4294967295)


0000000000 (0)

So CB would need to pick a number somewhere between 0 and 4294967295

So the program would force CB to choose between 0 - 2147483647 and 2147483648-4294967295. He would choose "B", and then he would have to choose between 2147483648-3221225472 and 3221225473-4294967295. Again, he'd choose "B." And it would keep dividing and dividing and dividing until the range got small enough for there to be a reasonable set of values left to quickly brute force it, each decimal value would be converted into a hexidecimal string, and Bob's Your Uncle.

Again... I could completely be off base, but it seemed perfectly reasonable in the context of using weird superpowers to quickly guess a ridiculously complicated number.

Writer, former musician, occasional cartoonist, and noted authority on his own opinions.

Sure, no objection there. In

Sure, no objection there. In fact, that's what he'd be doing if he were playing "guess the bit" starting at the most significant bit and working down. Each guess halves the search space.

I am not sure that's what you described above, though. :-) If you're happy with the explanation, great. It's entirely possible that you explain that fine, and I just misread the explanation (that is, the problem is on my side of the screen.) I certainly got to "binary search for the key" from the key phrase "coin flip," so all's well that ends well.

Overzealous Pro is right. Any

Overzealous Pro is right. Any text or computer file for that matter can be represented in binary. A hex is 4 bit, F599a21b is 8 hexes so guessing it means guessing the content of 32 bits or 32 guesses. And after that there are no additional computations to run, you know the key exactly.
You are right F599a21b can be converted to 4120486427. But after that you lose me. Or rather I can guess what you trying to do, which is what we just described, but your explanation does not make sense to me.
If you take 4120486427 as a string then, depending on how many bits you use for encoding, it could be of any length. But the whole conversion to decimal or text is unnecessary. The max for F599a21b is FFFFFFFF (which IS 4294967295, but note that there are still eight F, not ten F). FFFFFFFF is, again, 32 bits so you guess it in 32 coin tosses. By choosing between 0 - 2147483647 and 2147483648-4294967295 you ARE guessing the first bit. So in the end I think we arrive at the same thing and the method would work. But your explanation for it is IMHO confusing and does not sound how a programmer/mathematician would phrase it. Which is understandable if you are neither of those, just weird to read.

Also note that what you just gave to the Curveball is basically the answer to all the questions. Instead of guessing the key he could guess the content of the file. Without having the file on hand. Or, if the file is too large and the wait is too long for that, he could guess... I dunno, the coordinates of the location of the Chairman. Or any other person. Any information can be represented as bits and the answer to many questions would not take that many bits to represent.

Oh, and this is my first comment, so I would like to thank you for the story. Some scenes I had to suspend my disbelief a little, but reading the whole thing was very enjoyable and I am glad to see a new issue out.

This is one of those things

This is one of those things where probably everyone will shrug, roll their eyes, and at the end of the day we'll all move on. :)

One of the things I tried to do (and it was kind of a stretch for me, so I'm not horribly surprised if it left the more experienced people scratching their heads) was to set it up so that Robert and Jenny needed to present the solution in a format CB could follow. CB knows how to use a computer, but he's not a programmer, so giving him a range of decimal numbers to choose from is something he'll be more comfortable with than telling him to choose 0-F. ("But I never played Traveller!" he'll protest. Then he'll lose his patience, steal a boat, and choose a random direction to sail in.) In order for him to push, he has to have an idea what he's pushing for. So what he's hearing is "this key can be converted into a number, we're going to give you the range of numbers to guess from, try to guess if the string is in the upper half or the lower half, and keep going from there." That seemed a more direct approach for CB to take than trying to break it down into pieces.

Also, "F599a21b" was just the example I used because it was small enough to fit in my post -- the actual key would, I think, have to be very much longer than that, or there's no reason the bad guys couldn't just use a supercomputer to brute force their way through it, which they say they can't do in Issue 2 or 3 (can't remember offhand, but I think 2). So the real key would take more than 32 coin tosses.

That said, I don't see this as an automatic "I win" button. I suppose you could argue that the entire contents of the encrypted file are essentially just a string of numbers themselves, and you could try to get CB to "push" and guess what those numbers are, but that string would be ridiculously longer than the key needed to unlock it, and he wouldn't have any point of reference to push toward, because he has no idea what's in the file. In this task he knows he's trying to find a number that can be converted into the key that will unlock the file. In the case of reproducing the file's contents, that context isn't there.

But yeah, there's a certain amount of handwavium required.

Thanks for reading! I'm glad you're enjoying it so far, despite my less than stellar math skills.

Writer, former musician, occasional cartoonist, and noted authority on his own opinions.

Also, I'm starting to get a

Hmmm... I'm starting to get a clearer idea of how I'd need to rewrite part two in order for this to make more sense - which I'm willing to do, if I can get where I need to. (I'm a technical writer, I'm used to iterative documentation, and I'm not too proud to do it.) So keep critiquing!

Writer, former musician, occasional cartoonist, and noted authority on his own opinions.

OK, trying to sort this out

OK, trying to sort this out "logically" before I attempt a rewrite.

Let's assume that when Liberty created the encryption key he was using OpenSSH, and decided to spend four hours creating a 32768 bit encryption key (which last I checked was the maximum it supported). That gives a range of

2^32,768 = 141,546,103,104,495,478,900,155,...,541,122,668,104,633,712,377,856 (9,865 digits) (thank you Wikipedia) possible combinations. The first combination, I assume, would be 0000 0000 0000 ... 0000 0000 0000 ("zero"), the second would be 0000 0000 0000 ... 0000 0000 0000 ("one") and so forth and so on, ending with whatever the binary representation of 141,546,103,104,495,478,900,155,...,541,122,668,104,633,712,377,856 i
Jenny and Robert know how long the key is, so they know how many possible combinations are, but they don't know the combination itself, but they know it lives somewhere in that teeming mass of numbers.

They also know CB can call heads or tails at 100%. But they also know he can't reliably hit upon the correct value of a complex pattern just by brute forcing it (based on the "Gettysburg Address" test).

So the simple question they're trying to get CB to choose is, "is the answer in column A, or column B?"

Column A would show "0-[whatever half of that ridiculously long number is. Seriously, 9,865 digits!]" Column B would show "[half of that ridiculously long number+1]-[that ridiculously long number]." CB chooses one. Immediately half of the range of numbers are discarded, and there's a new range.

So then column a updates to "[beginning of new range]-[half of new range]" in column a and "[half of new range+1]-[end of new range]" in column B. CB chooses one. Immediately half of THAT range of numbers is discarded, and there's a new range.

OK, so every three or four choices, the number of combinations is going to go down by one digit--so the number of total combinations is currently represented by 9,865 digits, after three or four passes it will then be represented by a number represented by 9,864 digits. Let's just go with every 4 choices. But if we assume CB chooses a number every 2 seconds (the computer needs to calculate and display the ranges, and it's a huge number but a good computer so let's go with that) then after a minute that 9,864 digit number representing the total number of possible combinations will be a 9,849 digit number representing the total number of possible combinations. I don't know what that number is, but it goes down by 15 digits. Roughly. I guess. Which means every hour he can remove 900 digits off the number that represents the total number of possible combinations, whatever the heck that is.

So after an hour, the 9,864 digit number representing the total number of possible combinations would now be an 8,964 digit number representing the total number of possible combinations left. Which means after ten hours of work CB would have whittled the number of possible combinations down to an 864 digit number. Which means Liberty didn't use 32,768 bit key because I'm not going to write 11 hours of dialog while Jenny and Robert are waiting for CB to finish.

However, if Liberty used a 4,096 bit key, which is still larger than is being regularly used today--I think--the total number of combinations would be represented by a 1,234 digit number (104,438,888,141,315,250,669,175,...,243,804,708,340,403,154,190,336). So after the first hour, the total number of combinations would be represented by a 334 digit number. After an hour and 21 minutes that would take us down to a 19 digit number, which brings it below the number of possible combinations in a 64 bit key. That's probably small enough for Robert Thorpe and his amazing hypertech supercomputers to chew through and find a match.

Of course the trick is that it's not actually whittled down to a 19 digit number--it will still be a 1,234 digit number, but the range of numbers you'd be sifting through would be constrained by 19 digits.

I... ugh. I don't know if that's right at all. I also don't know if it's really important to the story. I'm not writing Snow Crash here! But I guess, if I have the opportunity to do it, I'd like to make it pseudo-plausible, so... someone tell me how far off base I am, here.

Writer, former musician, occasional cartoonist, and noted authority on his own opinions.

You can use the decimal

You can use the decimal description if you want to. As I said it's equivalent to the binary. I thought binary was better because: 1)Programmer would think of binary first 2)They were speaking of coin tosses so binary is even more natural 3)The whole description of what they are doing in binary is "The key is a sequence of one and zero, we are making making you guess if the first item in the sequence is one or zero, then the second and so on". That's easy to understand for everybody. Curveball may know decimal, but the description you have is actually longer/harder to understand.

I understand that the actual key is longer. If it's 32768 bits and Curveball guesses the first N, the remaining 32768 - N when it's small enough for the computer to brute-force would also be small enough for Curveball to finish guessing. If it took him half an hour to guess N bits, it would take him a couple more minutes to guess 32768 - N. But yeah a computer can finish it for him.

I don't see a principle difference between guessing the key to the file and guessing the content of the file. The file can be long yes, so it would take too much time. But. You could for example give him a map, divide it in squares, enumerate them and say, something we are looking is in one of the squares. Guess which one. That's just an example, there are a lot of problems you could divide into a sequence of binary choices. You could try explaining why he can solve the password problem, but not the map problem. But IMHO it would be hard to do convincingly.

I think what you wrote in the last comment is correct (not gonna check the specific numbers, but the idea is). A short version would be "The key can be represented as a very big number. We know the upper boundary of the number and it is X. We'd like you to guess if the actual number is smaller than X/2 or lager. Then if it's smaller then X/2 we'd like you to guess if it's smaller then X/4 or larger. If it's larger then X/2, you'll guess between smaller then X*3/4 or larger. And so on. Once the range of numbers is small enough we'll brute-force them" It's a little bit harder to read then the binary explanation. But they are equivalent.