Shine's dev log
AES 암호화 본문
앞서 살펴본 DES는 컴퓨팅 파워가 증대되면서 더이상 안전하지 않은 암호시스템이 되었다.
이에 더 강력한 암호시스템을 만들고자 NIST (미국 국립 표준 연구소)에서 공모하였다. 그 결과 Rijndael 알고리즘이 채택 되었고, 그렇게 AES가 탄생하게 되었다.
1. AES (Advanced Encryption Standard)
기본정보
- 128비트 블록사용
- 128, 192, 256 비트 키 사용 (사용하는 키의 길이에 따라 라운드횟수가 다름 : 10, 12, 14)
- SPN 구조이다 (Feistel 아님)
- DES 보다 6배나 빠르다.
2. AES의 구조
즉, 간단하게 말하면, 처음 입력값을 1) Initial transformations 하고, 2) N번의 라운드를 진행하는것이다.
- State
AES에서는 State 단위로 연산되는데, 주로 4x4 2차원 배열을 사용한다.
위의 그림에서 알 수 있듯이, coulumn-major order을 사용한다 (세로로 읽는것)
3. 라운드
각 라운드마다 4가지 연산을 수행해준다.
1) SubBytes - Substitution
2) ShiftRows - Permutation
3) MixColumns - Substitution
4) AddRoundKey - Substitution
3번의 Substitution과 1번의 Permutation 이용된다.
- SubBytes
- State상태의 bytes를 8비트 S-box를 이용하여 뒤섞어주는것
- 예를들면 00이란 녀석은 63으로 바꿔진다.
- ShiftRows
- 각 행을 일정한 개수만큼 왼쪽으로 밀어주는 과정.
- 첫번째행은 그대로, 두번째행은 1칸, 세번째행은 2칸, 네번째행은 3칸 왼쪽으로 Shift 한다.
- MixColumns
- 열단위 연산을 수행한다. 각 열의 바이트에 상수를 곱해 새로운 값의 열을 만든다.
- 이 때 행렬을 곱해주는 과정을 invertible lenear transformation이라 한다.
- AddRoundKey
- 4x4 state에 키를 각각 xor연산 해주는 과정.
- 라운드 과정 중 유일하게 키를 사용한다.
- 라운드마다 다른 키를 이용하기 위해서는 키스케줄링이 필요하다.
4. 키스케줄링 (Key Expansion)
- 1) 키 확장(Key Expansion)과 2) RoundKey Selection 두 단계로 진행
키확장으로 여러개의 라운드키를 생성하고, RoundKey selection으로 각 라운드의 AddRoundKey과정에 넣어준다.
- 키는 word 단위 (4byte)로 처리를 한다.
- 키의 마지막 word를 RotWord, SubWord 한 후 RCon과 XOR하면 t값이 생성된다.
- 생성된 t값은 다음 라운드키를 생성할 때 사용한다.
- RotWord : 하나의 열을 ShiftLeft해주는 과정
- SubWord : word의 4bytes를 s-box를 이용하여 substitution하는 과정
- RCon : 1word 크기의 일종의 상수값이다. 오른쪽 3bytes는 0이다.
5. AES의 안전성
아직까지 AES가 뚫린적은 한번도 없다.
하지만, 많은 공격시도가 계속되고 있기 때문에, 되도록 192bits나 256bits키를 사용할 것을 권장한다.
오늘 배운 내용을 정리해보면,
1. AES는 128비트 블록단위로 암호화하는 대칭키 암호화 방식 중 하나이다.
2. 키는 128비트, 192비트, 256비트 중 하나 사용하고, 키의 길이에 따라 라운드수도 달라진다.
3. 각 라운드는 3번의 Substitution과 1번의 Permutation과정으로 이루어져있다.
4. 키스케줄링으로 라운드키를 생성해주는데, 10라운드라면 44word의 키를 만들어주어야 한다. (4 + 40)
본 내용은 공부하며 정리한 것으로, 오류가 있을 수 있습니다.
'보안' 카테고리의 다른 글
블록 암호 운용방식 (Modes of operation) (0) | 2020.05.14 |
---|---|
RC4 암호 알고리즘 (0) | 2020.05.14 |
DES 암호화 (0) | 2020.05.07 |
블록암호(Block cipher)와 스트림암호(Stream cipher) (0) | 2020.05.06 |
치환암호와 전치암호 (0) | 2020.05.05 |