주저리주저리 내가 아는 AES는 말이지...
·안녕하세요 주인장입니다.
바쁜 나날들을 보내다 문득 블로그가 생각나 들어와 봤어요.
스킨도 좀 바꿔보고 했는데 어떠신가요 저는 영 어색하네요.
이 말을 하려고 들어온건 아니고 갑자기 들어와본 블로그에 AES 관련 게시글이 너무 얼렁뚱땅 마무리된 것 같아서 제가 기억하는 AES를 추억할 겸... 함 적어보겠습니다.
틀린 부분은 스스로 고쳐나갈 예정이나 완전 박박 틀렸다 하는 부분을 발견하시면 댓글 주세요.
1. AES의 구조
SPN 구조라고 하는 치환-대치(맞나?) 구조를 하고 있습니다. 한 라운드는 크게 4가지 순서로 구성이 되어있는데요. 다음과 같습니다.
- SubBytes
- ShiftRows
- MixColumns
- AddRoundKey
지금부터 이 4가지 과정을 하나씩 요약해보면,
2. SubBytes
보통의 상황에서 구현을 할때에는(그리고 또 간략하게 배울때에는) SubBytes 과정은 S-Box로 대체합니다.
128비트 입력에 대해 128비트 출력을 테이블화 하여 해당 값을 리턴하는 형식으로 구현합니다.
대부분의 구현은 효율을 위해 테이블 참조로 구현되어 있어 S-Box와 관련한 공격도 여러가지가 있습니다. (선형공격, 차분공격, 불능차분공격등...)
이러한 공격에 관해서도 나중에 블로그에 다룰 수 있는 날이 왔으면 좋겠습니다. (시간적 여유가 좀 있었으면 좋겠다는 뜻. 교수님 일이 너무 많아요)
다시 본론으로 돌아가자면 S-Box 테이블은 다음 두가지 연산 결과를 합친 결과를 테이블로 표현한 것입니다.
- multiplication inverse 곱셈에 대한 역원
- Affine transformation 아핀 변환
우선 곱셈에 대한 역원부터 이야기 하자면, AES는 GF(2^8) 유한체 연산을 기본으로 합니다. GF는 가우시안 필드로, Finite Field 유한체를 의미합니다. 자세하게 말하면 2^8 유한체에서의 곱셈 역원을 구하는 과정인 것입니다.
곱셈에 대한 역원은 현대대수 시간에 배웠는데 기억은 잘 안나고, 대충,
a · b = 1 일때, a는 b의 곱셈에 대한 역원이다.
정도로 알아두시면 될 것 같습니다. 여기서 · 은 유한체에서 정의한 곱셈이고, 1은 유한체에서 정의한 곱셈에 대한 항등원을 의미합니다.
다음은 아핀 변환 입니다. 이 변환은 선형대수 시간에 배우는 부분인데 제가 화목 1교시라는 벽에 부딪혀 과감히 수강신청을 포기하고 고학년인 지금, 눈물을 머금고 월수1교시를 신청하여 이번 학기에 듣게 될 예정입니다.
이 부분 구현시 단순한 행렬 곱으로 받아들여 구현하였습니다.
3. ShiftRows
이 과정은 단순히 4 by 4 행렬을 규칙에 맞게 shft해주는 과정으로 첨부한 사진을 보시면 이해가 쉬울 것 같습니다.
4. MixColumns
이 과정도 행렬 곱에 관한 이야기로, MD5 머시기를 해서 이 부분에서 무슨 0이 나올 그게 무조건 5이상인가 그런게 있었는데 매우 부정확한 정보로 선형대수 수업 좀 듣고 다시 수정하도록 하겠습니다.
아무튼 행렬곱입니다.
5. AddRoundKey
드디어 마지막 과정입니다. 바로 전 포스트인 key expansion 과정을 거쳐 생성한 라운드키를 XOR 해주는 과정입니다.
단순한 xor 과정이지만 중요한 부분이기도 합니다. 왜냐면 키를 직접적으로 사용하는 곳은 이곳 밖에 없으니까요.
암호는 키 복구와 메시지(평문) 복구가 가장 위협받는 공격입니다... 우리 모두 주기적으로 비밀번호를 바꿔보아요. 물론 저는 안 바꿈 제 블로그 해킹하면 울어요
지금까지 간략한 정리였습니다. 저는 이제 다시 일하러 가볼게요. (새벽내내 이거 왜 안돼? 할 예정)