[컴퓨터보안] 12강. 대칭키 암호

Donghun Seol·2022년 11월 7일
0
post-thumbnail

대칭키 암호

대칭키 암호의 개념

대칭키 암호

  • 암호화와 복호화에 같은(대칭적인) 키를 사용하는 암호
  • 암호화 C = E(P, K)
  • 복호화 P = D(C, K)
  • 비밀키 암호, 단일키 암호, 관용 암호로도 불린다.

블록 암호

블록 암호

  • 평문을 고정된 크기의 블록으로 나누어 블록마다 암호화를 수행해서 암호문을 얻는 대칭키 암호 방식
  • 출력블럭의 각 비트는 입력 블록과 키의 모든 비트에 영향 받는다.
    • 출력블럭의 첫 번째 비트는 키의 첫번째 비트 + 입력의 첫번째 비트가 아니라, 키의 모든 비트 + 입력의 모든비트가 입력으로 들어간 결과다. 당연히 n번째 비트도 동일하다

블록 암호 알고리즘의 구조

단순함수 사용

  • 단순함수를 반복적으로 사용하여 암호학적으로 강한 함수로 만듦
  • 라운드 함수 : 반복되는 단순 함수
  • 라운드 키 : 라운드 함수에 적용되는 키
  • 키 스케줄 : 라운드 키를 발생시키는 과정

파이스텔 구조

  1. 한 블록을 L, R 블록으로 이분한다.
  2. R은 다음라운드의 L로 그대로 출력한다.
  3. L은 R과 K(라운드키)를 라운드함수로 연산한 결과와 XOR 연산하여 그 결과를 다음 라운드의 R로 출력한다.
  4. 정리하자면 다음 라운드의 new블록은 이렇게 정해진다. L = L ^ f(R, K), newR = L, newL = R
  5. 1~3을 라운드 수 만큼 반복한다.
  • 두 번 이상 시행해야 완벽히 암호화가 되는 특성을 갖는다.

파이스텔 구조의 특징

  • 라운드 함수와 관계없이 역변환 가능(라운드 함수가 역함수가 존재하는 함수가 아니라도 무방)
  • 암/복호화 과정이 동일하다
  • 속도가 빠르다
  • DES, SEED 등 많은 블록 암호에 사용된다

SPN 구조

  • Substitution Permutation Network, 치환 전치 네트워크
  • Substitution : 치환, 숫자 자체를 바꿈
  • Permuation : 전치, 숫자들간 순서를 바꿈
  • 두 개념이 헷갈릴 때가 있는데 '전'치는 '전후 맥락'이 반영되어 있어야 하므로 숫자들의 컨텍스트가 형성된 숫자들간 순서를 바꾸는 것으로 이해하자.
  1. 입력 블록을 여러개의 소블록으로 나눔
  2. 소블록을 Substitution Box에 넣어 치환
  3. 치환된 결과를 Permutation Box에 넣어 위치를 서로 바꿈
  4. 1~3을 반복

SPN 구조의 특징

  • S-Box안 라운드 함수의 역함수가 존재해야 한다.
  • 파이스텔보다 많은 병렬성을 제공하여 성능이 더 좋다.
  • 심지어 S-Box, P-Box는 하드웨어로도 구현 가능해 더욱 성능 향상시킬 수 있음
  • AES, ARIA등 최근의 블록 암호에 사용됨

블록 암호의 사용 모드

ECB

  • 전자 코드 북 모드
  • 각 블록을 독립적으로 암호화, 병렬처리 가능
  • 패턴분석에 취약하므로 사용하면 안됨

CBC

  • 암호 블록 연결 모드
  • Cipher = f(prevCipher ^ Plain, K)
  • 암호블록이 연쇄적으로 의존적으로 적용되므로 동일한 평문 블록도 다른 암호문을 생성한다.
  • 암호화는 병렬처리 불가(복호화는 병렬처리 가능)
  • 평문 블록에 오류 발생하면 그 다음 모든 암호문이 영향을 받으므로 메시지 인증에 활용

CFB

  • 암호 피드백 모드
  • 이전 암호문을 키로 암호화 한 결과를 평문과 XOR 한다.
  • Cipher = Plain ^ f(prevCipher, K
  • 복호화 함수가 필요 없음, 암호화 결과를 암호문과 XOR하면 평문 나옴
  • 연쇄적으로 암호화 되므로 메시지 인증에 사용

OFB

  • 출력 피드백 모드
  • 암호 피드백모드에서 XOR 하기 전의 결과를 다음 암호문의 입력으로 넣음
  • `Cipher = Plain ^ f(prevSalt, K)
  • 복호화 함수가 필요하지 않고, 영상이나 음성과 같은 디지털 신호에 많이 사용됨

CTR

  • 카운터 모드
  • 암호화하여 생성된 수열(카운터)와 평문 블록을 XOR하여 암호문 생성
  • 암/복호화시 병렬처리 가능
  • ECB 모드처럼 간단하지만 안전성 보장

스트림 암호

스트림암호

  • 평문의 길이와 같은 키를 생성한 후
  • 평문과 키의 각 비트마다 XOR 시켜 암호화

키 스트림

키 스트림 구현

  • 랜덤 수열이 가장 안전하지만 실제 구현이 어려워
  • 의사 랜덤 수열로 키 스트림 생성

의사 랜덤

  • 선형 귀환 시프트 레지스터를 활용하여 의사랜덤 수열 생성
  • 실무에서는 LFSR의 출력 수열을 비선형 결합하여 키 스트림 구현함

대칭키 암호 알고리즘들

DES

  • 1977년 NIST 공표
  • 2001년 AES 공표까지 널리 활용됨
  • 파이스텔 구조 블록암호 알고리즘
  • 64비트 평문과, 56비트 키로 구성됨

TDES

  • DES를 3회 반복해서 사용
  • 안정적이지만 3배 느림

AES

  • 2001년 NIST에서 공표
  • 공모를 통해 선정
  • SPN구조 블록암호 알고리즘
  • 128비트 평문, 128,192, 256비트 길이의 키 선택가능

AES의 구성

  • 자세한 내용은 다른 자료 참고해서 공부할 것
profile
I'm going from failure to failure without losing enthusiasm

0개의 댓글