| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- JPA
- Transaction
- springboot
- Adapter
- 실무
- transactional
- Spring Data JPA
- simplejpaRepository
- Hexagonal
- JDBC
- hexagonal architecture
- Layered Architecture
- Spring
- Today
- Total
Ezcho
[5장]블록 암호 모드 본문
1절 블록 암호와 스트리 암호
블록암호란 어느 특정 비트수의 집합을 한번에 처리하는 암호 알고리즘 이때 이 비트집합을 블록이라고 한다.
앞에서 배웠던 DES나 트리플 DES의 블록 길이는 64비트이다.
스트림 암호란 데이터의 흐림(스트림) 을 순차적으로 처리해 가는 알고리즘 단위는 1비트, 32비트, 8비트 단위로 가변적이다.
모드란 긴 평문을 블록으로 나누어 암호화 하는것을 말한다. mod연산에서 따온 것 같다.
2절 ECB모드
ECB는 평문 블록을 암호화 하는것이 그대로 암호문 블록이 되는것이다.
padding개념이 존재하고 padding은 마지막 평문 블록이 블록 길이에 미치지 못할 경우 추가하여 블록 길이가 되도록 마치는것을 말한다.

대략적인 모식도이다. 복호화는 위 그림의 역순이다.
특징
1. 기밀성이 낮다.
2. 암호만 살펴봐도 패턴, 반복이 감지된다.
3. 안전하지 않다
공격
예를들어 어떤 은행의 송금 데이터가 다음 3개의 블록으로 구성된다고 할 때
1. 송금자의 계좌번호
2. 송금처의 계자번호
3. 송금액
예시,
1. A-5374의 계좌로부터 B-6671의 계좌로 1억 원을 송금하라는 송금 의뢰 데이터를 만들어보자
평문 블록 1: 41 2D 35 33 37 34 + 20 20 20 20 ... (Padding)
평문 블록 2: 42 2D 36 36 37 31 + 20 20 20 20 ...(Padding)
평문 블록 3: 31 30 30 30 30 30 30 30 + 20 20 ...(Padding)
2. 암호화하면 아래와 같이 된다고 생각해보자
암호문 블록1 = 59 7D DE CC EF EC BA 9B BF 83 99 CF 60 D2 59 B9
암호문 블록2 = DF 49 2A 1C 14 8E 18 B6 53 1F 38 BD 5A A9 D7 D7
암호문 블록3 = CD AF D5 9E 39 FE FD 6D 64 8B CC CB 52 56 8D 79
3. 이때 맬로리가 암호문블록 1과 2의 내용을 바꾼다고 생각해보자
암호문 블록1 = DF 49 2A 1C 14 8E 18 B6 53 1F 38 BD 5A A9 D7 D7
암호문 블록2 = 59 7D DE CC EF EC BA 9B BF 83 99 CF 60 D2 59 B9
암호문 블록3 = CD AF D5 9E 39 FE FD 6D 64 8B CC CB 52 56 8D 79
4. 은행이 복호화 하면 송금자와 송금처의 계좌번호가 서로 바뀌게 된다...(정 반대의 지시)
3절 CBC모드
CBC모드는 암호 블록 연쇄 모드의 약자이다.
암호문 블럭이 체인처럼 연결된다. Cipher Block Chaining
1. 최초에 초기화 벡터가 존재한다.
- 초기화 벡터는 최초의 평문 블록을 암호화 할때 1단계 앞의 암호문 블럭이 필요하므로 대신할 비트열인 한개의 블록을 준비한다.
- 이렇게 되어 평문 블록은 반드시 한단계 앞의 암호문 블록과 XOR연산이 되어야한다.
- 예를들어 암호문 블럭 3을 만들고 싶다면 적어도 평문 블록 1, 2, 3이 갖추어져야 한다.
2. 평문블럭과 한단계 앞의 암호문 블럭을 XOR연산한 후 암호화 한다.
3. 복호화 과정에서 암호문 블럭 2가 깨진 상황일 때를 생각해보자
- 암호문 블럭 2를 만들때 평문 블럭 2와 암호문 블록 1이 필요하다.
- 그리고 암호문 블럭 2는 암호문 블럭 3을 복호화 할 때 사용된다.
-그래서 결과적으로 평문 블록2와 평문 블록 3이 영향을 받는다.
4. 암호문 블럭 2에서 비트 누락이 발생한 경우는 어떨까?
-비트 누락이 발생한 경우 그 이후의 평문 블럭 전체가 영향을 받는다.
5. CBC모드가 공격을 받으면(초기화 벡터 반전)
- 평문 블록 1부터 XOR연산시 반전이 시작된다.
- 이후 모든 암호문 블럭에 영향을 끼친다.
3-5 패딩 오라클 공격
패딩 오라클 공격은 블록 암호문의 페딩을 이용한 공격입니다. 블록에는 항상 페딩이 존재하는데, 이런 패딩 내용을 조금씩 변화시켜 송신합니다. 이때 수신자가 올바로 복호화 하지 못할 경우 오류를 관찰하여 평문에 대한 정보를 취득하는 방식입니다. 패딩 오라클 공격은 패딩을 사용하는 모든 암호화에서 발생할 수 있습니다.
3-6 초기화 벡터 공격
보통 초기화 벡터는 난수로부여하는데(Random Number), 그렇지 않을경우(초기화 벡터의 재사용, 초기화 벡터가 난수가 아닌경우) 공격자는 초기화 벡터의 패턴을 추측해 본인이 원하는 대로 블럭단위 암호화와 복호화를 진행합니다. 이를통해 평문을 추측할 수 있습니다.
3-7 CBC의 활용 예씨
SSL/TLS
3DES-EDL-CBC
AES-256-CBC
4절 CFB모드
CBC와는 조금 다르다
초기화 벡터 -> 암호화 -> 평문블록과 XOR연산 -> 암호문 블럭1
암호문 블럭1 -> 암호화 -> 평문블록과 XOR연산 -> 암호문 블럭2
암호문 블럭2 -> 암호화 -> 평문블록과 XOR연산 -> 암호문 블럭3
...
이런식이다.
CBC는 평문과 초기화벡터(이전 암호문 블럭) 을 XOR연산한 후 암호화를 진행하였는데
CFC는 이와 다르게 암호화를 먼저 진행하고 평문과 XOR연산한다.

키 스트림의 개념이 존재하는데
CFB모드에서는 암호 알고리즘이 생성하는 비트열이 존재한다. 이때 초기화 벡터는 의사난수 생성기의 seed 값에 해당한다.
CFB에서 복호화를 수행할 경우, 블록 암호 알고리즘 자체는 암호화를 수행하고 있다는것에 주의해야한다.
4-5 CFB에 대한 공격들
1. 재전송 공격(리플라이 어택)-재시도 공격이 아님에 주의하자

그림을 잘 보자
1. 악의적인 공격자 맬로리는 재전송 공격을 위해 앨리스가 밥에게 어제 보낸 암호 블록을 3개 복사해둔다.
2. 앨리스가 밥에게 오늘 다시 암호문 블럭을 보낼때 초기화 벡터로 암호화되는 1을 제외한 2, 3, 4를 교환한다.
3. CFB는 직전 암호 블록을 암호화 하여 다음 암호문 블록의 평문벡터와 연산하기 때문에, 블록을 교체하는것은 문제가 되지 않는다.
4. 복호화 과정에서 오류가 발생한다.
해결법은 9장에 나온다.
5절 OFB모드
OFB모드란 Output FeedBack 모드의 약자이다.
CFB와 비슷하다 OFB에서는 평문블록과 암호알고리즘의 출력을 XOR연산해서 암호문 블럭을 만든다.

CFB에서는
시드 -> 암호화-> 평문과XOR연산 -> 암호문 블럭1
암호문 블럭1 -> 암호화 -> 다음 평문과 XOR연산 -> 암호문 블럭2 ...
순이었다면
OFB에서는
시드->암호화 -> 다음 시드로 사용 -> 평문과 XOR -> 암호문 블럭1
다음 시드 -> 암호화 -> 그다음 시드로 사용 -> 평문과 XOR -> 암호문 블럭2
방식이다.

복호화는 위 그림과 같다.
평문 블럭 1을 복호화 하기위해서 암호문 블럭1과 최초 시드값이 필요하다.

6절 CTR모드
CounTeR모드의 약자이다.
CTR모드는 키스트림을 만들기전에 카운터를 도입해 최초 카운터값에서 1씩 증가해 카운터 한다는 특징이 있다.
카운터 초기값은 암호화 때마다 다른 값을 가진다.
•평문 블록1용의 카운터(초기값)
66 1F 98 CD 37 A3 8B 4B 00 00 00 00 00 00 00 01
•평문 블록2용의 카운터
66 1F 98 CD 37 A3 8B 4B 00 00 00 00 00 00 00 02
•평문 블록3용의 카운터
66 1F 98 CD 37 A3 8B 4B 00 00 00 00 00 00 00 03
•평문 블록4용의 카운터
66 1F 98 CD 37 A3 8B 4B 00 00 00 00 00 00 00 04
아주쉽다.
동작방식은 카운터값 -> 암호화 -> 평문과 XOR연산 이다.

복호화도 위 그림처럼 역순이다.
OFB와의 차이점은 OFB는 한단계 앞의 암호문 블럭을 가져와 암호화 한 후 XOR연산을 진행하지만
CTR은 개별 Counter가 존재하고 1씩 증가한다는 특징이 있다.
특징
1. 간단하다 우선
2. CTR 모드에서는 블록을 임의의 순서로 암호화・복호화할 수 있다.(이전 암호문에 영향을 받지 않기 때문)
-카운터는 비표와 블록번호로부터 금방 구할 수 있기 때문
3. 병렬 처리가 가능한 시스템에서는 CTR 모드를 이용하여 자료를 고속으로 처리 가능
오류와 기밀성
1. 우선 CTR모드, 암호문 블록에서 1비트의 반전이 발생한다고 가정하자,
2. 해당 암호문 블록과 대칭되는 평문 블록을 제외하고는 오류가 확대되지 않는다.
3. OFB 모드에서는 키 스트림의 1블록을 암호화한 결과가, 암호화 전의 결과와 우연히 같아졌다고 하면 그 이후 키 스트림은 완전히 같은 값의 반복된다. (CTR모드의 차별된 성질)(CTR 모드에서는 그런 걱정은 없음)
전체 정리
| 이름 | ECB모드 | CBC모드 | CFB모드 | OFB모드 | CTR모드 | CTS모드(추가) |
| 장점 | 간단. 고속 병렬처리가능 (암호, 복호화,양쪽) |
XOR연산 평문의 반복이 암호문에 반복되지 않는다. 임의의 암호문 블록을 복호화 할 수있다. 복호화 시에 병렬처리가 가능하다. |
패딩이 필요 없다. 임의의 암호문 블록을 복호화 할 수있다. 복호화시에 병렬처리가 가능하다. |
패딩이 필요 없다. 암호화 복호화의 사전 준비를 할 수있다. 암호화 복호화가 같은 구조를 하고있다. 비트단위 에러가 있는 암호문을 복호화 하면 평문에 대응되는 비트만 에러가 된다. |
패딩이 필요 없다. 암호화 복호화의 사전 준비를 할 수있다. 암호화 복호화가 같은 구조를 하고있다. 비트단위 에러가 있는 암호문을 복호화 하면 평문의 대응하는 비트만 에러가 된다. 병렬처리가 가능하다. |
|
| 단점 | 평문 반복이 암호문에 반영된다. 암호문 블럭의 삭제나 교체에 의한 평문 조작 가능 암호문 복호화시 대응되는 평문에 영향을 끼친다. 재전송 공격이 가능하다. |
암호문 비트가 깨진경우에는 복호화시 대응되는 평문과, 그다음 평문에 영향을 끼친다. 암호문 비트가 누락된경우에는 이후 평문에 전부 영향을 끼친다. 암호화시 병렬처리불가능하다. |
비트단위 에러가 있는 암호문을 복호화 하면 다음블록의 대응하는 비트가 에러가 된다. 재전송 공격이 가능하다. 암호화에서는 병렬처리 불가능하다. |
병렬처리가 불가능하다. 멜로리가 암호문 블록을 비트반전시키면 대응하는 평문 블록이 비트반전된다. |
적극적 공격자가 암호문 블록을 비트 반전시키면, 대응하는 평문 블록이 비트 반전된다.
|
|
| 작동방식(암호화) | 평문 -> 암호화 -> 암호문 |
초기화벡터 -> 평문1과 XOR -> 암호화 -> 암호문1 -> 평문2와 XOR -> 암호화 -> 암호문2 ... |
초기화벡터 ->암호화 ->평문1과 XOR ->암호문1 ->암호문1 ->암호화 ->평문2와XOR ->암호문2 ... |
초기화벡터,seed ->암호화 ->평문1과XOR ->암호문1 ->암호화한시드 ->암호화 ->평문2와XOR ->암호문2 ->... |
최초CTR ->암호화 ->평문1과XOR ->암호문1 CTR+1 ->암호화 ->평문2와XOR ->암호문2 |
|
| 작동방식(복호화) | 암호문 ->복호화 ->평문 |
암호문 n -> 복호화 -> 복호화 한 값을 다음 암호문 블럭으로 넘김 -> 이전 암호문에서 복호화 시 받아온 값과 XOR연산 (초기화 벡터) -> 평문블록 ..반복 |
암호문 n-1 ->암호화 ->암호문n과 XOR연산 ->평문 n |
초기화벡터 ->암호화 ->암호문1과XOR연산 ->평문1 ->암호화한 초기화벡터 ->암호화 ->암호문2와 XOR연산 ->평문2 ->... |
CTR+n-1 ->암호화 ->암호문n과 XOR ->평문n |
|
| 비고 | 사용X | 초기화 벡터 | 초기화 벡터 키 스트림 (한단계 앞의 암호문 블럭을 암호화 한것) |
초기화벡터 키 스트림 |
CounTeR의 존재 키 스트림 |
CTS모드(추가)
마지막 블록 한단계 전의 암호화 블록을 패딩으로 대신 이용
ECB나 CBC와 조합해서 사용한다.

ㅇ그림으로 이해하자
'Lecture > 정보보호론' 카테고리의 다른 글
| [3장] 암호의 역사 (0) | 2023.04.09 |
|---|---|
| [2장] 암호의 세계 (0) | 2023.04.09 |