Hi,
I am a student working on a side-channel analysis project. I am using a CW305 (Artix-7 100t) with a custom CV32E40P (RISC-V) soft-core processor running AES in software.
My setup is,
-
CW305 with Artix-7 XC7A100T
-
CV32E40P RISC-V core synthesized as a soft-core
-
Software AES-128 implemented in C (SubBytes/MixColumns/ShiftRows in pure C)
-
ChipWhisperer Python 6.0.0, scope: CW-Lite
-
Clock: 50MHz, ADC: extclk_x4 (200MHz sample rate)
-
target.clkusbautooff = True,target.clksleeptime = 1 -
Using
cw.capture_trace()helper
Using AES_100t.bit (NewAE’s hardware AES), CPA with last_round_state_diff recovers the full 16-byte key in 5000 traces with max correlation ~0.24. This confirms the measurement setup is correct.
It fails when I flash our custom RISC-V bitstream running software AES, CPA fails with all correlations at ~0.07 (noise floor) for both last_round_state_diff and sbox_output models with 5000 and 10000 traces. The trace variance plot shows AES activity spread across ~2000 samples at 200MHz sample rate.
I got some help and tried these stuff,
-
DFsbox_outputandlast_round_state_diffleakage models -
5000, 10000 traces
-
Different sample windows (0-100, 0-500, 500-1000, 1000-2000)
-
Gain settings from 25dB to 45dB
-
SMA cable on X3 and X4
Questions:
-
Is CPA on software AES feasible on CW305 with a RISC-V soft-core, or is the noise from the FPGA fabric too high?
-
How many traces are typically needed for software AES on an FPGA soft-core?
-
Is there a better leakage model or attack strategy for this scenario?
-
Would a different approach like template attacks or TVLA be more appropriate?
Any guidance would be greatly appreciated. Thank you.
