암호화(cryptology) - 비밀키 & 공개키

2022. 9. 19. 17:27시스템 & 네트워크 보안

정보를 주고 받을 때 정보를 날것, 즉 평문으로 주고 받으면 정보가 노출 되었을 때 해당 정보는 보호 받지 못하게 됩니다. 1차적으로 정보가 노출되지 않는다면 베스트지만 수많은 해커와 취약한 환경이 존재하는 한 노출의 위협에 처할 수 밖에 없게 됩니다.

그렇기 때문에 정보를 암호화하여 정보가 노출되더라도 접근이 허가되지 않은 사람은 읽을 수 없도록 하는 것이 필요합니다. 

암호화에는 크게 비밀키 암호화 기법과 공개키 암호화 기법이 있습니다.

 

1. 비밀키 암호화 기법(대칭키 암호화)

  • 대칭키(Symmetric Key) : 암호화키와 복호화키가 서로 같음(대칭을 이룸)
  • 단일키(Single Key) : 암호화키와 복호화키가 같기 때문에 사실상 하나의 키로 이루어짐
  • 비밀키(Secret Key) : 대칭키는 허가받지 않은 다른 사람이 알면  안됨
  • 세션키(Session Key) : 한번의 세션에서만 사용
  • 장점 : 암호화/복호화 속도가 빠름
  • 단점 : 키 전달의 문제(전달하는 과정에서 키가 노출될 수도 있음) ,키 개수의 문제 n/(n-1)/2개의 키가 필요
  • SPN(S : 치환, P : 순열, N : 네트워크) 방식, *Feistel 방식, *Matrix 방식을 사용
  • Feistel 방식(DES, 3DES, SEED 등), SPN(AES, ROT13, ROT47 등)
  • ROT13, ROT47, DES, 3DES, AES, SEED 등

*Feistel 방식 : 특정 계산 함수의 반복으로 이루어지는 블록 암호의 일종으로 각 과정에서 사용되는 함수를 라운드 함수라고 합니다.

*Marix 방식 : 가로로 쓰고 세로로 읽으면 암호화, 세로로 쓰고 가로로 읽으면 복호화되는 방식입니다.

 

종류

1.1 ROT13 : 영어 알파벳 26개를 반으로 쪼개서 치환하는 방식입니다. 

특수문자와 숫자는 치환 불가능합니다 그래서 해결 방안으로 나온 것이 ROT47입니다.

 

 

 

1.2 ROT47 : 영어 알파벳 소/대/특수문자/숫자 94개를 반으로 쪼개서 치환하는 방식입니다.

 

 

1.3 DES(Data Encryption Standard)

- 최초의 표준 대칭키

- 블록 암호화 방식 : 64bit(블록)씩 잘라서 암호화

- 키의 길이 : 64bit, 실제 암호화키는 56bit, 나머지 8bit는 *패리티 비트

*패리티 비트 : 정보가 전달되는 과정에서 오류가 발생했는지 검사하기 위해 추가된 비트

- 2000년에 크래킹되어 표준에서 제외됨

 

1.4 3DES 

- 새로운 표준 대칭키를 찾기 전까지 임시 표준으로 사용

- DES를 3번반복 연산

 

1.5 AES(Advanced Encrytion Standard)

- 새로운 표준 대칭키

- SPN(S : 치환, P : 순열, N : 네트워크) 방식 사용

- 벨기에의 Rijndael을 AES로 채택

- 안정성과 속도가 가장 빨라서 Rijndael를 AES로 최종 선정

- 키의 길이 : 128bit,  192bit, 256bit

 

1.6 SEED

- 우리나라에서 만듦

- 금융중앙망에서 사용되고 있으며 소스코드를 공개

- 소스코드를 공개하는 이유는 백도어가 없음을 증명하기 위함

 

2. 공개키 암호화 기법(비대칭키 암호화)

  • 누구나 개인키와 공개키 한쌍을 가짐
  • 공개키(public key) : 누구에게나 공개 가능함
  • 개인키(private key) : 자기 자신만 가지고 있어야함
  • 공개키만 교환하면 되기 때문에 키 교환 문제 해결
  • 대칭키는 n(n-1)/2의 키를 가져야 하는 반면에 공개키 암호화 기법은 2n의 키만 가지면 됨
  • Diffie-Hellman, RSA, ECC

종류

2.1 Diffie-Hellman

- 이산대수의 어려움을 이용해서 만든 최초의 공개키 암호화 기법

- 자신의 개인키와 상대방의 공개키를 연산해서 생성한 키는 양쪽이 동일

A의 개인키: A,  A의 공개키 : A_P

B의 개인키 : B, B의 공개키 : B_P
A와 B_P의 연산으로 생성된 키와 B와 A_P의 연산으로 생성된 키는 같음

 

- 연산된 키로 암호화하면 상대방도 같은 키를 가지고 있기 때문에 복호화 가능

- MITM(Man in the Middle Attack) 취약점 존재

MTM :  A와 B가 암호화로 정보를 주고 받을 때 C라는 공격자가 중계를 할 경우 C는 모든 정보를 알 수 있게 됨

 

A의 개인키 : A, A의 공개키 : A_P

B의 개인키 : B, B의 공개키 : B_P

C의 개인키 : C, C의 공개키 : C_P

() : 키의 연산을 의미

 

정상적인 경우

1. A는 (A, B_P)키를 사용해서 암호문 생성

2. B는 (B,A_P)키를 사용해서 암호문을 복호화

 

 

MITM 공격

1. 공격자 C는 자신의 공개키를 A한테는 B인것처럼 B한테는 A인것처럼 교환

2. A는 (A,C_P)키를 사용해서 암호문 생성

3. C는 (C,A_P)키를 사용해서 암호문을 복호화, 공격자 C는 메시지의 내용을 알게됨

4. C는 메시지를 (C,B_P)키를 사용해서 암호문 생성

5. B는 (B,C_P)키를 사용해서 암호문을 복호화

 

 

2.2 RSA

- 소인수 분해의 어려움을 이용해 만듬

곱하기에 비해 그 반대인 소인수 분해는 어려운것을 볼 수 있음

13*7 = 91,  91 = 13*7

값이 커질수록 이는 더 어려워짐

 

- 하나의 키로 암호화를 하면 쌍이 되는 다른키로만 복호화가 가능(양방향 암호화)

- 송신자가 해당 메시지를 자신이 보낸 메시지라는 것을 증명하기 위해서는 자신의 개인키로 암호화 시키면 됨

A가 A의 개인키로 암호화를 하면 해당 암호문은 A의 공개키로만 복호화 가능

 

- 수신자만 메시지를 보길 원한다면 수신자의 공개키로 암호화하면 됨

A가 B의 공개키로 암호화를 하면 해당 암호문은 B의 개인키로만 복호화 가능

 

2.3 ECC

- 이산대수의 어려움을 이용해서 만듬

- 컴퓨터의 발전으로 크래킹 시간이 줄어들고 있음

RSA512bit -> RSA1024bit -> RSA2048bit 점점 키 길이를 늘려야함

더 이상 키를 늘릴수 없기 때문에 ECC를 사용

- ECC160bit와 RSA1024bit는 거의 비슷한 암호화 강도를 지님

-  짧은 키길이로 강력한 암호화를 제공

- 최근에는 ECC256bit를 사용함 (유튜브, 인스타그램, 페이스북, 랜섬웨어 등)