HHH Ch 12 Lab Help

Hi guys! I’m trying the chapter 12 lab of the Hardware Hacking Handbook. The lab is done with CW-Lite but as I only own the CW-Nano I’m having some problems.

At the moment I’m stuck here:

I know this is using the OpenADC scope and not the CWNANO scope, but I’ve tried making changes and got nowhere. Is there any way to run this lab with the Nano?


For the Nano, you’ll need to set scope.adc.clk_freq and scope.io.clkout to the same value (probably 8E8). You should also remove the scope.adc.basic_mode line. You may need to make other changes to the lab.

You should be able to finish the first part of this lab where you recover the AES256 key, but you probably won’t be able to do the second and third part of the lab where you recover the IV and the signature due to hardware limitations on the Nano.


Thanks for the help Alex! I’m still getting the hang of the Nano.

With your tips I got these traces:

But I’m still having some problems in this part:

I’m not understanding what the values [8492, 21014] are (I’m guessing the samples?) and what the values for the Nano should be in this example, as the correlation values are all close to each other.

Also, if I may ask, I’m reaching the end of my Computer Engineering course and I decided to use the CWNano as the base for my final project in researching if a digital locker is vulnerable to Side-Channel Power Analysis. Is this idea possible? If so, could you give me some tips?

Thank you for all the help.

I’m not sure what the correct sample ranges are for the Nano. It should be near the beginning of the power trace. You can try doing the analysis over the entire power trace.

For the 13th round, you’ll need to capture the beginning of the next round as well.

The thing that springs to mind is a simple power analysis attack similar to what’s done in Chapter 9. I’d see if there’s any differences you can see between correct/incorrect characters in the password.


Hello Alex! Sorry for bothering you. I got the value for the 14th round, but I’m still not understanding the code very well. Could you tell me what the values [8492, 21014] in attack.point_range = decrypt(public, [8492, 21014]) represent? I was thinking that it was sample 8492 to 21014. But in the 13th round the values become [46957, 16007] where the first value is bigger than the second and outside the range of samples so I’m a bit confused.

Thanks for all the help!

I’m not sure how the decryption part works exactly, but you should be able to directly input the point range as attack.point_range = [start_point, end_point].