NodeCrypto 도움말

블록 암호 운영 모드

기본 블록 암호는 고정된 크기의 단일 블록(AES·SEED·ARIA·Camellia·SM4는 16바이트, DES·TDES는 8바이트)만 치환한다. 임의 길이의 메시지를 안전하게 암호화하기 위해 운영 모드(Mode of Operation)는 블록들을 어떻게 연쇄(Chaining)하거나 키스트림으로 변환하거나 인증 태그와 결합할지 정의한다. NodeCrypto의 대칭키 암호 노드는 Cipher Mode 파라미터를 제공하며, 선택된 모드에 필요한 입출력 포트만 동적으로 노출한다.

모드분류표준추가 포트
ECB독립 블록NIST SP 800-38A §6.1—
CBC블록 연쇄NIST SP 800-38A §6.2IV
GCMAEADNIST SP 800-38DNonce, AAD(선택), 인증 태그
CCMAEADNIST SP 800-38CNonce, AAD(선택), 인증 태그
CTR스트림 (카운터)NIST SP 800-38A §6.5IV
CFB스트림 (피드백)NIST SP 800-38A §6.3IV
OFB스트림 (피드백)NIST SP 800-38A §6.4IV
XTS디스크·섹터 암호화IEEE 1619-2007 / NIST SP 800-38EIV (Tweak)
KW키 래핑NIST SP 800-38F / RFC 3394—

결정적 기본 IV / Nonce 동작: 선택 입력인 IV 또는 Nonce 포트를 연결하지 않고 비워 두면 NodeCrypto는 임의의 난수를 생성하지 않고, 요구되는 길이만큼 0x00으로 채워진 바이트 배열(128비트 블록 암호의 CBC·CTR·CFB·OFB·XTS는 16바이트, DES·TDES는 8바이트, GCM·CCM은 12바이트)을 결정적으로 공급한다. 이는 테스트 벡터 검증과 프로토콜 디버깅에서 항상 재현 가능한 실행 결과를 보장하기 위함이며, 실제 운영 프로토콜에서는 반드시 고유한 Nonce 또는 예측 불가능한 IV를 직접 공급해야 한다.

ECB (Electronic Codebook)

표준: NIST SP 800-38A §6.1
NodeCrypto 추가 포트: 없음 (키 및 평문/암호문만 사용)
블록 정렬 / 패딩 필요 IV 없음

동일한 키로 각 평문 블록을 독립적으로 암호화한다. 블록 사이에 전달되는 연쇄 상태, 초기화 벡터(IV), 카운터가 없다. 입력 길이가 블록 크기의 배수이거나 None이 아닌 패딩 모드가 설정되어야 한다.

보안 경고: 동일한 평문 블록은 항상 동일한 암호문 블록을 생성하므로 다중 블록 데이터의 시각적·구조적 패턴이 그대로 노출된다("ECB 펭귄" 사례로 잘 알려져 있다). 단일 블록 기본 연산, 사용자 정의 구조 설계, 원시 블록 암호 테스트 벡터 검증 용도로만 사용한다.
평문블록 암호암호화키암호문평문블록 암호암호화키암호문블록 간 연쇄 없이 각 블록을 독립적으로 암호화
평문블록 암호암호화키암호문평문블록 암호암호화키암호문블록 간 연쇄 없이 각 블록을 독립적으로 암호화

CBC (Cipher Block Chaining)

표준: NIST SP 800-38A §6.2
NodeCrypto 추가 포트: IV (128비트 블록 암호는 16바이트, DES·TDES는 8바이트)
블록 정렬 / 패딩 필요 16B/8B IV 사용

블록 암호화 함수를 적용하기 전에 각 평문 블록을 직전 암호문 블록(첫 번째 블록은 초기화 벡터 IV)과 XOR한다. 각 블록이 이전 모든 블록에 의존하므로 동일한 평문 블록이라도 서로 다른 암호문 블록으로 암호화된다. 블록 정렬 또는 PKCS7 같은 가역 패딩 방식이 필요하다.

보안 경고: 동일한 키로 암호화하는 모든 메시지마다 예측 불가능한(무작위) IV를 사용해야 하며, CBC 단독으로는 암호문 위변조(패딩 오라클 공격 등)를 막을 수 없다. AEAD 모드(GCM)를 사용하거나 CBC 뒤에 Encrypt-then-MAC(HMAC) 구성을 결합하는 것이 안전하다.
평문블록 암호암호화키암호문평문블록 암호암호화키암호문IV이전 암호문 블록을 다음 평문 블록에 XOR 연쇄
평문블록 암호암호화키암호문평문블록 암호암호화키암호문IV이전 암호문 블록을 다음 평문 블록에 XOR 연쇄

GCM (Galois/Counter Mode)

표준: NIST SP 800-38D
NodeCrypto 추가 포트: Nonce (12B), AAD (선택), 인증 태그 (암호화 시 16B 출력 / 복호화 시 필수 입력)
AEAD (기밀성 + 무결성) 12B Nonce · 16B Auth Tag

카운터(CTR) 모드 암호화와 GF(2128) 유한체 위의 범용 해시 함수(GHASH)를 결합한 연관 데이터 포함 인증 암호화(AEAD) 모드이다. 단일 연산으로 기밀성과 무결성을 동시에 제공한다. 블록 패딩이 필요 없으며 암호문 길이는 평문 길이와 같고, 별도의 16바이트 인증 태그가 생성된다. 복호화 시 입력된 인증 태그가 AAD 및 암호문로부터 계산된 태그와 일치하지 않으면 노드는 즉시 AUTH_TAG_MISMATCH 에러로 실패하며 평문을 방출하지 않는다.

치명적 Nonce 재사용 경고: GCM 모드에서 동일한 키로 동일한 12바이트 Nonce를 절대 재사용해서는 안 된다. 단 한 번의 Nonce 충돌만으로도 평문들의 XOR 값이 노출되며 공격자가 GHASH 인증 키를 복원해 임의의 인증 태그를 위조할 수 있다.
카운터 0블록 암호암호화키평문암호문카운터 1블록 암호암호화키평문암호문블록마다 독립적으로 증가하는 카운터 암호화 (병렬 처리 가능, 피드백 없음)암호문 + AADGHASH인증 태그
카운터 0블록 암호암호화키평문암호문카운터 1블록 암호암호화키평문암호문블록마다 독립적으로 증가하는 카운터 암호화 (병렬 처리 가능, 피드백 없음)암호문 + AADGHASH인증 태그

CCM (Counter with CBC-MAC)

표준: NIST SP 800-38C / RFC 3610
NodeCrypto 추가 포트: Nonce (12B), AAD (선택), 인증 태그 (16B)
AEAD (CTR + CBC-MAC) 12B Nonce · 16B Auth Tag

128비트 블록 암호(AES, SEED, ARIA)를 위해 설계된 AEAD 모드로, CTR 모드 암호화와 CBC-MAC 인증 태그를 결합한다. GCM과 마찬가지로 블록 패딩 없이 암호화된 페이로드와 선택적 평문 AAD를 함께 인증하며, 복호화 시 태그 검증에 실패하면 AUTH_TAG_MISMATCH 에러를 발생시킨다.

카운터 0블록 암호암호화키평문암호문카운터 1블록 암호암호화키평문암호문블록마다 독립적으로 증가하는 카운터 암호화 (병렬 처리 가능, 피드백 없음)평문 + AADCBC-MAC인증 태그
카운터 0블록 암호암호화키평문암호문카운터 1블록 암호암호화키평문암호문블록마다 독립적으로 증가하는 카운터 암호화 (병렬 처리 가능, 피드백 없음)평문 + AADCBC-MAC인증 태그

CTR (Counter Mode)

표준: NIST SP 800-38A §6.5
NodeCrypto 추가 포트: IV (16B 초기 카운터 블록)
스트림 모드 (패딩 불필요) 병렬 처리 가능

IV로 초기화된 16바이트 카운터 블록의 연속된 값들을 암호화하여 생성한 키스트림을 평문과 XOR함으로써 블록 암호를 동기식 스트림 암호로 전환한다. 블록 패딩이 필요 없으며 임의 길이 입력을 처리할 수 있고, 암호화와 복호화 모두 블록 암호의 암호화 함수를 사용한다.

보안 경고: 동일한 키에서 초기 카운터(IV)를 재사용하면 키스트림이 재사용되어 평문들의 XOR가 즉시 노출된다. 또한 CTR 단독으로는 무결성을 보장하지 않으므로 암호문의 비트를 반전시키면 복호화된 평문의 동일한 비트가 그대로 반전된다.
카운터 0블록 암호암호화키평문암호문카운터 1블록 암호암호화키평문암호문블록마다 독립적으로 증가하는 카운터 암호화 (병렬 처리 가능, 피드백 없음)
카운터 0블록 암호암호화키평문암호문카운터 1블록 암호암호화키평문암호문블록마다 독립적으로 증가하는 카운터 암호화 (병렬 처리 가능, 피드백 없음)

CFB (Cipher Feedback)

표준: NIST SP 800-38A §6.3
NodeCrypto 추가 포트: IV (16B)
스트림 모드 (패딩 불필요) 암호문 피드백

IV에서 시작하여 직전 암호문 블록을 블록 암호로 암호화한 뒤 그 출력을 현재 평문 블록과 XOR하여 다음 암호문 블록을 생성하는 자기 동기식 스트림 암호 모드이다. 블록 패딩이 필요 없다.

IV블록 암호암호화키평문암호문블록 암호암호화키평문암호문이전 암호문 블록을 다음 블록 암호 입력으로 피드백
IV블록 암호암호화키평문암호문블록 암호암호화키평문암호문이전 암호문 블록을 다음 블록 암호 입력으로 피드백

OFB (Output Feedback)

표준: NIST SP 800-38A §6.4
NodeCrypto 추가 포트: IV (16B)
스트림 모드 (패딩 불필요) 키스트림 피드백

IV에서 시작하여 블록 암호 자신의 출력을 반복 암호화함으로써 평문·암호문과 독립적인 키스트림을 생성하고 이를 데이터와 XOR하는 동기식 스트림 암호 모드이다. 암호화와 복호화 연산이 완전히 동일하며 블록 패딩이 필요 없다.

IV블록 암호암호화키평문암호문블록 암호암호화키평문암호문이전 블록 암호 출력을 다음 블록 암호 입력으로 피드백
IV블록 암호암호화키평문암호문블록 암호암호화키평문암호문이전 블록 암호 출력을 다음 블록 암호 입력으로 피드백

XTS (XEX-based Tweaked-Codebook Mode with Ciphertext Stealing)

표준: IEEE Std 1619-2007 / NIST SP 800-38E
NodeCrypto 추가 포트: IV (16B 섹터 트윅); 2배 길이 키 (AES-128-XTS는 32B, AES-256-XTS는 64B)
섹터·디스크 암호화 2배 길이 키 (K1 || K2)

고정 크기 저장소 섹터(디스크 전체 암호화 등)를 암호화하기 위한 특화 모드이다. 2배 길이의 키를 두 개의 독립적인 AES 키(K1 || K2)로 분할하여 K2로 16바이트 트윅(IV 포트로 공급)을 암호화하고, K1으로 암호화된 트윅의 유한체 거듭제곱과 결합된 데이터 블록을 암호화한다. 블록에 정렬되지 않은 끝부분 바이트는 암호문 훔치기(Ciphertext Stealing)로 처리하므로 별도 패딩이 추가되지 않지만, 입력 길이가 최소 16바이트 이상이어야 한다(16바이트 미만이면 DATA_TOO_SHORT 에러 발생).

평문트윅 T0블록 암호암호화키트윅 T0암호문평문트윅 T1블록 암호암호화키트윅 T1암호문블록 간 연쇄 없이 각 블록을 독립적으로 암호화
평문트윅 T0블록 암호암호화키트윅 T0암호문평문트윅 T1블록 암호암호화키트윅 T1암호문블록 간 연쇄 없이 각 블록을 독립적으로 암호화

KW (AES Key Wrap)

표준: NIST SP 800-38F / IETF RFC 3394
NodeCrypto 추가 포트: 없음 (RFC 3394 기본 무결성 검증값 A6A6A6A6A6A6A6A6 사용)
키 래핑 + 64비트 ICV 8B 반블록 정렬

또 다른 AES 키 암호화 키(KEK)를 사용하여 보관 또는 전송 중인 암호키를 안전하게 보호하기 위해 설계된 결정적 키 래핑(Key Wrap) 모드이다. 평문 키 자료는 반드시 8바이트(64비트 반블록)의 배수이자 최소 16바이트 이상이어야 한다. 암호화 시 8바이트 무결성 헤더가 추가되어 암호문이 평문보다 8바이트 길어지며, 복호화 시에는 래핑을 해제하고 64비트 무결성 검증값(ICV)을 확인하여 래핑된 키가 변조되었거나 잘못된 KEK가 사용된 경우 AUTH_TAG_MISMATCH 에러로 실패한다.

키 데이터 (n블록)AES Key Wrap(RFC 3394)키래핑 결과 (n+1블록)
키 데이터 (n블록)AES Key Wrap(RFC 3394)키래핑 결과 (n+1블록)