Things at work were strange as well. He’d clearly made a big mistake going to Audrey Addams; he was sure she looked at him differently now. And Dirk Magnus seemed to be avoiding him. Perhaps the rest of the IT staff was, too, except for Ruth. Or maybe it was just that everyone was on edge, wondering how the bombshell dropped by the investment bankers would play out. Should he just resign? No, there was no point reacting until he knew what reaction would be meaningful. Even then, though it might be more stubborn than smart, he wasn’t willing to quit for anyone’s reasons other than his own.
Instead, he doubled down in his office, pursuing a new angle. Perhaps he’d been wearing self-generated blinders all along, studying only his air-gapped copy of BankCoin. A real enemy trying to hack a live copy maintained by a bank would have additional targets and points of potential weakness to work with, like customer wallets, analytics software, and much more. Each of those programs could have vulnerabilities or be configured in a way that might allow a black hat to get to the BankCoin blockchain itself. That was an interesting observation.
So, he set up a new system, this time connected to the internet and as close as possible to the kind of real-world environment an enemy agent or terrorist would encounter. He also added a lock to his office door – what if the person doing strange things in his apartment was also a bank employee?
When he had the servers properly configured, he downloaded a full copy of the BankCoin blockchain, right back to the Genesis Block, together with all of the billions of transactions recorded to date, and linked it to the First Manhattan copy so it had access to new blocks as they were created. Then he added the other programs that First Manhattan ran inside the BankCoin firewall that interacted with BankCoin. That meant warehousing an enormous amount of data and software. So, fifteen new high-capacity servers were now humming away in his office in floor-to-ceiling racks, together with a portable air conditioning unit that struggled bravely and not completely successfully to counteract the heat the computers threw off. He could barely move. Or breathe.
Every few hours, he needed to turn everything off except the AC unit so he and the servers could cool off. Powering down the servers was fine. When he restored power, the system automatically updated itself, downloading all the transaction blocks that had been created while it was off line.
When everything was up and running, he tried every way he could think of to mess with the software. For starters, he looked for a way to interfere with the verification of new transaction blocks; if a hacker could penetrate as few as a couple dozen banks and block the confirmation of new blocks, the whole global network would grind to a halt. But his new copy of BankCoin performed that function flawlessly, no matter what he attempted, so he went on to the next approach on his list.
After several days, he ran out of ideas. That sucked, because the worst thing about life in his gilded cage at First Manhattan was that he had so few assigned duties to keep him busy. Now what? He decided to go back to his air-gapped system and the early version of BankCoin to look for inspiration.
For what felt like the hundredth time and might in fact have been not far short of that mark, he studied the BankCoin source code that created the Genesis Block. As always, the occasional bits of sloppy code annoyed him. He wondered whether Schwert later cleaned that code up. Without any more productive ideas to pursue, he logged on to GitHub to find out. To his surprise, all the lines of what he considered to be junk code were still there. Talk about lazy! Schwert might be the top dog on the BankCoin project, but that didn’t mean he was perfect. Did no one dare to submit fixes for code Schwert wrote? Maybe not.
Well, maybe Frank would be the first. At the beginning, he’d loaded a series of developer tools on his air-gapped system, and he turned to them now to clean up the source code. Then he used a compiler – a software program that turned human-readable source code into machine-readable object code – to add the edited code back into the copy of BankCoin on his air-gapped system. To be sure the software would still run, he created a new block of test transactions and gave the command to add it to the blockchain.
It didn’t work. Specifically, the new block failed to link up to the block before it.
Okay. That was humiliating. Had he made a mistake? Then he remembered that Schwert had built his own compiler for BankCoin development. All the banks used it, and Frank had dutifully loaded a copy on his air-gapped system, too. He’d always thought the need for a special compiler was odd – source code was source code, after all. He couldn’t imagine what could be so different about BankCoin as to require the use of a customized compiler whenever a developer needed to turn new BankCoin source code into object code.
He went back over the changes he’d made to the source code and couldn’t see anything that should have caused a problem, so he opened the Schwert-approved compiler and repeated his actions – compiled the source code, updated his air-gapped system, created a block of pretend transactions, and tried to add it.
The Schwert compiler didn’t work either. So, he must have screwed up. But how? The changes were so minor …
He decided to run each of the two compilers using the original BankCoin code instead of his cleaned-up code and see if that told him anything. It did. The Schwert compiler took longer to do the job. Not just a little but twice as long. That was really odd. He sent off an email to Dirk Magnus, asking if he knew what was so different about the Schwert compiler.
He drummed his fingers on his desk. What could make one compiler run at the same speed as another when converting one set of source code and so much longer when running the same code with such minor changes? Wasn’t a compiler just a …
He slapped his head. Idiot! Of course! A compiler was only a compiler until you turned it into something else, and Schwert had created his own compiler! What Frank had thought was junk code must not be junk at all – it must be commands that triggered Schwert’s compiler to add in a lot of extra code not reflected in the source code at all! When Frank deleted what he thought was junk code from his copy of BankCoin, it was no longer capable of creating a viable block of transactions no matter which compiler he used.
Frank ran the two compilers again using Schwert’s original source code and watched the object code as it was compiled. Sure enough, as soon as Schwert’s compiler got to the first bit of code Frank had thought was an error, it started churning out lots of object code that his compiler didn’t.
That meant the source code every bank in the BankCoin network was relying on was incomplete. With a lurch, he realized that also meant every block in the BankCoin blockchain contained mystery code with a purpose Frank was sure would prove to be malevolent.
Frank stood up and started pacing a circuitous route between the server racks crammed into his office. All the pieces were falling into place now. The malware he’d been seeking for so long had been there all the time, built into the blockchain itself but invisible. That meant the virus scanner he’d admired so much was only there to mislead security professionals like him. No! That wasn’t entirely true – it would also protect BankCoin from any other attacker, making sure no one else could interfere with the master plan of its designer, whatever that might be. And with the malware already in place, it would take only a few lines of code in a new block to trigger the malware – far less code than the two hundred lines of extra software needed to set off an alarm from the virus scanner.
That had to be it, in part because it was so simple. Once the block containing the triggering code was distributed throughout the BankCoin network, it would transmit the order to the block before it, which would then do the same, and so on, all the way back to the Genesis Block, triggering whatever mayhem the malware had been designed to unleash.
He was pacing faster now, dodging his way between the server racks and changing direction every few seconds, his mind moving on unimpeded. He’d finally discovered the fatal vulnerability he’d always feared might lurk in BankCoin.
And also identified his enemy – it could only be Schwert himself. Schwert had indeed been careless, but not in the way Frank had first assumed.
The mysterious programmer’s slip had been to save a bit of time by not hiding the bits of code that would instruct his compiler to add the mystery code. Perhaps he thought no one would notice. Or maybe Schwert intended them as temporary shortcuts he would return to fix later on, but then forgot about. That was probably it. BankCoin was a massive and complex program; it was incredible that any single developer had come so close to perfection.
So, what did the additional code do? The tools on Frank’s air-gapped system also included a decompiler. As its name suggested, a decompiler did the opposite of what a compiler accomplished. He could use one to turn the object code Schwert’s compiler had created back into source code that he could read and understand. Then the answer to the question would be clear.
But no such luck. When he ran the code through the decompiler, he found that Schwert’s compiler had done something else unexpected: in addition to converting the source code into object code it had “obfuscated” it, meaning it stripped out the information that made source code easy to understand. Then, it went a step further, scrambling the code in ways that wouldn’t stop it from running but would make it impossible for Frank’s decompiler to turn it back into understandable source code.
That cinched it; the camouflaged code must be malware. Otherwise, why prevent it from being usefully decompiled? But figuring out what it was intended to do would be a tedious and challenging process. He would need to analyze the object code line by line, parsing out what it meant with none of the plain English – plain English to a programmer, that is – labels and guidance that source code provided. Instead of reading, for example “” he’d be looking at nothing but ones and zeros and trying to figure out what that was telling the computer to do.
Clearly, this would take a while. He had a lot of code to go through. He looked at his watch and realized he’d need to hurry if he was going to catch his plane. Just as well; he’d rather tackle the job at home. He copied the extra object code onto a thumb drive and dropped it in his pocket. Then he locked his office door and headed for the airport.
* * *
The days had turned into a blur of late for Crypto; everything seemed to be confusion and danger now. And his nights were troubled. Almost immediately after falling asleep, what he now referred to as The Dream would come to him, always ending in The Question. It was repeating endlessly now, leaving him as exhausted in the morning as he had been the night before. The Dream had changed subtly, too. The visage of the king of spades had morphed into the sour, frowning face of his father and that of the queen of hearts into the sad features of his mother.
What did The Dream and The Question mean? What could they mean? He had no idea.
So very much had changed. In the early days of his quest, he had felt like a classical composer, summoning grand, creative visions from his heart and brain to create a majestic melody. Those had been wonderful days, working out the concept of the blockchain. Then came the equally pleasurable, but more structured, steps. Just as a composer transformed his melody into the complex score of a symphony, Crypto mapped out the detailed architecture for the blockchain. As time passed, his work changed yet again. To extend his musical metaphor, like the composer who must next laboriously create the score for each section of the orchestra – strings, woodwinds, and so on – Crypto nurtured the evolution of his creation by translating his architecture into an assemblage of software modules, each making its own contribution to the harmony that was the sum of the blockchain’s creative parts.
Then the truly hard and unforgiving part began. Once his full symphony score was complete and revealed at GitHub, he had to deal with the developer musicians, as it were, with all their tedious quirks and passions. And then the outside world as well. Just as a composer was vulnerable to the whims and business concerns of the management of the grand concert house where his magnum opus would premiere, Crypto was subject to the caprices of banks and bureaucrats and regulators. All the nonsense and idiocy that dragged true genius into the gutter.
Not a perfect metaphor, Crypto thought. But also, not bad. With opening night now fast approaching, he was increasingly a spectator, waiting to see whether his true creation – the long-planned attacks – would collapse before the curtain went up or open to resounding applause and standing ovations. The latter, of course, from a very select audience of anarchists. He wasn’t expecting good reviews from the critics.
The emergence of the investment banker’s blockchain was a cruel development, now that he was so close. Whatever it took to save his decade of creativity and sacrifice he would have to do. He was in agreement with the Bees about that, with the sole exception of murder, no matter what he had told them. There were some lines he would not agree to cross.
Ding!
He glanced at his computer screen; the tone had signaled the arrival of the daily download of Frank’s activity sent by Crypto’s spyware. He scanned his way downward and then almost screamed, reflexively clutching his desk with both hands as a gut-wrenching attack of vertigo seized him. There, on the screen, was a short email Frank had sent to Dirk Magnus. It read:
Dirk, can you tell me what’s so special about Schwert’s compiler?
It was time for Crypto to go to Plan B.
* * *
With the change of atmosphere in New York, Frank was once again looking forward to returning to Washington each week. When he arrived home this time, it was a dark and windy night. He dumped his things in his kitchen, poured himself a scotch and settled down in his living room with his laptop. Something moving outside the sliding door caught his eye. He couldn’t make it out, though; it was only when the headlights of a passing car cast light in his direction that he caught the shadowy movement. Whatever.
He took a bigger pull than usual on his drink. His initial elation at discovering what he was sure was malware in BankCoin had yielded quickly to frustration and anxiety. The extra code Schwert’s compiler generated ran to over nine thousand lines. How long would it take him to slog through all that? What if Schwert launched an attack before he was done? He’d better alert the bank. Better to sound a false alarm if he was wrong than fail to alert others if he was right.
What was that outside? It looked like something flapping back and forth where the feeder used to hang. Whatever it was, it was very distracting.
He got up, turned on the light on the balcony, and immediately stepped back, fighting a surge of nausea.
There, hanging from the balcony above, tossing in the embrace of the gusty wind, was the eviscerated carcass of Fang.
He turned and looked wildly around. There it was! On the dining room table!
He ran over and picked up a small, folded piece of cardboard. On it, he read:
BankCoin – Russ Task Force – or Marla
Choose one
“Due to an unexpected family emergency I’ve had to leave town and will be out of touch for at least a week.”
With trembling fingers, he typed the message into emails to Audrey Addams and Colonel Dix. Then he dashed out of his apartment, keying an Uber request into his phone as he ran.
Chapter 43
Fancy Meeting You Here
The Uber arrived at last, and Frank jumped into the back seat.
“Here for Frank?” he barked.
“Check.”
“Great – step on it. Get me there in fifteen minutes and it’s a twenty-dollar tip.”
“Great!” the driver said.
The sedan lurched away from the curb, as Frank’s mind raced ahead to its destination. He’d sent the messages as instructed, but who knew whether that would make any difference. For all he knew, whoever was threatening him might have already kidnapped Marla to make sure Frank would obey whatever orders a
rrived next.
He pulled out his phone and called George Marchand. Thank God – he answered.
“George – Frank,” he almost shouted. “The usual place. Half an hour. Don’t let me down!” Then he hung up, his mind still in a whirl. What should he do next? No – don’t call Marla. His phone or hers might be tapped. Just get there as fast as possible and hope to find her there. What would he do if he didn’t? Better not to think of that.
If she was, they’d go straight to the coffee shop and wait for George. That was a public place; they should be safe there with so many witnesses. George would have to figure out where and how to keep Marla safe until whatever was going on was over.
And then what should he do? Did he already know too much? The answer to that was clear, now that he thought about it. He’d need to ask George to find a safe house for him and Marla both. And Tim, too.
And what could all this be about? Who was behind it?
The thoughts went around and around until finally he was outside Marla and Tim’s small apartment building. He realized he’d forgotten to add a tip on the app and threw a twenty-dollar bill at the driver before bolting out of the car and up to the building. But after he threw the door open, he paused, his heart pounding; the light was out in the hallway. He could barely see.
He heard a sound behind him. Then he couldn’t see – or think – anything at all.
* * *
George Marchand waited a half hour at the coffee shop before concluding that something had gone wrong. Damn Frank – why hadn’t he said what was up when he called? Was it because someone was listening, or was he too agitated to think clearly?
He called the Frank’s cell phone and then his number at the bank. No answer at either. He hung up without leaving a message.
Now what? Calling the police was no good, at least to start with; if he could persuade them to get involved at all, it would take far too long. Frank wasn’t working with the CIA, and the Agency had nothing to do with BankCoin. So, he couldn’t think of an excuse to contact them in his official CIA capacity. He knew Frank was working for CYBERCOM on the Russ Task Force because he’d made the introduction. What was the name of the person he’d introduced Frank to?
The Blockchain Revolution Page 31