상세 컨텐츠

본문 제목

Chapter02. 대칭 암호와 메시지 기밀성 - 대칭 암호 원리

Network Security Essentials

by 메리_99 2022. 1. 5. 10:19

본문

반응형

대칭 암호 구조 요소

  • 평문(PlainText) : 원문이나 데이터로서 알고리즘의 입력으로 이용된다.
  • 암호 알고리즘(Encryption algorithm) : 암호 알고리즘은 입력으로 돌아온 원문을 다양한 방법으로 치환하고 변환한다.
  • 비밀 키(Secret Key) : 비밀키도 알고리즘의 한 입력으로 이용된다. 이 키를 이용하는 알고리즘에 의해서 정확한 대체와 전환이 이루어진다.
  • 암호문(Ciphertext) : 출력으로 나오는 암호화된 메시지이다. 이는 평문과 비밀키에 따라서 달라진다. 주어진 메시지에 대해 서로 다른 키를 사용하면 두 개의 암호문은 서로 다르게 출력된다.
  • 복호 알고리즘(Decryption algorithm) : 이것은 근본적으로 암호 알고리즘을 역으로 수행하는 것과 같다. 암호문에 알고리즘과 사용했던 동일한 키를 적용하여 원문을 복구해내는 것이다.

대칭 암호 단순 모델(http://funnyksoo.blogspot.com/2014/11/symmetric-cipher-model-1-1.html)

대칭 암호 필수 사항

  • 강한 암호 알고리즘 : 공격자가 알고리즘과 암호문, 평문 정보를 인지하고 있더라도 절대 암호문을 해독하거나 키를 알아낼 수 없어야 한다.
  • 안전한 비밀키 관리 : 공격자가 비밀키와 알고리즘을 안다면, 이 키를 이용한 모든 통신은 노출되기 때문에, 송신자와 수신자는 공유하는 비밀키를 안전한 방법을 통해서 획득해야 하며, 안전하게 보관해야 한다.

암호 시스템 단계(독립적)

  1. 평문을 암호문으로 전환하는 데 사용되는 연산 유형
    • 대체 : 평문의 각 요소(비트, 문자, 비트블록, 문자블록)를 다른 요소로 바꾸는 것
    • 치환 : 요소의 순서를 재조정하는 것
      • 두 가지의 핵심 : 어떤 정보도 손실되지 않아야 한다.
  2. 사용되는 키의 수
    • 송신자와 수신자 양측이 동일한 키를 사용할 경우 : 대칭암호, 단일키 암호, 비밀키 암호 혹은 관용 암호
    • 송신자와 수신자가 서로 다른 키를 사용할 경우 : 비대칭암호, 쌍키 암호, 공개키 암호
  3. 평문으로 처리되는 방법
    • 블록 암호 : 한 번에 한 블록씩 입력하여 처리하고 한 블록씩 출력
    • 스트림 암호 : 입력 요소를 연속적으로 처리하여 한 번에 한 요소씩 출력

암호해독

  • 평문이나 키를 찾으려는 시도
  • 암호해독 공격 유형
공격 유형 암호해독가가 알고 있는 정보 특징
암호문만 알고 있는 공격 - 암호 알고리즘
- 해독해야 할 암호문
- 평문의 통계적 성질, 문장의 특성 등을 추정하여 해독
- 전수 공격을 사용한 해독

알려진 평문 공격 - 암호 알고리즘
- 해독해야 할 암호문
- 비밀키로 만들어진 한 쌍 혹은 여러 쌍의 평문-암호문
- 암호문과 평문과의 관계로부터 키와 전체 평문을 추정하여 해독
선택 평문 공격 - 암호 알고리즘
- 해독해야 할 암호문
- 해독가가 선택한 평문 메시지와 비밀키로 그 평문을 암호화한 암호문
- 키의 구조를 파악해낼 수 있는 평문의 패턴을 해독가가 선택하여 해독
선택 암호문 공격 - 암호 알고리즘
- 해독해야 할 암호문
- 해독가가 목적을 갖고 선택한 암호문과 비밀키로 그 암호문을 복호화한 평문
- 무작위로 선택한 암호문과 일치하는 평문을 이용하여 해독
선택문 공격 - 암호 알고리즘
- 해독해야 할 암호문
- 해독가가 선택한 평문 메시지와 키를 가지고 그 평문을 암호화한 암호문
- 해독가가 목적을 갖고 선택한 암호문과 비밀키로 그 암호문을 복호화한 평문
- 선택 평문과 선택 암호문을 합친 공격

계산적으로 안전한 암호 구조 조건

  • 암호문을 깨는 데 드는 비용이 암호화된 정보의 가치보다 더 크다.
  • 암호문을 깨는 데 걸리는 시간이 해당 정보의 수명보다 더 길다.
    • 키 탐색에 요구되는 평균 시간

키 탐색에 요구되는 평균 시간

Feistel 암호 구조

Feistel 암호 구조(https://i.stack.imgur.com/AIPrN.png)

  1. 평문 블록을 L0와 R0로 나눈다.
  2. 라운드 함수 F를 R0에 적용한 다음 해당 함수의 출력과 데이터의 L0에 XOR 연산을 시행하는 식으로 L0의 대체를 수행한다.
    • 비밀키 값은 라운드 함수에 적용되며, 각 라운드마다 비밀 키로부터 생성 알고리즘으로 생성된 서브키를 사용한다. 
  3. L0의 대체를 수행한 결과는 R1에, R0는 L1에 교환되는 식으로 치환을 수행한다.
  4. 1-3와 같은 과정을 라운드 수만큼 진행한다.
    • 라운드 수는 원하는 만큼 -> Feistel 암호 핵심
  • Feistel 복호화 과정은 근본적으로 암호 과정과 동일
    • 암호문을 알고리즘의 입력으로 사용하고 서브키 순서를 거꾸로 적용

대칭 블록 암호 구현 : 매개변수와 설계 특성

  • 블록 크기(Block size) : 블록 길이가 크다는 것이 더 강한 보안을 의미하지만(다른 조건이 같다는 가정하에) 길이가 길면 암호화/복호화 속도는 떨어진다. -> 64비트의 블록 크기가 가장 합리적인 크기이고 블록 암호 설계에서 주로 이 크기를 사용
  • 키 크기(Key size) : 키 길이가 크다는 것이 더 강한 보안을 의미하지만 암호/복호 속도는 떨어진다. -> 가장 보편적인 키 길이 : 128비트
  • 라운드 수(Number of rounds) : 단일 과정으로는 보안이 부족하지만 라운드 수를 증가시켜 보안을 강화 할 수 있다. -> 전형적인 라운드 수 : 16
  • 서브키 생성 알고리즘(Subkey generation algorithm) : 이 알고리즘이 복잡하면 복잡할수록 암호해독이 어려워진다.
  • 라운드 함수(Round Function) : 이 함수 역시 복잡하면 복잡할수록 암호해독이 어려워진다.

Feistel 암호 설계 고려사항

  • 빠른 소프트웨어 암호/복호(Fast software encryption/decryption) : 대부분 하드웨어적인 구현을 피할 수 있도록 암호화는 응용 프로그램이나 유틸리티 함수에 내장시킨다. 따라서 알고리즘 실행속도를 고려해야 한다.
  • 용이한 해독(Ease of analysis) : 비록 암호해독을 쉽게 못하도록 알고리즘을 만들어야 하지만, 알고리즘 구조를 단순하게 만들면 암호 해독적 취약점을 찾아 더 강한 보안성 및 신뢰성을 갖는 알고리즘으로 발전시킬 수 있다.

위 글은 "Network Security Essentials William Stallings 저"을 공부하며 쓴 글입니다.
728x90

관련글 더보기

댓글 영역