0Pricing
Cryptology Academy · 강의

블록 암호의 기초와 패딩

블록 크기, PKCS7 패딩, 암호 구조를 이해합니다.

블록 암호의 기초와 패딩은(는) CoddyKit의 무료 Cryptology Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Cryptology Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Cryptology Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

환영합니다

블록 암호는 고정 크기 블록을 암호화합니다. 평문이 블록을 가득 채우지 못하면 패딩이 필요합니다. 이 수업에서는 블록 암호의 구조와 패딩 방식을 익히고, 이것들이 중요한 이유를 알아봅니다.

블록 크기 복습

AES는 128비트(16바이트) 블록을 사용합니다. DES는 64비트(8바이트) 블록을 사용했습니다. 평문이 정확히 16바이트라면 블록 하나입니다. 17바이트라면 블록 두 개가 필요합니다.

패딩이 필요한 이유

평문이 20바이트라면 두 번째 블록에는 4바이트만 들어갑니다. 암호는 완전한 16바이트 블록을 필요로 합니다. 남은 12바이트를 결정적이고 되돌릴 수 있는 방식으로 채웁니다.

PKCS#7 패딩

PKCS#7은 N바이트로 패딩하며 각 바이트의 값은 N입니다. - 3바이트가 필요함 → 추가: 03 03 03 - 12바이트가 필요함 → 추가: 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C - 0바이트가 필요함 → 16바이트의 전체 블록 추가: 10×16

항상 전체 블록 하나를 패딩하기

평문이 정확히 16바이트라면 PKCS#7은 0x10×16으로 이루어진 전체 추가 블록을 붙입니다. 이렇게 하면 수신자는 패딩이 끝나는 위치를 항상 알 수 있습니다. 마지막 바이트의 값이 제거할 바이트 수를 알려 주기 때문입니다.

Python에서의 PKCS#7

def pkcs7_pad(data: bytes, block_size: int = 16) -> bytes: n = block_size - (len(data) % block_size) return data + bytes([n] * n) def pkcs7_unpad(data: bytes) -> bytes: n = data[-1] return data[:-n]

패딩 오라클 공격

복호화 후 패딩이 유효한지 여부를 서버가 드러내면(오류 메시지나 타이밍을 통해), 공격자는 키를 몰라도 암호문을 바이트 단위로 복호화할 수 있습니다. 이 공격은 2010년에 ASP.NET ViewState를 무너뜨렸습니다.

0 패딩과 ANSI X.923

0 패딩: 0x00 바이트로 패딩합니다(모호합니다 — 원본 데이터가 0으로 끝날 수 있습니다). ANSI X.923: 0으로 패딩하고 마지막 바이트에 개수를 기록합니다. ISO 7816-4: 첫 번째 패딩 바이트는 0x80이고 나머지는 0x00입니다. PKCS#7은 모호하지 않으므로 선호됩니다.

비트 단위 패딩(CTS)

암호문 절취(CTS)는 패딩을 완전히 피합니다. 마지막 두 블록을 재배치하여 블록 일부만 있는 입력을 처리합니다. 디스크 암호화에 사용됩니다(Kerberos 및 일부 AES 구현).

블록 크기가 보안에 미치는 영향

64비트 블록(DES, 3DES, Blowfish)을 사용하면 2^32개 블록(약 32GB) 후에 생일 충돌이 발생합니다. 2016년에 SWEET32 공격이 이를 입증한 후 브라우저는 TLS에서 3DES를 비활성화했습니다. AES의 128비트 블록에는 2^64개 블록이 필요하므로 사실상 안전합니다.

패딩이 필요 없는 모드

AES-CTR 및 AES-GCM은 패딩이 필요하지 않습니다. 블록 암호를 키스트림 생성기로 사용하고 임의 길이 입력에 XOR을 적용합니다. 블록 경계는 내부 구현 세부 사항일 뿐입니다.

빠른 확인

16바이트 블록에 PKCS#7을 사용할 때 13바이트 메시지에 어떤 패딩이 추가됩니까?

복습

블록 암호 패딩을 익히셨습니다! 다음에는 ECB와 CBC 모드를 비교하며 유명한 ECB 펭귄 공격부터 살펴봅니다.

자주 묻는 질문

“블록 암호의 기초와 패딩” 강의는 무료인가요?

네 — “블록 암호의 기초와 패딩” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Cryptology Academy 강의 전체를 잠금 해제할 수 있습니다. Cryptology Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“블록 암호의 기초와 패딩”에서 뭘 배우나요?

블록 크기, PKCS7 패딩, 암호 구조를 이해합니다. 브라우저에서 직접 실행하는 실습 코드로 Cryptology Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Cryptology Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Cryptology Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.

“블록 암호의 기초와 패딩” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Cryptology Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Cryptology Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 블록 암호의 기초와 패딩
  2. ECB와 CBC: 패턴 및 IV
  3. CTR 모드와 스트림 암호 동작
  4. GCM과 인증 암호화
← Cryptology Academy(으)로 돌아가기