AES(Advanced Encryption Standard)는 고급 암호화 표준이라는 의미를 갖고 있으며,
미국 표준 기술 연구소(NIST)에 의해 연방 정보 처리 표준으로 지정된 암호화 방식이다.
AES의 암호화 키의 길이에 따라서 다르게 불리는데
암호화 키의 길이가 128비트면 AES-128, 192비트면 AES-192, 256비트면 AES-256이라고 불린다.
AES의 특징으로는 대칭형, 블럭 암호화, 양방향 암호화이다.
하나의 키로 암호화, 복호화를 모두 할 경우 대칭키 방식의 알고리즘이라고 하는데
암호화와 복호화를 모두 같은 키로 하기때문에 절대 노출되서는 안된다.
AES의 장점
1. 빠른 연산을 요구하는 분야에서 사용하기에 적합하다.
비대칭 알고리즘인 RSA에 비해서 연산속도가 10~1000배 이상 빠르다
2. 구현이 쉽다
3. 암호화문의 길이가 평문의 길이보다 크지 않다.
AES의 단점
1. 키관리가 어렵다. 키가 노출될 경우 암호화 된 데이터는 공격에 취약하다.
2. AES-128, AES-256 모두 상관없이 128비트의 고정된 블록으로 암복호화를 하기 때문에
큰 파일을 효율적으로 암복호화 하기위해서는 복잡성이 증가할 수 있다.
블럭 암호화란?
블럭 암호화는 입력된 데이터를 고정된 길이의 블록 단위로 나눠서 처리하는 것을 뜻하는데
AES의 경우 128비트로 나눠서 처리하게된다.
AES-256은 256비트의 키를 사용하지만 입력된 데이터를 256비트로 암호화 하지 않고
128비트 단위로 블록을 나눠서 암호화 한다.
만약 암호화 하고자 하는 데이터의 크기가 128로 떨어지지 않는다면
부족한 부분은 Padding 처리한다
Padding(패딩)이란?
암호화 하고자하는 데이터의 길이가 특정 block size로 떨어지지 않을 때 block size에 맞게 데이터를 채우는 것을 뜻한다.
Padding의 종류
PKCS5 (8byte 고정 패딩)
8byte block size에 맞게 패딩을 한다. 그리고 그 값으로 몇 바이트를 채우는지 표시를 해준다.
PKCS5는 8byte로 맞춰져 있지만 block size가 8로 맞아 떨어져도 마지막에 패딩을 채워줘야한다.
ex)
AA 17 06 06 06 06 06 06 (2byte 의 데이터 + 6byte의 패딩)
12 B1 C2 99 08 03 03 03 (5byte 의 데이터 + 3byte의 패딩)
08 08 08 08 08 08 08 08 (0byte 의 데이터 + 8byte의 패딩)
PKCS7 (1~255byte 가변 패딩)
암복호화 하고자 하는 데이터 block이 8바이트보다 커지면서 8바이트 이상의 패딩을 할 경우 사용한다.
ex)
A1 A2 B2 B3 C1 C4 D5 D6 08 08 08 08 08 08 08 08 (8byte 의 데이터 + 8byte의 패딩)
마지막으로 Cipher Mode에 대해서 알아야한다.
Cipher Mode란 하나의 키로 블록 암호화를 반복적으로 안전하게 이용하는 절차를 의미한다.
암호화 하는 데이터의 크기가 128비트보다 클 경우
아래의 Cipher Mode 중 하나를 선택하여 반복적으로 암호화를 진행해야한다.
1. ECB(electronic codebook) Mode
Cipher Mode 중 가장 간단한 구조이며, 암호화 하려는 메시지를 여러 블록 으로 나누어 각각 암호화 하는 방식이다.
모든 데이터 블록이 같은 키를 사용하기 때문에 반복적인 공격에 취약하다. 암호문이 블록의 배수라서 복호화 후 평문을 알려면 padding이 필요하다.
2. CBC(cipher-block chaining) Mode
ECB와 다르게 IV(Initialization Vector)를 사용하기 때문에 같은 데이터라도 암호화 할경우 다른 데이터로 암호화 된다. 첫 블록을 암호화 하고 그 다음 블럭을 이전에 암호화 한 블럭을 IV로 사용하여 암호화를 진행하기 때문에 ECB에 보안성이 뛰어나며 현재 널리 사용되고 있는 방식이다. 추가로 복호화 할 때는 이전 입력값에 의존하지 않기 때문에 암호화 할 때와 다르게 병렬 처리가 가능하다. ECB와 동일하게 암호문이 블록의 배수라서 복호화 후 평문을 알려면 padding이 필요하다.
3. CFB(cipher feedback) Mode
CBC Mode를 변형한 모드로 블록 암호를 자기 동기 스트림 암호로 변환하는 모드이다. 평문과 암호문의 길이가 같아서 padding이 필요하지 않으며 암호화는 순차적으로 진행하지만 복호화는 병렬처리가 가능하다.
자기 동기 스트림 암호란?
난수열을 생성할 때 암호화 키와 함께 이전에 암호화 된 문자열의 일부를 사용하는 것을 의미하는데, 암호화 된 블록끼리 서로 의존성이 없기 때문에 전송도중 일부 비트가 깨지더라도 일부만 복호화에 실패하고 이후 복호화에는 문제가 없다.
4. CTR(Counter) Mode
CTR(Counter) 방식은 블록 암호를 스트림 암호로 바꾸는 방식인데 각 블록마다 몇번째 블록인지 의미하는 값을 부여하고 그 숫자와 nonce(임의의 값)를 결합하여 블록 암호할 때 입력한다. CTR모드의 경우 이전 블록에 의존하지 않기 때문에 암복호화 모두 병렬처리가 가능하다.
5. OFB(output feedback) Mode
CFB와 마찬가지로 블록 암호를 자기 동기 스트림 암호로 변환하는 모드이기 때문에 평문과 암호문의 길이가 같아서 패딩이 필요없다. 암호화, 복호화방법이 동일하여 모두 암호화 처리한다. CFB와 다른점이 있다면 다음 블록의 암호화 하기위해 사용하는 데이터가 XOR 연산을 하기전인지 후인지가 차이이다.
'Crypto' 카테고리의 다른 글
Hash Function의 특징과 용도 (0) | 2024.04.01 |
---|---|
공개키 암호 시스템, RSA 알고리즘의 암복호화와 전자서명 (0) | 2024.03.29 |
AUTOSAR 그리고 표준 암호화 알고리즘 (0) | 2024.03.26 |
TLS의 정의 및 이해와 TLS1.2과 TLS1.3의 차이 (0) | 2022.11.03 |
HASH에 관하여 (0) | 2022.11.03 |