"OCAE stands for Oporphyr Council Analytical Engine, the official name of the Great Engine," Isobel explained.
"SA stands for Security Access," Victor added. "Also known as Labyrinth Code."
Kyle tapped the numbers that followed. "Version three, copy two, card twelve of one hundred. We're not sure what these numbers are, but we think it's part of a randomizing formula."
"The Labyrinth Code is the Engine's security program, right?" Taya picked up one of the cards, examining its block of punches with wonder. She'd never seen the Great Engine or one of its cards before. "So if somebody got this, they could use the Engine?"
"Well, they'd need seventy-five more cards, first," Lars said. "My guess is that whoever stole these couldn't get the rest. A deck of tin cards gets heavy fast, so they're probably stored in four boxes of twenty-five each, and your thief only had a chance to grab one."
"It'd be easier to smuggle the program out one box at a time," Victor added. "He might have been planning to go back for the rest later."
"Since these cards are labeled as copy two, our guess is that they're part of the backup copy, which would be stored someplace on site in case one of the original cards got damaged," Emelie said. "A backup would be easier to steal than a working program. It could take months before anybody noticed a backup was missing."
Cristof straightened.
"How hard would it be to reconstruct the whole program if all you had were these twenty-five cards?"
The programmers looked at each other.
"Impossible," Kyle said at last. "It's called Labyrinth Code for a reason. Five different teams worked on it, each team under orders to create a code with no recognizable pattern. Then one high-security team assembled a metaprogram to govern each of the other five codes."
"People say it's impossible to write a program that's entirely random," Victor said, stroking his beard. "Humans aren't random creatures. But five teams trying to be random will create a program that's random enough for most purposes."
"But this set must include more than one team's work," Taya said. "I mean, if each team created equal programs, then each team would have twenty cards each, right?"
"If each part were exactly equal; but that may not be the case. Even if it is, it still leaves three teams’ subroutines unknown, and the metaprogram would have required some rewriting of the original code. In addition, if we're right about the last numbers on the cards, this code can be fed into the Engine in different orders, which would make it even harder to replicate." Lars saw that he was losing her. "Okay, let me explain. Labyrinth Code is fed into the Great Engine once a day and once a night to make sure nobody can just dance into the Engine Room and run a new program while nobody's looking. The first time unlocks the Engine, the second time locks it again. Each of the five subroutines in the Code needs to be run, but they can be run in different orders. So let's say you're trying to guess a code with five variables. One's a number, one's a letter, one's a color, one's the name of animal, and one's, uh—"
"A musical note," Isobel suggested.
"Right. Pretty tough to crack, right? Lots of possible answers for each variable. But the code is going to be even harder to crack if the order of the five variables is shuffled each day — one day the musical note is the first key, and the next day the animal is the first key, and so on."
Taya nodded.
"So even if your thief manages to get all hundred cards, meaning he knows the note and animal and color and whatever else I said, he's still got to know which order to run the cards in on any given day. There are five variables — the subroutines — which means twenty-five possible order permutations." Lars shook his head. "Your thief sneaks in some night when the guards aren't looking and runs the program to unlock the Engine. Let's say it takes half an hour to run the cards through, and that's a modest projection. He doesn't get the order right the first time, so he's got to run the cards through in the next configuration. If his luck is really rotten, it could take him seven and a half hours to hit the right order. Figure about four hours on average."
"That's a long time to be feeding cards into the Engine." Emelie folded her arms over her chest. "Someone's sure to notice the thief working — a technician, or a lictor, or somebody."
"And then, don't forget that the thief still has to run whatever program he broke into the Engine to use in the first place," Lars finished. "Which could take several more hours. And then another half hour to reset Labyrinth Code so nobody knows he was there."
"Assuming he cares," Victor added.
"He'd save time if he knew what order he needed to run the program in. Who would know?" Taya asked. The programmers shrugged, looking at each other.
"That's not our area," Kyle said.
"The chief technician, maybe," Lars ventured.
"I'd randomize the order," Isobel said. "Toss some dice each evening to decide. That would make it even harder to guess."
"Dice have six sides. The program only has five subroutines," Kyle pointed out.
"Okay, draw lots. You know what I mean."
"Would anyone on the Council know what order the cards should be run in?" Cristof asked.
"I don't see why," Lars replied. "Decaturs don't work on the mighty machine. Even Alister handed his programs over to the engineers when he was done. None of us have ever fed a program into the Great Engine ourselves."
"You said Alister helped write the Labyrinth Code," Taya said, looking at Emelie. The programmer nodded and Victor looked vindicated.
"That's what he told me. He was just starting University. He said one of his professors was so impressed by his portfolio that she brought him onto the project to do code clean-up, and in no time at all he was on one of the teams."
"Is this his piece of code?" Cristof asked.
"Hard to say." Kyle sat down and poured himself a fresh mug of beer. As if it were a signal, the rest of the programmers sorted themselves out and began refreshing their drinks. "Do you know anything about programming, exalted?"
"I don't need another lecture," Cristof said, with a touch of his usual acerbity. "A simple yes or no will suffice."
Kyle grinned.
"Just like a punch card, huh? But it's not that easy. See, this program was assembled in a relatively simple language, and you've only got twenty-five cards here. That doesn't provide much room for a programmer's personal style to show up."
"But it is possible to figure out who wrote a program?" Cristof asked.
"Theoretically. After a while, you get used to seeing other people's programming shortcuts, and we reuse parts of our old programs whenever we can," Lars explained. "So, given a long enough program, we could probably parse out the author, especially if it was someone we'd worked with before, like Alister. We've been dealing with his programming quirks for nearly a year now."
"The problem is," Kyle picked up the thread, "Labyrinth Code was designed to avoid anything predictable, which includes any single programmer's preferences. And not only that, but if Emelie and Victor are right, this would be one of Alister's early jobs, before he developed most of the routines he uses now."
"In other words, you don't know," Cristof summarized. "You could have just said that."
The programmers looked at each other with a long-suffering air.
Taya reached out and touched one of the cards. For all she knew, there was a little bit of Alister in them. That made her feel better, thinking that his work would live on until his next rebirth.
"If you ran these twenty-five cards through an analytical engine, would they do anything?" Cristof pursued.
"No." Kyle chuckled. "That's your short answer. Your long answer is that feeding in a partial program would probably crash the engine. And that leads to another question, which is, which analytical engine would you try it on? People use ‘analytical engine’ pretty casually to refer to a lot of different calculating machines, but there are only five true analytical engines in Ondinium: the Great Engine, this University engine, the engine in the Bank of Ondinium, the engine in the Council building — and that one's old, hardly more than a difference engine — and the prototype down the hall. So it's not as though someone could walk up and start feeding cards into any one of them. Access is very restricted. And these cards, of course, can only be run on the Great Engine. They're too big for the others."