y-seo
y-seo의 딩코 기록들
y-seo
  • 분류 전체보기 (175)
    • Computer Science (49)
      • Database Design & Query Lan.. (10)
      • Network Security (16)
      • Software Engineering (6)
      • Computer Network (17)
    • Spring (50)
      • Spring-Basic (11)
      • SpringBoot-AWS (7)
      • SpringBoot&JPA (22)
      • 토비의 스프링 (3)
      • + α (7)
    • Cloud (22)
      • AWS (4)
      • GCP (1)
      • ElasticSearch (17)
    • Test (3)
    • Project (4)
    • Algorithm (24)
      • 개념 (9)
      • 문제풀이 (15)
    • AI (3)
      • About (2)
      • AIDU ez (1)
    • IT (5)
      • SQLD (4)
      • ADsP (1)
    • Error (4)
    • ETC (1)
    • Review (8)
    • Free mover (1)
    • Frontend (0)
      • Next.js (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

최근 글

최근 댓글

전체 방문자
오늘
어제

태그

  • 파이썬
  • 컴퓨터 네트워킹 하향식 접근
  • Python
  • 네트워크보안
  • 스프링부트
  • java
  • 보안
  • 스프링
  • 김영한
  • springboot
  • 알고리즘
  • 자바
  • 네트워크
  • Spring
  • JPA
  • 인프런
  • baekjoon
  • algorithm
  • 백준
  • 알기 쉬운 정보보호개론 3판

티스토리

hELLO · Designed By 정상우.
y-seo

y-seo의 딩코 기록들

[CS][알기 쉬운 정보보호개론 3판] Chapter04. 대칭 암호
Computer Science/Network Security

[CS][알기 쉬운 정보보호개론 3판] Chapter04. 대칭 암호

2023. 10. 16. 02:51

 


 

 
 

대칭키 암호의 예

  • 대부분의 고전 암호들
    • Caesar's Cipher
    • Substitution Cipher
    • Vigenère Cipher
    • ...
  • 현대 암호들
    • 일회용 패드
    • DES
    • 3DES
    • AES
      • 현재 많이 사용되고 있는, 강력하다고 알려져 있는 암호화 알고리즘.
      • 키의 크기는 128, 192, 256, 384 비트 등이고, 키의 크기가 커질 수록 안전하다.
      • 자세한 알고리즘은 추후 설명 예정
    • RC4

 

 
 

대칭키 암호의 구성 요소

  1. 대치 (Substitution)
    • 기본 단위가 정해진 다른 것으로 바뀌는 것
    • 기본 단위가 바이트가 될 수도, 비트가 될 수도
    • 1:1 대응
    • Ex. A → C, B → D 등 일 때, ILOVEYOU → KNQXGAQW
  2. 재배열 (치환 or Permutation or Transposition)
    • 각 평문의 기본 단위들의 위칙 바뀌는 것
    • 순서 변경
    • Block 단위
    • Ex. ILOVEYOU → OIVLEUOY
  3. Product System
    • 대치 + 재배열
    • 복합적으로 구성된 요소
  • 대칭키 암호는 한 번에 암호화 하는 데이터 크기에 따라 블록 암호(Block Cipher)와 스트림 암호(Stream Cipher)로 나뉜다

 

 
 

일회용 패드 (One-Time Pad)

  • 암호화 : (평문의 아스키코드 값) XOR (무작위 비트열)
  • 복호화 : (암호문) XOR (같은 키)
  • 송신자와 수신자가 같은 비트열을 생성할 수 있는 미리 공유된 키 생성기가 필요
    • 키 생성기 : Plain Text와 크기가 같아야 한다

  • 암호화 : C = P ⊕ K
  • 복호화 : C ⊕ K = ( P ⊕  K ) ⊕ K = P ( K ⊕  K ) = P ⊕ 0 = P
  • Ex. midnight 이라는 평문을 일회용 패드로 암호화한다고 가정
    • midnight은 8바이트 = 64비트
    • 64비트의 무작위 비트열을 생성하여 키로 사용
    • midnight의 ASCII 코드와 key를 XOR 연산하여 암호화

  • 보안성
    • 최고, 거의 완벽
    • Brute force attack으로 깨는 것을 거의 불가능함 (사실 완전히 불가능하다고 봄)
    • 이유 : Ex. 위 예시의 암호문에 다른 키를 적용해 복호화를 시도하면 다른 의미 있는 8글자짜리 영어 단어도 나올 수 있음, Brute force attack이 계속 넣어서 말이 되는게 나오도록 하는 방법이기 때문데
    • 일반적으로도 어떤 키로 복호화를 시도하느냐에 따라 같은 길이이 다른 의미 있는 문장이 나올 수 있음
  • 그러나 많이 사용하지 않는 이유
    • 환경 문제를 고려하면 안전하지 않음
    • 키 배송 및 보존 문제
      • 키의 길이 = 평문 으로 너무 길다 → 안전하게 전송/보관을 위해 데이터 크기의 2배 만큼 소모해야 함
      • 키를 안전하게 보내거나 보관할 방법 X
      • 키를 안전하게 보낼 시스템 추가 필요 → 있었으면 진작에 평문을 그렇게 보냈겠지..
    • 키 재사용 문제
      • 키 재사용 불가능 → 매번 데이터를 보낼 때마다 키도 새로 생성해야 함
  • 하지만 보안성을 살리고 단점은 보완하는 기법(스트림 암호)들이 개발되어 사용되고 있음

 

 

 
 

페이스텔 (Feistel) 암호 구조

  • 1973년 IBM의 Horst Feistel 이 최초로 소개한 구조
  • DES 등 대부분의 대칭 암호 알 고리즘의 기본이 되는 구조
  • 함수가 1개인 것이 큰 장점
  • 암호화와 복호화는 매커니즘은 완전히 같고 입력하는 라운드키 순서만 반대로 해주면 되므로 SW, HW 구현이 모두 편리
    • 다른 점 : 입력값, key 선택 순서 뿐
  • 평문의 길이가 2w일 때 과정 (사진 참조)
    • 여러 개의 같은 과정을 하는 라운드로 구성 (반복문처럼)
    • 원본 키에서 라운드와 같은 개수의 라운드 키 (or 서브 키)가 생성
    • 각 라운드가 시작될 때 블록을 절반씩 나눔
    • 나뉜 블록 중 오른쪽 블록은 다음 라운드의 왼쪽 블록이 됨
    • 나뉜 블록 중 왼쪽 블록와 오른쪽 블록, 그리고 라운드키를 이용해 연산을 수행하고 그 결과물이 다음 라운드의 오른쪽 블록이 됨
    • 모든 라운드가 끝나면 왼쪽 블록과 오른쪽 블록을 서로 바꿈
  • 특징
    • 원하는 만큼 round의 수를 늘릴 수 있다
    • 라운드 함수 f는 어떤 것을 사용해도 동작할 수 있다, 보안성을 위한다면 안전하고 복잡한 것이 좋다
    • 암호화와 복호화를 동일한 구조로 설계할 수 있다 → 하드웨어화 가능
    • 알고리즘을 해독하기 좋다 → 분석이 쉬워 취약점을 찾기 쉬워져서 잘 해결 가능 (근데 사실 없어서.. 자주 사용)
  • 설계 고려 사항
    • 블록의 크기
      • 블록의 크기 ↑ & 보안성 ↑ & 암/복호화 속도(성능) ↓ (보안성과 속도는 반비례)
      • 현재는 최소 64bit 권장 (DES는 64bit)
    • 키의 길이
      • 키의 길이 ↑ & 보안성 ↑ & 암/복호화 속도(성능) ↓
      • 현재는 최소 128bit 권장 (DES는 56bit → 사용 권장 x)
    • 라운드 수
      • 라운드 수 ↑ & 보안성 ↑ & 암/복호화 속도(성능) ↓ (암호문과 평문이 점점 더 달라지게 돼서, x와 연관성이 더 떨어짐)
      • 어느 정도 한계가 되면 라운드 수를 증가시키는 것이 무의미
      • 최소 16라운드 권장
    • 빠른 암/복호 과정
      • 하드웨어로 설계가 가능하면 더 좋음 (f에 따라 가능/불가능 여부가 달라짐)
  • 해독법
    • 개발된지 오래 되어 많은 공격 기법 존재 
    • 차분 해독법
      • 키는 모르지만, 평문의 일부를 변경하였을 때 암호문이 어떻게 변화되는지 분석
      • 평문이 1bit라도 바뀌게 되었을 때 암호문이 어떻게 바뀌게 되는지 패턴을 분석하여 공격 시도
    • 선형 해독법
      • 평문(p)와 암호문(c)을 서로 XOR 연산한 후, 각각의 비트가 0일 확률을 구함
      • 확률이 1/2보다 눈에 띄게 크거나 작으면, 암호문으로부터 평문을 알아내기 비교적 쉬워진다
        • 완벽한 알고리즘은 0이나 1이 나올 확률이 각각 1/2이라 예측이 어려움
      • Ex. p(57) ⊕ c(57) = 0 일 확률이 1/2보다 크게 작으면, p(57) = 1일 때 p(57) = 0일 가능성이 매우 높다고 볼 수 있다

 

 
 

3DES

  • Data Encryption standard
  • 원래 DES는 56 bit로 시작해 2^56가지 key가 있었지만 뚫려서 사용을 안하다가 3DES로 부활

 

 

 
 

AES (Advanced Encryption Standard)

  • 컴퓨터의 발전에 따라 DES만으로는 안전한 암호기술을 제공할 수 없게 됨
  • NIST 에서 1997년 새로운 암호기술을 공모함 → 지금도 주요 암호 기술
    • 전세계에서 아무런 제한 없이 무료로 이용할 수 있다는 조건으로 공모
    • C나 Java로 구현이 쉬워야 했다
    • 선정 과정도 모두 공개함.
  • 제안된 여러 암호화 기술 중 선택된 암호화 알고리즘이 Rijndael이 제안한 AES
  • 블록의 크기 : 128비트
  • 키의 길이 : 128, 192, 256비트 중 선택 가능
  • 각각의 경우 라운드의 수 : 10, 12, 14
  • 암호화 과정은 다음 네 과정의 반복으로 구성 (사진참고)
    • Substitute Bytes
    • Shift Rows
    • Mix Columns
    • Add Round Key
  • 보안성
    • 아직까지 AES를 효과적으로 깨는 유효한 방법은 발견 X
    • AES로 주로 Data를 암호화
  • AES의 특징
    • 암/복호화 속도가 빠르다
    • 다양한 플랫폼에 적용 가능
    • 많은 연구자들의 검증을 마친 것이므로 신뢰성이 높다
    • Rijndael이 제안한 것 뿐 아니라 AES로 제안되었던 다른 최종 후보들도 사용은 가능
    • 코딩이 쉽다 (라이브러리도 존재)
    • 지금도 많이 쓰이는 대칭 키 암호 기술
  • DES
    • 보통 DES는 사용하지 않을 것을 권장
    • 3DES호환성 때문에 당분간 사용할 것으로 보여지나, 점차 AES로 대체될 것으로 예상

 


 

저작자표시 (새창열림)

'Computer Science > Network Security' 카테고리의 다른 글

[CS][알기 쉬운 정보보호개론 3판] Chapter06. 공개키 암호  (2) 2023.10.17
[CS][알기 쉬운 정보보호개론 3판] Chapter05. 블록 암호 모드  (1) 2023.10.17
[CS][네트워크보안] Chapter03. 암호의 역사  (2) 2023.10.14
[CS][네트워크보안] Chapter2. 암호의 세계  (0) 2023.10.13
[CS][네트워크보안] Chapter1. 스마트 시대와 정보 보호  (1) 2023.10.09
    'Computer Science/Network Security' 카테고리의 다른 글
    • [CS][알기 쉬운 정보보호개론 3판] Chapter06. 공개키 암호
    • [CS][알기 쉬운 정보보호개론 3판] Chapter05. 블록 암호 모드
    • [CS][네트워크보안] Chapter03. 암호의 역사
    • [CS][네트워크보안] Chapter2. 암호의 세계
    y-seo
    y-seo

    티스토리툴바