컴퓨터를 사용하는 현대 암호 체계에서 대표적으로 쓰이는 암호로 비밀키 암호와 공개키 암호가 있다.
이 글에서는 비밀키 암호의 개념과 비밀키 암호의 한 종류인 DES에 대해 다룬다.
비밀키 암호 체계
비밀키 암호 체계란 평문의 암호화와 복호화에 같은 키를 사용하는 암호 체계를 말한다.
발신자가 비밀키를 이용해 데이터를 암호화하면 수신자는 같은 키로 데이터를 복호화한다.
비밀키 암호는 관용 암호, 대칭키 암호, 공유키 암호 등으로도 불린다.
비밀키 암호의 장단점
비밀키 암호 체계는 다양한 암호 알고리즘을 개발할 수 있고, 암호화, 복호화 속도가 빠르다는 장점이 있다.
하지만 암호화 통신을 위해선 양측이 모두 비밀키를 가지고 있어야 하기 때문에, 비밀 키를 별도의 안전한 방법으로 전달해야 한다는 단점이 있다. 이를 키의 배송 문제라 한다.
또, 비밀키 암호에는 디지털 서명을 할 수 없기 때문에, 데이터를 누가 암호화했는지 책임 추적을 하기 어렵다는 단점이 있다.
디지털 서명이란 시스템에서 특정 행위를 한 사람을 식별할 수 있도록 하는 것을 말하고, 책임 추적이란 자신의 행위에 차후 책임을 질 수 있도록 하는 것을 말한다. 디지털 서명을 통해 책임 추적이 가능하다.
이러한 단점은 공개키 암호 시스템에서는 발생하지 않는데, 공개키 암호를 다루는 글에서 설명한다.
DES (Data Encryption Standard)
DES는 IBM에서 Lucifer System을 개선하여 만든 대표적인 비밀키 암호 시스템이다.
DES는 데이터를 64비트씩 나누어 암호화하는 64비트 블록 암호 알고리즘이다.
기본적인 원리는 64비트를 32비트씩 둘로 나누고, 한쪽 32비트는 그대로, 다른 쪽 32비트는 키를 이용해 별도의 연산을
수행하여 최종적으로 교차 배치한 뒤(1 라운드), 같은 과정을 16번 반복(16 라운드)하여 암호문을 생성한다.
비밀키 암호 체계이므로 암호문에 대해 같은 키로 같은 과정을 수행하여 복호화한다.
DES의 도식은 다음과 같다.
DES의 전체 과정을 순서대로 살펴보자.
1. 초기 전치
평문 64비트를 임의의 전치 테이블을 참고해 전치한다.
가령, 암호문의 53번째 비트(7행 5열)에는 평문의 29번째 비트가 배치된다.
2. 비트 연산(f 함수)
전치된 64비트 데이터를 32비트씩 둘로 나누어, 오른쪽 32비트는 그대로 왼쪽 32비트로 배치하고,
왼쪽 32비트는 별도(f 함수)로 연산된 오른쪽 32비트와 XOR 연산하여 오른쪽 32비트로 배치한다.
도식은 다음과 같다.
2-1. 확장 순열
비트 연산 단계에서 오른쪽 32비트에 대한 별도의 연산, 즉 f 함수의 첫 번째 과정이다.
임의의 확장 순열 테이블을 참고해 32비트 데이터를 48비트로 확장한다.
확장 순열 테이블과 그에 따른 도식은 다음과 같다.
2-2. 키와 XOR 연산
생성된 48비트확장 순열을 48비트 키와 XOR연산한다.
사실 각 라운드에서 사용되는 키도 각각 다르다.
64비트의 마스터 키를 바탕으로 16개의 각 라운드별 서브키를 생성하는데, 과정은 뒤에서 설명한다.
2-3. 치환 선택
확장 순열과 키를 XOR한 48비트 데이터를 다시 32비트로 바꾸는 과정이다.
치환 선택 과정에서는 48비트를 6비트씩 8묶음(s1 ~ s8, 6x8=48)으로 나눈 뒤, 임의의 s-box를 참고하여
4비트 데이터 8묶음(4x8=32), 즉 32비트로 변환한다.
도식은 다음과 같다.
각 6비트 묶음(s1 ~ s2)에서 사용하는 s-box 예시는 다음과 같다.
각 6비트 묶음의 첫번째와 마지막 비트를 행으로, 가운데 4비트를 열로 지정하여 s-box의 해당 값으로 치환한다.
가령, '101101' 을 s1 box를 참고하여 치환한다면, '11'행 '0110'열, 즉 3행 6열의 숫자 1을 4비트 이진수 '0001'로 치환한다.
2-4. 순열 생성
치환 선택 결과(32비트)를 임의의 순열 테이블을 참고하여 전치한다. f 함수의 마지막 과정이다.
3. 왼쪽 32비트와 XOR 연산
생성된 32비트 순열과 왼쪽 32비트를 XOR 연산하여 오른쪽 32비트에 배치한다.
2~3번 과정이 1라운드이고, 총 16 라운드를 수행한다.
4. 역전치
16라운드 연산을 수행한 결과를 다시 초기 전치의 반대 순서로 역전치하면 암호문이 생성된다.
DES에서 사용되는 키
DES는 f함수 및 xor 연산 등을 한 라운드로 하여 총 16라운드를 수행한다.
이 때 각 라운드마다 사용되는 키가 다른데, 하나의 마스터 키를 바탕으로 16개의 서브키를 생성하여 사용한다.
각 라운드의 서브키를 생성하는 원리는
1. 패리티 비트를 제거한 56비트를 전치한 뒤,
2. 전치한 56비트를 28비트씩 둘로 나누어 각 28비트를 별도의 비트 수만큼 좌측으로 시프트한 다음,
3. 생성된 56비트 순열을 48비트로 축약 전치시켜 생성한다.
4. 2단계 연산결과인 56비트에 대해 2단계부터 반복 수행한다.
서브키 생성 과정의 도식은
1. PC - 1
64비트의 마스터 키에서 패리티 비트(8의 배수번째 비트)를 제거한 56비트를 임의의 전치 테이블을 참고하여 전치한다.
2. 비트 좌측 이동
전치한 56비트를 28비트씩 둘로 나눈 뒤, 일정 비트 수만큼 좌측으로 시프트한다.
이 때 시프트 할 비트 수는 임의로 정한다.
3. 축약 전치
시프트한 두 28비트 데이터를 다시 합친 뒤 임의의 전치 테이블을 참고하여 48비트로 축약 전치한다.
즉, 키 생성 과정과 함께 DES의 전체 동작 과정을 도식화하면 다음과 같다.
DES는 단순해 보이지만 동작원리를 서술하려면 생각보다 복잡하다.
동작 과정을 직접 손과 눈으로 따라가보는 연습을 해 보아야 그 원리를 제대로 이해할 수 있다.
'Study > 암호학' 카테고리의 다른 글
키 교환 체계 (비밀키, 공개키) (0) | 2023.01.25 |
---|---|
인증서와 PKI (0) | 2023.01.23 |
공개키 암호 (0) | 2023.01.16 |
고전 암호 기법 - 전치 (0) | 2023.01.11 |
고전 암호 기법 - 치환 (0) | 2023.01.10 |