정보보안의 원리
웹 416쪽 무료 · 종이책 B5 416쪽
© K-BOOKS · 무료 웹 열람용 콘텐츠입니다. 무단 복제·저장·인쇄·재배포를 제한합니다.
파일을 받는 친구와 미리 같은 키를 나누었다면, 보내는 쪽과 받는 쪽은 그 비밀을 사용해 암호화와 복호화를 수행할 수 있습니다. 이런 계열을 대칭키 암호라고 합니다. 대용량 데이터를 비교적 효율적으로 처리하므로 실제 통신 내용과 저장 데이터를 보호하는 핵심 도구입니다. 그러나 같은 키를 가진 사람은 보호된 내용을 읽을 수 있습니다. 키를 전달하는 과정과 키 보유자 수를 따로 관리해야 합니다.

대칭키 암호를 작동 단위로 보면 블록 암호와 스트림 암호로 나눌 수 있습니다. 블록 암호는 정해진 크기의 입력 덩어리를 같은 크기의 출력 덩어리로 바꿉니다. AES는 키 길이가 달라도 한 번에 처리하는 블록 크기가 128비트, 즉 16바이트입니다. 스트림 암호는 키와 nonce 같은 입력으로 키스트림을 만들고 평문과 결합합니다. 현대적인 예인 ChaCha20은 내부에서 정해진 단위로 계산하지만, 응용에서는 필요한 길이의 키스트림을 얻어 바이트 열을 보호합니다. 블록 암호가 짧은 데이터 전용이고 스트림 암호가 동영상 전용이라는 뜻은 아닙니다.
암호화 내부에는 두 가지 목적이 있습니다. 입력과 키 사이의 관계를 알아보기 어렵게 만들고, 입력의 작은 차이를 결과의 넓은 부분에 퍼뜨립니다. 이를 설명할 때 혼돈과 확산이라는 말을 사용합니다. 한 번의 단순 치환만으로는 남는 규칙을 찾기 쉬우므로 여러 연산을 라운드라는 반복 구조로 결합합니다. 공개된 치환표를 쓴다는 사실은 키를 공개한다는 뜻이 아닙니다. 치환표와 전체 구조를 알아도 비밀 키를 모르면 역산이 계산상 어렵게 설계합니다.
AES는 16바이트 상태를 다루면서 바이트를 바꾸는 SubBytes, 위치를 이동하는 ShiftRows, 열 내부를 섞는 MixColumns, 라운드 키를 XOR로 결합하는 AddRoundKey를 조합합니다. XOR는 두 비트가 다르면 1, 같으면 0을 내는 연산이며 같은 값을 두 번 XOR하면 원래 값으로 돌아옵니다. AES의 키 스케줄은 원래 키에서 각 단계에 쓸 라운드 키를 만듭니다. AES-128·192·256은 키 길이가 각각 128·192·256비트이고 라운드 수는 10·12·14입니다. 마지막 라운드에서는 MixColumns를 생략합니다. 이 설명은 직접 AES를 구현하라는 뜻이 아니라, “같은 블록을 여러 번 무작정 암호화한다”는 오해를 없애기 위한 내부 지도입니다.
DES는 64비트 블록과 56비트 유효 키를 사용하는 과거의 표준입니다. 16라운드의 파이스텔 구조에서는 입력을 좌우로 나누고 한쪽에 라운드 함수를 적용한 결과를 다른 쪽과 결합하며 진행합니다. 파이스텔 구조는 라운드 함수 자체가 역함수를 갖지 않아도 전체를 복원할 수 있다는 설계상의 특징이 있습니다. DES는 작은 키 공간 때문에 새 보호 설계에 사용하지 않습니다. DES를 세 번 적용하는 TDEA, 흔히 3DES라고 하는 방식도 역사적 호환성을 이해하는 대상으로 다룹니다. DES 계열을 AES와 동등한 최신 선택지로 소개하지 않습니다.
국내 알고리즘인 SEED와 ARIA도 블록 암호지만 구조는 같지 않습니다. SEED는 128비트 블록과 128비트 키를 사용하며 16라운드 파이스텔 구조입니다. ARIA는 128비트 블록에 128·192·256비트 키를 사용하고, 치환과 확산을 거듭하는 구조에서 12·14·16라운드를 수행합니다. AES와 ARIA는 키 길이가 같을 수 있어도 알고리즘과 라운드 구성이 다릅니다. 어떤 제품이 이 알고리즘을 지원하는지와 현재 특정 제도에서 어떤 사용을 요구하는지는 별도 확인 사항입니다.
| 알고리즘 | 블록·키 | 이 절에서 읽을 차이 |
|---|---|---|
| AES | 블록 128비트 / 키 128·192·256비트 | 바이트 치환과 확산, 키 결합을 반복합니다. |
| SEED | 블록 128비트 / 키 128비트 | 16라운드 파이스텔 구조입니다. |
| ARIA | 블록 128비트 / 키 128·192·256비트 | 키 길이에 따라 12·14·16라운드입니다. |
| DES | 블록 64비트 / 유효 키 56비트 | 구조를 배우는 역사적 예이며 새 설계에 쓰지 않습니다. |
40바이트짜리 파일을 AES로 보호하려고 합니다.
AES-256으로 바꾸어도 40바이트를 한 번에 처리하는 256비트 블록이 생기지 않습니다. 블록 크기는 여전히 16바이트이며, 달라진 것은 비밀 키 길이와 라운드 구성입니다.
40바이트에는 16바이트 두 덩어리와 8바이트가 남습니다. 마지막 조각을 어떻게 처리하고 덩어리끼리 어떤 관계를 줄지는 운용 모드가 정합니다. 따라서 “AES를 쓴다”만으로 완성된 파일 암호화 방법을 설명한 것이 아닙니다.
같은 키와 같은 입력 블록을 기본 블록 함수에 넣으면 같은 출력이 나옵니다. 반복되는 평문 모양을 감추려면 파일 전체에 적용할 모드와 초기값을 올바르게 선택해야 합니다.
깨달음키 길이는 비밀의 선택 공간과 관계되고, 블록 크기는 기본 연산의 처리 단위입니다. 둘을 구분하면 운용 모드가 왜 필요한지 보입니다.
무료 학습은 그대로, 종이책은 필요한 분을 위한 선택지입니다.
웹 416쪽 무료 · 종이책 B5 416쪽
웹 513쪽 무료 · 종이책 B5 513쪽