본문 바로가기
유니티

AES-256 이란?

by 유니티세상 2026. 4. 1.
반응형

1. AES-256이란?

AES(Advanced Encryption Standard)는 대칭키 블록 암호 알고리즘이다.

그중 AES-256키 길이가 256비트(32바이트) 인 버전이다.

여기서 중요한 점은:

AES의 블록 크기는 항상 128비트(16바이트)이다.
256은 블록 크기가 아니라 "키 길이"이다.

즉,

  • AES-128 → 키 128비트
  • AES-192 → 키 192비트
  • AES-256 → 키 256비트

로 구분된다.


2. “AES-256 암호화 설정”

보통 AES를 단독으로 말하지 않고, 아래처럼 운영에 필요한 요소까지 묶어서 이야기한다.

실무에서의 AES 암호화 설정 =
[Secret Key] + [IV 또는 Nonce] + [Cipher Mode] + [Padding(필요 시)]

주의할 점은:

이것은 AES 자체의 구성요소라기보다
AES를 실제 서비스에서 사용하기 위한 암호화 파라미터들이다.

3. Secret Key (시크릿 키)

시크릿 키는 암호화와 복호화에 공통으로 사용하는 비밀 값이다.

AES-256에서는 반드시 32바이트 키를 사용한다.

역할

  • 데이터를 어떻게 변환할지 결정하는 핵심 비밀값
  • 유출되면 암호화가 사실상 무력화된다

주의사항

  • 클라이언트 코드에 하드코딩하면 매우 위험하다
  • 키는 서버, KMS, 시크릿 매니저, 환경변수 같은 안전한 저장소에서 관리해야 한다
  • 사용자가 입력한 비밀번호를 바로 AES 키로 쓰지 않고, 보통 KDF(PBKDF2, scrypt, Argon2 등)로 가공해서 사용한다

https://docs.cloud.google.com/storage/docs/samples/storage-generate-encryption-key?hl=ko#storage_generate_encryption_key-java

 

암호화 키 생성  |  Cloud Storage  |  Google Cloud Documentation

암호화 키를 생성합니다.

docs.cloud.google.com

 


4. IV / Nonce

IV(Initialization Vector) 또는 Nonce는 같은 평문을 같은 키로 암호화해도 결과가 반복되지 않게 만드는 값이다.

역할

  • 동일한 데이터가 항상 같은 암호문으로 나오지 않게 함
  • 패턴 노출을 막음

포인트

  • 매 암호화마다 새롭게 생성해야 한다
  • 보통 암호문과 함께 저장하거나 전송한다
  • 반드시 비밀일 필요는 없지만 예측 가능하거나 재사용되면 위험할 수 있다

중요한 구분

  • CBC에서는 보통 IV
  • GCM에서는 보통 Nonce라는 표현을 많이 쓴다

5. Cipher Mode (암호 모드)

AES는 16바이트 블록 암호이기 때문에, 여러 블록의 데이터를 어떤 방식으로 처리할지 정하는 모드가 필요하다.

1) ECB

각 블록을 완전히 독립적으로 암호화
  • 같은 평문 블록은 같은 암호문 블록이 된다
  • 데이터 패턴이 그대로 드러난다
  • 실무에서는 잘 사용하지 않는다

2) CBC

현재 평문 블록을 이전 암호문 블록과 XOR한 뒤 암호화
첫 블록은 IV와 XOR
  • ECB보다 안전하다
  • 패턴 노출을 줄일 수 있다
  • 하지만 무결성 검증 기능이 없다
  • 따라서 CBC를 사용할 경우 보통 다음처럼 사용한다:
AES-CBC + HMAC

즉,

  • AES-CBC로 암호화하고
  • HMAC으로 위변조 검증을 추가한다

3) GCM

카운터 기반 암호화 + 인증 태그 생성
  • 암호화와 무결성 검증을 함께 제공한다
  • 병렬 처리에 유리하다
  • CBC보다 GCM을 더 많이 권장한다

보통:

가능하면 AES-GCM 우선
부득이하면 AES-CBC + HMAC

https://velog.io/@excellent/AES-GCM-암호화

 

AES GCM 암호화

AES GCM 암호화

velog.io

 

https://velog.io/@reedfoxy/JAVA-블록-암호화-모드-특징-ECB-CBC-GCM

 

블록 암호화 모드 특징 ( ECB, CBC, GCM )

이 글을 이해하기 위해서는 블록 암호화 알고리즘에 대해 간단한 지식이 있어야 합니다.가장 일반적으로 사용되는 블록 암호화 모드는 ECB, CBC, GCM 방식이 있다.아주 간략하게 각 모드별 특징을

velog.io

 

https://velog.io/@kafkaaaa/Block-Cipher-Mode-블럭-암호화-모드-ECB-CBC-CFB-OFB-CTR-GCM

 

Block Cipher Mode (블럭 암호화 모드) - ECB, CBC, CFB, OFB, CTR, GCM

대칭키 암호 방식은 암호화와 복호화에 동일한 KEY를 사용한다.따라서 공개키 암호화 방식에 비해 키의 길이가 짧고 성능이 빠르다.대칭키 암호기술의 안전성은 암호 키의 비밀성에 기반하기 때

velog.io

 


6. HMAC이란?

HMAC은 Hash-based Message Authentication Code이다.

이것은 암호화가 아니라, 무결성과 인증을 위한 서명값 생성 방식이다.

정확한 의미

  • “이 데이터가 중간에 바뀌지 않았는가?”
  • “이 데이터를 아는 비밀키를 가진 주체가 보낸 것이 맞는가?”
HMAC은 데이터를 암호화하는 것이 아니라
비밀키를 사용해 해시 기반 서명값을 만들어
데이터의 무결성과 진위 여부를 검증하는 방식이다.

CBC와 함께 쓸 때

CBC는 암호화만 하고 위변조 검사는 하지 못하므로:

1. 평문을 AES-CBC로 암호화
2. IV + 암호문에 대해 HMAC 생성
3. IV + 암호문 + HMAC을 함께 전송
4. 수신 측은 HMAC을 먼저 검증
5. 검증 성공 시에만 복호화

여기서 핵심은:

복호화 전에 HMAC부터 검증해야 한다.

HMAC 실무 예시

HMAC은 메시지 본문뿐 아니라 아래 값들을 함께 묶어 서명하는 경우가 많다.

  • HTTP Method
  • URL 경로
  • Query String
  • Body
  • Timestamp
  • Nonce

이렇게 하면 재전송 공격(Replay Attack) 이나 URL 변조를 막는 데 도움이 된다.

서버 간 API 인증, 서명된 요청 검증, 클라이언트 요청 위변조 방지에 더 자주 쓰인다.

https://brunch.co.kr/@sangjinkang/34

 

해싱(Hashing)을 활용한 HMAC

Hash based Message Authentication Code | 송수신자 간의 메시지를 주고받을 때, 메시지가 변조되었는지를 확인할 필요가 있습니다. 원본 메시지와, 전달된 메시지를 비교하여 변조 여부를 확인하는 방식

brunch.co.kr

 


7. Padding Mode (패딩 방식)

AES는 블록 크기가 16바이트 이므로,

블록 단위로 처리해야 하는 모드에서는 입력 길이를 맞추기 위해 패딩이 필요할 수 있다.

PKCS7

가장 많이 쓰는 패딩 방식 중 하나다.

예를 들어 "HELLO" 가 5바이트라면:

16 - 5 = 11

부족한 11바이트를 0x0B 값으로 채운다.

HELLO + 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B

복호화 시 마지막 바이트를 보고 그 수만큼 제거한다.

포인트

패딩은 항상 필요한 것이 아니다.

  • CBC, ECB 같은 블록 모드에서는 필요할 수 있음
  • GCM, CTR 같은 스트림 성격 모드에서는 보통 필요 없음

즉:

PKCS7은 CBC 같은 모드에서 주로 사용한다.
GCM에서는 일반적으로 Padding을 사용하지 않는다.

8. 전체 흐름

AES-CBC + HMAC 방식

암호화:

[평문]
  ↓
PKCS7 패딩
  ↓
AES-CBC 암호화
  ↓
IV + 암호문에 대해 HMAC 생성
  ↓
[IV + 암호문 + HMAC]

복호화:

[IV + 암호문 + HMAC]
  ↓
HMAC 검증
  ↓
검증 성공 시 AES-CBC 복호화
  ↓
패딩 제거
  ↓
[평문]

AES-GCM 방식

암호화:

[평문]
  ↓
Nonce와 Key로 AES-GCM 암호화
  ↓
암호문 + 인증 태그 생성
  ↓
[Nonce + 암호문 + Tag]

복호화:

[Nonce + 암호문 + Tag]
  ↓
Tag 검증
  ↓
검증 성공 시 복호화
  ↓
[평문]

9. 총정리

AES-256은 256비트 키를 사용하는 대칭키 블록 암호이며
실무에서는 보통 Key, IV/Nonce, Mode, Padding(필요 시)을 함께 설정해 사용하고
현대적으로는 AES-GCM을 우선 사용하며
CBC를 쓸 경우에는 반드시 HMAC으로 무결성 검증을 추가해야 한다.
반응형