본문 바로가기

정보보안기사

암호화

반응형
  1. HASH(단방향)
  2. 공개키(비대칭)
  3. 비밀키(대칭)
    1. Stream
    2. Block

1. HASH(단방향)


해시함수는 임의길이의 정보를 입력으로 받아, 고정된 길이의 암호문(해시값)을 출력하는 암호기술.

암호화된 정보는 복호화가 불가능한 특징을 가지고 있다. 따라서 해시함수를 이용하면 아래와 같이 비밀번호를 입력하여 (해시값)을 생성해 낼 수는 있지만, (해시값)을 가지고 원래의 비밀번호 를 알아낼 수는 없다. 즉, 개인정보처리자도 시스템에 저장된 암호문(해시값)을 가지고 원래의 사용자 비밀번호를 알 수 없기 때문에 안전한 비밀번호 관리가 가능해 진다. 


=> 용도


1.메시지 인증용

2.키유도/난수생성용

3.단순 Hash/전자서명용.


2. 공개키(비대칭)



3. 비밀키(대칭)

  1. 송신자는 수신자의 공개키를 구한다.
  2. 송신자는 수신자의 공개키로 평문을 암호화 한다.
  3. 송신자는 암호화된 메시지를 상대방에게 전달한다. 메시지는 암호화되어 있으므로 전달 도중에 유출되거나 도청되도 암호문으로부터 원문을 알아내기가 어렵다.
  4. 수신자는 자신의 비밀키로 암호화된 메시지를 해독하여 평문을 얻는다.

암호화에 사용할 대칭키(해당 세션에서만 사용하므로 세션 키 라고도 함.)를 상대방의 공개키로 암호화해서 안전하게 전달하는 용도로 사용


3.1. Stream

  • 평문과 키를 바이트 단위로 XOR 연산
  • 일대일 대응관계 => 공격에 취약 => 동일한 키 재사용 불가능
  • 공격 감지능력 x => 무결성 보장 x
  • DMB 등과 같은 실시간처리가 필요한 분야에 동일 키 재사용이 가능

3.2. Block


3.2.1. ECB

  • 평문 블록(Ci)을 입력 블록(Ii)으로 설정하고, 이를 암호화한 출력 블록(Oi)을 암호문 블록(Pi)으로 설정한다.
  • 암호화

- 입력 : 평문 데이터 + 비밀키

- 출력 : 암호문 데이터

- 처리과정 : 

for i=1 to n

i번째 암호문 블록 = 비밀키를 이용한 암호화 함수(i번째 평문 블록)


  • 복호화

- 입력 : 암호문 데이터 + 비밀키

- 출력 : 평문 데이터

- 처리과정 : 

for i=1 to n

i번째 평문 블록 = 비밀키를 이용한 복호화 함수(i번째 암호문 블록)


3.2.2. CBC

  •  CBC(Cipher Block Chaining) 모드는 동일한 평문 블록과 암호문 블록 쌍이 발생하지 않도록 전 단 계의 암․복호화 결과가 현 단계에 영향을 주는 운영모드이다

  •  CBC 모드에서는 1 단계 앞에서 수행되어 결 과로 출력된 암호문 블록에 평문 블록을 XOR 하고 나서 암호화를 수행

  •  「1 단계 앞의 암호문 블록」이 존재하지 않으 므로 「1단계 앞의 암호문 블록」을 대신할 비 트열 블록 준비 : IV

  •  IV : 비밀키와 마찬가지로 송신자와 수신자간에 미 리 약속되어 있어야 하지만 공개된 값을 사용 해도 무방

  •  암호화 때마다 다른 랜덤 비트열을 이용하는 것이 보통

  •  순차적

  • 암호화

- 입력 : 평문 데이터 + 비밀키 + IV (사용자가 지정하는 초기화 벡터)

- 출력 : 암호문 데이터

- 처리과정 : 

i번째 암호문 블록 = 비밀키를 이용한 암호화 함수(①)

(i번째 평문 블록)  XOR (전 단계의 암호문 블록) 〮 〮 〮 〮 〮 〮 〮 〮 〮 〮①

for i=1 to n

0번째 암호문 블록 = IV


  • 복호화

- 입력 : 암호문 데이터 + 비밀키 + IV

- 출력 : 평문 데이터

- 처리과정 : 

- 0번째 암호문 블록 = IV

for i=1 to n

비밀키를 이용한 복호화 함수(i번째 암호문 블록) 〮 〮 〮 〮 〮 〮 〮 〮①

i번째 평문 블록 = (i번째 암호문 블록) XOR ①


3.2.3. CTR

  • CTR(CounTeR) 모드는 각 단계에 따라 증가되는 카운트 블록을 입력 블록으로 사용하는 운영모드이다. 

  • CTR 모드의 경우, 마지막 암호화 단계의 평문 블록이 128비트를 만족하지 못하고 m비트가 남아있을 때, 마지막 출력 블록128비트 중 상위 m비트 와 마지막 평 문 블록 m비트와 배타적 논리합 연산함으로 아래와 같은 패딩 방법을 적용하지 않을 수 있다.

  • 카운터를 암호화한 비트열과 평문 블록과 의 XOR을 취한 결과가 암호문 블록이됨

  • 병렬

  • 카운터의 초기값은 암호화 때마다 다른 값 (nonce, 비표)을 기초로 해서 만든다. 

  • 암호화

- 입력 : 평문 데이터 + 비밀키 + 카운터

- 출력 : 암호문 데이터

- 처리과정 : 

for i=1 to n

비밀키를 이용한 암호화 함수(카운터) 〮 〮 〮 〮 〮 〮 〮 〮①

i번째 암호문 블록 = (i번째 평문 블록) XOR ①


  • 복호화

- 입력 : 암호문 데이터 + 비밀키 + 카운터

- 출력 : 평문 데이터

- 처리과정 : 

for i=1 to n

        비밀키를 이용한 암호화 함수(카운터) 〮 〮 〮 〮 〮 〮 〮 〮①

i번째 암호문 블록 = (i번째 암호문 블록) XOR ①


3.2.4. SEED


  • Feistel 구조를 갖는 블록 암호알고리즘은 F 함수의 특성에 따라 구분될 수 있다. 
  • SEED의 F 함수는 수정된 64비트 Feistel 형태로 구성된다
  • Feistel 구조란 각각 n/2비트인 L 0,R0 블록으로 이루어진 n비트 평문 블록 (L0 ,R0)이 r라운드( r≥1)를 거쳐 암호문 (Lr ,Rr)으로 변환되는 반복 구조이다. 
  • 모든 라운드가 끝난 후, 최종적으로 {\displaystyle (R_{n+1},L_{n+1})}가 암호화된 값이 된다.
  • 공통 : 128비트 길이 블록단위로 처리
  • 128 : 128비트의 암⋅복호화키
  • 256 : 256비트의 암⋅복호화키
  • Feistel 구조

i = 라운드 수

K i= 라운드 키

(L 0, R 0) = 

암호화 하려는 정보를 2로 나눈 것

L i+1 = R i

R i+1 = L i XOR F (L 0, R 0)




반응형