대칭키 암호
암호화 / 복호화 키가 동일한 암호
대칭키 암호의 분류
1. 스트림암호
비트(bit), 워드(word) 단위로 평문을 암호화
2. 블록암호
평문을 특정 크기의 블록 단위로 나누어 암호화
스트림 암호
데이터 흐름(스트림)을 순차적으로 처리해나가는 암호 알고리즘
평문과 키 스트림을 XOR하여 암호문 생성
- 선형 피드백 시프트 레지스터를 이용
- 키 스트림을 송신자와 수신자가 공유
- 오류 전파 없고 속도가 빠름, 하드웨어 구현 용이
평문 계열 P1, P2, ...
이진 수열 키 K1, K2, ... : 키 스트림, 난수와 구별 불가능
선형 피드백 시프트 레지스터 (Linear Feedback Shift Register)
주어진 초기 비트값(seed)와 정해진 방법을 통해 Key stream을 생성하는 방법
LFSR의 특징
- 레지스터가 가질 수 있는 값은 유한적이며, 특정 주기에 의해 반복된다.
- 하드웨어 구현 용이
- 긴 주기 생성 가능
- 좋은 통계적 특성, 대수적 분석 용이
동기식 스트림 암호 (Synchronous Stream Cipher)
스트림 암호의 난수열을 암호화할 입력값과 독립적으로 생성
- 오류 전파 없음
- 복호 시 한번 동기가 틀려지면 암호문과 키의 대응이 틀려져 이후의 모든 암호문 계열은 바르게 복호 불가능
- 난수열을 생성하기 위해 내부 상태를 유지하며, 이전 내부 상태에서 새로운 내부 상태와 유사난수를 얻는다.
- 문자열의 암호화 및 복호화는 생성된 유사난수열과 입력값을 XOR하는 방식으로 이루어진다.
- 암호화 및 복호화할 문자열에서 특정 위치 비트를 변경할 경우 암호화된 결과에서도 같은 위치 비트가 변경되며, 다른 위치의 비트는 변경되지 않는다.
- 따라서 암호화 문자열을 전송할 시에 특정 비트가 다른 값으로 손상되었어도 복호화 시 다른 비트에는 영향을 미치지 않는다.
- 하지만 전송 오류에서 비트가 사라지거나 잘못된 비트가 추가되는 경우 오류가 난 시점 이후의 복호화가 실패하게 되며, 따라서 전송시에 동기화(synchornize)가 필요하다.
자기 동기식 스트림 암호 (Self - Synchornous Stream Cipher)
스트림 암호의 난수열을 암호화할 입력값이 난수열 생성에 영향을 끼치는 스트림 암호
동기가 틀려졌을 때 자동으로 회복하는 기능을 가진 스트림 암호
자기동기 = 비동기
- 난수열을 생성할 때 암호화 키와 함께 이전에 암호화된 문자열 일부를 사용한다.
- 이 암호의 내부 상태는 이전 내부 상태에 의존하지 않는다.
- 따라서 암호화 문자열을 전송할 시에 일부 비트가 값이 바뀌거나, 비트가 사라지고 추가되는 오류가 발생하여도 일부분만이 복호화에 실패하며 그 이후에는 다시 정상적인 복호화 값을 얻을 수 있는 자기 동기성을 가진다.
스트림 암호 공격법
1. 전수조사(Exhaustive key search)
- 모든 key를 조사
2. 주기 및 통계적 특성 공격
- 키 스트림 생성기의 주기가 길어야함
- 키 스트림이 메모리 없는 베르누이 분산에서 벗어나면 분석가능
3. 상관(Correlation)공격
- LFSR 기반 스트림 암호에 대한 가장 기본적인 공격방법
- 키 스트림 출력과 LFSR의 출력의 상관 분석하여 LFSR의 초기 값(마스터 키)을 찾음
- 입력 비트와 출력 비트간 상관 관계식의 확률이 1/2을 벗어날 경우 공격
4. 선형 복잡도
- 수열을 생성하는 가장 짧은 길이의 LFSR의 길이
블록 암호
평문을 일정한 크기의 블록(block)으로 잘라 낸 후 암호화 알고리즘을 적용하여 암호화
- 알고리즘에 따라 평문 및 암호문 블록의 크기가 다름
- 패딩(Padding) - 평문의 가장 마지막 부분은 블록 크기에 맞지 않을 경우가 많음 -> 블록 크기를 맞추기 위해 일정한 패턴의 비트를 삽입하는 과정
블록 암호의 사용 모드
임의 길이의 평문을 암호화 시키기 위해서는 평문을 특정한 길이로 분할하여 블록 암호에 입력시켜야한다.
즉, 블록 암호를 이용하여 평문을 암호화할 때에는 단순히 암호 알고리즘만이 있으면 해결되는 것이 아니고 사용방 식도 규정해야함.
- Cryptographic mode
블록 암호를 사용하는 방법 정의
피드백, 단순 연산, 기본 암호와 결합하여 사용
안전성 모드에 의존하지 않고 암호 알고리즘에 의존
1. ECB Mode (Electric CodeBook mode) 전자 부호표 모드
가장 빠르고 간단
공격에 취약
2. CBC Mode (Cipher Block Chaining mode) 암호 블록 연쇄 모드
File 암호화에 적합
3. CFB Mode (Cipher FeedBack mode) 암호 피드백 모드
각 문자가 개개로 다루어져야 할 문자열 암호화
4. OFB Mode (Output FeedBack mode) 출력 피드백 모드
오류가 자주 나타나는 환경에서 사용
5. CTR Mode (CounTeR mode) 카운터 모드
다양한 응용에서 사용가능
사용 모드의 요구 조건
- 평문의 패턴 숨김
- 효율성 : 모드는 알고리즘의 효율성에 큰 영향을 주어서는 안됨
ECB Mode (Electronic Codebook Mode)
운영 모드 중 가장 단순한 모드로 블록단위로 순차적으로 암호화 하는 구조
- 평문은 특정 크기의 블록으로 나누어 암호화 수행
- 평문 크기가 블록 크기의 배수가 아니라면, 평문의 마지막 블록에는 다른 블록들과 동일 한 크기로 만들기 위한 평문 블록에 대한 패딩(padding) 절차 필요
특징
- 가장 간단한 모드
- 평문 블록을 암호문 블록으로 암호화
- 동일 키를 이용할 때 동일한 평문 블록은 항상 같은 암호문으로 암호화 됨
- 각 블록은 독립적으로 암호화
CBC Mode (Cipher Block Chaining Mode)
각각의 평문 블록은 암호화되기 전에 이전 암호문 블록과 XOR
특징
- 오류 전파 → 이전 평문 P를 암호화한 C를 다음 블록에서 사용
평문 블록의 1 bit 오류 → 이후 모든 암호문 블록에 영향을 미치지만, 복호 시 1bit 오류로 복호됨
암호문 블록의 1bit 오류 → 2개의 평문 블록에 오류 전파
- 긴 메시지일 경우 평문의 패턴이 나타남
CFB Mode (Cipher FeedBack Mode)
1단계 앞의 암호문 블록을 암호 알고리즘의 입력으로 사용
특징
- 오류전파
평문의 오류 → 이후 모든 암호문에 영향을 미치나 복호에서 복원
암호문의 오류 → m을 블록 크기라 할 때, n-bit CFB에서 1개의 암호문 오류가 발생하면 m/n -1 개의 암호문 블록에 영향
CBC mode와 CFB mode 비교
OFB Mode (Output FeedBack Mode)
암호 알고리즘의 출력과 평문을 XOR하여 암호문을 생성하고 있으므로 오류 전파가 발생하지 않는 모드
CTR Mode (Counter Mode)
이전 암호문 블록돠 독립적인 키 스트림을 생성 하지만 피드백을 사용하지 않는 모드
서로 독립적인 n비트 암호문 블록을 생성
- Nonce는 고유번호, 한번만 사용해야 하며 비밀이 아님
- K는 키
- || 연접 연산
- i 카운터
* 연접연산 예시
Nonce가 1 0 0 이고 i 가 0 1 이면
Nonce || i 는 1 0 0 0 1
'보안 > 암호학' 카테고리의 다른 글
[암호학] AES 복호 알고리즘 (Advanced Encryption Standard) (0) | 2023.04.06 |
---|---|
[암호학] AES 암호 알고리즘 (Advanced Encryption Standard) (0) | 2023.04.05 |
[암호학] 블록 암호 설계 및 구조 (0) | 2023.04.05 |
[암호학] DES (Data Encryption Standard) (1) | 2023.04.05 |
[암호학] 암호 (Cryptography) (0) | 2023.03.30 |