Project update 3 of 9
This last week, we were fortunate to meet many people at CHES in Leuven. We had a small booth with some of our new gear, including the ChipWhisperer-Husky. Here’s what our setup looked like:
Now onto what we’re doing with the Husky. We know many will find the new "segmented capture" feature very useful. Segmented capture lets you capture traces much faster and it can also let you overcome sample storage limitations. There are two ways to use it.
The first method, when
scope.adc.segment_cycle_counter_en is set to
False, initiates a capture whenever a trigger event occurs, without having to re-arm the scope. Each capture is governed by the usual
scope.adc capture parameters.
This can be used to massively speed up trace acquisition: if you modify the target firmware such that the "go" command initiates
N iterations of the target operation (each iteration raising and lowering the capture trigger), then Husky is effectively managing all
N captures independently, without any involvement of the host PC until all captures are complete. We’ve implemented this in our target firmware, so everything works out of the box.
The second method of segmented capture is very similar to the first. Instead of relying on trigger events to denote each segment, Husky counts
scope.adc.segment_cycles between each segment. This can be very useful for target operations that are long and periodic and for which we only need some subset of the power trace. Think of a constant-time public key operation where each bit is processed in constant time. Instead of collecting millions of samples per trace, it may be that only a few samples are needed for each bit of the secret. For an example of this, have a look at the CW305 ECC demo series of notebooks.
ChipWhisperer-Husky is part of AMD FPGA Playground