controlpro
[부채널] SEED CPA 하기 첫번째(기본적인 setting) 본문
방학때 부채널 공부를 하고 있다.
전에 AES파형을 분석을 했고 이번에는 SEED파형을 내가 직접 분석을 시작했다.
전에 SEED알고리즘을 만든것을 기반으로 한 CPA이다.
보통 컴퓨터는 bit단위의 계산을 하는데, 0이면 사실 계산을 안하고 1이면 컴퓨터는 계산을 한다. 계산을 할 때 발생하는 전력량을 이용해서 RoundKey를 알 수 있고, 이를 이용해서 최종적으로 MasterKey를 복구하는 게 목표이다.
파형을 연구실에 있는 장비로 수집을 했고, 파형은 따로 올리지 않겠다 . (직접해보고 싶은 분들은 댓글로 이메일 주소)
기본적으로 CPA를 할때 코드는 C로 했다. 파형의 길이는 10000이고 사용한 plaintext는 16byte짜리 1000개이다.
0. Plaintext

일단 한글자에 1byte 총 16byte의 평문이 있고, 이 set가 1000개 있다.(파형의 잡음 때문에 적어도 1000개는 있어야 정상적인 CPA가 된다고 한다.)
그래서 코드를 짤때 plaintext를 16byte씩 읽어서 저장하면된다.(fopen 할때 rb로 하는 것이 중요하다.)
1. Trace
가장 중요한 파형이다. 파형을 그래프로 보기 위해서 matlab을 사용했고, read_traces.m이라는 함수를 짜서 읽었다.


다음 파형은 키스케줄없이 만든 것으로 16round 진행이 다보이지는 않고 마지막 16 Round부분이 조금 흐릿하게 보이긴 한다.
위의 사진이 첫번째 파형이 다음과 같은 것이고, 보통의 파형을 모으다 보면 파형의 정렬이 잘 안맞는 경우가 많다.
(다음 환경에서는 대체로 다맞아서 그냥 진행)

이게 두개의 파형(plaintex 별로 파형이 하나씩 있는 경우)을 동시에 보는 경우고 조금더 자세하게 보면

이정도면 파형의 정렬이 잘맞는경우다.(나중에 AES 파형을 보면 정렬이 잘 안 맞다...)
2. 정렬 맞추기
파형이 정렬이 잘맞긴 한데, 그래도 정렬이 필요한 상황이 있으니까 정렬을 시작해보자.
정렬을 하는 부분은 총 2개로 나누어져 있고, 실제로 정렬이 일어나는 부분은 subalign이다.
일단 align 함수이다. 일단 data1에는 원파형이 들어가고 data2에는 앞으로 정렬될 파형이 쓰여질 파일이다. window, stepsize, threshold를 파형에 따라서 설정해주면된다.
1. windowsize : 파형을 이동시키는 기준
2. stepsize : 파형을 정렬 단위
3. threshold : 임계치
실제 정렬이 이루어지는 부분을 확인 해보자
원리는 간단하다.
상관계수의 개념을 이용한거다. 보통 정렬이 파형이면 원파형이 y값 파형의 실제값이 증가하면 , 다른 파형역시 y값이 늘어날 것이고, 반대도 마찬가지 일 것이다. 그래서 threshold값을 조정해가면서 실제로 파형의 상관계수의 값이 가장 높을 때, 정렬이 맞을 것이다.
그래서 첫번째 파형을 그대로 두고 두번째 파형부터 각각 전 파형의 상관계수와 맞추어서 정렬을 하게 된다.
여기서 maxcovpos 즉 threshold값이 0보다 작을 경우는 두번째 파형이 앞으로 밀려있어서

다음과 같이 맞춰 되야하는 경우이다. (결론적으로는 두 파형의 길이는 같은데 이해를 위해 다음과 같이 했습니다.)
이 경우에는 data2의 인덱스를 앞으로 하나씩 땡기면서 정렬하면 된다.
그러면 그반대는 다음과 같다.

여기서는 조금 주의를 하는게 좋은게 정렬할 파형의 idx으를 뒤로 밀면서 정렬을 해야하는데 , 앞에서 부터 idx를 뒤로 밀면서 정렬을 하면, 기존의 정렬할 파형의 값이 사라져서 뒤에서부터 거꾸로 정렬을 해야한다.
이런식으로 stepsize 만큼 계속 돌면서 파형을 정렬을 하면된다.
이러면 파형의 중간 중간 비는 부분이 생길텐데 어짜피 보통 CPA하는데 마지막 round 까지 필요하지는 않아서 바로 size값만 맞추면 idx가 벗어나는 부분을 조정해주면 된다.
'코딩 > 부채널 관련' 카테고리의 다른 글
[부채널] SEED CPA 하기 세번째 (0) | 2021.02.02 |
---|---|
[부채널] SEED CPA하기 두번째 (0) | 2021.02.02 |
[Coding] 필요한 알뜰신잡 (0) | 2020.12.16 |
[Coding] correlation (0) | 2020.12.15 |
[Coding] 상관계수 (0) | 2020.12.15 |