When implementing side-channel mitigations, it is necessary to validate not only their semantic conformance but also their effectiveness. This is achieved by generating execution traces that are suitable for the given leakage type.
For checking the constant-time properties of a program, assessing the non-interference includes generating traces for the same program under different secret inputs and comparing attacker-observable signals to ensure that no distinguishable leakage remains. For memory-centric side-channels like silent store suppression or ciphertext side-channels, the generated traces must be validated in terms of the absence of repeating memory writes with the same value to the same address.
Implementations for assessing the remaining leakages in programs in terms of memory-centric side channels can be found in the following examples:
- Cipherfix: The mitigation against ciphertext side-channel leakage needs to be assessed regarding its efficacy. The output of a pintool derived from
pinpointis post-processed with the help of a tool that helps to distinguish relevant and irrelevant differences in the output traces. - Zebrafix: With the help of memory write traces, the mitigation against memory-centric side-channel leakages (including silent store suppression and ciphertext side-channels) is checked against repeating memory writes with the same value to the same address within 16-byte blocks. An alert is given when potentially leaky writes are found.