Computer >> 컴퓨터 >  >> 프로그래밍 >> 프로그래밍

정보 보안의 핵심, 현대 블록 암호의 구성 요소 완벽 정리

현대 블록 암호란 무엇인가?

현대 블록 암호(modern block cipher)는 평문(plaintext)의 m비트 블록을 암호화하고, 암호문(ciphertext)의 m비트 블록을 복호화하는 암호 방식입니다. 암호화와 복호화 과정에서는 K비트 길이의 키를 사용하며, 복호화 알고리즘은 반드시 암호화 알고리즘의 역함수여야 합니다. 또한 암호화와 복호화에는 동일한 키가 사용된다는 점이 특징입니다.

블록 암호는 n비트 평문 블록을 입력받아 n비트 암호문 블록을 생성합니다. 가능한 평문 블록의 수는 여러 개이며, 암호화가 가역적(reversible), 즉 복호화가 가능하려면 각 평문 블록이 반드시 고유한 암호문 블록에 일대일로 대응되어야 합니다. 이러한 변환을 가역 변환 또는 비특이(non-singular) 변환이라고 부릅니다.

한편, 동일한 텍스트 블록이 같은 방식으로 암호화되는 문제를 방지하기 위해 블록 암호 운영 모드(block cipher modes of operation)가 개발되었습니다. 이 모드에서는 이전 블록의 암호화 결과가 다음 블록의 암호화에 활용되며, 이 과정에서 초기화 벡터(initialization vector, IV)라 불리는 비트 블록이 사용됩니다.

현대 블록 암호의 주요 구성 요소

현대 블록 암호는 여러 구성 요소의 조합으로 이루어져 있습니다. 대표적인 구성 요소는 다음과 같습니다.

1. D-박스(D-box)

D-박스는 기존 전치 암호(transposition cipher)와 유사한 특성을 지닌 치환 상자(permutation box)로, 비트들의 위치를 서로 바꾸는 역할을 담당합니다. D-박스는 세 가지 유형으로 나눌 수 있습니다.

직선 D-박스(Straight D-box)

직선 D-박스는 n개의 입력을 받아 이를 치환한 뒤 n개의 출력을 내보냅니다. 예를 들어 치환 후 두 번째 입력이 첫 번째 출력으로 나가는 식입니다. n비트 입력에 대해 가능한 매핑 방법의 수는 n!가지입니다.

압축 D-박스(Compression D-box)

압축 D-박스는 n개의 입력과 m개의 출력(m < n)을 가집니다. 일부 입력 비트는 차단되어 출력까지 도달하지 못합니다. 비트를 치환하는 동시에 다음 단계로 전달할 비트 수를 줄여야 할 때 사용됩니다.

확장 D-박스(Expansion D-box)

확장 D-박스는 n개의 입력과 m개의 출력(m > n)을 가지며, 하나의 입력이 둘 이상의 출력에 연결될 수 있습니다. 비트를 전치하면서 동시에 다음 단계에 전달할 비트 수를 늘려야 할 때 활용됩니다.

2. S-박스(S-box)

S-박스는 대체 암호(substitution cipher)와 유사한 원리로 동작하는 치환 상자입니다. S-박스의 입력은 n비트 워드(word)일 수 있고, 출력은 m비트 워드일 수 있는데, 이때 m과 n이 반드시 같을 필요는 없습니다.

3. 순환 시프트(Circular Shift)

순환 시프트 역시 현대 블록 암호에서 널리 발견되는 구성 요소로, 왼쪽 시프트와 오른쪽 시프트 두 가지 형태가 있습니다. 순환 왼쪽 시프트에서는 n비트 워드의 각 비트를 m 위치만큼 왼쪽으로 이동하며, 왼쪽 끝에서 밀려난 m비트는 사라지지 않고 오른쪽 끝의 비트가 됩니다.