Cryptography(암호학) - AES(블록암호)
오늘은 대칭키 암호 시스템에서 블록 암호인 AES를 알아볼 것이다.(드림핵 참고)
AES는 연산 능력의 향상에 의해 다른 블록 암호인 DES가 안전해지지 않자, 새롭게 표준 된 암호이다.
AES는 지금까지도 치명적인 취약점은 발견되지 않았다고 한다.
1. SPN
AES는 SPN이라는 암호 구조를 가지고 있다.
SPN은 곱 암호의 일종인데, S-box를 사용하는 치환, P-box를 사용하는 순열을 여러 과정에 걸쳐 반복한다.
그냥 치환, 순열(배열), 치환, 순열을 반복하는 구조이다.
SPN은 Feistel과 달리 입력 전체에 라운드 함수를 적용하기 때문에, 같은 라운드를 사용할 경우 더욱 암호학적으로 안정성을 갖게 된다.
2. AES의 구조
AES는 기본적으로 라운드마다 128비트를 암호화하는 블록 암호이다.
길이는 128비트(AES-128), 192비트(AES-192), 256비트(AES-256) 이렇게 3종류가 있다.
AES는 4x4(4행 4열) 배열로 재구성된다.
만약 1FB26EE43C11B2D9F2C57A8103AA4530는 아래처럼 배열된다.
암호화는 먼저 AddRoundKey함수를 실행하고, 마지막 전까지 각 라운드마다 SubBytes, ShiftRows, MixColumns, AddRoundKey순으로 반복한다.
마지막 라운드에서 MixColumns를 빼고 나머지 함수를 실행한다.
복호화는 이 반대로 적용하며 역함수를 이용하여 복호화를 한다.
이제 각 함수들의 역할을 알아보자.
먼저 SubBytes이다.
SubBytes는 State의 각 바이트를 S-box를 이용하여 치환하는 함수이다.
만약 State 중 하나의 바이트가 2A라면 S-box의 2행 A열 즉 E5로 로 치환된다.
이제 ShiftRows함수에 대해 알아볼 것이다.
이 함수는 간단히 4x4배열에서 2행에서 왼쪽으로 1칸, 3행에서 왼쪽으로 2칸, 4행에서 왼쪽으로 3칸으로 이동한다.
복호화는 반대로 오른쪽으로 똑같이 이동하면 된다.
다음은 MixColumns함수이다.
이는 갈루스 필드 내에서 행렬 연산을 하는 함수이다.
복호화는 위의 역행렬인 아래로 계산한다.
Example
AddRoundKey는 state에 생성된 Round key(키생성함수에서 생성한 키)를 XOR하는 함수이다.
3. Key Schedule
키 생성 함수는 각 라운드의 키를 생성하는 역할을 한다.
만약 입력 함수가 다음이라고 가정해보자.
총 라운드는 11개 이므로, 앞으로 10개의 라운드 키가 위를 이용하여 생성된다.
일단 4행 44열의 배열이 있다고 생각해보자.(4x44)
각 라운드 키는 4x4의 배열을 차지한다.
각각의 열을 w(0) ~ w(43) 있다고 생각하자.
w(i>3)을 w(i-1)에 각각 RotWord, SubWord, Rcon 함수를 적용하고 w(i-4)와 XOR를 하여 생성한다.
아래는 w(4)를 생성하는 과정이다.