[네트워크] 8-1. Cryptography

kkado·2023년 6월 13일
1

네트워크

목록 보기
43/49
post-thumbnail

⚠️ 들어가기 앞서
경북대학교 컴퓨터학부 COMP0414-001 컴퓨터망 과목을 공부하며 정리한 글입니다.


Security ?

말 그대로 네트워크 내의 보안을 뜻한다. 보안 이란?

  • confidentiality (기밀성) : 송신자와 의도된 수신자만이 메시지를 이해 (understand) 할 수 있어야 한다.
  • authentication (인증) : 송, 수신자가 서로를 식별할 수 있어야 한다.
  • message integrity (메시지 무결성) : 메시지가 의도치 않게 변경되지 않아야 한다.
  • access and availability (접근성과 가용성) : 서비스는 유저들에게 접근 및 사용 가능해야 한다.

Friend and Enemy

전송 과정, 및 공격 과정을 돕기 위하여 가상의 사람 3명 A, B, C를 만들자.
A와 B가 friend 여서 서로 데이터를 주고 받으려고 할 때, C가 둘 사이에 오가는 데이터를 가지고 나쁜 짓을 하려는 악당이다.

실제로는, 웹 브라우저/서버의 관계, 또는 온라인 뱅킹 서비스의 클라이언트/서버, DNS 서버들, BGP 라우터들 등 다양한 friend 관계가 있을 수 있다.

what can a 'bad guy' do?

그럼 악당 C가 저지를 수 있는 나쁜 짓은 어떤 것들이 있는지 알아본다.

  • eavesdrop (도청) : 메시지를 엿듣는 것
  • insert : 둘 사이의 연결에 메시지를 삽입하는 것
  • impersonation (사칭) : source 주소 등 다양한 패킷 필드를 사칭하는 것
  • hijacking : connection의 둘 중에서 한 명을 제거하고 본인이 그 자리에 들어감으로써 connection을 'take over' 하는 것
  • denial of service (서비스 거부) : 많은 자원을 요구함으로써 다른 사용자들로 하여금 서비스를 사용할 수 없게 하는 것

Cryptography

용어 정리

  • plaintext(m) : 암호화 되지 않은 평서문
  • Ka : a가 가지고 있는 암호화 키
  • Kb : b가 가지고 있는 복호화 키
  • ciphertext : 암호화 된 데이터

a가 가지고 있는 암호화 키를 가지고 plaintext m을 암호화한다는 것을 함수처럼 표현하여 Ka(m) 으로 나타낼 수 있고, 이를 b가 가지고 있는 복호화 키를 가지고 복호화하는 것을 Kb(Ka(m))

대칭키 암호화

대칭 키 암호(symmetric-key algorithm)는 암호화 알고리즘의 한 종류로, 암호화와 복호화에 같은 암호 키를 쓰는 알고리즘을 의미한다. (위키백과)

위 그림을 보면 암호화와 복호화에 서로 같은 키 Ks를 사용하고 있다. 이러한 방식을 대칭 키 암호화라고 한다.

simple encryption scheme

가장 간단히 암호화할 수 있는 방법인 substitution cipher (치환 암호) 는 어떤 것을 다른 것으로 치환하여 암호화하는 방법이다.

이 중에서 하나의 알파벳을 다른 알파벳으로 치환시키는 방법인 monoalphabetic cipher 를 알아보면 다음과 같은 방법을 통해 암호화한다.

각각의 알파벳을 다른 알파벳으로 대치한다. 한 문장 속에 같은 글자는 같은 글자로 치환되어 있음을 알 수 있다. (모든 b는 n으로, 모든 i는 s로)

각 알파벳을 다른 알파벳으로 바꾸는 경우이므로 26! 개의 경우의 수가 있다.

위 그림은 다양한 암호화 기법을 나타낸 것이다.


DES

데이터 암호화 표준(Data Encryption Standard, DES)은 블록 암호의 일종으로, DES는 대칭키 암호이며, 56비트의 키를 사용한다. (위키백과)

DES는 64비트의 평문을 64비트의 암호문으로 바꾸는 기법이다.
64비트의 암호키 중에서 parity bit로 사용되는 8비트를 제외한 56비트의 암호키를 사용한다.

DES의 일반적 구조는 아래 그림과 같다.

오른쪽 사각형을 보면 64비트 plaintext가 들어와서 결과적으로 64비트 ciphertext가 생성됨을 볼 수 있다.

DES는 앞 뒤로 Initial permutation (초기 치환)Final permutation (최종 치환) 과정이 있다. 이 과정은 서로 역함수 관계에 있고, 암호화 과정에 중요한 역할을 하지 않는다.

본격적인 암호화 과정은 총 16라운드의 Feistel 라운드 함수 를 통해 이루어진다.

각각의 라운드를 살펴보면 64비트의 input을 32비트씩 L 부분과 R 부분으로 나누어서 사용하고, output 역시 32비트 L, R로 총 64비트의 output이 생성된다.

Mixer (암호 혼합기)와 Swapper (스와퍼)의 두 가지 과정을 거치며, i 라운드 함수에서 사용되는 라운드 키 Ki가 있다.

라운드키와 input을 이용하는데, f 함수 라는 것을 사용한다.

f 함수는 위 그림과 같이 생겼으며 먼저 32비트 input을 확장을 통해 48비트로 만들고, 라운드 키 Ki와 XOR 연산을 수행한 것을 S-box라는 것들에 집어 넣는다.

각각의 S-box는 6비트를 입력받아 4비트로 치환하여 출력해준다. 그 결과 32비트의 output이 생긴다.

한편 라운드 키 Ki를 선정하는 과정은 뒤 그림과 같다.
전체 암호키 64비트 중 parity bit로 사용되는 8비트를 제외한 56비트를 실질적으로 사용하며 round key generator 를 거쳐 각각의 라운드에 사용할 라운드 키를 생성한다.

round key generator 안의 동작 과정은 시프트 연산, 스플릿, 자르기 연산 등 다양한 복잡한 연산이 수행되며 잘 몰라도 된다.

DES는 이미 1999년도에 22시간만에 해독될 정도로 취약한 매커니즘이고, 이를 보완하기 위해 3중으로 DES를 사용하는 3-DES가 사용되는 편이다.

AES

고급 암호화 표준(Advanced Encryption Standard, AES)은 2001년 미국 표준 기술 연구소(NIST)에 의해 제정된 암호화 방식이다. (위키백과)

이에 DES를 개선한 AES가 등장하였다. 브루트 포스로 각각의 시행을 모두 때려박아서 해독하는 방식으로 DES가 1초만에 풀렸다면, AES는 149조 년이 필요할 정도로 강력한 매커니즘이다.


공개키 암호화

대칭키 암호화 방식을 사용할 때 두 사용자가 아직 한 번도 만난 적이 없어서 어떤 대칭키를 사용할 것인지 정해지지 않았다면 어떡할까? 이 문제점을 해결하기 위하여 다르게 제시된 것이 공개 키 암호화 방식이다.

공개 키 암호 방식 (public-key cryptography)은 암호 방식의 한 종류로 비밀 키 암호 방식과 달리 암호화와 복호화에 이용하는 키가 다른 방식을 말한다. 공개 키 암호를 구성하는 알고리즘은 대칭 키 암호 방식과 비교하여 비대칭 암호라고 부르기도 한다. (위키백과)

각 사용자는 public key (공개키)private key (개인키)를 가지고 있으며, 이들을 서로 공유하지 않는다. public key는 다른 사용자가 알 수 있으며, private key는 본인만 알고 있다.

위 그림이 공개키 암호화 방식을 나타낸 것이다. 송신자가 수신자의 public key를 이용하여 데이터를 암호화하여 보내고, 이를 수신자의 private key로 복호화한다.


대칭키 알고리즘의 중요한 2가지 요구 조건이 있다.

  • public key로 암호화한 것을 private key로 복호화 가능해야 한다.
  • public key로 private key를 도출해 낼 수 있으면 안 된다.

RSA

RSA[1] 암호는 공개키 암호시스템의 하나로, 암호화뿐만 아니라 전자서명이 가능한 최초의 알고리즘으로 알려져 있다. (위키백과)

RSA는 두 개의 키를 사용한다. 여기서 키란 메시지를 열고 잠그는 상수(constant)를 의미한다. 일반적으로 공개키는 암호화에, 개인키는 복호화에 사용한다.

RSA의 세부 구현

RSA 암호화는 다음과 같은 과정으로 이루어진다.

  • 어떤 소수 2개 p, q를 선택한다.
  • n = pq, z = (p-1)(q-1) 로 정의한다.
  • z와 서로소인 e를 선택한다.
  • ed % z = 1인 d를 선택한다.

공개키를 (n, e), 개인키를 (n, d) 로 사용한다.

이 알고리즘은 두 소수를 곱해서 어떤 큰 수를 만들기는 쉽지만, 반대로 어떤 큰 수가 어떤 소수의 곱으로 이루어져 있는지는 알기 어렵다 라는 원리에 기반한다.


RSA의 중요한 성질

공개키와 개인키를 사용하는 순서는 중요하지 않다.

공개키를 암호화 키로, 개인키를 복호화 키로 사용하든 개인키를 암호화 키로, 공개키를 복호화 키로 사용하든 정상적으로 복호화가 가능하며 그 결과 원래의 평문 plaintext m을 얻을 수가 있다.

이 성질은 뒤에서 다룰 부분에서 중요하게 사용된다.


profile
베이비 게임 개발자

0개의 댓글