Study Record

[암호] 대칭키 암호 - 스트림, 블록(DES/AES) 본문

암호

[암호] 대칭키 암호 - 스트림, 블록(DES/AES)

초코초코초코 2021. 12. 2. 09:42
728x90

1. 일회용 패드

전사 공격에서 키 공간을 모두 탐색하더라도 해독할 수 없는 암호이다. 절대 해킹할 수 없다.

< 조건 >

암호화된 메시지와 정확하게 길이가 같아야 한다.

임의의 심볼로 구성되어야 한다.

한번 사용한 후에는 어떠한 메시지에서도 다시 사용해서는 안된다.

 

2. 스트림 암호

  • 비트 단위로 암호화하고 속도는 빠르지만 보안에 있어서 취약하다.
  • 스트림 암호(Stream Cipher)는 평문과 동일한 길이의 키 스트림(key stream) 수열을 생성하여, 평문과의 XOR연산을 통하여 암ㆍ복호화를 수행한다.
  • 키스트림 수열을 생성할 때, 평문과 독립적으로 생성하는 경우를 동기식 스트림 암호라고 하며, 반대로 평문이 키스트림 수열에 영향을 미치는 경우를 비동기식(혹은 자기 동기)) 스트림 암호라고 한다.
  • 구현 여건이 제약되는 환경에서 구현이 용이하며, 무선 통신 등의 환경에 주로 사용된다.

 

3. 블록 암호

파일이나 디스크를 암호화할 때 많이 사용된다.

고정된 크기로 평문을 나누기 때문에, 원하는 길이를 맞추기 위하여 패딩(padding)이라는 기법을 이용한다.

긴 평문을 블록으로 나누어 암호화한다.

 

1) DES / 3DES

  • 1977년에 미국의 연방 정보 처리 표준 규격(FIPS)으로 채택된 대칭 암호이다.
  • DES는 64비트(8비트 parity, 56비트 + 8비트)의 키를 적용하여 64비트의 평문을 64비트의 암호문으로 암호화시키는 대칭형 블록 암호이다.
  • 암호문은 16번(16라운드)의 반복을 통해 만들어지는데, 이때 16번의 반복 동안 라운드 함수를 적용하고, 이때 라운드 함수에 적용되는 키는 라운트 키이다. 라운트 키는 키 스케줄에 의해 라운드 키를 발생시킨다.
  • 파이스텔(Feistel Cipher) 방식이다.
  • 전사 공격으로 해독할 수 있는 수준이다. 따라서 DES 보단 AES를 사용한다.

※ 파이스텔(Feistel Cipher) : 왼쪽과 오른쪽을 서로 대치하여 암호문을 만든다.

 

☞ DES 알고리즘 동작 과정 (출처 : https://www.crocus.co.kr/1210 )

☞ DES 의 취약점

DES 알고리즘에서 활용되는 키는 56비트이고 암호를 만들 당시에는 충분한 길이였으나 컴퓨터의 성능이 점차 개선됨에 따라 DES는 자체적인 취약점이 발견되지 않았음에도 불구하고 키가 짧아 2016년에 들어서는 GeForce GTX 1080 Ti GPU로 모든 키를 30일 이내에 확인할 수 있는 상황이 되어 더 이상 제 기능을 할 수 없는 암호 알고리즘이 되었다.

 

☞ 3DES

DES를 대신할 블록 암호를 대체 위해 개발된 것으로 DES보다 강력하도록 DES를 3단 겹치게 한 암호 알고리즘이다.

현재도 은행 등에서 아직 사용하고 있지만 처리 속도는 빠르지 않고 안정성면에서도 풀려버린 사례가 있다.

우리나라에서는 3-DES를 표준으로 정하지 않았다.

※ 국가표준은 SEED(Feistel 구조), ARIA(SPN 구조)

 

2) AES

  • DES를 대신한 새로운 표준 대칭 암호 알고리즘으로 AES의 후보로서 다수의 대칭 암호 알고리즘을 제안했지만, 그중에서 벨기에 연구자 Joan Daemen과 Vincent Rijmen이 설계한 Rijndael 이라는 대칭 암호 알고리즘이 2000년에 AES로서 선정됐다.
  • Rijndael에 대한 유효한 공격은 현재로서는 발견되지 않았다.
  • SPN 구조 방식이다.
  • 블록 길이 : 128비트
  • 키의 비트 길이: 128비트(16 bytes), 192비트(24 bytes), 256비트(32 bytes)

※ SPN구조는 Substitution Layer와 Permutation Layer 이용하여 Confustion과 Diffusion을 만족시키는 암호로 복수의 라운드로 구성되어 있다.

 

☞ 칼리 리눅스에서 AES 수행 - ccrypt CMD

→ 설치(install)

# apt-get update

# apt-cache search ccrypt

# apt-get install ccrypt -y 

 

→ ccrypt CMD

주로 LOG 파일 백업해서 보관할 때 암호화시켜서 저장한다.

-e : encrypt

-d : decrypt

-k : key | keyfile

-c : 확인

 

→ 실습

# ccrypt -e file1.txt  :  file1.txt 를 암호화하여 file1.txt.cpt 이 생성된다.

# ccrypt -c -K 'pass' file1.txt.cpt  :  file1.txt.cpt 파일을 pass 라는 암호를 가지고 열어본다.

# ccrypt -c file1.txt.cpt  : file1.txt.cpt 파일을 열어본다.

# ccrypt -d file1.txt.cpt : file1.txt.cpt 파일을 복호화한다. file1.txt 파일로 된다.

# ccrypt -r dir1  :  dir1 디렉토리 안의 파일들을 전부 암호화한다.

※ 참고 명령어

* file CMD

* binwalk CMD

* strings CMD

* vi 편집기(:%! xxd    :%!xxd -r) 

 

→ ccrypt로 암호화한 파일 공격 프로그램

https://laustudy.tistory.com/96

 

 

☞ 칼리 리눅스에서 AES 수행 - gpg CMD 

 

※ pgp? - Symantec PGP(상용)

1991년 필 지머먼(Phil Zimmermann)이라는 프로그래머가 개발한 전자우편 암호화 프로그램과 그 파생작들을 의미하며, 이메일 내용 자체를 암호화하여 오로지 보내는 사람과 받는 사람만이 그 원문(Plain Text)을 알 수 있도록 하는 암호화 방식이다.

 

※ gpg? - GnuPG(오픈소스)

GPG가 처음 개발되었을 때는 무료였지만, 현재는 유료로 시만텍(Symantec)에서 판매하고 있다. 그러나 PGP의 한 갈래인 OpenPGP는 현재 인터넷 표준으로 자리매김하였으며,, 이를 이용한 GnuPGGnuPG 같은 여러 프로그램이 등장했다. 당연하게 윈도우나 맥, 리눅스 버전도 존재한다.

 

※ pgp/gpg 특징

  1. 악의적인 목적으로 소스에 해킹 툴이나 바이러스를 내포하여 원본과 다른 소스를 배포할 수 있다.
  2. 기본적으로 checksum을 이용한 검사 방법이 있으나 변조 가능성 존재한다.
  3. 배포자의 서명과 서명된 파일이 제공되므로 소스에 대한 무결성 검사를 할 수 있다.
  4. 보안 메일, 전자 서명 시스템에서 응용 가능하다.
  5. 파일을 암호화/복호화하거나 서명할 때 사용할 수 있다.

→ gpg CMD

# gpg --help

<사용법>

# gpg -c file1 : file1을 암호화한다.

# gpg -d file1.gpg : file1.gpg 확인한다.

# gpg file1.gpg : file1.gpg를 복호화한다.

 

→ 실습

다른 사용자가 파일 내용 확인하기

 

→ gpg로 암호화한 파일 공격 프로그램

https://laustudy.tistory.com/100

728x90