본문 바로가기

CS Study

대칭키, 비대칭키(공개키) 정리

대칭키 암호화 방식은 암복호화에 사용하는 키가 동일한 암호화 방식이다. 공개키 암호화 방식은 암복호화에 사용하는 키가 서로 다르다. 따라서 공개키 암호화에서는 송수신자가 모두 한쌍의 키(개인키, 공개키)를 갖고 있다.

1. 대칭키

  • 암호화와 복호화에 하나의 같은 키를 사용하는 암호 방식이다.
  • 암호의 안정성은 키의 비밀 유지에 의존된다.
  • 송신자와 수신자는 미리 안전한 채널을 통해서 암호 키가 먼저 교환되어있어야 한다.
  • 계산 속도가 빠르지만 안전한 인증이 힘들고 전자 서명이 불가능하다.

1.1 블록 암호

평문을 고정된 크기의 블록으로 나누어 각 블록마다 암호화 과정을 수행하여 블록 단위로 암호문을 얻는 대칭키 암호 방식이다.

1.2 블록 암호 - AES (Advanced Encryption Standard)

  • 128bit 블록 암호이다.
  • 암호화 Key로 128, 192, 256bit 를 가질 수 있다. 암호화 Key 의 길이에 따라 실행하는 Round의 수가 다르다.
  • 대입(Substitution)-치환(Permutation)을 이용하여 암호화하는 방법이고 전체 비트를 암호화한다.

1.3 AES 암호화 과정

유튜브의 'AES Rijndael Cipher explained as a Flash animation' 설명을 보고 이해했습니다.
출처 : https://youtu.be/gP4PqVGudtg

State

  • State라는 Byte의 2차원 배열(4X4 byte)을 사용한다. (1State = 4word = 16byte = 128bit)
  • 16진수의 값으로 변환하여 사용한다.

  • 라운드 수는 key의 길이에 따라 다르다.

  • 각 라운드마다 4개의 절차를 가지고 있다. (마지막 라운드에서는 MixColumn 연산이 빠진다)

1 - SubBytes

  • SubBytes transformantion table 을 이용하여 byte 단위로 블록을 대체한다.

2 - ShiftRows

  • 첫번째 행은 shift 하지 않는다.
  • 두번째 행은 한자리 왼쪽으로 shift
  • 세번째 행은 두자리 왼쪽으로 shift
  • 마지막 행은 세자리 왼쪽으로 shift

3 - MixColumns

  • 각각의 열을 상수 행렬과 곱해서 새로운 값을 가지는 열을 반환한다.

4 - Add Round Key

  • 각 State 열 행렬에 Round key word를 XOR 연산을 한다

1.4 AES Key 확장 과정

  • 1word 는 4byte로 AES-128 에서 4개의 word로 나누어 키 확장이 이뤄진다.

 

  • 4개의 워드 중 마지막 워드는 1byte 왼쪽 rotate 이동된 후 S-box 를 이용하여 치환한다.

  • 현재 만들려고 하는 Key의 위치가 Wi이라고 하면, Wi-4번째 열과 위에서 계산한 값과 XOR 연산을 한다. 이 결과와 다시 Rcon의 열과 XOR 연산을 수행한다.

  • 현재 만들려고 하는 Key의 word 위치가 첫번째 word가 아니라면, Chiper Key의 Wi-4번째 열과 현재 Wi번째 열을 XOR 연산을 수행한다. → (위의 그림에선 Round Key1의 두번째열이 만들어진다)

1.5 스트림 암호

평문과 같은 길이의 키 스트림을 생성하고 평문과 키를 비트 단위로 XOR연산하여 암호문을 얻는 대칭키 암호 방식이다.

2. 공개키(비대칭키)

암호화와 복호화에 두개의 서로 다른 키를 사용하는 암호 방식으로 양방향 암호화방식이다.

  • 공개키 (Public Key) : 누구나 공개키를 사용해 암호화가 가능하다
  • 개인키 (Private Key) : 오직 자신만이 개인키를 이용해 복호화가 가능하다
  • 공개키로 암호화 한 정보는 그 쌍이 되는 개인키로만 복호화가 가능하고, 개인키로 암호화 한 정보는 그 쌍이 되는 공개키로만 복호화가 가능하다.
  • 대표 알고리즘 : RSA, ElGamal
실제로는 대칭키와 공개키를 섞어서 활용한다

2.1 기밀 내용 전달

A가 자신만 알고 있는 기밀을 B에게 전달할때 사용한다. B를 제외한 타인은 이 내용을 알 수 없어야 한다.

  1. B가 자신의 공개키를 공개한다
  2. A는 이 공개키로 문서를 암호화하고 B에게 전달한다
  3. B는 자신만이 가진 개인키로 이 문서를 해독한다
  • 타인이 전달과정에서 암호화된 문서를 가로채더라도 B의 개인키가 없으면 해독이 불가능하다.
  • SSL / TLS 에서 두 당사자가 사용할 대칭키를 전달하는 용도로 사용된다

'CS Study' 카테고리의 다른 글

NoSQL 이란? - NoSQL 특징, NoSQL 데이터 모델, RDBM 비교  (0) 2021.04.28