[보안] 블록 암호의 확장

yujeongkwon·2023년 10월 25일

보안

목록 보기
10/10

블록 암호의 암호화 외 용도

  • 암호화 외 용도
    • 의사 난수 생성기의 생성
    • 스트림 암호화 실현
    • 해시 함수 구성
    • 키 구축 프로토콜의 구축
    • 메시지 인증 코드의 생성
  • 암호화 하는 방법에 따라 기밀성 외 진본성, 무결성을 추가로 제공

운영 모드

ECB(Electronic Code Book) mode

  • 가장 기본적인 암호화 방법 16비트씩 짤라서 암호
  • 단점
    • 평문의 길이 != 블록의 길이
      • 맨 마지막 블록은 남으면 안됨 → 평문의 길이가 동일하지 않음 암호문은 무조건 16의 배수 바이트
    • 가장 명백하지만 심각한 약점 : 같은 블록들을 동일한 키로
    • 평문의 통계적 특성이 그대로 드러남
    • Cut and Paste(잘라서 붙이는 공격) 위험 : 중간거 때서 다르게 순서 바꾸기
      • 알려진 평문-암호문 쌍을 이용 -> 암호문 조작
      • ex) 밥은 '엘리스'를 사랑한다고 '트루디'에게 말했다.
        -> 밥은 '트루디'를 사랑한다고 '엘리스'에게 말했다.
      • ex) 전자 금융 전송문 : 공격자는 반복 전송문을 보내 암호문 블록 분석 -> 공격
  • 장점
    • 블록이 각각 독립적 -> 병렬처리 가능 -> 고속 구현 가능
    • ㄴ-> 오류 퍼짐이 없음.
    • 송/수신자 사이 블록 동기화 필요 X
  • 암/복호화 과정
    • 암호화 : C=E(Pi,K)
    • 복호화
      C0 = E(P0,K), P0 = D(C0,K)
      C1 = E(P1,K), P1 = D(C1,K)
      C2 = E(P2, K) P2 = D(C2, K)
      ...

CBC(Cipher Block Chaining) mode

  • 범용적 용도로 가장 많이 사용
  • ECB 모드의 약점 보완
  • 블록이 "chain"으로 연결
    • 장점 : 동일 내용이라도 앞 블록의 내용에 따라 암호문이 달라짐
    • 단점
      • 평문 길이 != 암호문 길이
      • 랜덤 액세스 불가 -> 특정 부분만 암복호화 불가 → 병렬처리 불가, 순서 섞임 불가능
      • IV 재사용 안됨 -> 재사용하면 평문 첫 블록 유추 가능
  • CBC 모드를 초기화하려면 랜덤 초기화 벡터 (IV, 비밀X, nonce)가 필요
  • 암/복호화 과정
    • Encryption
      C0 = E(IV ⨁ P0, K),
      C1 = E(C0 ⨁ P1, K),
      C2 = E(C1 ⨁ P2, K),…
    • Decryption
      P0 = IV ⨁ D(C0, K),
      P1 = C0 ⨁ D(C1, K),
      P2 = C1 ⨁ D(C2, K),…
  • 맨끝값만 사용하면 해싱(MAC 매시지인증코드) K에 키값이들어가면 메시지 인증 코드

아래 그림 출처

스트림 암호를 사용하는 구조 3개

  • 아래 3개(OFB,CFB,CTR)은 CBC에서 나오는 암호문을 키스트림 제너레이터로 사용하여 스트림 암호처럼 사용하는 모드임.
  • 암호화하는 식에서 E는 AES와 같은 블록 암호임
  • 이 키스트림을 만들 때 키 값과 iv값을 넣어서 키를 재생성 함.

  • OFB(Output Feedback) mode
    • : 이전 블록 암호의 출력이 다시 블록암호의 입력으로들어가서 키스트림 만들기
    • 동기식(피드백) 스트림 암호 구성에 활용
    • 블록 단위로 key stream 생성
    • 암/복호화 과정
      • 블록 암호의 암호문이 피드백 되는구조
      • key stream chiper 구조와 동일
      • 생성된 ki가 feedback 됨
  • CFB(Cipher Feedback) mode
    • 비동기식 스트림 암호 구성에 이용
    • 블록 단위로 key stream 생성
    • 암/복호화 과정
      - 최종 암호문이 피드백 되는 구조
  • CTR(Counter) mode
    • : 암호문이 입력으로 들어가서 키스트림을 만든 후, x와 xor
    • 스트림 암호처럼 사용
    • 암/복호화 과정(동일)
      • 𝑦𝑖 = 𝑥𝑖⨁𝐸𝐾(IV ∥ counter)
        • IV 과 counter는 각각 8bytes, || : 연이어 붙인다는 기호
      • 각각 카운터값을 너어서 각각 다른값생성
      • 맨마지막은 그냥 Ek가 크게 출력되도 일부만사용해서 암호화 → 평문길이= 암호문길이
      • IV값이 매 블록마다 1씩 증가함
    • 장점
      - 평문 길이 = 암호문 길이 -> stream 사용하는 애들 모두의 특징임
      - 암/복호화 병렬 처리 가능 -> feedback 구조가 아니니까
      - 암/복호화 식이 동일하므로 AES 모듈이 암호화만 수행할 수 있도록 함.
  • GCM (Galois Counter Mode)
    • 메시지에 대한 암호학적 체크섬(메시지 인증 코드)를 계산함 (암호화 + 체크섬)
    • 인증과 무결성 제공
    • 암호화와 MAC(메시지 인증 코드) 생성
    • GCM의 암호화는 CTR를 사용하여 암호화
      • 암호화: 𝑦𝑖 = 𝐸k(𝐶𝑇𝑅𝑖) ⨁𝑥𝑖 (𝑖 ≥ 1)
        • IV에서 𝐶𝑇𝑅0 유도
        • 𝐶𝑇𝑅𝑖 = 𝐶𝑇𝑅(𝑖−1) = 𝐶𝑇𝑅0 + 𝑖 (𝑖 ≥ 1)
    • MAC(Message Authentication Code) 생성: 𝑇 = (𝑔𝑛 × 𝐻)⨁𝐸𝐾(𝐶𝑇𝑅0)
      • 𝐻 = 𝐸𝐾(0), 𝑔0 = 𝐴𝐴𝐷 × 𝐻, 𝑔𝑖 = 𝑔𝑖−1⨁𝑦𝑖 × 𝐻 1 ≤ 𝑖 ≤ 𝑛
        • H : 평문, AAD : 상수값, T : 메시지 인증 코드
      • 무결성 : 평문이 바뀌거나, 𝑦𝑖 중 한 비트라도 수정되면 𝑔𝑖가 바뀜→ 𝑇 달라짐
      • 인증 : 수신한 𝑇 유효 → 송신자가 키(𝐾)를 가진 사람이라는 것 확인 가능
  • CCM Mode(CTR Mode with CBC Message Authentication Code mode)
    • 암호화/메시지 인증 표준 : 무선 표준에서 주로 채택
    • 보안
      • 암호화 & 기밀성: CTR 모드를 이용
        𝑉 ∥ 𝐶 = 𝐶𝑇𝑅k^𝐴0 (𝑈 ∥ 𝑀) where 𝐴0 = 𝑡𝑎𝑔 ∥ 𝑛𝑜𝑛𝑐𝑒 ∥ 𝑐𝑜𝑢𝑛𝑡𝑒r
      • 인증 & 무결성: CBC-MAC 모드 이용
        𝑈 = 𝐶𝐵𝐶k(𝐵) where 𝐵 = 𝑆𝑖𝑧𝑒 ∥ 𝑁𝑜𝑛𝑐𝑒 ∥ 𝐻𝑒𝑎𝑑𝑒𝑟 ∥ M
      • 결과 : 𝐶 ∥ 𝑇 where 𝑇 = 𝑉[𝑓𝑖𝑟𝑠𝑡 𝜏 𝑏𝑦𝑡𝑒𝑠]
        • counter은 계속해서 증가, A0 = IV, V= U를 암호화한 한 블록, C = M을 암호화한 여러 블록,
        • U: CBC에서 맨 마지막 값만 취한것, Size = 블록의 사이즈, Header : 메시지 앞에 붙이는 것,
        • T : V의 첫번째의 몇 바이트, C하고 V를 보내는데 다 보낼 필요는 없음. V는 나중에 인증 코드용으로 사용하는데 일부만 쪼개어 T로 만들어서 전송
        • 인증코드는 무결성 용도 -> 처음 몇 바이트만 있어도 위조여부알 수 있음
    • 장점
      • 무결성 검증만 필요할 경우 암호화를 위한 오버헤드 없이 검증 수행 가능
        • GCM 같은 경우에서도 인증코드 만드는 거에 x 연산이 필요하지만, CBC-MAC,CTR 그냥 블록 암호 그대로 사용함.
          ㄴ-> 곱하기 연산이딴거 없이 여러개를 구현할 필요 없으니까 가벼워짐
      • 동일한 모듈을 사용하여 암호화와 인증을 모두 수행
    • 단점
      • CBC-MAC의 경우 병렬 처리 불가능(CTR 모드는 가능)
profile
인생 살자.

0개의 댓글