블록 암호 (Block Cipher)
블록 암호는 평문을 128비트처럼 고정된 길이의 블록으로 나누고, 같은 비밀 키로 각 블록을 같은 길이의 암호문 블록으로 바꾸는 대칭 키 암호입니다. 대표적인 예가 AES이며, 데이터를 비트나 바이트 단위로 연속 처리하는 스트림 암호와 대비됩니다.
자세히 알아보기
수학적으로 블록 암호는 키마다 하나씩 정해지는 '블록 집합 위의 순열'입니다. 키를 알면 각 평문 블록을 정확히 하나의 암호문 블록으로 바꾸고 다시 되돌릴 수 있어야 하며, 키를 모르는 사람에게는 무작위 순열과 구별되지 않아야 합니다. 이를 위해 블록 암호는 간단한 라운드 함수를 여러 번 반복합니다. 라운드마다 치환(S-박스)으로 혼돈(confusion)을, 비트 섞기와 선형 변환으로 확산(diffusion)을 만들어, 평문이나 키의 한 비트가 바뀌면 암호문의 절반가량이 바뀌는 쇄도 효과가 나타나게 합니다.
구조는 크게 두 가지입니다. 페이스텔 구조는 블록을 반으로 나눠 한쪽에 라운드 함수를 적용해 다른 쪽과 XOR하는 방식으로, DES가 대표적입니다. 치환-순열 네트워크(SPN)는 블록 전체에 치환과 선형 변환을 번갈아 적용하며, AES가 이 구조입니다. AES는 128비트 블록에 128·192·256비트 키를 지원하는 현재의 국제 표준입니다. 한국에서는 KISA 등이 개발한 SEED, ARIA, LEA가 국내 표준 블록 암호로 쓰입니다.
운영 모드와 현재 권장 사항
블록 암호는 한 블록만 처리하므로, 긴 데이터를 암호화하려면 운영 모드가 필요합니다. 같은 평문 블록이 늘 같은 암호문이 되는 ECB 모드는 패턴이 드러나 사용하면 안 됩니다. CBC와 CTR은 기밀성만 제공하므로 별도의 MAC이 필요하고, 현재는 암호화와 무결성 검증을 함께 제공하는 GCM 같은 인증 암호(AEAD) 모드가 권장됩니다. 또 블록 크기가 작은 암호는 같은 키로 많은 데이터를 처리하면 블록 충돌로 정보가 새므로, 64비트 블록을 쓰는 DES·3DES는 더 이상 쓰지 않아야 합니다. DES는 56비트 키 때문에 전수 조사로 깨졌고, NIST는 3DES 사용도 단계적으로 중단했습니다.
블록체인·암호화폐에서는
블록체인의 서명과 해시에는 블록 암호가 직접 쓰이지 않지만, 지갑 보안에는 필수입니다. 비트코인 코어는 지갑 파일의 개인 키를 AES-256으로 암호화하고, 이더리움 키스토어 파일은 비밀번호에서 scrypt 등으로 유도한 키로 AES-128-CTR 암호화를 합니다. 하드웨어 지갑과 거래소 서버의 저장 데이터, TLS 통신에도 AES-GCM이 널리 쓰입니다. 결국 이런 암호화의 강도는 블록 암호 자체보다 비밀번호의 강도와 키 유도 함수 설정에 좌우되는 경우가 많습니다.
쉽게 말하면
정해진 크기의 상자에 내용물을 넣고, 비밀번호로 상자 속을 완전히 뒤섞어 잠그는 기계입니다. 같은 비밀번호를 아는 사람만 원래대로 되돌릴 수 있습니다.
예시
AES-128은 16바이트(128비트) 평문 블록과 16바이트 키를 받아 10라운드를 거쳐 16바이트 암호문 블록을 냅니다. 100바이트 메시지를 GCM 모드로 암호화하면 길이가 같은 암호문과 함께 위·변조 확인용 인증 태그가 만들어집니다.
이 글은 학습을 위한 일반 정보이며 투자 권유나 법률 자문이 아닙니다. 가상자산은 가격 변동이 크고 원금 손실 위험이 있습니다.