학습목표
암호화 방식들에 대해서 알아보자. 깊게 파고들순 없어도, 개론수준까지는 알고있도록 하자. 이번 포스팅에서는 여러 암호화 방식중 AES-128 암호화에 대해서 알아보도록 하자.
AES-128
AES는 <Advanced Encryption Standard>의 약자로 '고급 암호화 표준'라는 의미이다.
AES는 미국 표준 기술 연구소에 의해서 연방 정보 처리 표준으로 지정된 암호화 방식이며 NSA에 의해 1급 비밀에 사용할 수 있도록 승인된 암호화 알고리즘 중 유일하게 공개된 알고리즘이다.
Hash암호화와는 다르게 '대칭키'를 가지고 암호화와 복호화를 진행한다.
AES 뒤에 붙는 128,192,256은 대칭키 bit수로 AES-128은 128bit의 대칭키를 쓰은 암호와 알고리즘 이다.
128bit는 16Byte이므로, 키가 16자이다.(192bit = 24자리, 256bit = 32자리)
키의 길이에 따라서 암호화 라운드의 수만 다르기 때문에, 구현 로직은 같다.
그러나 Java에서는 AES 키 길이의 제한을 두어 AES-128만 지원한다.
AES 알고리즘의 내부동작(개론)
AES알고리즘은 bit수에 따라 키의 자릿수 뿐아니라 암호화 라운드의 횟수도 다르다.
(암호화 라운드란, 암호화 연산의 반복횟수를 말한다.)
- 128bit = 10라운드
- 192bit = 12라운드
- 256bit = 14라운드
- S-Box :GF(2⁸)을 이용한 치환연산
- Shift Row : 단순 자리바꿈
- Mix Column : GF(2⁸)을 이용한 치환연산
- Add RoundKey : XOR 연산을 이용
여기서 GF(2⁸)을 이용한 계산이란, 기약 다항식 m(x)=x⁸+x⁴+x³+x+1
을 사용하는 다항식 체를 말한다.
위 네 가지 세부 연산은 모두 역이 가능하므로,
따라서 라운드 키를 적용하는 부분을 제외하고는 그 자체로 어떤 안전성도 제공하지 않는다.
Feedback
암호화 알고리즘의 더 세부적인 내용은 다음 포스팅에서 알아보자.
알게된 점
- AES-128의 숫자의 의미
- Java의 AES 지원범위
- AES는 대칭키 암호화 방식이다.
- AES암호화 방식의 내부연산 4가지
알아야할 점
- [ ] 알고리즘 내부동작 자세히
References
안전한 암호화를 위한 AES 알고리즘에 대한 이해와 구현코드(Java, C#)
'CS' 카테고리의 다른 글
Hash암호화 (0) | 2021.08.08 |
---|---|
ReadTimeout (0) | 2021.07.24 |
Page (0) | 2021.06.04 |