Stream cipher
- 평문을 암호화시킬 때 한 비트나 한 바이트로 암호화 시킨다.
- vigenere cipher
- vernam cipher
- 송신층과 수신측에서 암호화 복호화를 해야한는데 키값이 존재한다. 송신층에서 알고있는 키값을 수신측도 알고 있어야한다.
- 키 사이즈가 평문의 크기 만큼 증가한다. 이걸 수신측에서 알기 힘들다
- 키를 만들어내는 알고리즘이 있는데 한 비트 한 비트 랜덤으로 구현하기 힘들다.
Block cipher
- 한 바이트씩 암호화 시키는게 아니라 하나의 단어(EX: su가 들어왔을 때)를 한개의 블럭으로 보고 한번에 처리
- 64bit, 128bit로 블럭을 만든다.
- stream은 각각을 바이트나 비트화 해서 처리
- block cipher을 여러번 적용하여 stream cipher과 같은 성능을 만들수도 있다.
- b에 64bit인 Plaintext가 들어가면 64bit ciphertext가 나온다
- 송신과 수신측에서 동일한 키가 쓰였기에 키를 전달해주는 과정이 필요(키를 전달하는 방법 중요)
Block cipher
- plaintet block n개의 비트면 chipertext block도 n개의 비트다
- n비트를 암호화 시켰을 때 암호문 2^n개가 나올 수 있다.
- 2^n!만큼 transformations만들 수 있다.
Feistel
- tramsformation시킬 수 있는 최대 가지수만들
- plaintext를 chipertext가 2^n개 하면 좋지만 key배송 문제에 의해
- 단순한 암호화 기술을 반복하여 복잡한 암호화 기술을 만들겠다
- k비트의 키 길이가 쓰이고 plaintext block의 길이는 n비트 -> 2^k개의 transformaions가 가능할 것이다.
- 기존문제 plaintext가 커지면 key사이즈도 커진다 key배송에 문제가 생긴다
- Feisteal은 block사이즈와 key사이즈가 독립적이다 종속적이지 않다(중요)
- substitutions(치환): 암호화를 시켜서 완전히 다른 문장 만든다.
permutation(순열): 완전히 뒤를 섞는다.
Shannon
- Diffusion(확산)
block을 쪼개고 합쳐서 하면 특정 plaintext에 나오는 특정 단어의 빈도수가 암호문에서 확산되서 나올 것이다.(빈도수를 위해)
- Confusion(혼잡)
중간자가 chipertext를 알고 plaintext를 다 알았더라도 key값은 모르게 하는 암호화 기술을 만들어야 한다.
Feistel cipher structure
- block size : 사이즈가 커지면 보안은 좋아지지만 암호화 복호화는 느려짐
- key size : 위와 동일
- number of rounds: 위와 동일
- subkey generation algorithm: 복잡할수록 좋다
- round function F: 복잡할수록 좋다
DES암호화
- Data Encryption Standard(DES)
- 기밀성을 보장하기위해 사용하는 가장 잘 알려진 기술
- DES안에 feistel이 있다
- 64비트의 평문과 키가 들어온다
- 3단계
- 평문이 순열과정을 거쳐 섞인 상태로 나온다
- feistal의 16단계 거친다.(치환과 순열과정 반복)
- 역순을 얻는다.
Block Cipher Design principles
- 라운드의 횟수(길수록 강해짐)
- 내부의 함수 디자인
- 키 스케줄하는 알고리즘