16.6 The Take-Home Message
We often think of our system as the software we’ve written. However, a complete view of "the system" includes the hardware that executes the instructions we’ve written. As we’ve been discussing throughout this chapter, the set of hardware components that we rely on to run our applications can make or break the security of the system. Hardware can aid us in building more secure and resilient systems; it can also make that job much more difficult.
Even if you never design or build a hardware component, understanding the features and limitations of hardware will help you design better systems. Where can we store secrets? Does the hardware protect computation and data? What types of adversaries are they protected from? These types of questions should be part of the standard checklist when it comes to building secure systems; they are certainly part of any good attacker’s.
There’s something strangely GÖdellian in thinking that we can make software more secure by simply writing more, perhaps better, software. If we end up with either incompleteness or inconsistency, there’s a good chance that some security trouble is lurking just around the corner. If designed and used correctly, hardware might be able to help. As with anything else, it’s no magic bullet. It’s a tool that, when applied appropriately, can solve certain issues.