암호화 방식
암호화 원리와 암호화 방식에 대해 알아보자
1. 대칭키 2. 공개키 3. SSL
▶용어정리
- 평문 : 누구나 읽을 수 있는 글
- 암호문 : 아무도 읽을 수 없는 글
- 암호화 : 평문을 암호문으로 만드는 것
- 복호화 : 암호문을 평문으로 만드는 것
- 암호화키 : 평문을 암호문으로 만드는 규칙
- 복호화키 : 암호문을 평문으로 만드는 규칙
▶암호화 방식
- 크게 대칭키 방식(비밀키)과 비대칭키(공개키) 방식이 있다
- 암호화 통신에는 비밀키로 평문을 암/복호화하는 대칭키방식과 비밀키를 개인키나 공개키로 암/복호화하여 전송하는 비대칭키(RSA) 방식이 함께 쓰인다
1. 대칭키(=세션키)
대칭키란?
-
대칭키의 종류에는 DES, 3DES, AES, SEED, HIGHT, LEA, ARIA, RC6 등이 있다
-
대칭키 표준은 AES이다
-
AES의 암호화 원리는 SPN구조(S: 치환, P: 순열 N: 반복)
-
암/복호화 속도가 빠르다
-
키를 직접 전달할 수 밖에 없는 키 전달의 문제가 있다
-
사용자가 늘어나면 그만큼 사용해야 하는 키 갯수도 늘어난다는 단점이 있다
-
키 전달의 문제를 해결하기 위해 공개키 방식이 등장하였다
대칭키에서 사용하는 암호화 방식
-
치환(Substitution) : 알파벳을 다른 알파벳으로 바꾸는 것 ( A ---> D, B ---> E 등등)
-
순열(Permutation) : 단어의 알파벳 순서를 바꾸는 것
암호화 원리 (대칭키 방식)
"ATTACK PARIS NEXT FRIDAY" 라는 평문을 암호화 하기 위해선 평문을 12345 ---> 31524 순열을 이용한 암호화키로 암호화 한다. 즉, 평문의 순서를 31524의 순서로 바꾸는 것이다
예시)
평문을 암호화키 : 12345 ---> 31524를 이용하여 암호문으로 암호화할 수 있다
ATTACK / PARIS / NEXT / FRIDAY (평문)
12345 / 12345 / 12345 / 12345
- - - - - - - - - - - - - - - - - - - - -12345 ---> 31524
TACTAK / RPSAI / XNET / IFARDY (암호문)
31524 / 31524 / 31524 / 31524
암호문을 복호화키 : 31524 ---> 12345를 이용하여 평문으로 다시 복호화할 수 있다
TACTAK / RPSAI / XNET / IFARDY (암호문)
31524 / 31524 / 31524 / 31524
- - - - - - - - - - - - - - - - - - - - -31524 ---> 12345
ATTACK / PARIS / NEXT / FRIDAY (평문)
12345 / 12345 / 12345 / 12345
이 때 암호화키와 복호화키는 서로 대칭을 이루기 때문에 대칭키라고 한다
암호화 한 사람이 대칭키를 복호화할 사람에게 직접 전달해줘야 하는 키 전달의 문제가 발생한다
대칭키뒤에 붙는 번호의 의미
- AES128, AES192, AES256 처럼 뒤에 붙는 숫자는 대칭키의 bit 수를 나타내는 것으로 AES256은 256bit의 대칭키를 쓰는 암호화 알고리즘이라는 뜻이다
- AES256의 키의 String length 값은 32이다 (문자 1개당 "1byte=4bit"이므로 256/4 = 32)
3. 공개키
Diffie-Hellman의 공개키 생성 원리
1) 개인키는 각자 가지고 있고, 개인키로 공개키를 생성한다(공개키로 개인키를 만들 수는 없다)
2) 공개키를 서로 교환한다
3) 상대의 공개키와 자신의 개인키를 연산해서 대칭키(세션키)를 생성한다
4) 나와 상대방 모두 대칭키를 가지게 된다 ----> 키 전달의 문제를 해결
5) 메시지(파일, 텍스트)를 대칭키로 암호화해서 보내주면 상대방이 대칭키로 복호화할 수 있게 되어 암호화 통신이 가능해진다
공개키 종류
-
Diffie-Hellman
-
RSA (안전성을 높이기 위해서 RSA1024/2048/4096 키길이를 계속 늘려야 함)
-
ECC (키길이가 짧아서 유튜브와 같은 모바일에서 많이 사용되고, RSA1024bit 동등한 수준의 암호화 강도를 제공한다)
RSA란?
-
표준 공개키
-
누구나 한쌍의 키를 가진다(개인키와 공개키)
- 개인키에서 공개키를 추출하는 방식(공개키로 개인키를 만들 수는 없다)
-
공개키로 암호화 하면 개인키로 복호화가 가능하고 개인키로 암호화하면 공개키로 복호화가 가능하다
-
쌍이 되는 다른 키로만 복호화가 가능하다
-
Diffie-Hellman의 공개키 데이터를 세션키로만 암/복호화를 할 뿐 RSA와 같이 개인키 또는 공개키를 이용하여 암/복호화를 하지 않는다
RSA를 활용한 기밀성 유지
나 이외의 다른 사람들은 접근할 수 없는 것
1) 누구나 개인키와 공개키 한쌍을 가진다 (개인키로 공개키를 생성)
2) 송신자가 수신자의 공개키로 암호화해서 보낸다
3) 수신자는 자신의 개인키로 복호화한다
4) 수신자의 개인키는 수신자만 가지고 있기 때문에 다른 사람들은 복호화할 수 없다
RSA를 활용한 인증
정당한 사용자가 보냈다는 것을 확인하는 것
1) 누구나 개인키와 공개키 한쌍을 가진다(개인키로 공개키를 생성)
2) 송신자가 자신의 개인키로 암호화해서 보냄
3) 수신자는 송신자의 공개키로 복호화한다
4) 송신자의 공개키로 복호화 된다는 것은 송신자가 개인키로 암호화했다는 증거
4. SSL
SSL이란?
-
SSL은 Secure Sockets Layer 라고 하여 웹서버 인증이나 서버 인증이라고 한다
-
4계층에서 하는 보안이다
-
웹브라우저와 서버간의 통신이 암호화되므로 중간에 패킷을 가로챌 수 없도록 하는 솔루션이다
-
보통 인터넷상에서 결제할때나 인터넷뱅킹과 같은 중요한 일을 할때 사용되는 방식이다
-
세션키와 공개키, 개인키를 모두 활용한 암/복호화 방식이다
-
SSL은 표준화작업을 하면서 이름을 TLS(Transport Layer Security)로 변경하였다
-
SSL 버전의 순서는 SSL1.0 --> SSL3.0 --> TLS1.0 --> TLS1.1 --> TLS1.2 --> TLS1.3
-
TLS1.0은 취약점이 발견되어 TLS1.1이상부터 사용하는 것이 좋다
SSL 원리
주목적은 사용자 ID/PW를 서버로 보낼 때 노출되지 않게 암호화해서 안전하게 보내는데 있다
1) 웹브라우저를 열면 웹서버는 서버의 인증서(공개키)를 클라이언트에게 제공한다
2) 사용자가 ID/PW를 입력하면 웹브라우저는 세션키로 ID/PW를 암호화하고 세션키는웹서버의 공개키로 암호화해서 웹서버로 보낸다
3) 웹서버는 자신의 개인키로 세션키를 복호화한다 ---> 클라이언트와 서버는 같은 세션키를 가지게 된다
4) 복호화한 세션키를 이용하여 ID/PW를 복호화하고 확인한다
5) 이후의 모든 트래픽은 클라이언트와 웹서버가 함께 가지고 있는 세션키로 양방향 암/복호화를 한다(대칭키는 안전하고 암/복호화 속도가 빠르다)
▶SSL과 SSH는 뭐가 다르죠?
- SSH는 Secure Shell의 약자로 보통 Telnet과 같은 원격조종에 있어서의 보안성을 유지시켜준다
- 주로 사용되는 포트는 22번 포트를 사용하고 있다.
- OSI 7계층 구조에서 어플리케이션(응용)계층에 속한다.
- 원격접속 패킷을 보낼때 데이터를 암호화 시킨다