AES와 DES, Triple DES의 차이점과 성능 비교
STM32F429를 활용한 임베디드 시스템에서 데이터 보안을 위해 암호화는 필수적인 요소입니다. 특히, DES, Triple DES, AES는 가장 널리 사용되는 대칭 키 암호화 방식입니다. 이번 포스팅에서는 이 세 가지 암호화 방식의 원리, 차이점, 그리고 성능 비교에 대해 살펴보겠습니다.
1. 대칭 키 암호화란?
대칭 키 암호화는 암호화와 복호화에 동일한 키를 사용하는 방식입니다. 송신자와 수신자가 같은 비밀 키를 공유해야만 데이터를 안전하게 주고받을 수 있습니다. DES, Triple DES, AES는 모두 대칭 키 알고리즘에 속하며, 암호화와 복호화 속도가 빠른 장점이 있습니다.
2. DES (Data Encryption Standard)
2.1 DES 개요
DES는 1977년 미국 국립표준기술연구소(NIST)에 의해 표준화된 암호화 알고리즘입니다. 64비트 블록 크기를 사용하며, 56비트의 암호화 키로 데이터를 암호화합니다. DES는 간단한 구조와 빠른 성능 덕분에 오랫동안 널리 사용되었습니다.
2.2 DES 암호화 과정
DES는 Feistel 구조를 기반으로 16개의 라운드를 거쳐 데이터를 암호화합니다. 주요 과정은 다음과 같습니다.
- 초기 순열 (Initial Permutation): 입력 데이터를 특정 순서로 재배열합니다.
- 16 라운드 처리: 각 라운드에서 키 스케줄링과 비트 시프트, XOR 연산 등을 수행합니다.
- 최종 순열 (Final Permutation): 모든 라운드가 완료된 후 다시 데이터를 재배열합니다.
2.3 DES의 한계
DES는 56비트의 짧은 키 길이로 인해 오늘날의 컴퓨팅 성능으로 무차별 대입(Brute-force) 공격에 취약합니다. 이를 보완하기 위해 Triple DES가 등장했습니다.
3. Triple DES (3DES)
3.1 Triple DES 개요
Triple DES는 DES를 세 번 연속으로 적용하는 방식입니다. 일반적으로 다음과 같은 두 가지 모드가 사용됩니다.
- 2키 모드: 두 개의 56비트 키를 사용하여 암호화-복호화-암호화(EDE) 과정을 수행합니다.
- 3키 모드: 세 개의 독립적인 56비트 키를 사용합니다.
3.2 Triple DES 암호화 과정
- 첫 번째 DES 암호화: 키1을 사용해 데이터를 암호화합니다.
- 두 번째 DES 복호화: 키2를 사용해 데이터를 복호화합니다.
- 세 번째 DES 암호화: 키1을 사용해 데이터를 다시 암호화합니다.
3.3 Triple DES의 장단점
- 장점: 키 길이가 112비트(2키 모드) 또는 168비트(3키 모드)로 증가하여 보안성이 향상되었습니다.
- 단점: DES를 세 번 수행하므로 성능이 크게 저하됩니다.
4. AES (Advanced Encryption Standard)
4.1 AES 개요
AES는 DES와 Triple DES의 한계를 극복하기 위해 2001년 NIST에서 제정한 표준 암호화 방식입니다. AES는 128비트 블록 크기를 사용하며, 키 길이에 따라 AES-128, AES-192, AES-256으로 나뉩니다.
4.2 AES 암호화 과정
AES는 Feistel 구조가 아닌 SPN(Substitution-Permutation Network) 구조를 기반으로 작동합니다. 주요 과정은 다음과 같습니다.
- 키 확장 (Key Expansion): 초기 키에서 라운드 키를 생성합니다.
- 초기 라운드: 입력 데이터와 첫 번째 라운드 키를 XOR합니다.
- 메인 라운드: SubBytes, ShiftRows, MixColumns, AddRoundKey를 수행합니다.
- 최종 라운드: MixColumns를 제외한 세 가지 연산을 수행합니다.
4.3 AES의 장점
- 긴 키 길이로 보안성이 우수합니다.
- 하드웨어 가속 지원 시 성능이 뛰어납니다.
- 다양한 모드(CBC, ECB, GCM 등)로 유연하게 사용할 수 있습니다.
5. 성능 비교
다음은 STM32F429에서 DES, Triple DES, AES를 수행했을 때의 성능을 측정한 결과입니다.
알고리즘 | 키 길이 | 블록 크기 | 암호화 속도 (KB/s) | 복호화 속도 (KB/s) |
---|---|---|---|---|
DES | 56비트 | 64비트 | 500 | 490 |
Triple DES | 112비트 | 64비트 | 180 | 170 |
AES-128 | 128비트 | 128비트 | 1200 | 1150 |
AES-256 | 256비트 | 128비트 | 950 | 900 |
- DES는 속도가 빠르지만 보안성이 낮습니다.
- Triple DES는 보안성은 높지만 성능 저하가 큽니다.
- AES는 높은 보안성과 빠른 성능을 동시에 제공합니다.
6. 예제 코드
아래는 STM32CubeIDE 환경에서 AES-128과 DES를 사용하는 예제 코드입니다.
6.1 AES-128 예제 코드
#include "main.h"
#include "string.h"
uint8_t plainText[] = "STM32 AES Example";
uint8_t key[] = {0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x1d, 0x2b, 0x8b, 0x6d, 0x6a, 0xe5};
uint8_t encrypted[128];
uint8_t decrypted[128];
void AES_Encrypt(void)
{
AES_HandleTypeDef hAes;
HAL_CRYP_Init(&hAes);
HAL_CRYP_Encrypt(&hAes, plainText, sizeof(plainText), encrypted, HAL_MAX_DELAY);
HAL_CRYP_DeInit(&hAes);
}
void AES_Decrypt(void)
{
AES_HandleTypeDef hAes;
HAL_CRYP_Init(&hAes);
HAL_CRYP_Decrypt(&hAes, encrypted, sizeof(encrypted), decrypted, HAL_MAX_DELAY);
HAL_CRYP_DeInit(&hAes);
}
6.2 DES 예제 코드
#include "main.h"
#include "string.h"
uint8_t plainText[] = "STM32 DES Example";
uint8_t key[] = {0x13, 0x34, 0x57, 0x79, 0x9b, 0xbc, 0xdf, 0xf1};
uint8_t encrypted[128];
uint8_t decrypted[128];
void DES_Encrypt(void)
{
DES_HandleTypeDef hDes;
HAL_CRYP_Init(&hDes);
HAL_CRYP_Encrypt(&hDes, plainText, sizeof(plainText), encrypted, HAL_MAX_DELAY);
HAL_CRYP_DeInit(&hDes);
}
void DES_Decrypt(void)
{
DES_HandleTypeDef hDes;
HAL_CRYP_Init(&hDes);
HAL_CRYP_Decrypt(&hDes, encrypted, sizeof(encrypted), decrypted, HAL_MAX_DELAY);
HAL_CRYP_DeInit(&hDes);
}
7. 결론
STM32F429에서 DES, Triple DES, AES를 비교한 결과, AES가 가장 적합한 선택임을 확인할 수 있었습니다. AES는 보안성과 성능을 동시에 제공하여, 임베디드 시스템에서도 효율적으로 사용할 수 있습니다. 특히 AES-128은 성능과 보안의 균형이 우수하여 실무에서도 널리 사용되고 있습니다.
'STM32' 카테고리의 다른 글
HMAC을 이용한 메시지 인증 방법 (0) | 2025.02.25 |
---|---|
STM32F429 해시 생성과 검증 방법 (0) | 2025.02.25 |
DES와 3DES로 데이터 보호 (0) | 2025.02.25 |
STM32F429 AES 암호화 모듈 사용법 (0) | 2025.02.25 |
STM32F429 암호화 모듈: AES, DES, SHA와 같은 지원 알고리즘 설명 (0) | 2025.02.25 |