파이썬으로 배우는 블록체인 구조와 이론-2장 암호기술(1)

ImHyunbin
Quantum Ant
Published in
5 min readJul 28, 2019

01.암호의 역사

고대 암호

  • 문자의 위치를 바꾸는 전치 암호(transposition cipher)와 문자를 다른 문자로 바꾸는 치환 암호(substitution cipher) 방식을 주로 사용
  • 전치와 치환 알고리즘은 암호기술의 기본으로 현대 암호에서도 많이 사용

근대 암호

  • 세계대전과 컴퓨터의 발달로 더욱 정교하게 만든 수학적 암호가 쓰였다

고대 암호와 근대 암호

  • 암호문을 만들거나 풀 때 키를 사용
  • 암호문을 보낸 사람과 받은 사람은 동일한 키를 가지고 있어야 한다
  • 이런 목적의 키를 비밀키(secret key) 혹은 대칭키(symmetric key)라 한다

현대 암호

  • 키를 안전하게 전달해야 하는 근본적인 문제 떄문에 비대칭키(asymmetric key) 혹은 공개키(public key) 방식을 사용

02.암호문의 요건

안전한 암호문을 위해서는 혼돈(confusion)과 확산(diffusion) 과정이 필요

혼돈(Confusion) 과정

  • 원문과 암호문의 관계는 모호해야 한다
  • 원문과 암호문에 어떤 관계가 존재하면 암호문으로 비밀키나 원문을 추정할 가능성이 있다

확산(Diffusion) 과정

  • 원문의 특정 위치에 있는 내용은 암호문의 여러 위치에 영향을 미쳐야 한다
  • 원문의 특정 위치에 내용이 암호문의 특정 위치에만 영향을 미친다면 원문과 암호문 사이에 관계가 드러날 수 있다
위쪽 암호문은 혼돈 과정만 / 아래쪽 암호문은 혼돈, 확산 과정

03.대칭키 기반 암호기술

대칭키 기반 암호기술은 암호문을 만들거나 풀 때 동일한 키를 사용하는 방식

DES, AES 알고리즘 등이 있으며, 현재는 AES를 주로 사용

동작 방식

송신자는 비밀키를 이용해 원문을 암호문으로 변환 → 수신자에게 암호문과 비밀키를 전송 → 수신자가 비밀키로 암호문을 해독

블록 암호 방식(Block Cipher)

원문을 여러 블록으로 나눠서 블록별로 암호화한 다음 암호화된 블록을 다시 합치면 암호문이 된다

원문 블록과 암호문 블록이 서로 일대일로 대응하는 Electronic Code Book(ECB)

원문 블록과 암호문 블록이 서로 일대일 대응하지 않는 Cipher Block Chaining(CBC)

스트림 암호 방식(Stream Cipher)

원문이 실시간 데이터인 경우에 사용

원문 스트림을 비트 단위로 암호화

스트림 암호 모드
  • 초기의 키는 IV와 섞인다
  • OFB(Output Feedback) 모드는 이전 키가 다음 키로 피드백 되는 방식
  • CFB(Cipher Feedback) 모드는 암호 비트가 다음 키에 피드백 되는 방식

Data Encryption Standard(DES) 알고리즘

1975년 미국 NIST에서 국가 표준으로 정한 암호기술

블록 암호 방식으로 원문을 64비트의 블록으로 나누고 각 블록에 56비트의 키를 적용

DES는 64비트의 원문 블록을 32비트씩 나누고, 왼쪽의 32비트만 서브키로 암호화한 후 왼쪽과 오른쪽을 교차하는 과정을 16번 반복한다

파이스텔 구조이다

Advanced Encryption Standard(AES) 알고리즘

2001년 미국 정부는 공식적으로 AES 암호 표준을 제정

치환-전치 구조(Substitution-Permutation Network, SPN)이다

Substitution은 혼돈 기능, Permutation은 확산 기능

128비트 키가 사용되고 치환과 확산 과정을 총 10번 반복한다

※비트코인 코어 프로그램에서는 지갑을 암호화할 때 256비트의 AES 알고리즘(CBC 모드)을 사용

04.대칭키 암호 절차 실습(AES)

AES(CBC 모드)암호화 결과

대칭키 기반 암호 방식의 문제점

대칭키 암호 방식의 주요 문제점

위 문제점들을 모두 해결하려면 공개키 기반 암호 방식을 사용해야 한다

※이미지 출처 : 파이썬으로 배우는 블록체인 구조와 이론(위키북스)

--

--