티스토리 뷰
개요
DES나 AES와 같은 블록 암호를 사용하여 다양한 크기의 데이터를 암호화 하는 방식
운영모드 분류
패딩
패딩(padding)이란 블록암호 알고리즘에서 블록의 크기를 일정하게 맞추기 위해 빈 부분을 채워주는 것을 말한다.
1. 제로 패딩(Zero Padding)
- 패딩이 필요한 부분을 0으로 채운다.
- 제로 패딩은 원본 파일이 하나 이상의 0 바이트로 끝나는 경우 되돌릴 수 없으므로 일반 텍스트 데이터 바이트와 패딩 바이트를 구별할 수 없다.
2. 비트 패딩(Bit Padding)
- 비트 패딩은 크기와 상관없이 메시지에 적용할 수 있다.
- 패딩이 필요한 부분은 0으로 채우되, 최상위 비트는 1로 채운다.
3. 바이트 패딩(Byte Padding)
- 패딩이 필요한 부분은 0으로 채우되, 최하위 비트는 패딩의 크기로 채운다.
4. PKCS5 패딩
- PKCS5 패딩은 8바이트 블록 크기를 사용하는 블록 암호에 대해서만 정의된다.
- 원문의 길이가 L 바이트면 마지막 블록은 L mod 8의 크기를 갖는다.
- 패딩 크기는 8 - (L mod 8)가 되며 PKCS5는 패딩 크기의 값을 갖는 바이트를 크기만큼 반복한다.
5. PKCS7 패딩
- PKCS7은 8바이트가 아닌 가변 길이를 갖는 다는 점에서 다르지만 원리는 PKCS5와 동일하다.
운영 모드 종류
1. ECB: Electronic Code Book - 전자 부호표 모드
ECB 모드에서는 평문 블록을 암호화하는 것이 그대로 암호화 블록이 된다.
특징)
- 어떤 평문 블록은 고정된 암호문 블록으로 암호화된다. (deterministic)
- 암호문을 살펴보는 것만으로도 평문 속에 패턴의 반복이 있다는것을 알 수 있음
장점)
- 블록 간에 동기화가 불필요하다. (다른 블록과 상관없이 특정 블록을 해돌할 수 있다.)
- 암호화/복호화 과정의 병렬화 처리(parallelization processing)가 가능하다.
단점)
- 만약 평문이 같은 두 블럭이 존재한다면, 두 블럭의 암호문 또한 같다.
- 블록 재사용이 가능하다.
2. CBC: Cipher Block Chaining - 암호 블록 연쇄 모드
각 블록은 암호화되기 전에 이전 블록의 암호화 결과와 XOR되며, 첫 블록의 경우는 초기화 벡터(IV)가 사용된다.
특징)
- CBC 암호화는 확률적이다. (probabilistic). / 만약 매번 새로운 IV를 사용하면, 동일한 평문의 블록은 완전히 다른 암호문 블록이 만들어진다.
- 초기값(IV)은 nonce이어야 한다. (number used only one)
장점)
- 평문의 반복은 암호문에 반영되지 않는다.
- 임의의 암호문 블록을 복호화 가능
- 복호화 병렬처리 가능
단점)
- 암호화에서는 병럴처리 불가능
3. CFB: Cipher FeedBack - 암호 피드백 모드
암호 피드백 방식은 CBC의 변형으로, 블록 암호를 자기 동기 스트림 암호로 변환한다.
특징)
- 블록 암호화를 스트림 암호화처럼 구성해 평문과 암호문의 길이가 같다. (패딩이 필요 없다.)
- 최초의 키생성 버퍼로 IV가 사용되며, 이때 IV는 제2의 키가 될 수 있다.
- CBC모드와 마찬가지로 암호화는 순차적이고, 복호화는 병렬적으로 처리할 수 있다.
장점)
- 패딩이 필요없음
- 복호화 병렬처리 가능
- 임의의 암호문 블럭을 복호화 가능
단점)
- 암호화에서는 병렬처리 불가능
- 재전송 공격 가능
4. OFB: Output FeedBack - 출력 피드백 모드
출력 피드백은 블록 암호를 동기식 스트림 암호로 변환한다. XOR 명령의 대칭 때문에 암호화와 암호 해제 방식은 완전히 동일하다.
특징)
- 전처리기(Preprocess)가 가능하다. / 입력(PlainText)이 없어도, Key를 미리 만들 수 있다.
- 암호화와 복호화 과정에서 XOR 연산되는 키 스트림이 평문과 암호문에 독립적이다.
장점)
- 패딩이 필요없음
- 암/복호화의 사전준비 가능하고, 같은 구조임
단점)
- 병렬처리 불가능
- 적극적 공격자가 암호문 블럭의 비트를 반전시키면 대응하는 평문 블록의 비트가 반전된다.
5. CTR: Counter - 카운터 모드
카운터 방식에서는 각 블록마다 현재 블록이 몇 번째인지 값을 얻어, 그 숫자와 nonce를 결합하여 블록 암호의 입력으로 사용한다.
특징)
- 카운터 값이 다르므로, 서로 같은 두 평문을 암호화하여도 이에 대응 하는 두 암호문은 다르다.
장점)
- 전처리(Preprocess)가 가능하다.
- 병렬처리(Parallelization)가 가능하다.
단점)
- 적극적 공격자가 암호문 블럭의 비트를 반전시키면 대응하는 평문 블록의 비트가 반전된다.
비교
참고자료
블록 암호 운영 모드 정보 보안 암호학 강좌 : https://www.youtube.com/watch?v=IfU0Rp2BOEo&list=PLW8wOTYOluvFmqr01lKXKku_4zjn2RqKH&index=16
https://m.blog.naver.com/kostry/220808675410
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=bycho211&logNo=220975255680
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 백준 2365
- tetris
- UE5.3
- BOJ 27469
- 브레젠험 알고리즘
- C++게임
- pygame
- DP
- 코드포스
- 백준 27469
- 언리얼 프로젝트 재생성 자동화
- 정보올림피아드
- 언리얼 자동화
- OpenVDB
- BOJ 2365
- 숫자판 만들기
- unreal enigne
- 언리얼 프로젝트 재생성
- ICPC 후기
- 테트리스
- 홍정모의 게임 만들기 연습 문제 패키지
- c++ 게임개발
- 퀸 움직이기
- Codeforces
- ndisplay
- C++게임개발
- opengl
- 초등부
- Python
- 백준
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함