블록 암호 구조

suhan cho·2022년 4월 15일
0

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(순열): 완전히 뒤를 섞는다.
    • Ex) apple -> paple

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

  • 라운드의 횟수(길수록 강해짐)
  • 내부의 함수 디자인
  • 키 스케줄하는 알고리즘
profile
안녕하세요

0개의 댓글