Digital systems are designed by assuming the hardware and software being used follows certain logical rules. The addition of two numbers, for example, is assumed to generate the correct result. In certain instances the system will operate incorrectly, and can fail to generate the correct results.
Safety-critical systems—such as found in automotive, industrial, and military applications—cannot tolerate failures caused by incorrect functioning of their embedded computer systems. These safety-critical systems may incorporate fault-detection or fault-correction circuitry or algorithms. This requires a way of validating that the fault-detection or fault-correction circuitry itself is operating correctly.
One way of validation is to use a simulation of the system to arbitrarily insert faults. These faults could be inserted at selected locations of special importance, or inserted at random while monitoring the output for any errors.
For testing a complete system, the system or components of the system will often be specially instrumented to allow the injection of faults. Such instrumentation allows the corruption of certain memory bits, or to cause incorrect calculation results.
Further applications of fault injections are found for testing of built-in self-tests (‘BISTs’) in digital components, such as found in dynamic random access memory (‘DRAM’) modules. Again the objective is the insertion of faults into a digital device. These faults should be detected by the BISTs which are used during normal functioning of the digital device.
In addition, for cryptographic applications the algorithms must be protected against the injection of faults. If even a single computation in a cryptographic algorithm occurs incorrectly, it may be possible for an attacker to determine the secret which the cryptographic algorithm is designed to protect. A number of patents aim to project the algorithms against such attacks, see for example: U.S. Pat. No. 8,861,718; U.S. Pat. No. 7,694,156; and U.S. Pat. No. 8,720,600. A way of evaluating these algorithms is required to be confident that inserted faults will be detected or corrected by the proposed algorithm.