현대 스트림 암호
현대 스트림 암호에서 암호화와 복호화는 한 번에 r비트를 생성한다. 키 비트 스트림을 이용해 암/복호화를 하는데 이 키 스트림을 어떻게 생성하는지가 현대 스트림 암호의 주된 관심사다.
동기식 스트림 암호
암호문을 복호화하여 평문을 찾을 때 키 스트림과 암호문 사이에 동기가 필요한 동기식 스트림 암호 시스템은 키 스트림이 평문과 관계없이 생성되는 것으로 암호문에 들어있는 키 스트림과 암호문의 독립성으로 인해 인가자 이외의 불법 사용자에게 정보 유출 가능성이 적다.
1) One-Time Pad (OTP)
동기식 스트림 암호 중 가장 간단하며 안전하다. OTP 암호는 암호화를 수행할 때마다 랜덤하게 선택된 키 스트림을 사용한다. 암호화 알고리즘과 복호화 알고리즘은 각각 XOR 연산을 한 번에 한 비트씩 적용한다.
2) 귀환 시프트 레지스터 (Feedback Shift Register)
FSR은 하드웨어, 소프트웨어 환경 모두 구현될 수 있지만 하드웨어 구현이 더욱 용이하다. 시프트 레지스터와 귀환 함수로 구성된다.
3) 선형 귀환 시프트 레지스터 (LFSR, Linear Feedback Shift Register)
하드웨어로 쉽게 구현, 많은 스트림 암호가 LFSR 이용.
4) 비선형 귀환 시프트 레지스터 (NLFSR, Nonlinear Feedback Shift Register)
LFSR은 선형성 때문에 공격에 취약하다. NLFSR은 LFSR보다 안전하다.
비동기식 스트림 암호(자기 동기식 스트림 암호)
키 스트림이 평문 또는 암호문과 관계를 갖는 비동기식 스트림 암호 시스템은 키 스트림이 평문 혹은 암호문으로부터 함수 관계에 의해 생성되는 방식으로, 전송 중 암호문의 비트가 손실 또는 변경되더라도 오류의 전파가 유한하게 된다.
오류 정정의 기능을 포함할 수 있지만 키 스트림과 암호문의 종속성으로 인해 해독되기가 쉽다.
DES(Data Encryption Standard)
DES는 발표된 이후 가장 널리 사용된 대칭키 블록 암호다. 64비트 평문을 64비트 암호문으로 암호화하며 그보다 긴 평문은 64비트 블록으로 나눈다. Feistel 구조의 변형 형태를 가지고 라운드 횟수는 16회이다. 56비트의 키로부터 16개의 서브키(48비트)를 생성하고, 그 서브키를 각 라운드에서 사용한다.
DES의 키가 56비트인 이유는 7비트마다(8비트당 한 비트) 오류검출을 위한 패리티 비트가 들어가기 때문에 실질적으로는 56비트이기 때문이다.
DES의 복호화과정은 암호화과정과 동일하며 서브키의 순서만 반대이다. (Feistel 구조와 유사함)
- DES의 구조
암호화 과정은 두 개의 전치(P-박스)와 16개의 Feistel 라운드 함수로 구성된다. 첫 P-박스를 초기 전치(initial permutation), 마지막 P-박스를 최종 전치(final permutation)라고 한다. (최종 전치는 DES에 있어서 암호학적으로 중요치 않음)
각 라운드는 라운드 키 생성기에 의해 암호기로부터 생성된 48비트 라운드 키를 사용한다.
먼저 64비트의 평문을 암호화하는 과정을 보면 초기 전치를 시행한 후 Round 함수에 대입한다.
DES는 16번의 Feistel 구조의 Round 함수를 사용하기 때문에 Round가 16번이 반복된다. 라운드 함수가 이전 라운드 함수(혹은 초기 전치 박스)의 출력 값 L과 R을 입력으로 받아, 다음 라운드(혹은 최종 전치 박스)에 입력으로 전송될 L과 R을 생성한다.
- DES 함수
DES 암호화의 핵심은 라운드마다 사용되는 라운드 함수인 DES 함수이다. DES 함수는 32비트 출력값을 산출하기 위해 가장 오른쪽의 32비트에 48비트 키를 적용한다.
DES 함수를 살펴보면 먼저 32비트에 48비트 키를 적용하기 위해 먼저 32비트 값 R에 확장 P-박스를 적용시켜 48비트로 만든 후, 48비트의 라운드 키와 XOR하여 생성된 값을 8개의 S-박스에 대입하여 다시 32비트로 만들어 단순 P-박스에 대입시킨다.
여기서 안전성은 주로 비선형 함수로 이루어진 8개의 S-박스에 의존한다.
- 키 생성
라운드 키 생성(round-key generator)은 56비트 암호키로부터 16개의 48비트 라운드 키를 만들어 낸다.
암호화 키는 보통 64비트로 주어지며, 이 중 8비트의 패리티 비트는 드롭된다.
DES의 S-박스는 각 라운드에서부터 다음 라운드까지 혼돈을 만족하도록 설계되었다. 그래서 입력값의 한 비트를 바꾸면 출력값에서 두 비트 이상이 바뀐다.
P-박스는 비트들을 동시에 확산시킨다.
DES는 평문 또는 키의 작은 변화가 암호문에 큰 변화를 만드는 쇄도효과(Avalanche Effect)가 매우 크고, 암호문의 각 비트가 평문의 많은 비트들에 의존하는 완비성(completeness)이 높은 것으로 증명되어 암호문으로부터 평문을 추론하기가 매우 어렵다.
그러나 DES는 56비트의 작은 키를 사용하므로 Brute force 공격에 더 이상 안전하지 못하다.
3중 DES
DES를 보다 안전하게 사용하기 위해서 DES를 3번 중첩시키는 3중 DES가 존재한다. 3중 DES는 두 개의 키를 갖는 버전과 3개의 키를 갖는 버전이 존재한다. 다만 3DES의 속도가 빠르지 않아 DES 암호를 사용한 자료의 호환성을 중시하는 경우를 제외하고는 새로운 용도로 사용하지는 않는다.
1) 2개의 키를 갖는 3DES
두 개의 키를 갖는 3중 DES는 두 개의 키 k1과 k2를 이용한다. 첫 번째 단계와 세 번째 단계에서 k1을 사용하고 두 번째 단계에서는 k2를 사용한다.
하나의 DES로 3DES를 만들기 위해 암호화 과정의 중간 단계에서는 복호화 알고리즘을 사용하고, 복호화 과정에서는 반대로 DES의 암호화 알고리즘을 사용한다.
즉, 암호화 할 때 평문을 먼저 키 k1으로 암호화 한 후, k2로 복호화하고 k1으로 다시 암호화한다. (복호화 과정은 반대)
2) 3개의 키를 갖는 3DES
두 개의 키를 갖는 3DES는 KPA 공격 가능성 때문에 세 개의 키를 갖는 3중 DES를 사용하기도 한다. (PGP)
암호화는 키 k1,k2,k3 순으로 각각 암호화, 복호화, 암호화하며 복호화는 암호화의 역으로 한다. (키도 역으로 함)
AES (Advanced Encryption Standard)
AES는 DES를 대체하기 위해 공모된 알고리즘이다. 1차 심사에서 15개의 응모작을, 2차 심사에서는 5개(MARS, Twofish, RC6, Serpent, Rijndael)의 응모작이 선택되었다. 최종적으로 선택된 것은 Rijndael이다.
AES는 128비트 평문을 128비트 암호문으로 출력하는 알고리즘으로 non-Feistel 알고리즘(역함수가 존재해야 함)에 속한다. 10, 12, 14 라운드를 사용하며 각 라운드에 해당하는 키의 크기는 128, 192, 256 비트이다.
키 크기에 따라 AES-128, AES-192, AES-256 으로 불리며 키 크기와는 상관없이 각 라운드 키 크기는 128비트다.
- 암호화 과정
DES는 Feistel Network의 구조를 사용하고 있지만 AES(Rijndael)에서는 SPN 구조를 사용한다.
AES 암호화 과정의 각 라운드는 비 선형성을 갖는 S-Box를 적용하여 바이트 단위로 치환을 수행하는 SubBytes() 연산, 행 단위로 순환 시프트(Cyclic shift)를 수행하는 ShiftRows() 연산, 높은 확산을 제공하기 위해 열 단위로 혼합하는 MixColumns() 연산과 마지막으로 라운드 키와 state를 XOR하는 AddRoundKey() 연산으로 구성된다. (기술한 순서대로 적용) 다만 암호화의 마지막 라운드에서는 MixColumns() 연산을 수행하지 않는다.
기타 대칭키 암호 알고리즘
1) IDEA (International Data Encryption Algorithm)
DES를 대체하기 위해 스위스 연방기술 기관에서 개발. 128비트 키, 64비트 블록 암호로 Feistel 구조를 변형하였다. (Feistel과 SPN의 중간 형태를 띔)
8라운드에 걸쳐 데이터를 변환하고 마지막에 한 번 더 키를 작용시켜 64비트 암호문을 생성하기 때문에 보통 8.5 라운드라고 한다. DES와 달리 S-box를 사용하지 않고 대수적 구조가 서로 다른 연산을 교대로 사용하여 암호학적 강도를 증가시켰다.
2) RC5
비교적 간단한 연산으로 빠른 암복호화 기능을 제공하며 모든 하드웨어에 적합하도록 설계되었다. 입출력, 키, 라운드 수가 가변인 블록 알고리즘 RC5는 32/64/128 비트의 블록을 가지며 속도는 DES의 약 10배다.
3) SEED
한국정보진흥원과 국내 암호전문가들이 함께 개발한 알고리즘.
128비트 비밀키에서 생성된 16개의 64비트 라운드 키를 사용하여 총 16회의 라운드를 거쳐 128비트 평문 블록을 128비트 암호문 블록으로 암호화하여 출력하는 방식이다. 256비트 키를 사용하는 SEED-256도 존재
SEED의 F 함수는 수정된 64비트 Feistel 형태로 구성된다.
(DES의 큰 틀에서 전혀 벗어나지 않고 있음)
4) ARIA (Academy Research Institute Agency)
다양한 환경에 적합한 암호화 알고리즘이 필요하게 됨에 따라 개발된 알고리즘.
ISPN(Involutional SPN) 구조의 128비트 블록 암호로 128, 192, 256 비트의 3종류의 키 사용을 제공하며 키의 길이에 따라 ARIA-128, ARIA-192, ARIA-256으로 구분한다.
5) HIGHT(HIGh security and light weigHT)
RFID, USN 등과 같이 저전력, 경량화를 요구하는 컴퓨팅 환경에서 기밀성을 제공하기 위해 개발된 64비트 블록암호다.
2010년 ISO/IEC 국제 표준 암호 표준으로 제정됨.
6) LEA(Lightweight Encryption Algorithm)
128비트 경량 고속 블록 암호 알고리즘이다. 다양한 정보보호 서비스에서 대용량 서비스를 빠르게 처리하거나 스마트폰 보안, 사물 인터넷 등 저전력 암호화에 널리 쓸 수 있다.
특히 단 시간에 배치작업을 완료해야 하는 금융 분야에 강하다.
'정보보안기사' 카테고리의 다른 글
비대칭키 암호(공개키 암호) (0) | 2023.03.11 |
---|---|
블록 암호 사용 방식 (0) | 2023.03.09 |
블록 암호 (0) | 2023.03.07 |
지적 재산권 보호 (0) | 2023.03.06 |
암호학 (0) | 2023.03.05 |