본문 바로가기

Kitri_NCS3기 보안과정/정보보호개론

170327 블록암호화 DES


1. 블록암호란 ?


평문 블록 전체를 가지고 동일한 길이의 암호문을 블록생성하는 암/복호화 방식

블록암호화 vs 스트림암호화

스트림 암호화


- 한번에 1비트 혹은 1바이트 씩 암호화

- 키의 길이는 스트림의 길이만큼의 크기를 가짐.


블록암호화

 - 평문 블록을 가지고 같은 크기의 암호문블록 생성

 - 대부분 64비트이거나 128비트


블록암호의 원리

치환 : 평문을 다른 원소에 사상
순열 : 평문은 순서대로 배치

확산과 혼돈 


확산 : 평문의 구조가 암호문에 영향을 미치게끔.

혼돈 : 암호문의 통계적 구조와 암호 키 사이의 복잡. 



* 많은 블록암호가 Feistel 구조를 띄고 있음.

- 동일한 라운드 수로 구성되어 동작

- 데이터 절반 치환 후 데이터 두개의 반을 교환하는 순열 수행

- 원본의 키는 확장되어 각 라운드마다 다르게 적용


Feistel 암호 동작 
 1. 2w 길이의 평문블록 분할 처리
 2. 분할된 블록중 한곳에 Key 사용 
 3. key가 사용된 블록과 나머지 블록을 xor (치환)
 4. n회의 반복구조 실행
 5. 좌우 양쪽 결과를 교환 (순열)

<암호화>

<복호화>


Feistal 구조의 장점

- 빠른 암/복호화

- 분석의 용이성



2. DES (Data Encryption Standard)

* 특징 

- 확산과 혼돈
- Feistel 구조
- Symmetric 암호 시스템

* 비판


- key size = 64bit(56+8bit) - 키 길이가 짧다

- s-box 디자인 원리 비공개




<단계별(Round) 알고리즘>

- E-table을 지나고 확장이된다.( 32→48 )

- S-box에서 6비트를받아 4비트를 반환하는 작업 ( s box의 디자인은 비공개상태임 )

- 키값도 56비트를 반으로 나누고 확장시켜 평문과 xor연산으로 암호화시킴

- 왼쪽 평문과 암호화된 문장 xor 연산.


라운드의 설계 원리 

 - 라운드 수가 많으면 F함수(8개의 s box)가 약하더라도 해독이 어려움

 - 키를 대상으로한 전사적 공격의 노력 이상 요구되도록 라운드 수 설정.

S-box


설계 

1. 출력비트가 입력비트와 유사해서는 안됨

2. S박스의 각행은 16개의 출력비트 조합을 모두 포함

3. S박스의 두 입력중 한비트가 다르면 출력은 최소 두비트가 달라야

4. S박스의 두 입력중 중간비트만 다르면 출력은 최소 두비트가 달라야 함

5. S박스의 두 입력 중 첫번째 두비트가 다르고, 마지막 두비트가 같으면 두 출력은 달라야 함

6. 입력들 사이에 0이아닌 6비트 차이는 그러한 차이를 나타내는 입력은 32쌍 중 오직 8쌍은 같은 출력을 야기

7. 세개의 S박스의 경우 이 설계기준을 따름



011011 에 대한 값을 찾고 싶을경우 양 끝의 비트는 열의 위치를 나타내고 나머지 중앙의 4비트는 행의 위치를 나타낸다.

01 = 1

1101 = 13 이기 때문에 그림과같이 5가 해당 값이 되겠다.


<s-box의 구성>


위의 그림처럼 sbox가 8개있는 부분이 F함수 부분이다.


F함수의 설계 원리

 - 치환 결과를 복구하기 난해 해야 함.

 - 엄격한 쇄도기준

 - 비트독립기준


* DES 복호화


 암호화 알고리즘을 동일하게 적용 시킨다.

 이때, 부분키 ki는 역으로 적용 시킨다.


* DES 쇄도 효과

 : 평문이나 키의 작은 변화가 암호문의 변화에 많은 영향을 미친다는 개념.

   단 1 비트만 바뀌어도 암호문에서 많은 변화가 일어남을 확인 할 수 있다.


3. DES의 운영모드

- ECB(Electonic CodeBook) : 평문 → 암호화 → 암호문 → 복호화 → 평문 의 단순한 형태



 - 평문의 Traffic이 암호문에 반영됨. 
 (Traffic padding 필요 ) 

 - 하나의 블록이 해독되면 나머지도 해독이 될 여지가 있다.
  - 각 블록이 독립적이므로 한곳에서 에러가 나도 다른곳에 영향을 주지 않는다 (에러 전이없음)




약점?

DB에 암호화된 데이터를 사용 할 경우 공격자는 데이터의 traffic만을 가지고 암호화된 데이터 자체를 조작해서 (복호화 할 필요없이) 내용을 서로 바꾸거나 덮어씌우기 또는 같은 traffic의 데이터를 유추 할 수 있기 때문에 사용이 적절하지 않다.



- CBC(Cipher Block Chaining) : 
1block> 평문 →        xor 초기값         → 암호키 → 암호문
2block> 평문 → xor 이전블록 암호문 → 암호키 → 암호문


  처음 블록의 평문은 IV(초기값)과 연산되고 그 이후의 각 블록의 평문은 이전 암호문과 xor 된다. 

  모든 블록이 이전 암호문에 영향을 받기 때문에 
에러 전이가 발생한다.

 블록 암호화 운영 모드중 가장 안전하다고 하며 때문에 가장 많이 쓰는 방식이다.

 암호문이 평문의 배수가 되기 때문에 평문을 얻기 위해서는 padding을 해주어야 한다.

 암호화는 순차적으로 진행되어야 하기 때문에 병렬처리를 할 수 없다.
 복호화는 병렬처리 가능

주로 파일 암호화나 연쇄되는 속성 때문에 MAC에 이용한다. 



- CFB(Cipher FeedBack) : 
1 block> 초기값 + 암호키 → xor 평문 → 암호문
2 block> 암호문 + 암호키 → xor 평문 → 암호문


최초의 키로 IV가 들어가게 된다.

암호화된 IV를 평문과 xor 

생성된 암호문은 다음블록에서 사용됨.

스트림 암호화처럼 구현해 암호문과 평문의 길이가 같기 때문에 padding이 필요가 없다.

스트림의 기본단위를 bit 단위로 설정
(CFB 8 ~ CFB 128)

암호화과정으로 암호화, 복호화 모두 가능하다.

암호화는 순차적으로 
복호화는 병렬적으로.

에러가 발생하면 현재 블록의 평문과 다음블록의 평문에 영향을 끼친다.
(CBC와 같다)




- OFB(Output FeedBack) : 다음블록으로 전달되는 암호문이 평문에 독립적이다.
1 block> 초기값 + 암호키 → 2 block 에전달  xor 평문 → 암호문
2 block> 암호문 + 암호키 → 3 block 에전달 → xor 평문 → 암호문



CFB와 마찬가지로 padding이 필요없다.

암호화 방법과 복호화 방법이 동일해 암호문을 한번더 암호화 하면 평문이 나옴.

평문에 대한 암호문이 아니기 때문에 에러가 발생해도 다음 블록에 영향을 미치지 않는다.

스트림의 기본단위를 bit단위로 설정 
(OFB8 ~OFB128)

에러가 발생하는 해당 블록에만 영향을 미치고 전이가 되지않기 때문에 디지털 아날로그 신호등에 쓰였다.(위성신호 : Tv?)





'Kitri_NCS3기 보안과정 > 정보보호개론' 카테고리의 다른 글

170329 전자서명  (0) 2017.03.29
170328 공개키암호(knapsack, RSA)  (0) 2017.03.28
170328 해쉬함수  (0) 2017.03.28
170327 고전 암호 기법  (0) 2017.03.27
170327 컴퓨터 보안과 암호  (0) 2017.03.27