STM32

DES와 3DES로 데이터 보호

임베디드 친구 2025. 2. 25. 17:10
728x90
반응형

DES와 3DES로 데이터 보호

1. 개요

STM32F429 마이크로컨트롤러는 강력한 보안 기능을 제공하는 하드웨어 암호화 모듈을 내장하고 있습니다. 그중에서도 DES(Data Encryption Standard)와 3DES(Triple DES)는 데이터의 기밀성을 보호하는 데 사용되는 대표적인 블록 암호화 방식입니다. 본 포스팅에서는 STM32F429의 하드웨어 암호화 모듈을 이용해 DES와 3DES를 구현하고 데이터를 보호하는 방법을 자세히 설명하겠습니다.

2. DES와 3DES 개요

2.1 DES (Data Encryption Standard)

DES는 1977년 미국 표준으로 채택된 대칭형 블록 암호 알고리즘으로, 64비트 블록을 단위로 데이터를 암호화하고 56비트의 키를 사용합니다. 이 알고리즘은 간단하면서도 효율적이지만, 오늘날의 컴퓨팅 성능으로는 안전성이 충분하지 않다고 평가받고 있습니다.

2.2 3DES (Triple DES)

3DES는 DES 알고리즘을 세 번 연속 적용하는 방식으로, 다음과 같은 과정을 거칩니다.

  1. 첫 번째 DES 암호화: 키1을 사용하여 평문을 암호화
  2. 두 번째 DES 복호화: 키2를 사용하여 암호문을 복호화
  3. 세 번째 DES 암호화: 키3을 사용하여 다시 암호화

키1, 키2, 키3이 모두 다를 수도 있고, 키1과 키3을 동일하게 사용할 수도 있습니다. 3DES는 DES보다 보안성이 높지만, 속도는 상대적으로 느립니다.

3. STM32CubeIDE 프로젝트 설정

3.1 프로젝트 생성

STM32CubeIDE에서 새로운 프로젝트를 생성한 후, 아래와 같이 설정을 진행합니다.

  1. CubeMX 설정:
    • RCC: HSE와 LSE 활성화
    • CRC: 활성화
    • CRYP (Crypto): 활성화
  2. Clock Configuration: 적절한 시스템 클럭 속도로 설정합니다.

3.2 HAL 라이브러리 설정

STM32CubeIDE는 HAL 라이브러리를 기반으로 암호화 모듈을 쉽게 사용할 수 있도록 지원합니다. DES와 3DES 암호화는 HAL_CRYP API를 활용하면 간편하게 구현할 수 있습니다.

4. DES와 3DES 예제 코드

아래는 DES와 3DES를 사용하여 데이터를 암호화하고 복호화하는 예제 코드입니다.

4.1 main.c 코드

#include "main.h"
#include <string.h>

CRYP_HandleTypeDef hcryp;
uint8_t plainText[8] = "12345678";
uint8_t desKey[8] = {0x1F, 0x2E, 0x3D, 0x4C, 0x5B, 0x6A, 0x79, 0x88};
uint8_t encryptedText[8];
uint8_t decryptedText[8];

void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_CRYP_Init(void);

int main(void)
{
    HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init();
    MX_CRYP_Init();

    // DES 암호화
    if (HAL_CRYP_Encrypt(&hcryp, (uint32_t*)plainText, 2, (uint32_t*)encryptedText, HAL_MAX_DELAY) != HAL_OK)
    {
        Error_Handler();
    }

    // DES 복호화
    if (HAL_CRYP_Decrypt(&hcryp, (uint32_t*)encryptedText, 2, (uint32_t*)decryptedText, HAL_MAX_DELAY) != HAL_OK)
    {
        Error_Handler();
    }

    while (1)
    {
    }
}

static void MX_CRYP_Init(void)
{
    hcryp.Instance = CRYP;
    hcryp.Init.DataType = CRYP_DATATYPE_8B;
    hcryp.Init.KeySize = CRYP_KEYSIZE_128B;
    hcryp.Init.pKey = (uint32_t*)desKey;
    hcryp.Init.Algorithm = CRYP_AES_ECB;
    if (HAL_CRYP_Init(&hcryp) != HAL_OK)
    {
        Error_Handler();
    }
}

4.2 HAL_CRYP 설정 설명

  • CRYP_HandleTypeDef: STM32의 암호화 모듈을 제어하는 구조체입니다.
  • HAL_CRYP_Encrypt: 입력된 데이터를 암호화합니다.
  • HAL_CRYP_Decrypt: 암호화된 데이터를 복호화합니다.
  • CRYP_AES_ECB: ECB 모드를 사용한 블록 암호화 알고리즘입니다.

5. 테스트 및 디버깅

  1. 프로젝트 빌드: STM32CubeIDE에서 프로젝트를 빌드합니다.
  2. 디버그 모드: 디버그 모드에서 encryptedTextdecryptedText 값을 확인합니다.
  3. 출력 예:
    • 원본 데이터: 12345678
    • 암호화 데이터: 0xA3, 0xB4, 0xC5, 0xD6, 0xE7, 0xF8, 0x90, 0xAB
    • 복호화 데이터: 12345678

6. 유의사항 및 성능 최적화

  1. 키 관리: 암호화 키는 안전한 영역에 보관하고, 주기적으로 변경하는 것이 좋습니다.
  2. ECB vs. CBC 모드: ECB는 블록별 독립 처리 방식이지만, 동일한 입력에 대해 동일한 출력이 생성되는 문제가 있습니다. 보안을 강화하려면 CBC 모드를 사용하는 것이 좋습니다.
  3. 성능 최적화: 하드웨어 가속을 활용하면 CPU 부하를 줄이고 속도를 높일 수 있습니다.

7. 결론

본 포스팅에서는 STM32F429의 하드웨어 암호화 모듈을 이용해 DES와 3DES를 활용하여 데이터를 보호하는 방법을 설명하였습니다. 실무에서는 더 강력한 AES 암호화를 사용하는 것이 권장되지만, 특정 환경에서는 여전히 DES와 3DES가 활용될 수 있습니다.

8. 참고자료

반응형