AES-256 암호화 설명: 내 데이터에 어떤 의미인가

AES-256 암호화 설명: 내 데이터에 어떤 의미인가

AES-256 설명: 암호의 작동 방식, 256비트 키가 중요한 이유, GCM 모드가 더하는 것, 앱이 AES-256 암호화를 내세울 때 확인할 점.


AES-256이란?

AES-256은 대칭 블록 암호로, 256비트 키로 실행하는 고급 암호화 표준(Advanced Encryption Standard)입니다. 하나의 키로 암호화와 복호화를 모두 합니다. 데이터를 128비트 블록 단위로 14라운드에 걸쳐 처리하며, NIST가 2001년 FIPS 197로 표준화했습니다.

이 이름에는 세 가지 사실이 겹쳐 있습니다. AES는 알고리즘 이름으로, NIST가 2001년 Rijndael 제안에서 선정했습니다. 256은 비트 단위 키 길이로, 무차별 대입 공격자가 시도해야 하는 키의 수를 정합니다. 보통 AES-256-GCM처럼 이름 뒤에 붙는 GCM이나 CBC 같은 모드는 블록을 어떻게 연결할지, 암호문 변조를 검사할지를 정합니다. AES-256이라는 이름만으로는 암호와 키 크기만 알 수 있습니다. 모드도, 키를 누가 가지고 있는지도 알 수 없습니다.

AES-256은 256비트 키를 쓰는 고급 암호화 표준으로, NIST가 2001년 FIPS 197로 표준화했습니다. 미국 정부가 기밀 정보에, 은행이 금융 거래에, 보안 중심 애플리케이션이 저장 중이거나 전송 중인 데이터를 보호하는 데 쓰는 대칭 암호화 알고리즘입니다. AES-256의 가능한 키는 2^256개로, 관측 가능한 우주의 원자 수 추정치보다 많습니다. 이 키 공간을 계산 가능한 수준으로 줄이는 공격은 알려져 있지 않습니다.

이 가이드에서는 AES-256이 실제로 하는 일, 키 크기가 중요한 이유, 여러 모드(ECB, CBC, GCM)의 의미, 앱이 AES-256 암호화를 쓴다고 주장할 때 확인할 점을 설명합니다.

AES가 실제로 하는 일

AES는 대칭 블록 암호입니다. "대칭"은 같은 키로 암호화하고 복호화한다는 뜻입니다. "블록 암호"는 데이터를 128비트(16바이트) 고정 크기 블록으로 처리한다는 뜻입니다.

이 알고리즘은 데이터(평문)를 키와 결합하고, 일련의 수학적 변환을 거쳐 뒤섞인 출력(암호문)을 만듭니다. 치환, 이동, 혼합, 키 더하기로 이루어진 이 변환은 정해진 라운드 수만큼 반복됩니다. AES-256은 14라운드를 사용합니다.

각 라운드는 네 가지 연산을 적용합니다.

  1. SubBytes: 고정된 치환표(S-box)로 각 바이트를 바꿔 비선형성을 더합니다.
  2. ShiftRows: 각 행의 바이트를 서로 다른 칸만큼 이동해 데이터를 여러 위치로 퍼뜨립니다.
  3. MixColumns: 유한체에서 행렬 곱셈으로 열을 섞어 변화를 여러 바이트로 확산합니다.
  4. AddRoundKey: 주 키에서 파생된 라운드 키를 데이터와 XOR합니다.

14라운드가 끝나면 평문은 완전히 뒤섞입니다. 올바른 키로 이 연산을 거꾸로 수행하면 원래 데이터가 복구됩니다. 키가 없으면 암호문은 무작위 잡음과 구별되지 않습니다.

256비트가 중요한 이유

AES-256의 "256"은 키 길이, 즉 256비트를 뜻합니다. 이 값이 무차별 대입으로 암호를 깨려는 공격자가 시도해야 하는 키의 수를 정합니다.

키 크기 가능한 키의 수 무차별 대입에 걸리는 시간(초당 1조 회 시도)
56비트(DES) 7.2 x 10^16 약 20시간
128비트(AES-128) 3.4 x 10^38 10^13년(10조 년)
256비트(AES-256) 1.16 x 10^77 10^51년

비교하자면 우주의 나이는 약 1.38 x 10^10년입니다. 초당 1조 회를 시도하더라도 AES-256을 무차별 대입으로 깨려면 우주 나이의 약 10^41배가 걸립니다.

AES-128도 이미 무차별 대입으로 깨는 것이 계산상 불가능합니다. AES-256은 양자 컴퓨팅을 포함한 향후 컴퓨팅 발전에 대비해 여유를 더 줍니다. 양자 컴퓨팅 공격인 Grover 알고리즘은 실질적인 키 길이를 절반으로 줄입니다. AES-256은 AES-128 수준이 되지만 여전히 깰 수 없습니다. AES-128은 실질 보안이 64비트로 줄어 취약해질 수 있습니다. 그래서 보안이 중요한 애플리케이션은 AES-256을 선호합니다.

AES 모드: 왜 중요한가

AES 자체는 한 번에 128비트 블록 하나만 암호화합니다. 사진, 문서, 동영상 같은 실제 데이터에는 16바이트보다 큰 데이터를 처리하는 "운용 모드"가 필요합니다. 모드는 블록을 연결하는 방식을 정하며 보안에 큰 영향을 줍니다.

ECB(Electronic Codebook): 사용하지 마세요

각 블록을 같은 키로 독립적으로 암호화합니다. 같은 평문 블록은 같은 암호문 블록이 됩니다. 그래서 데이터의 패턴이 새어 나갑니다. 대표적인 예로 비트맵 이미지를 ECB로 암호화하면 암호문에 이미지의 구조가 그대로 남아 내용을 알아볼 수 있습니다. ECB는 표준에 포함되어 있지만 구조나 반복 패턴이 있는 데이터, 즉 사실상 모든 실제 데이터에는 절대 써서는 안 됩니다.

CBC(Cipher Block Chaining): 레거시

각 블록을 암호화하기 전에 이전 암호문 블록과 XOR합니다. 이렇게 하면 ECB의 패턴 누출이 사라집니다. CBC는 수십 년 동안 표준 모드였지만 대부분의 애플리케이션에서 GCM으로 대체되었습니다. CBC는 무작위 초기화 벡터(IV)가 필요하며 인증 기능이 내장되어 있지 않습니다(암호문이 변조되었는지 알 수 없습니다).

GCM(Galois/Counter Mode): 현재 표준

GCM은 카운터 모드 암호화와 갈루아체 인증을 결합합니다. 인증 암호화를 제공하므로 데이터를 암호화하는 동시에 암호문의 모든 변경을 탐지하는 인증 태그를 만듭니다. 비트 하나만 바뀌어도 손상된 평문을 내놓는 대신 복호화가 실패합니다.

NIST는 SP 800-38D(2007)로 GCM을 표준화했습니다. 새로운 구현에 권장되는 모드입니다.

AES-256-GCM은 256비트 키를 쓰는 AES를 Galois/Counter Mode로 실행하는 것입니다. 보안이 중요한 애플리케이션이 써야 하는 방식이며, Vaultaire가 사진과 파일 내용을 암호화할 때 쓰는 방식입니다.

모드 패턴 누출 인증 현재 권장 사항
ECB 예(심각) 아니요 사용하지 말 것
CBC 아니요 아니요(별도 MAC 필요) 레거시, HMAC과 함께 쓰면 허용
GCM 아니요 예(내장) 새로운 구현에 권장

사진 저장에서 AES-256이 뜻하는 것

사진 금고 앱이 "AES-256 암호화"를 내세운다면 다음 세 가지가 사실이어야 합니다.

  1. 파일 내용이 AES-256으로 암호화됩니다. 사진의 원본 데이터(픽셀, 메타데이터, 썸네일)가 256비트 키로 암호문이 됩니다.

  2. 파일마다 고유한 초기화 벡터(IV)를 씁니다. 같은 사진 두 장을 같은 키로 암호화해도 암호문은 달라야 합니다. 그러려면 파일마다 고유한 IV가 필요합니다. 그렇지 않으면 통계 분석으로 패턴이 드러날 수 있습니다.

  3. 모드가 인증을 제공합니다(GCM 또는 이에 준하는 방식). 인증이 없으면 공격자가 들키지 않고 암호문을 바꿀 수 있습니다. 복호화 결과는 오류 대신 손상된 데이터가 됩니다.

마케팅 페이지의 "AES-256"이 알려 주지 않는 것

AES-256은 필요조건이지 충분조건이 아닙니다. 암호화가 실제로 데이터를 보호하는지는 여러 핵심 요소에 달려 있습니다.

키 파생이 중요합니다. 256비트 키는 어떻게 만들어질까요? 약한 KDF로 4자리 PIN에서 키를 만든다면 실질 보안은 256비트가 아니라 4자리(10,000가지 조합)입니다. 강력한 구현은 반복 횟수가 많은 PBKDF2나, 메모리와 시간 매개변수를 알맞게 정한 Argon2를 씁니다. Vaultaire는 HMAC-SHA512 기반 PBKDF2를 600,000회 반복해 선택한 5x5 패턴과 기기 솔트에서 로컬 금고 키를 만듭니다. PBKDF2는 추측 한 번의 비용을 높일 뿐, 패턴의 엔트로피를 256비트로 높이지는 않습니다.

키 저장 위치가 중요합니다. 키는 어디에 있을까요? 키가 앱 샌드박스에 평문으로 저장되어 있다면 파일에 접근할 수 있는 악성 코드가 읽을 수 있습니다. Apple의 Secure Enclave는 내보낼 수 없는 특정 키 연산을 지원하며, 앱이 넘겨주는 임의의 AES 키를 처리하지 않습니다. 대칭 키 설계는 대신 키체인과 데이터 보호에 의존할 수 있으므로, 문서에는 "하드웨어 기반"이라고만 쓰지 말고 정확한 API와 보호 등급을 밝혀야 합니다.

무엇을 암호화하는지가 중요합니다. 어떤 앱은 파일 내용은 암호화하지만 파일 이름, 썸네일, 메타데이터는 암호화하지 않습니다. 포렌식 조사관이 사진은 보지 못해도 파일 목록에서 "vacation-beach-2025.jpg"는 볼 수 있습니다. 포괄적인 암호화는 메타데이터도 따로 암호화합니다.

키 수명 주기가 중요합니다. 복호화된 키 자료는 얼마나 오래 남아 있을까요? Vaultaire는 잠기거나 닫힐 때 활성 금고와 마스터 키 상태를 삭제하며 다시 잠금을 해제해야 합니다. 금고가 열려 있는 동안에는 대칭 키 바이트가 앱 메모리에 반드시 존재하며, Swift와 iOS는 모든 임시 사본이 덮어쓰였음을 앱이 증명할 방법을 제공하지 않습니다.

실제 AES-256 사용처

주체 용도 모드
미국 정부(NSA) 기밀 정보 GCM(또는 별도 인증을 붙인 CTR)
Apple(iCloud 고급 데이터 보호) iCloud 종단 간 암호화 GCM
Signal 메시지 암호화 CBC(인증용 HMAC 포함)
은행 금융 거래 암호화 GCM
1Password 비밀번호 금고 GCM
Vaultaire 사진 및 파일 금고 GCM
VeraCrypt 디스크 암호화 XTS(디스크 블록에 최적화)

흔한 오해

"군에서 쓰는 수준의 암호화" 같은 문구에는 구체적인 의미가 없습니다. 마케팅 페이지는 인상적으로 들리기 때문에 이런 표현을 씁니다. AES-256은 군에서 쓰입니다. AES-128도 마찬가지입니다. 이런 문구로는 모드, 키 파생, 키 저장, 실제로 암호화되는 데이터를 알 수 없습니다.

"256비트 암호화"가 AES-256을 뜻하지 않을 수도 있습니다. ChaCha20, Twofish, Serpent 같은 다른 암호도 256비트 키를 씁니다. 어떤 알고리즘인지 확인하세요. 현재 표준은 AES-256-GCM입니다.

AES-256은 약한 비밀번호를 막아 주지 않습니다. 비밀번호가 "1234"이고 키 파생이 약하다면, 암호가 아무리 강해도 실질 보안은 4자리 수준입니다. 사슬은 가장 약한 고리에서 끊어집니다.

AES-256은 사용 중인 데이터를 보호하지 않습니다. 사진을 보려면 메모리에서 복호화해야 합니다. 그 순간 사진은 RAM에 평문으로 존재합니다. 제대로 된 구현은 이 시간을 최소화하고 복호화된 데이터를 바로 지웁니다.

자주 묻는 질문

AES-256은 무엇의 약자인가요?

256비트 키로 실행하는 고급 암호화 표준(Advanced Encryption Standard)입니다. AES는 NIST가 Rijndael 설계를 선정한 뒤 2001년 FIPS 197로 표준화한 암호입니다. 256은 비트 단위 키 길이입니다. AES-256-GCM처럼 붙는 접미사는 운용 모드로, 암호나 키 크기와는 별개의 선택입니다.

AES-256은 깨질 수 있나요?

전체 키 공간을 줄여 AES-256을 깨는 공격은 알려져 있지 않습니다. 가장 잘 알려진 공격(Bogdanov, Khovratovich, Rechberger의 2011년 biclique 공격)은 AES-256을 2^256번 연산에서 2^254.4번 연산으로 줄입니다. 이론적인 개선일 뿐 실제 계산에서는 의미가 없습니다. AES-256은 여전히 깨지지 않았습니다.

AES-256은 양자 컴퓨터에 안전한가요?

상당 부분 그렇습니다. 양자 알고리즘인 Grover 알고리즘은 실질 키 길이를 절반으로 줄여, 양자 공격에 대해 AES-256을 128비트 보안과 같은 수준으로 만듭니다. AES-128은 실질 보안이 64비트로 줄어 취약해질 수 있습니다. AES-256에 대한 Grover 탐색도 약 2^128번 연산이 필요하므로 현실적이지 않습니다.

AES-128과 AES-256의 차이는 무엇인가요?

AES-128은 128비트 키(10라운드)를, AES-256은 256비트 키(14라운드)를 씁니다. 둘 다 현재의 공격에 안전한 것으로 여겨집니다. AES-256은 향후 발전, 특히 양자 컴퓨팅에 대비한 여유가 더 큽니다. 라운드가 더 많아 AES-256이 AES-128보다 약 40% 느리지만, 최신 기기에서는 하드웨어 가속 덕분에 거의 차이가 없습니다.

AES-256 암호화 때문에 휴대폰이 느려지나요?

일반적인 사용에서는 느껴지지 않습니다. 최신 Apple 프로세서는 시스템 암호화 라이브러리를 통해 AES 하드웨어 가속을 제공합니다. 그렇다고 앱의 AES 연산이 Secure Enclave 안에서 실행된다는 뜻은 아닙니다. 걸리는 시간은 파일 크기, 기기, 저장 장치, 구현에 따라 달라지므로, 보안 주장은 일률적인 밀리초 수치가 아니라 측정값에 근거해야 합니다.

앱이 정말 AES-256을 쓰는지 어떻게 알 수 있나요?

마케팅 페이지만 보지 말고 앱의 보안 문서를 확인하세요. 구체적인 알고리즘과 모드, 키 계층, 파생 매개변수, 키체인이나 Secure Enclave를 정확히 어떻게 쓰는지, nonce 처리, 복구 경로, 메타데이터 암호화 여부를 살펴보세요. 오픈 소스 코드와 독립적인 감사가 있으면 이런 주장을 검증하기 쉬워집니다.

결론

AES-256은 NIST가 표준화한 널리 쓰이는 대칭 암호이며, 실용적인 공격은 알려져 있지 않습니다. Grover 알고리즘을 실행하는 양자 컴퓨터도 약 2^128번의 연산을 해야 합니다. AES-256 암호화를 내세우는 앱을 평가할 때는 암호 자체를 넘어 모드(GCM), 키 파생(반복 횟수가 많은 PBKDF2/Argon2), 키 저장(하드웨어 기반), 실제로 암호화되는 데이터(내용 + 메타데이터)를 확인하세요.

Vaultaire는 파일 내용, 헤더, 메타데이터, 인덱스, 썸네일에 AES-256-GCM을 씁니다. HMAC-SHA512 기반 PBKDF2가 패턴과 기기 전체에 쓰는 키체인 솔트에서 로컬 금고 키를 만들고, 이 키가 파일 암호화에 쓰는 무작위 마스터 키를 풀어냅니다. 대칭 연산은 CryptoKit을 통해 앱 프로세스 안에서 실행되며, 기기가 잠겨 있을 때는 iOS 키체인과 데이터 보호가 복구 상태를 보호합니다. 전체 계층 구조는 보안 모델에 정리되어 있습니다.

참고 자료