[정보보안] Advanced Encryption Standard (AES)
by 너나나10 rounds로 구성된 rounded form을 가지는 계층이라고 불리는 3가지 뚜렷한 evolutionary transformations을 기반으로 디자인 됐지만 S/P Network structure에 기초한다.
- Linear Mixing Layer : Stable high diffusion effect (plaintext가 가진 통계적 특성을 ciphertext에서 숨기는 효과)
- Non-Linear Layer : Parallel application of S-BOX
- Key addition layer : XOR operation with intermediate round key
128 bit key 10 라운드로 구성
- 1라운드 시작 전에 round key addition process가 한번 있음 -> 키 없이 attacker가 암호화 또는 복호화를 시작하는 것을 방지
- 192bit keys는 12라운드, 256bit keys는 192라운드로 구성
AES Encryption
- state array로 변환
- 10번째 라운드를 제외하고 각 라운드 함수는 다음의 4개 transformation 상태로 구성된다.
- Substitute Bytes
- Shift Row
- Mix Columns -> 얘는 마지막 라운드에서 수행 x
- Add Round Key
AES Decryption
- encryption process에서 사용한 함수의 역함수 사용
Finite Fields
AES는 finite field GF(2^8)을 사용한다.
- b_7*x^7 + b_6*x^6 + b_5*x^5 + b_4*x^4 + b_3*x^3 + b_2*x^2 + b_1*x^1 + b_0 => {b_7, b_6, b_5, b_4, b_3, b_2, b_1, b_0}
- Byte notation for the element : x^6 + x^5 + x + 1 => {01100011} - binary, {63} - hex
// xtime 공부해서 넣기
![](https://blog.kakaocdn.net/dn/blTptN/btq5QOOc6lx/dWxiOmLBF9gpINP9Advp11/img.jpg)
AES Parameter :
- Nb - Number of columns in the State -> For AES, Nb = 4
- Nk - Number of 32-bit words in the Key -> For AES, Nk = 4, 6, or 8
- Nr - Number of rounds (function of Nb and Nk) -> For AES, Nr = 10, 12 or 14
![](https://blog.kakaocdn.net/dn/zkGiM/btq520gTSGw/827JmEEeHhTf1q4RUtumR0/img.jpg)
이제 하나씩 뜯어서 알아보자!!!
SubBytes
S-box table을 아용하여 byte단위로 블록을 교환한다.
16개의 독립적인 byte-to-byte 연산을 포함한다!! (2개의 16진수)
![](https://blog.kakaocdn.net/dn/bKSBdK/btq53i9rTOt/hZ2uvUED0U4djzJhkSM9sk/img.jpg)
이때 GF(2^7) field 이용!!
![](https://blog.kakaocdn.net/dn/bA6BcT/btq520OMJ1r/KCpTlBzdZts6umx8vqXQvk/img.jpg)
![](https://blog.kakaocdn.net/dn/n0sb5/btq53k7ew5Q/yX3FIuWb7kvpdGl8jVBIo0/img.png)
![](https://blog.kakaocdn.net/dn/cUVgMa/btq52TvinCU/8t5UY0BRTNhWizKC7akXyK/img.jpg)
테이블을 이용해서 00이면 0번째 row와 0번째 col에 있는 63, 12sms 1번째 row와 2번째 col에 있는 C9
반대의 경우에는 InvSubBytes 테이블을 이용해 63은 6번째 row와 3번째 col에 있는 00 이런식으로 바꾼다!!
![](https://blog.kakaocdn.net/dn/n8kS6/btq52hXNVzG/uFNpZLxNnjbslS7GKD3aRK/img.png)
뭐 대충 수도코드는 이렇다고 한다!!!!
Shift Rows
- encryption에서 transformation은 ShiftRows 라고 부른다!
- decryption에서는 InvShiftRows라 부르고 shifting은 오른쪽으로 한다!!
ShiftRows를 할때는 왼쪽으로 shift한다.
- Row 0 : no shift
- Row 1 : 1-byte shift
- Row 2 : 2-byte shift
- Row 3 : 3-byte shift
![](https://blog.kakaocdn.net/dn/rhB8s/btq54MWlyrN/DkFCV9qTs6pBxaG6kTG1Q1/img.jpg)
이런식으로!!! InvShiftRow할때는 반대로 오른쪽으로 shift 한다!!
Mix Columns
state array의 열 단위로 transformation이 수행된다 -> bit level에서 diffusion을 제공하기 위해 자리를 바꾼다!!
이 과정은 다항식과 상태 배열의 행렬 곱셈이다!!
![](https://blog.kakaocdn.net/dn/bLlXmO/btq53RcKKlg/lMcBpMnMj9fJtOkakuhqf1/img.jpg)
![](https://blog.kakaocdn.net/dn/cbLX0Z/btq52AbLFeZ/sY9pZgzKsVqbYP7pGHM5kK/img.jpg)
![](https://blog.kakaocdn.net/dn/bF8Dzp/btq54nCvg1D/AyiyTISuA25E2nY5joBDVK/img.jpg)
이렇게 state의 열을 Constant 행렬과 곱해서 새로운 state로 transformation 하는 것이다!!
Add Round Key
![](https://blog.kakaocdn.net/dn/c0Wkqy/btq53RjwX40/MZIpr9il4iPPPp0YNnTbhk/img.jpg)
state array의 열에 대해 비트단위로 round key와 xor 한다!!
![](https://blog.kakaocdn.net/dn/bRnqNj/btq53Y33rWm/kmsmxyLKqkcW5qCV4tmIlK/img.jpg)
Key Expansion
AES의 Key scheduling은 Key Expansion, RoundKey Selection의 두 부분으로 이루어져있다.
각 라운드에 사용하는 라운드키를 생성하기 위해 먼저 Key Expansion 과정을 진행하고
이렇게 생성한 Round Key는 마지막 단계에서 AddRoundKey 동작을 한다.
![](https://blog.kakaocdn.net/dn/HDn2p/btq57HNKUsj/OrG4l6xSsxI9inkcGgzMV0/img.jpg)
![](https://blog.kakaocdn.net/dn/bs52PB/btq53ZoockP/wKeKWRlTXZ6VnC7c7d9sB0/img.jpg)
![](https://blog.kakaocdn.net/dn/daryfV/btq52o3H2VX/fVKBLFFqxyo16autKLM0r1/img.jpg)
'2021-1 > 정보보안' 카테고리의 다른 글
[정보보안] Hash function (2) | 2021.05.31 |
---|---|
[정보보안] Stream Cipher (0) | 2021.05.26 |
[정보보안] Block Cipher modes of Operation (2) | 2021.05.11 |
[정보보안] Data Encryption Standard (DES) (0) | 2021.05.11 |
[정보보안] Block Cipher Structure (0) | 2021.05.09 |
블로그의 정보
공부 기록
너나나