Pink Spider/About AES

Created Thu, 20 Mar 2025 16:18:45 +0900 Modified Mon, 08 Dec 2025 08:41:47 +0900
2201 Words 10 min

AES 암복호화를 위한 key생성 코드로 만들기

Contents

AES 암호화 알고리즘에 대하여.

  • 암복호화가 가능한 대표적인 양방향 알고리즘입니다.
  • 자료상으로 찾아보면 AES(Advanced Encryption Standard)는 대칭 키 암호화 방식의 대표적인 알고리즘으로, 미국 국립표준기술연구소(NIST)에 의해 2001년 표준으로 채택되었습니다. Rijndael 알고리즘을 기반으로 설계되었으며, 높은 보안성과 빠른 성능 덕분에 다양한 보안 애플리케이션에서 널리 사용되고 있습니다.

AES 특징

  • 대칭 키 암호화: 동일한 키를 사용하여 데이터를 암호화 및 복호화합니다.
  • 고정된 블록 크기: AES는 128비트 블록 크기를 사용합니다.
  • 다양한 키 길이 지원: 128비트, 192비트, 256비트 키 길이를 제공합니다.
  • 보안성: 기존의 DES(Data Encryption Standard)보다 강력한 보안성을 자랑합니다.
  • 빠른 속도: 소프트웨어 및 하드웨어에서 효율적으로 동작합니다.

AES 암호화 과정

  • AES 암호화는 여러 라운드(Round)의 연산을 통해 이루어집니다. 사용되는 키 길이에 따라 라운드 수가 달라집니다.

    • AES-128: 10 라운드
    • AES-192: 12 라운드
    • AES-256: 14 라운드
  • 각 라운드는 다음과 같은 단계로 이루어집니다.

  1. SubBytes (바이트 치환) 각 바이트를 S-Box(치환 테이블)를 이용하여 다른 값으로 치환합니다.

  2. ShiftRows (행 이동) 각 행의 바이트를 왼쪽으로 이동하여 데이터의 패턴을 변화시킵니다.

  3. MixColumns (열 혼합) 각 열의 데이터를 수학적 변환을 거쳐 혼합합니다. (마지막 라운드에서는 수행되지 않음)

  4. AddRoundKey (라운드 키 추가) 현재 상태의 데이터 블록과 해당 라운드의 키를 XOR 연산하여 보안을 강화합니다.

AES 복호화 과정

  • AES 복호화는 암호화 과정의 역순으로 진행됩니다. 주된 과정은 다음과 같습니다.
    • InvSubBytes (역 바이트 치환)
    • InvShiftRows (역 행 이동)
    • InvMixColumns (역 열 혼합)
    • AddRoundKey (라운드 키 추가)
  • 이 과정을 통해 암호화된 데이터를 원래의 평문으로 복원할 수 있습니다.

AES의 활용

  • AES는 높은 보안성과 성능 덕분에 다양한 환경에서 사용됩니다.
  • SSL/TLS: HTTPS 통신을 보호하는데 사용됨
  • VPN: 가상 사설망의 데이터 보호
  • 디스크 암호화: 파일 및 디스크 보안
  • 데이터베이스 보안: 저장된 데이터 보호

AES의 장점과 단점

장점
  • 강력한 보안성을 제공하며 현재까지 실질적인 공격이 발견되지 않음
  • 다양한 키 길이를 제공하여 유연한 보안 수준 선택 가능
  • 빠른 연산 속도로 실시간 환경에서도 사용 가능
단점
  • 대칭 키 방식이므로 키를 안전하게 공유하는 것이 어려움
  • 암호화된 데이터의 크기가 평문과 동일하여 데이터 구조 분석 공격 가능성 존재

AES 운영 모드와 패딩

AES 운영 모드

  • AES는 블록 암호이기 때문에 특정한 운영 모드를 선택해야 합니다. 대표적인 운영 모드는 다음과 같습니다.
    • ✅ CBC (Cipher Block Chaining) 각 블록이 이전 블록의 암호문과 XOR 연산된 후 암호화됨. 초기화 벡터(IV)가 필요하며, 동일한 키를 사용하더라도 IV가 다르면 다른 암호문이 생성됨. PKCS5Padding 또는 PKCS7Padding과 자주 함께 사용됨.
    • ✅ ECB (Electronic Codebook) 가장 단순한 운영 모드. 각 블록을 독립적으로 암호화함. 동일한 평문 블록은 동일한 암호문 블록으로 변환되므로 보안성이 낮음. 일반적으로 사용이 권장되지 않음.
    • ✅ CFB (Cipher Feedback) 스트림 암호처럼 동작하여 블록 크기의 제약 없이 데이터 길이를 처리 가능. 초기화 벡터(IV)를 사용하여 보안성을 강화. 데이터 블록을 암호화한 후 일부를 잘라 평문과 XOR하여 암호문을 생성.
    • ✅ OFB (Output Feedback) CFB와 유사하지만, 피드백을 통해 직접 암호화한 값을 XOR하여 사용. 오류 전파가 없어 한 블록이 손상되어도 이후 블록에는 영향을 미치지 않음.
    • ✅ CTR (Counter Mode) 블록 단위가 아니라 카운터 값을 증가시키며 암호화를 수행. 병렬 연산이 가능하여 성능이 우수함. 스트림 암호처럼 사용되며 빠른 속도와 높은 보안성을 제공.

패딩(Padding) 방식

  • AES는 128비트(16바이트) 블록 단위로 데이터를 처리하므로, 평문의 길이가 16바이트의 배수가 아닐 경우 패딩을 추가해야 합니다.
    • ✅ PKCS5Padding / PKCS7Padding 가장 많이 사용되는 패딩 방식. 추가해야 하는 바이트 수만큼 해당 값을 패딩 값으로 설정함. 예) 0x03 0x03 0x03 (3바이트 패딩)
    • ✅ NoPadding 패딩을 사용하지 않는 방식. 패딩 없이 사용하려면 입력 데이터가 반드시 블록 크기(16바이트)의 배수여야 함.
    • ✅ ISO10126Padding 패딩 바이트 중 마지막 바이트는 패딩 길이를 나타내고, 나머지는 랜덤 값으로 채움.
    • ✅ ZeroPadding 부족한 바이트를 0x00으로 채움. 일부 시스템에서만 사용 가능하며, 평문 데이터가 0x00 값을 포함할 경우 복호화 시 오류 발생 가능.

AES/CBC/PKCS5Padding 이외의 조합 예시

  • 다양한 조합으로 AES를 사용할 수 있습니다.
    • AES/ECB/PKCS5Padding → 블록별 독립 암호화 (권장되지 않음)
    • AES/CBC/PKCS7Padding → CBC 모드에서 PKCS7 패딩 적용
    • AES/CFB/NoPadding → 스트림 암호 방식, NoPadding 적용
    • AES/OFB/ZeroPadding → OFB 모드, ZeroPadding 적용
    • AES/CTR/NoPadding → 카운터 방식, 패딩 없이 처리 (가장 빠르고 안전함)

추천 조합

  • 보안성과 성능을 고려했을 때 일반적으로 추천되는 조합은 다음과 같습니다.
    • AES/CBC/PKCS7Padding → 일반적인 보안 애플리케이션
    • AES/CTR/NoPadding → 높은 성능과 보안성이 필요한 경우
    • AES/GCM/NoPadding → 인증된 암호화(AEAD)가 필요한 경우 (추천!)

AES/GCM (Galois/Counter Mode)

  • 최근 가장 강력한 AES 모드로, 암호화와 메시지 인증을 동시에 수행하는 AEAD(Authenticated Encryption with Associated Data) 방식입니다.

  • ✅ AES/GCM의 장점:

    • 추가적인 메시지 인증 코드(MAC)를 생성하여 변조 방지 가능
    • 빠른 속도 (병렬 처리 가능)
    • 패딩이 필요 없음 (NoPadding)
  • 💡 추천 사용 예시:

    • HTTPS, TLS 1.2 이상
    • VPN 보안
    • 보안성이 중요한 애플리케이션

5. 정리

AES 운영 모드 특징 보안성 추천 여부
ECB 동일한 입력 → 동일한 출력 (보안 취약) 낮음
CBC 블록 연결 방식, IV 사용 중간
CFB 스트림 암호 방식, 부분적 암호화 가능 중간
OFB 오류 전파 없음, 스트림 암호 방식 중간
CTR 카운터 증가 방식, 병렬 처리 가능 높음 🔥 🔥 ✅
GCM AES + 인증 (무결성 검증 포함) 최고 🔥🔥 🔥🔥 ✅✅
  • 📌 AES를 사용할 때 가장 추천되는 방식은 AES/GCM/NoPadding입니다. 보안이 중요하지만 GCM을 사용할 수 없는 환경에서는 AES/CTR/NoPadding도 좋은 선택입니다.