공부 기록

[정보보안] 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 공부해서 넣기

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
Structure of Each Round

이제 하나씩 뜯어서 알아보자!!!

SubBytes

S-box table을 아용하여 byte단위로 블록을 교환한다.
16개의 독립적인 byte-to-byte 연산을 포함한다!! (2개의 16진수)

이때 GF(2^7) field 이용!!

SubBytes() transformation table
InvSubBytes() transformation table

테이블을 이용해서 00이면 0번째 row와 0번째 col에 있는 63, 12sms 1번째 row와 2번째 col에 있는 C9
반대의 경우에는 InvSubBytes 테이블을 이용해 63은 6번째 row와 3번째 col에 있는 00 이런식으로 바꾼다!!

Pseudocode for SubBytes() transformation

뭐 대충 수도코드는 이렇다고 한다!!!!

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

이런식으로!!! InvShiftRow할때는 반대로 오른쪽으로 shift 한다!!

Mix Columns

state array의 열 단위로 transformation이 수행된다 -> bit level에서 diffusion을 제공하기 위해 자리를 바꾼다!!
이 과정은 다항식과 상태 배열의 행렬 곱셈이다!!

Mixing bytes using matrix multiplication
Constant matrices used by MixColumns and InvMixColumns

이렇게 state의 열을 Constant 행렬과 곱해서 새로운 state로 transformation 하는 것이다!!

Add Round Key

state array의 열에 대해 비트단위로 round key와 xor 한다!!

Add Round Key

Key Expansion

AES의 Key scheduling은 Key Expansion, RoundKey Selection의 두 부분으로 이루어져있다.
각 라운드에 사용하는 라운드키를 생성하기 위해 먼저 Key Expansion 과정을 진행하고
이렇게 생성한 Round Key는 마지막 단계에서 AddRoundKey 동작을 한다.

CIphers and Inverse Ciphers of the Original Design
Cipher and Reverse Cipher in Alternate Design

블로그의 정보

공부 기록

너나나

활동하기