암호화 기초 알고리즘[ 대칭 키(비밀 키), 비대칭 키(공개 키), 키 교환, 해시 ]

2022. 12. 1. 17:32리눅스(Linux)

암호화란?

   - 사람이 인식할 수 있는 문자를 읽기 힘든 기호나 다른 뜻을 가진 문자 형태로 변환하여 내용을 보호하는 것

$ 애나그램 (Anagram)

   - 6개의 알파벳의 배열에 따라 각각 다른 단어가 만들어진다.

$ 시저(Gaius Julius Caesar) 암호학

   - 알파벳을 3글자씩 밀어서 암호화. LOVE를 암호화하면 ORYH가 된다.

$ 스키테일 (Scytale)

   - 나무 막대에 종이를 말아서 내용을 입력하는 방식.

 

암호 알고리즘과 키(key)

 

Ex1) 스키테일의 알고리즘과 키
Ex2) 시저 암호화의 알고리즘과 키

$ 비즈네르 암호학 (Vigenere Cipher)

   - 단일치환 방식의 단점을 보완한 대표적인 다중치환 알고리즘으로 16세기 Vigenere가 고안한 암호 기법이다.

$ 커크호프의 원칙 (Kerchoff’s principle)

   - 키 이외에 암호 시스템의 모든 것이 공개되어도 안전해야 한다

   - 암호 알고리즘의 안전성을 공개적으로 검토하도록 하는 방식

 

대칭키(비밀키) 알고리즘

   - 암호화하는 키와 복호화하는 키가 동일한 것으로, 사전에 비밀키를 서로 공유하여 사용하는 방식이다

   - 장점 : 빠른 통신, 리소스 소모량이 적다.

   - 단점 : 키교환이 어렵다, 안정성이 낮다

 

$ Stream Cipher

   - 비트나 바이트 단위로 입력되는 순서대로 암호화

   -  block Cipher방식보다 빠르다.

$ Block Cipher

   - 일정 크기로 자른 후 Block 단위로 암호화

   - 난수 발생으로 초기화 벡터를 평문의 첫 Block에 조합 후 암호화 된 Block을 다음 Block에 조합시켜 나간다.

 

 

대표적인 대칭키 알고리즘

비 대칭키(공개키) 알고리즘

   - 수학적 알고리즘을 통해 암호화를 위한 키와 복호화를 위한 키를 따로 가지는 암호 알고리즘이다.

   - 공개키를 서로교환해서 상대방의 개인키로 암호를 해독할수 있게 암호화해서 전송, 

   - 장점 : 키 교환에 어려움이 없음, 안정성 높음

   - 단점 : 서로다른 키로 복호화하기때문에 리소스양이 많음, 시간이 오래걸림

 

$ RSA

   - 1977년 Rivest, Shamir, Adleman이 고안해낸 암호 기법
   - 매우 큰 수를 소인수분해 계산법을 사용하여 한 쌍의 키 값을 생성
   - 공개키(Public key)와 개인키(Private key)로 구성됨

   - 개념상으로만 존재했던 비대칭키를 구현해낸 것이 RSA

키 교환 알고리즘

   - 안전하게 비밀키를 공유하기 위한 방법이다.
   - 대칭키/비대칭키 알고리즘을 함께 사용하는 Key wrapping(Hybrid) 방식과, Diffie-Hellman 알고리즘이 있다

 

 

$ Key wrapping
  - 비밀키(대칭키)를 안전하게 전송하기 위해 비 대칭 암호화 알고리즘을 사용하는 방식이다. 

$ Diffie-Hellman

   - 1976년 Diffie 와 Hellman 은 대칭키를 안전하게 송/수신자들에게 분배하는 알고리즘을 발표하였다.
   -‘A = g^a mod p’ 라는 식을 사용해 실제 Key값은 전송하지 않고 Key를 생성하는데 필요한 값만 전송한다.
   - 인증 및 전자서명과 같은 기능은 제공할 수 없고, 비밀키 교환용도로만 사용할 수 있다. 

 

$ Diffie-Hellman 과정

앨리스와 밥은 p=23, g=5를 사용하기로 합의한다.
앨리스가 비밀 정보를 전송하기 위해 임의의 정수 a=6을 고른 후, 밥에게 A = g^a mod p 을 전송한다. 
A = 5^6 mod 23
A = 15,625 mod 23
A = 8

 

밥은 임의의 정수 b=15 를 고르고, 앨리스에게 B = g^b mod p 를 전송한다. 
B = 5^15 mod 23
B = 30,517,578,125 mod 23
B = 19

 

앨리스는 밥에게서 받은 B 를 바탕으로 s = B^a mod p 를 계산한다. 
s = 19^6 mod 23
s = 47,045,881 mod 23
s = 2

 

밥은 앨리스에게서 받은 A 를 바탕으로 s = A^b mod p 를 계산한다. 
s = 8^15 mod 23
s = 35,184,372,088,832 mod 23
s = 2

 

앨리스와 밥은 이제 비밀 키 s = 2 를 공유하게 되었다

 

해시(Hash) 알고리즘

   - 복호화가 되지 않아 무결성을 위해 사용한다.
   - 평문 길이에 상관 없이 동일한 길이의 출력 값을 생성한다.