Saturn Run - Saturn Run Part 17
Library

Saturn Run Part 17

"Just fine. We're still running at fifty percent power. All the telltales are normal on both reactors."

"I'm on my way down," Becca said, her heart beginning to thump. Before she could move, a new comm window opened up on her screen: Captain Fang-Castro. "Becca, thrust just dropped by fifty percent. What's our status?"

"Reactor 2 has gone into safe mode. I'm on my way down. I'll call you as soon as I know something."

As Becca hurried down the corridor to Engineering, her pocket com chimed a priority call. Palming the screen, she saw Crow. Oh great, Mr. Stick Up His Ass Security. "Dr. Johansson, is something going on that I should know about?"

"Reactor 2 put itself into automatic safe mode. Reactor 1 is running fine. There's no danger, no security risk, and I expect I'll have Number 2 back online by morning." Crow looked dubious but only said, "Thank you, Doctor, I look forward to talking to you tomorrow."

Then that will make one of us, Becca thought. Here they were less than two weeks out and something had gone off.

Becca had to thread through the dual air locks into Engineering. Normally one stayed closed, since Engineering and the forward part of the ship ran separate air systems as a routine safety precaution, but both had engaged when the reactor threw the fault. As she headed to Propulsion Control, she could hear a buzz of concerned conversation. A half-dozen techies were examining a status monitor. Greenberg was there with Martinez, the chief of station operations.

"What have you got?" she asked Greenberg.

Greenberg shook her head. "As far as we can tell, the reactor safed itself for no good reason. The process safety subsystem sent Number 2 into its shutdown routine because it detected a loss of pressure in the primary coolant path. The thing is, the coolant path subsystem logs show the sodium pressure entirely nominal, not even a quiver. Best as we can figure, the process safety subsystem got it wrong. Furthermore, it seems to have righted itself-currently it sees all cooling system parameters, in fact all system parameters, as being exactly where they should be."

Becca was looking at the status monitor: "So, we're a hundred and fifty percent sure that there is absolutely nothing wrong with the coolant system? That there's no physical reason this reactor shouldn't be online?"

"Joe is about to go pull data directly off of the pressure sensors, to be three hundred percent certain, but everything in all the logs in all the systems says we're good. The process safety subsystem momentarily hallucinated and hit the panic button for no good reason. As far as we can tell."

"Maybe for no good reason, but there's always a reason. Joe, make your readings. Wendy, if they check out, bring Number 2 back online at twenty-five percent for an hour and fifty percent for another hour. If everything looks perfect, take it up to full power."

"Okay. But I'm worried."

"So am I-but we're not going to blow anything up because a bad piece of data takes the reactor down," Becca said. "If it was the other way around, if a bad piece of data kept it up when it should be taken down . . . then we would have a problem."

Becca hung in Engineering until Joe began calling back: all the pressure sensors showed pressures were normal. No problem anywhere.

Walking back to her quarters, Becca thumbed up Fang-Castro. "Short version, the safety computer choked on a bad byte of data. We're checking out the hardware personally, but every indication is we'll be back to one hundred percent power by morning."

The medsystem computer woke Becca at 07:45, having allotted her an extra forty-five minutes to compensate for her delayed bedtime. This was a good sign. The absence of sleep-interrupting emergencies or fretful phone calls from Command meant that nothing untoward had happened during the night. That meant that the reactor was online and everything was nominal again.

Happily, her deductions were right. When she got to Engineering command at 09:00, things couldn't have been running more smoothly. The one-time glitch had, indeed, proven to be one time. Greenberg had pulled in a double shift for the morning so that a full complement of people could run hardware and software diagnostics without taking anyone off of normal operations. So far they'd found nothing but a textbook operation; everything was so on-spec that she could almost imagine it was a computer simulation.

The ship's engines were back up to full power, adding a good four kilometers per second every day to the ship's already impressive velocity. The VASIMRs' control systems continued tuning the mix of hydrogen and oxygen, ratcheting up the exhaust velocity past a hundred kilometers per second. Just as planned, they were sacrificing some of the thrust and some of the acceleration but saving a lot of reaction mass. Without these clever, clever engines, the ship would've been twice as big and, Becca thought, her headaches three times bigger.

She'd have to find some way to reward Greenberg and her team for doing such a good job of dealing with and dismissing what had proven to be nothing more than a minor irritation.

At 10:23:47, the Reactor 2 safety subsystem reported a drop in primary sodium coolant pressure and initiated a safe shutdown of the reactor.

It was the first shutdown, all over again, except the inquiries didn't go as well.

"No, Captain, I can't tell you when I'll have Reactor 2 back online. I've got a double complement of people here and we're all over it, and, once again, it looks like a hiccup in the data. Which shouldn't have happened once, and definitely not twice. Until I track it down, we're at half power."

As they worked through the computer data, the last thing she needed right now was another call from Crow, but there it was. At least he was gracious enough not to look smug. In truth, he looked as noncommittal as ever; Becca wondered, a bit maliciously, what it would take to throw him off his guard.

"Dr. Johansson, we should have a conversation."

"I will be happy to do that, Mr. Crow, as soon as I've figured out what's causing the glitch in Reactor 2's safeties."

"You misunderstand me," Crow said. "We need to have a conversation, now."

"Really, I've got more pressing matters than indulging Security's paranoia."

"You don't have any choice, I'm afraid. We either talk now, or I have a marine come down and fetch you, and we'll talk in the captain's office. Pick one."

Becca nodded: "Okay, fine. What would you like to know?"

Crow looked down at his tablet. "I've made up a list of questions. Some are very simple, but bear with me. I want to make sure I'm not making any wrong assumptions. You've had two incidents with Reactor 2 in less than twelve hours, but Reactor 1 is one hundred percent operational?"

"Correct. Unit 1 is behaving perfectly. And, to clarify, there's no problem with the Reactor 2 or any of its related hardware, as far as we can tell. It's the safety subsystem that keeps registering a coolant problem and shutting the core down. Which is exactly what it is supposed to do, except there's no reason for it to be doing that."

"What's different about Units 1 and 2 and why hasn't Unit 1 also gone off-line?"

Becca had to grudgingly acknowledge Crow's talent for getting to the heart of the matter. "There's the rub-there is absolutely no difference between the two units. The reactors, heat exchangers, turbines, and generators and the computer systems are absolutely identical. Well, the hardware is as identical as we know how to make it, and the software is one hundred percent identical. So, we'd expect a purely software glitch to appear in both units."

"Meaning you think it's hardware?"

"No, we're nearly positive that it's software, we just don't understand why it's showing up in only one system."

"Is there any chance this subsystem malfunction is going to shut down both reactors?"

"No, absolutely not, not unless it replicates itself in Unit 1. The two power systems are completely separate. They run completely independently. They don't share any resources, they don't even swap data. We made them as perfectly firewalled, physically and virtually, as we could, so that any kind of failure in one could not trigger a failure for any reason in the other. It's like they exist on different planets."

"Got it," Crow continued, ticking points off on his fingers. "Two identical twins, separated at birth, identical in every imaginable way. Except they're not behaving identically. So they can't be identical." Crow paused for a moment. Then: "I see two possibilities. The first is that you guys didn't do your job right and you missed some critical difference between the two units."

Becca heated up: "I can tell you-"

"Shut up for a minute," Crow said. "The second possibility is that I didn't do my job right and you started out with two identical systems and somebody's compromised one of them. You should assume the former: that it's your screwup. Drill down until you find it. Then keep drilling. If you made one engineering mistake, you made more than one."

"Mr. Crow, my team is very, very good. I'm very, very good. We are entirely competent to do our job-"

"I know that, Doctor, but you're human and you're not perfect. The past twelve hours proves that something here is not perfect. It's got to have a presence, so find it," Crow said. "In the meantime, I'm going to assume it's my screwup. In truth, I think that's more likely. Security is not the reliable business that nuclear engineering is. You think it's a data glitch. I think it's sabotage. I think you're right about the 'what,' but I'll bet you I'm right about the 'why.'"

Becca nodded again. Crow's analysis was plausible.

"I've got everybody I can working on it," she said.

"Do it with the idea that it could also be sabotage. Don't assume that it's simply a data fault: think about how the fault could have been deliberately introduced."

"I will."

Crow disappeared from the screen.

Sabotage was outside Becca's work experience. She needed to work with what she knew. Okay, keep most of the people looking for ordinary hardware or software problems, any kind of anomaly. Put the best computer jocks on cross-checking data dumps between the two systems and thinking about where an error might be injected into the system. A Trojan? Something coded directly into the process control software?

Back at his desk, Crow's thoughts ran even darker. A casual computer cracker wouldn't be able to infiltrate a nuclear power computer system. Nuclear plants had long been considered targets for cyber warfare and the code monkeys had long had procedures in place to prevent some malcontent from inserting a back door or sabotaging a plant.

That, though, was for a normal level of civilian nuclear security, attacked by ordinary crackers. The stakes were a lot higher here, and Crow had no doubt that his own people could break one of Becca's nuclear plants if they really wanted to. Only the criminally stupid or naive assumed the "other side" was less clever. And who would that be in this case?

The Chinese were the obvious possibility, but there were plenty of governments that would be happy to see neither the U.S. nor China get starship technology-and every major state or state-alliance had excellent crackers. Had the Chinese suffered sabotage? Was there any way he could find out?

If it were sabotage, indications so far were that whoever was behind it only wanted the American ship to lose the race, not to be destroyed. They'd only taken out one reactor, not both. Was that by intent, or lack of opportunity, given the system firewalls? Was the disabling of the reactor a warning shot across the bow, a polite attempt to dissuade, but one that could be followed by lethal force?

Another vagrant thought crossed his mind. What if the aliens . . .

No.

Crow launched a secure window request to Santeros's office and cross-conferenced it to the science adviser. At this distance, the round-trip time for a data packet was just shy of two minutes; it'd take a while for the security computers to complete their handshaking. While he waited for them to respond, he reviewed the ship's logs and status reports. Ten minutes later, he got the three-way alert and switched his attention to Santeros. He kept his report screens open. With a several-minute round-trip time at light speed, this was going to be a slow conversation. Santeros launched without preamble.

"Good morning, Mr. Crow. I presume you're calling with regards to last night's power problem on the Nixon. Jacob briefed me this morning. I was given to understand it was a singular event and under control."

"Unfortunately, no. Reactor 2 just safed itself again. Dr. Johansson is proceeding as if it is an engineering fault of some sort, but I don't think she really believes that. Nor do I."

Four minutes. Vintner spoke up. "Run us through your thinking on that."

"One failure could just be a bad byte of data, noise in the line," Crow said. "That's not supposed to get through, but it could. Two in twelve hours is statistically unbelievable. Hardware log checks didn't turn up the phantom pressure drop. It's a repeating problem that only appears in the control software's data. The two power systems are supposed to be identical. Physically, it's not possible to make them exactly the same, so there could be a hardware fault or construction error in one that isn't present in the other. The control code, though, is identical, exactly duplicated in both systems. There should be no fault in one, that doesn't show up in the other. If it was a simple fault, we should be able to isolate it and fix it. The engineers have not been able to do that."

Crow went back to reviewing logs for a bit less than four minutes.

Vintner said, "Got it. If the software's identical, one set can't be throwing repeated faults when the other isn't. Ergo, they're not identical."

"Meaning we're looking at sabotage?" asked Santeros.

Vintner: "It's possible the two systems are running different software builds. They're not supposed to be, but mistakes happen. That'll be easy to check on. Gimme a moment," he said, as he launched a separate call to the code farm that had written the control systems.

"Crow, short form: What was the objective, if it was sabotage?" asked Santeros.

"There're several possibilities." Crow ticked off on his fingers. "On its face value, it slows us down by forcing us to run at half power. The thing is, it doesn't slow us down enough-we still beat the Chinese there. But whoever is responsible for this may not know that. Or it could be a warning shot across our bow-if we don't turn back, worse things will happen. Or it could be the sabotage was only partially successful. Maybe both reactors were supposed to go down and one hack didn't take, or they didn't have time to finish hacking both systems.

"The problem is, there are so many who have the motive and means. On a venture as ad hoc as this one, there'll always be opportunities. The Chinese are almost too obvious a candidate. Doesn't mean they wouldn't, especially if they were sure we couldn't trace it back. Then there's Brazil, India, the United Central American States . . . Did you know most of our code jockeys come from UCAS these days?"

Four minutes and Vintner was back. "The logs check. There's been version coherency on board for at least two full generations of software. The build uploads are done simultaneously to the ship's two power systems after they've passed QC on Earth."

"What does that mean?" Santeros asked.

"It means that if it is a software problem, either the version logs have been falsified to spoof coherency or an Easter egg was inserted outside the normal process. Either way, someone's messing with us," Crow said.

Minutes passed.

Santeros chewed her pen, an ancient and anxious reflex she kept well hidden from the public. "Okay, fellows. Anything else, Mr. Crow?"

Crow said, "One last point. The timing. If it's an Easter egg, the egg didn't go off until we were solidly past solar system escape velocity. If the intent was to shut down both reactors, and if we couldn't fix it, we wouldn't ever be coming back. We'd be on a one-way trip into interstellar space."

Becca rubbed her eyes, clutched her coffee, and stared at her half-eaten bagel as though it were a life preserver. She could use a life preserver: she was drowning in data.

In this case, no news was bad news. She was no closer to figuring out why the reactor had shut itself down than she'd been twenty hours earlier. Looking around the conference room, she could see that everyone else looked as bad as she felt. No consolation that. Everyone there-Fang-Castro, Crow, Greenberg, a couple of code jockeys, and Darlington, the ever-present videographer, recording the conference for posterity.

Self-consciously, she brushed her fingers over her hair. She was still getting used to having it cropped really close, but with the three-minute shower limit it seemed the most practical thing to do. The blond buzz cut she saw in the mirror each morning still startled her. If the marines took short and fat women . . . heh . . . she yawned: it had been another all-nighter, running on coffee and stims. Really, I'm too old for this all-nighter shit-that's grad student stuff, she thought.

Fang-Castro rapped her glass and Becca forced herself to focus.

"Becca," Fang-Castro began, "any miracles?"

"No. I'm really sorry, ma'am, but I don't have anything new to report. I wish I could say we've found a flaw in design or in engineering or a bug in the code or something that we just plain did wrong. I can't say that. Everything looks perfect on Reactor 2, hardware and software. Since we know there's something wrong, I don't feel like I dare fire it up again until I understand what the problem is."

"I agree with Becca, on the hardware side," said an engineer, Larry Trout, who had her back. She felt upset, frustrated, and irrationally furious at the reactor that wasn't behaving itself, but she didn't feel alone. She had the best engineers to work with, ever. "There's no physical reason for the safeties to have gone off. Not once, definitely not twice. It's gotta be a software problem."

Becca nodded unhappily. "But we haven't found it. The diagnostics and the test simulations all come up nominal. Maybe they're faulty, too, but we get identical results from both reactors' computers, and their codes match down to the last bit."

Crow raised a finger. Fang-Castro said, "Yes, Mr. Crow?"

"I don't think you'll find any difference in the operating code," Crow said. "I chatted with some of my colleagues, yesterday, about ways we could sabotage the power system, if we'd wanted to. They had some ideas. Especially about hiding the Easter egg even if you went looking for it. Most of the sabotage isn't buried in the operating code, it's in the data logs."

Fang-Castro looked puzzled, but Becca immediately saw the possibilities, and they did not make her happy. "I know where you're heading with this, Mr. Crow. I don't like it. Go on . . ."

Crow nodded. "The operating code for both reactors is supposed to be identical and the build versions check. If someone had sabotaged only one of those, it would turn up in a byte-by-byte comparison of the systems. There are gigabytes of operating code, but that kind of comparison only takes seconds. Maybe a minute or so, if you're looking for something that isn't resident on the system but in the libraries."

"The data logs are another matter. These have to be substantial?"

Becca made a mental estimate, then said, "Oh yeah, we log every bit of sensor data we can about the reactor performance in real time. It's probably a hundred terabytes a day, maybe more."

"Right. What my colleagues pointed out is that the log records for the two power plants will not be identical, because this is real-time data collected on real physical systems, and they don't perform exactly the same. You can't do a simple byte-by-byte comparison of the data logs, because they shouldn't be the same. That's where you hide the Easter egg."

Fang-Castro said, "I'm not quite seeing it. Something has to put the bad data there, right? We should be able to find that."

Crow smiled. "Ah, that's the tricky part. The operating system is constantly checking the sensor readings and the data logs to make sure everything's running within normal parameters. Bad data can creep into such a system. In fact, it's almost guaranteed to."

Becca chimed in, "For example, the operating system rejects negative pressure values. A noisy bit might switch the sign on a pressure reading once in a blue moon. You don't want the system to respond to that and try to kick the pressure on the lines up. So there'll be a line of code in the software that says, 'If you see a negative value for pressure, ignore it and go look at the next value.' Actually the range and type checking is a lot more complicated than that, but that's the idea. It's to make sure the system can't get confused by obviously erroneous data."

"Just so," Crow said. "But suppose a small loophole were left in the variable checking. It would just take a few lines of code, but if it let the wrong kind of bad data through, that could trigger a fault or put the operating code into an unexpected state and open it up to all sorts of mischief. It might even be something as simple as a handful of code in the operating system that says something like, 'If you read a pressure value of exactly 0.1876, then jump to the following library module.'"

Becca jumped in again. "Oh, I could get a lot more devious than that. We played pranks like this back at MIT. If I were being really nasty, I'd trigger a fault that would load code that was buried in the data log itself. Here's how I'd do it in a couple of lines: "When the attack code reads the trigger data, it loads the Easter egg code from the log. The Easter egg executes, and the first thing it does is erases its code from the log, along with the trigger data. Then it writes itself and new trigger data back into the log at a different point. That way the Easter egg is a moving target in memory and in time. That's a lot harder to pinpoint. Next it triggers the reactor shutdown. Once it's done that, it tells the operating system that it's finished with this task and it's relinquishing the block of memory it's sitting in so that the operating system can load a standard library component back into that chunk of memory. It's erased its footsteps-nothing to find.

"It's all just strings of binary. The computer treats what's in the operating system as programming instructions and what's in the logs as data values. But there's no reason it can't load data from the logs as a program to be run. Normally, that wouldn't make any sense, it would just crash the operating system and it would reboot. But if there really is code buried in there . . ."

Crow nodded approvingly. "Considerably simpler than what my colleagues had in mind, but it's a starting point. Have you ever thought of coming to work for me? I could find a place for you."

"I like my world fine, thank you very much," Becca retorted. "But I'll take the compliment."

Crow said, "If it is sabotage, we don't know this is what the saboteur did or exactly how they did it, what they're using as a trigger. Could be a specific data value, could be an untrapped out-of-bounds fault, there's a dozen ways to do this. And because it only takes a few lines of code to set it off, looking through the code factory's maintenance and revision records wouldn't tell you anything. If the Easter egg were resident in the operating system, there'd be thousands of lines of code, and you'd find the discrepancy in the records. But all that's in the operating system is the tripwire. A couple of lines of odd code? That gets written every day. It can be as simple as a few typographical errors getting corrected. Nobody reviews the quality control records for a couple of lines of code unless it misbehaves, and this is designed to never misbehave without the trigger."

Fang-Castro: "So why has this affected only one reactor and not the other?"

Becca responded, "I can think of several reasons. Maybe someone didn't have time to insert it into the logs on both systems. Or maybe it got inserted in and then flushed and scrubbed in one of the log modifications. The logs are just big repositories for the data that's collected from the two power plants. Essentially they're nothing more than storage bins, and beyond making sure that they're operating the way they're supposed to, we don't worry about them much. We don't treat them exactly the same way."

Fang-Castro ran her hand through her hair. "So you're saying we got lucky. Or half lucky, half unlucky."