-
Block Ciphers보안/컴퓨터보안 2019. 9. 28. 23:26
Block Cipher
plain text를 블록단위로 나누어 암호키와 알고리즘을 적용하는 암호화 방식.
Block Cipher는 반복으로 구성되어 있다.
- 키를 확장한다 (ex. 16byte를 길게만든다? round가 12개면 12개의 key)
=> 라운드마다 다른 키를 넣는다- plaintext와 ciphertext가 고정된 크기의 블락으로 이루어져 있다. (64bit or more)
- ciphertext는 round-function의 반복으로 부터 얻어진다. (동일한 round function 반복)
- round-function의 input에는 key와 이전 round의 output으로 이루어져 있다.
- round function 정의해야 한다.
- 주로 소프트웨어에서 실행된다.
Feistel Cipher: Encryption
- Block cipher의 타입중 하나이고, 특정한 block cipher를 의미하는 것은 아니다.
- plain text 블락을 Left와 Right로 나눈다. => P = (L0, R0)
- Ciphertext C = (Ln, Rn)
- 각 라운드에서 Li = Ri-1, Ri = Li-1 xor F(Ri-1, ki
- Ki는 subkey 이다
Feistel Cipher: Decryption
- CiphertextC = (Ln, Rn)에서 부터 시작
- 각 라운드에서 Ri-1=Li, Li-1 = Ri xor F(Ri-1, Ki)
- Plaintext P = (L0, R0)
DES (Data Encryption Standard)
- Feistel Cipher방식의 encryption
=> 한번에 라운드를 거쳤을때 입력에 대해 절반만 변이가 나타난다.
- 핵심문제..각각의 라운드에서 round function이 필요한데 어떻게 디자인하는지?
- block size=64bit=> encryption or decryption function으로는 64bit크기의 데이터블럭 입력이 주어져야하고 처리함 (AES는 128bit)
- key length=56bit (56bit 초기 공유키)
- 16 rounds
- 각각의 라운드에 48bits subkey가 필요- 각 라운드 substitution과 permutation 반복
- 보안: 주로 S-box에 의존한다. (6bit->4bit으로 만듦. s=Substitution)
initial permutation -> 16rounds function -> swap operateion -> final permutation
=> 64bit cipher text(output)
(initial permutation과 final permutation은 inverse관계. decryption에서 중요한 개념)
다음 그림은 각 라운드에서 일어나는 operation
DES Expansion Permutation
32bit input을 48bit output으로 만든다.
같은 값들이 들어가지만 위치가 다르고 순서가 바뀌어서 반복되는 숫자들이 있다.
DES S‐box
처음과 마지막 비트는 열을 참조하고 중간에 비트들은 행을 참조한다.
(ex. 101101 => 열:11, 행:0110 => 0001)
DES P-box
32bit 값들의 위치를 뒤죽박죽으로 만들어 놓는다.
몇몇 중요한 내용
- initial permutation은 round1 이전에 일어난다.
- 마지막라운드가 끝난 후 나눠진 L, R은 스왑된다.
- last permutation은 R16과 L16에 적용된다.
- 이중 무엇도 보안목적을 제공하지 않는다.
-Security of DES- 보안이 S-box에 너무 의존적이다.
- 백도어는 존재하지 않는다
- 컴퓨터의 발전에 따라 56bit의 키 길이는 짧다. exhaustive key search 공격 가능하다.
=> triple DES가 나타남
Triple DES-56bit DES key는 너무 작기때문에 exhaustive key search 공격이 가능해져 나타났다.
-DES를 3번 수행한다.
=> C= E(D(E(P,K1)),K2),K1)
P= D(E(D(C,K1),K2),K1)
-2개의 서로 다른키가 필요하다.=> 왜 3개가 아닐까?
:Backward compatible (D(E(P,K1)),K2),K1) = E(P,K)
112bits 키도 충분하다.