Hello,
I have been trying to capture traces of RSA 2048 with my ChipWhiperer. Capturing traces for RSA with keys of length less or equal than 1024 works for me (although sometimes the traces don’t get captured), but I can’t make it work for key lengths greater than 1024. What I basically did was add some lines like simpleserial_addcmd('r', 64, get_pt);
in simpleserial-rsa.c, and call target.simpleserial_write('r', key)
repeatedly until I get a valid trace.
My whole capture function is the following (adapted from CW305_ECC_part1 demo):
lenkey=256
key = bytearray([np.random.randint(0,256) for i in range(lenkey)])
text = bytearray([0x05 for _ in range(16)])
target.flush()
scope.arm()
if(lenkey==16):
target.simpleserial_write('p', key)
elif(lenkey==32):
target.simpleserial_write('q', key)
elif(lenkey==64):
target.simpleserial_write('r', key)
elif(lenkey==128):
target.simpleserial_write('s', key)
elif(lenkey==256):
target.simpleserial_write('u', key)
ret = scope.capture()
TOTAL_CYCLES = scope.adc.trig_count
scope.adc.samples = 24000
diffoff = 2450
rangeoff=100
def get_traces(N=50):
traces = []
offtraces = []
segments = math.ceil(TOTAL_CYCLES / scope.adc.samples)
print(segments)
for i in trange(N, desc='Capturing traces'):
scope.adc.offset = 0
wave = np.array([])
for j in trange(segments, desc='portion'):
ret=True
shiftbool=1
while(ret==True or shiftbool!=0):
target.flush()
scope.arm()
if(lenkey==16):
target.simpleserial_write('p', key)
elif(lenkey==32):
target.simpleserial_write('q', key)
elif(lenkey==64):
target.simpleserial_write('r', key)
elif(lenkey==128):
target.simpleserial_write('s', key)
elif(lenkey==256):
target.simpleserial_write('u', key)
ret = scope.capture()
lasttrace = scope.get_last_trace()
if(offtraces == []):
shiftbool=0
elif(ret==False):
shiftbool = shift(offtraces[-1],lasttrace,rangeoff,diffoff)
if ret:
print("Failed capture")
continue
lasttrace = scope.get_last_trace()
offtraces.append(lasttrace)
wave = np.append(wave, lasttrace)
scope.adc.offset += scope.adc.samples - diffoff
traces.append(wave)
return offtraces
What I get is only
(ChipWhisperer Scope WARNING|File _OpenADCInterface.py:642) Timeout in OpenADC capture(), no trigger seen! Trigger forced, data is invalid. Status: 0b
(ChipWhisperer Scope WARNING|File _OpenADCInterface.py:642) Timeout in OpenADC capture(), no trigger seen! Trigger forced, data is invalid. Status: 08
Did I do something wrong? How can I fix this?
Thanks in advance,
Slangster