정보보안 - 블록 암호 / 스트림 암호

대칭키 암호

  • 대칭키 암호 = 공통키 암호
  • 비대칭키 암호 = 공개키 암호

현대 블록 암호

  • 개요
    • 기본 개념
      • 대칭키 블록 암호는 n-비트 평문 블록을 암호화하거나 n-비트 암호문블록을 복호화, k비트 키를 사용
      • 복호화 알고리즘은 암호 알고리즘의 역함수, 동일한 비밀키를 사용
      • 메시지의 길이가 n비트보다 작다면 n비트 블록을 만들기 위하여 padding 추가
      • 대칭키 암호를 안전하게 사용하는 필수 사항
        • 강한 암호 알고리즘이 있어야 함
        • 비밀키를 안전한 방법으로 획득하고 보관해야 함
    • 치환(Substitution) 과 전치(Transposition)
      • 현대 블록 암호는 치환 암호 혹은 전치 암호로 동작
        • 암호기법 : 치환, 전치, 블록, 스트림, 합성
      • 치환 암호로 설계되면, 평문 비트의 값은 임의의 값으로 대체. (1->0, 0->1)
        • 교환
        • 평문과 암호문의 0과 1의 개수다 다르다.
      • 전치 암호로 설계되면, 각각의 비트는 단지 재배열된다.
        • 위치변경
        • 0과 1중 하나의 값을 가질 수 있다.
        • n비트 평문 혹은 암호문의 개수는 2의 n승이다.
      • 평문을 암호화할 경우 전치 암호의 특성(0과 1의 개수가 유지)는 전수조사 공격에 치명적이다.
        • 보통 치환 암호로 설계한다.
    • 현대 블록 암호의 구성요소
      • 개요
        • 확산, 혼돈과 같은 성질을 만족시키기 위하여 전치 요소, 치환 요소, 그 밖의 요소로 결합
        • 공격 방지 암호를 위해 이동요소(shift), 교환요소(swap), 분할요소(split), 조합요소 뿐만 아니라 전치 장치(transposition, P-box)와 치환 장치(substitution, S-box)와 XOR 연산의 조합으로 만듬.
          • XOR 연산 : 같으면 0, 다르면 1
        • 대칭키 암호 : 뒤죽박죽 섞음 > 스크램블드 에그와 유사
      • P-Box
        • 문자 단위로 암호화를 수행했던 고전 전치 암호를 병렬적으로 수행
        • 단순(straight), 확장(extension), 축소(compression) P-박스로 세 가지 종류가 있음.
          • 축소 P-박스
            • n 비트를 입력받아 m비트를 출력, n>m을 만족
            • 입력 중에 특정 비트는 소실
            • 1, 2, 3, 4, 5 (5종)입력 -> 1, 2, 3 (3종)출력
          • 확장 P-박스
            • n<m을 만족.
            • 입력 비트 중 특정 비트는 한 개 이상의 출력비트와 연결.
            • 비트를 치환하고 동시에 다음 단게에서 비트의 양을 증가시키고자 할 때 사용
            • 1, 2, 3 (3종)입력 -> 1, 2, 3, 4, 5 (5종)출력
          • 역함수의 존재성 : 단순 P-박스는 역함수가 존재하지만 나머지는 존재하지 않는다.
      • S-Box
        • 치환 암호의 축소 모형. S-박스는 입력과 출력의 개수가 달라도 된다.
        • 역함수의 존재성 : 입출력 관계가 테이블 혹은 수학적 관계로 정의되는 암호임. 존재할 수도 있고 없을 수도 있다. 역함수가 존재하면 입출력 비트 개수가 동일하다.
        • Substitution, Swap, Split, Shift, Combine, Exclusive-OR 이용
      • 합성 암호(product Ciphers)
        • 개요
          • Shannon이 소개
          • 치환, 전치, 그리고 기타의 구성요소를 결합한 복합적인 암호
        • 확산(Diffusion) 과 혼돈(Confusion)
          • 설계된 블록 암호가 확산과 혼돈 두 가지 중요한 성질을 갖도록 하는 것
          • 확산 : 암호문과 평문 사이의 관계를 숨기는 것
          • 혼돈 : 암호문과 키의 관계를 숨기는 것
            • 키의 단일비트가 변화하면 암호문의 모든 비트가 변화함
        • 라운드(Rounds)
          • 확산과 혼돈은 각 반복이 S-박스, P-박스 그리고 기타 구성 요소들의 결합을 의미하는 반복적 합성 암호를 사용하여 얻어짐
          • 반복적으로 사용되는 합성 암호를 라운드(round) 라고 칭함
      • 합성 암호의 종류
        • Feistel 암호
          • DES를 포함해서 대부분의 대칭 블록 암호 알고리즘은 1973년 IBM 의 Horst Feistel 이 최초로 소개한 구조를 따라 만들어짐
        • Feistel 암호 특징
          • 페이스텔 구조에서 네트워크라는 이름은 그 구성도가 그물을 짜는 것과 같이 교환되는 형태로 구성되어 있기 때문에 붙여짐
          • 원하는 만큼 라운드 수를 늘릴 수 있음. 라운드 수를 아무리 늘려도 복호화할 수 없게 될 염려가 없음
          • 암호화/복호화 알고리즘을 따로 구현할 필요가 없음
        • Feistel 암호 예시
          • 64비트 평문을 32비트 2개 (L1 R1) 로 쪼갬
          • Round1
            • Mixer 과정
              • R1 을 F(Round 함수)를 거쳐 결과값을 구함
                • Key 사용 (K1 : Round 마다 값이 틀림)
              • L1 과 결과값을 XOR
            • Swaper 과정
              • 위 결과를 새로운 R2로 함
              • 과정을 거치지 않은 R1을 L2로 함
          • Round2…
          • (라운드가 3라운드 이상일 것)
          • (짝수 라운드 구성)
          • (역변환이 가능할 것 -> 별도의 복호화 과정이 필요 없음)
          • (속도가 빠름)
        • 대칭 블록 암호 구현
          • 블록 크기(Block Size)
            • 블록 길이가 크다는 것은 더 강한 보안을 의미하지만 암/복호화 속도는 떨어짐
            • 128비트의 블록 크기는 이를 조화시키는 합리적인 크기임
          • 키 길이(Key Size)
            • 키 길이가 길다는 것은 더 강한 보안을 의미하지만 속도가 떨어짐
            • 보통 128비트의 길이를 사용
          • 라운드 수(Number of rounds)
            • 라운드 수를 증가하면 보안을 강화할 수 있다. 페이스텔 암호의 핵심
            • 보통 16 라운드
          • 서브키 생성 알고리즘(Subkey generation algorithm)
            • 이 알고리즘이 복잡하면 복잡할수록 암호해독이 어려워짐
          • 라운드 함수(round function)
            • 이 알고리즘이 복잡하면 복잡할수록 암호해독이 어려워짐
        • SPN (Substitution Permutation Network)
          • S-Box : 치환 암호의 축소형
            • 64bit => 16bit * 4 (4행 16열)
            • 6개의 입력값을 받아 4개의 출력값을 출력
            • 3행 6열의 값 1
            • b1, b6 = 행
            • b2, b3, b4, b5 = 열
            • 3행 6열 : 101101
            • 값 1 : 0001
          • SPN 암호 예시
            • Plain Text 를 Key0 와 XOR 수행
            • S1, S2, S3, S4
            • P box (S1, S2, S3, S4 결과 내 각각을 자리이동)
            • 위 결과를 Key1 와 XOR 수행
    • 현대 스트림 암호
      • 개요
        • 현대 스트림 암호에서 암호화와 복호화는 한 번에 비트를 생성함
        • 스트림 암호는 블록 암호보다 빠름
        • 하드웨어 구현 또한 블록 암호보다 용이
        • 키 스트림을 어떻게 생성하는지가 주 관심사
        • 동기식과 비동기식
      • 예시
        • P => Pn, Pn-1 … P2, P1
        • K => Kn, Kn-1 … K2, K1
          • 의사난수 생성기 이용-PRNG / 언젠가 반복되나 난수의 효과
          • 보통 128bit
        • C => Cn, Cn-1 … C2, C1
      • 동기식 스트림 암호
        • 개요
          • 동기식 스트림 암호에서 키 스트림은 평문 혹은 암호문 스트림과 독립적
            • 비동기식 스트림암호:이전 평문이나 암호문에 종속적 (자기동기식)
          • 키 스트림은 평문 혹은 암호문 비트와 키 비트 사이에 어떠한 관계도 없이 생성
        • One-Time Pad
          • 동기식 스트림 암호중에서 가장 간단하고 안전한 암호
          • Gilbert Vernam에 의해 설계됨
          • 암호화를 수행할 때마다 랜덤하게 선택된 키스트림을 사용
          • 해독 불가능하다는 것이 증명됨
          • 암호화/복호화 알고리즘은 각각 배타적 논리합 연산을 사용
          • 한번에 한 비트씩 사용
        • 귀환 쉬프트 레지스터 (Feedback Shift Register)
          • One-Time Pad 의 절충안
          • FSR은 소프트웨어, 하드웨어 환경에서 모두 구현될 수 있지만 하드웨어가 좀 더 용이
          • 쉬프트 레지스터와 귀환 함수로 구성
        • 선형 귀환 쉬프트 레지스터 (LFSR, Linear Feedback Shift Register)
        • 비선형 귀환 쉬프트 레지스터 (NLFSR, NonLinear Feedback Shift Register)
          • LFSR은 선형성으로 공격에 취약, 따라서 더 안전한 스트림 암호 설계를 위해 사용
          • 비선형으로 설계되는 것 외에는 LSFR 와 동일
      • 비동기식 스트림 암호
        • 키 스트림의 각 비트는 이전의 평문이나 암호문에 종속적으로 결정
        • 블록 암호에서 다른 운영 모드를 생성하기 위해 사용되는 한 가지 방법인 CFB모드 (Cipher Feedback Mode) 는 실제로 스트림 암호를 생성함

댓글남기기