비밀키(대칭키) 암호

김동헌·2023년 10월 25일
0

정보보안

목록 보기
3/5
post-thumbnail

들어가 앞서 모든 설명은 XOR 연산을 기반으로 한다.

☄️ 개요

🔽 비밀키(대칭키) 암호 분류

  • 스트림 암호(Stream cipher) -> 일회성 암호
    - 키가 상대적으로 짧으며, 일회성 함호 키 같이 사용된다.
    - 암호화 방식 : 평문 XOR 키 스트림, 단위 : bit
    - 특징 : 암호 대상의 길이가 짧더라도 바로 바로 암호화가 가능하다.
    - 음성 및 오디오 비디오 스트리밍에 적용되므로 데이터가 끊기지 않아야 한다.

  • 블록 암호(Block Cipther) - Codebook(동작 원리) 개념 형태

    • 블록 암호 키가 한 권의 코드북을 결정한다.
    • 각 키가 다른 코드북을 결정한다.
    • Confusion(혼돈), Diffusion(확산) 모두 적용
스트림 암호블록 암호
장점암호화 속도가 빠름, 에러 전파 현상 적음높은 확산, 기밀성, 해시 함수 등 다양함
단점낮은 확산느린 속도, 에러 전달
주요 대상음성, 오디오 비디오 스트리밍일반 데이터 전송, 스토리지 저장

❗ 스트림 암호화 블록 암호의 확산 차이

  • 블록 암호는 서로 연결되어 있다.

  • 스트림 암호는 비트 단위(평균 8비트 내)로 암호를 진행하는 특성과 일회용 키를 사용하므로 데이터들의 연관이 없다.



☄️ 스트림 암호

Shift Register 기반 암호로 하드웨어에 효율적이며, 소프트웨어로 구축하기 어려웠다. 과거에는 매우 인기였으나 현재는 프로세스들이 매우 빨라져서 S/W로 구축되는 경향이다. 일부 분야에서는 shift Register가 아직 사용되고 있다.



☄️ 블록 암호

평문과 암호문이 고정된 크기의 블록으로 구성되며, 암호문은 평문의 반복되는 회전(round) 함수로 생산된다. 회전 함수 입력은 전번 회전의 출력과 키로 구성된다. 통상적으로 S/W로 구축한다.

n번째 round는 n-1 round의 출력 값이 n의 round에 적용이 되고,
n-1의 round에 사용된 키 값은 n 라운드에서 동일하게 사용되지 않는다.
똑같은 키를 사용하면 round를 몇번 반복해도 동일한 결과값을 가지므로 의미가 없다. 그렇기 때문에 매번 다음 라운드마다 키 값은 변경된다.

예로, DES 암호의 경우 똑같은 동작(round)을 16번 반복한다.


🔨 Feistel 암호 방식

Feistel 암호는 특정한 암호를 지칭하는 것이 아닌 블록 암호 설계의 한 형태이다. 암호 방식이며, 암호 알고리즘이 아니다.
암호 알고리즘(Ex. DES)은 암호를 해주는 프로그램이라고 생각하자.

특징 : 평문을 좌우 반쪽으로 나누어 암호화를 진행한다.


🔨 DES

DES는 Data Encryption Standard의 약어로 1949년도 Claude Shannon이 제시한 혼돈과 치환의 개념을 기반으로 한 미 정부 표준(Standard) 암호화 표준이다.
64비트 평문을 64비트 암호문으로 암호화하는 방식이며, 키 길이는 56비트이고 나머지 6비트는 오류 검출을 위한 parity로 8비트를 사용한다.
비트 블록의 길이 = 64, 비트길이 = 56

❗ DES는 Fiestel암호를 기반으로 16번의 회전(round)를 반복한다. 각 회전에서 48 bit의 보조키를 사용한다.

❗ Fiestel 암호 기반이기 때문에 64비트 블록을 절반으로 나눠서 왼쪽과 오른쪽을 나눠 진행한다.


🔍 Feistel 네트워크 암호화와 복호화 과정들

암호화는 XOR 연산을 통해 진행된다.
그러므로 같은 서브키로 2번 진행한다면 초기의 값으로 돌아간다.
또한, 복호화는 암호화의 역순이다.


🔍 Feistel 네트워크의 질

  • 블록 암호를 기반으로, 원하는 만큼 라운드 수를 늘릴 수 있다.
  • 라운드 함수 F에 어떤 함수를 사용해도 복호화가 가능하다.
  • 암호화와 복호화를 완전히 동일한 구조로 실현 가능하다.

🔽 쇄도 효과 (확산)
- 평문 또는 키 값을 조금만 변경해도 암호문에는 매우 큰 변화가 일어난다.

안정성은 주로 s-box(Substitution)에 의존한다.

s-box 6bit를 8개로 나누어, 입력은 6bit, 출력은 4bit로 매핑

p-box(Permutation)는 s-box의 출력 결과 32비트를 미리 정의된 p-box 테이블의 값과 매핑해 32비트 원소들을 무작위로 섞는다.

🔍 s-box의 입력 6비트는 어떻게 4비트로 출력되는 걸까 ?
110011의 입력이 있다고 가정하자.
처음 비트와 마지막 비트 110011 즉, 11은 행으로 알고 있고,
나머지 비트 110011 즉, 1001은 열로 알고 있자.

행과 열을 이용해 미리 정의 되어 있는 s-pox 테이블들에 각각의 행과 열로 뽑아낼 값을 찾아 출력한다.



💭 DES는 파훼되었으나 다양한 암호 방법들이 나오고 있다. 어떤 방법들이 있을까 ?

3DES

  • 이름을 통해 이해하자면 DES를 3번 하는 것이다. (112비트 키)
  • 키의 비트 수, 안정성이 향상되며 간단한 방법이다. 단, 키는 2개를 사용한다. (키 값이 똑같으면 결과가 같기 때문에)
  • 금융 분야 응용에 사용할 목적으로 1985년 표준화 되었으며, 처리속도는 느리나 AES가 널리 사용될 때까지 임시적으로 사용되었다.

🔨 AES

Advanced Encryption Standard

기존의 DES는 불투명하게 개발이 진행되었으나, AES는 투명하게 진행되었다. 반복되는 블록 암호로 DES와 동일한 면을 보이지만, 페이스텔 암호가 아니므로 DES와 상되는 모습도 보인다.
입력 평문의 길이는 128비트, 키 길이 : 128, 196, 256비트

종류
AES-128 -> 128비트로 9번 라운드 반복
AES-192 -> 192비트로 11번 라운드 반복
AES-256 -> 256비트로 13번 라운드 반복

AES의 구조 및 알고리즘



📌 운용 모드

☄️ 모드(Mode)

  • 블록 암호 알고리즘을 반복 사용하여 평문 전부를 암호화
  • 이와 같이 반복하는 방법

🔽 주요 모드

  • ECB(Electronic Code Book, 전자 부호표) 모드
  • CBC(Cipher Block Chaining, 암호 블록 연쇄) 모드
  • CFB(Cipher FeedBack, 암호 피드백) 모드
  • OFB(Output FeedBack, 출력 피드백) 모드
  • CTR(CounTeR, 카운터) 모드


🔨 Electronic Code Book (ECB)

전자 코드북 모드로, 가장 간단하나 안정성(기밀성)이 떨어진다. 미리 정해진 코드북으로 매핑해서 암호화를 진행한다.

패딩(padding)

  • 마지막 평문 블록이 블록 길이에 미치지 못할 경우 추가하여 블록 길이가 되도록 맞춘다.

    ❗ 각 round의 순서가 역전 되면 위험한 결과를 초래할 수 있다!
    만약 A가 B에게 돈을 송금하려고 한다는 가정을 할 때,
    A와 B가 순서가 바뀐다면, B가 A에게 돈을 송금하게 된다.



🔨 Cipher Block Chaining Mode(CBC)

암호문들이 마치 체인처럼 연결되어 있다. 전 단계에서 결과로 출력된 암호문을 다음 단계에서 그 결과값을 가지고 새로운 평문과 XOR 연산을하여 암호화를 진행한다.

ECB 모드보다 안전하며,
블록 암호화 운영 모드 중 보안성이 가장 높고 많이 사용된다.
체인처럼 연결되어 있는 특징을 가지고, 이전의 결과가 현재에 영향을 미치므로 병렬처리가 아닌 순차적으로 수행되어야 한다.

만약 중간에 암호문이 깨진다면 깨진 순서의 round와 다음 순서의 round만 영향을 미친다.


패딩 오라클 공격

  • 블록 암호의 패딩을 이용한 공격으로 패딩 내용을 조금씩 변화시켜 암호문을 여러 차례 송신한다. 만약, 수신자가 복호화 하지 못할 경우 오류를 관찰하여 평문 정보를 취득한다. 이러한 공격은 패딩을 사용하는 모든 모드에 적용이 가능하다.



🔍 Cipher FeedBack(CFB) Mode

암호블록 연결 모드로, CBC의 변형이다. 스트림 암호처럼 구성하며 복호화에서 병렬 처리가 가능하다. 평문과 암호문의 길이가 같고, Padding이 필요가 없다.


초기화 벡터는 의사난수 생성기의 seed(종자)에 해당

CFB 모드는 블록 암호를 써서 생성한 키를 이용하는 스트림 암호이다.



🔍 Output-FeedBac (OFB) Mode

출력 피드백 모드로 스트림 암호처럼 작동하며, padding이 필요가 없다.
디지털화한 아날로그 신호에 많이 사용된다.

CFB 모드와 OFB 모드 비교

CFB는 전 단계에서 XOR 연산을 한 뒤의 암호문 블록을 받고,
OFB는 전 단계에서 XOR 연산을 하기 전의 암호문 블록을 받고,


🔍 CounTer (CTR) Mode

스트림 암호처럼 작동하며, 1씩 증가해 가는 카운터를 암호화해서 키 스트림을 만들어낸다.

OFB와 CRT의 구조는 동일하다.

CTR 모드의 특징

  • 암호화와 복호화는 완전히 같은 구조, 구현 간단
  • OFB 모드와 같은 스트림 암호의 특징을 갖고
  • CTR 모드에서는 블록을 임의의 순서로 암호화 - 복화 가능 (병렬 처리 O)
  • 병렬 처리가 가능한 시스템에서는 CTR 모드를 이용해 자료를 고속으로 처리
profile
백엔드 기록 공간😁

0개의 댓글