새소식

인기 검색어

Hacking/Crypto

AES

  • -
반응형

AES(Advanced Encryption Standard)

AES는 DES가 더 이상 안전하지 않게 되자, 2001년에 새롭게 표준으로 선정된 블록 암호 알고리즘이다.


AES원리

AES는 SPN(Substitution Permutation Network)이라는 암호 구조를 사용한다.

SPN은 곱 암호의 일종으로, S-Box를 사용하는 치환과 P-Box를 사용하는 순열을 여러 라운드에 걸쳐 반복한다.

AES는 라운드마다 128bit 크기의 블록을 암호화하는 블록 암호이다.

키의 길이는 128, 192, 256중 하나를 선택할 수 있고, 라운드 수는 키의 길이에 따라 10, 12, 14로 결정된다.

그래서 키의 길이에 따라 AES-128, AES-192, AES-256으로 부른다.

AES를 암호화 할 때, 가장 먼저 4*4 행렬을 만든다.

State의 각 칸에는 1byte가 저장된다.

만약 input이 1F3CF203B211C5AA6EB27A45E4D98130을 했으면 밑에 처럼 행렬로 구성된다.

 

이후 행렬에 대해 AddRoundKey 함수를 적용하고, 마지막 라운드전까지 매 라운드마다 SubBytes, ShiftRows, MixColumns, AddRoundKey 함수를 반복하여 적용한다. 그리고 마지막 라운드에는 MixColumns를 제외한 나머지 함수를 적용한다.

 

왼쪽 그림은 해당 글을 그림으로 나타냈다.

 

 

 

 

 

 

 

 

 

AES Round Function

SubBytes

SubBytes는 각 바이트를 S-Box를 참조하여 치환하는 함수이다.

각 바이트의 상위 4bit가 행, 하위 4bit가 열이다.

해당 그림이 S-Box에 해당한다.

예를 들어 위처럼 행렬로 바꿨을 때 SubBytes로 치환한다하면 1행 F열에 있는 C0으로 바뀐다.

ShiftRows

ShiftRows는 각 열을 shift하는데 1행을 << 0, 2행은 << 1, 3행은 << 2, 4행은 << 3을 한다.

MixColumns

MixColumns는 열 단위로 치환하는 함수이다. 이 치환은 갈루아 필드 내에서 행렬 연산으로 구해진다.

복호화할 때는 왼쪽 행렬의 역행렬인 오른쪽 행렬을 곱하면 된다.

 

 

AddRoundKey

AddRoundKey는 키 생성 함수로 생성된 라운드 키의 state를 각 바이트별로 XOR 한다.

 

Key Schedule

AES는 매 라운드마다 AddRoundKey를 적용한다. 그래서 AES-128인 경우에는 round키가 11개 필요하다.

각 라운드 키는 4행 4 열이므로 4행 44열의 키 행렬을 하나 만들고, 이를 4열씩 나눠서 매 AddRoundKey마다 사용하면 된다.

그리고 Rotword, SubWord, Rcon을 적용하고, i-4의 키와 XOR 하여 새로운 W를 생성한다.

반응형

'Hacking > Crypto' 카테고리의 다른 글

DES  (0) 2023.05.23
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.