본문 바로가기

Dev-/WEB

RSA 공개키 암호화 기법

[RSA(Rivest, Shamir, Adleman) 공개키 암호화 방식]

: RSA 단어 자체는 사람이름 모아논 거라 별 뜻이 없고,,, 공개키전달할 데이터를 암호화 하는 방식을 말합니다.


(전공이 아니라 설명수준이 다소 낮을 수 있어요. 참고만 하시면 될 것 같습니다.)




간단히 암호의 형태에 대해 알아보겠습니다.


1. 가장 단순한 형태의 암호화는 아래와 같은 형태로,


   평문 ----- (규칙) --- > 암호문

                                              ↓

   평문 <---- (규칙) ----- 암호문


그 '규칙'만 알아내면 복호화가 가능합니다.

여기서의 '규칙'은 '키'와는 다른 개념으로,, 아무리 복잡한 규칙을 걸어놓아도 시간을 쏟으면 풀 수가 있죠.


2. 조금 더 발전한 대칭키 암호화 방식이 있습니다.


  평문 ----- (키) --- > 암호문

                                          ↓

  평문 < --- (키) ----- 암호문


위에서의 '규칙'과는 조금 다른데요.

쉽게 말해 규칙 자체에 규칙을 걸어놓고, 그 규칙을 알 수 있는 '키'를 설정해 놓는 것입니다.

따라서, '키'를 알면 복호화가 매우 쉽고, 모른다면 복호화가 절대 불가능한 구조를 가집니다.

암호화, 복호화에 쓰이는 키가 같기 때문에 대칭키라는 이름이 붙었습니다.


여기서,, '키'의 중요성이 매우 올라가게 되고, 자연스레 '키'의 취급에 관한 이슈가 발생합니다.

저 키만 탈취하게 된다면, 오히려 1번 형태의 암호화보다도 못하게 되기 때문이죠.



.....


3. 이를 해결한 것이 바로 RSA 개키 암호화 방식입니다.


  알렉스: 평문  ----- (키 A) --- > 암호문

                                                                         ↓

  장군이: 평문  < --- (키 B) ----- 암호문


장군이의 기준에서 봅시다.


우선, 수학적인 논리로 한 쌍을 이룬 키 AB를 만듭니다.

(각 수는 매우 크기 때문에, 하나를 알아내도 다른 하나를 유추할 수 없습니다.)

A로 암호화한 데이터는 B로만 복호화가 가능합니다.

B로 암호화한 데이터는 A로만 복호화가 가능합니다.


그리고 장군이는 A키를 잘 보관하고, B키를 알렉스에게 줍니다.

(여기서 A키는 개인키B키는 공개키라고 하게 됩니다.)


알렉스 장군이에게 자료를 줄 때, 장군이의 공개키 B키로 암호화해서 자료를 건내줍니다.

(누군가 장군이공개키 B를 습득하여도, 그것은 복호화에 쓰이는 개인키 A가 아니므로 의미가 없습니다.)


만약 알렉스가 장군이로부터 정보를 받고 싶다면

알렉스 또한 키 한쌍을 만들어 장군이에게 자신의 공개키를 전해주고, 동일한 과정을 거치면 됩니다.


따라서 일반적으로 네트워크에서 N명의 '사용자'가 있다면 2의 N승만큼의 '키쌍'이 필요하죠.




...


RSA 공개키 암호화 방식은 키 전송문제를 해결한 매우 획기적인 방법이라고 합니다.

하지만, 2번 유형의 대칭키 암호화 방식에 비해 약 1000배 가량의 느린 속도를 가지는 단점이 있다고 하네요.

평문의 길이가 길어진다면 시간은 배로 늘어나겠죠.


이를 해결하기 위해 대칭키공개키로 감싸 데이터를 주고받는 형식의 보안형태가 또 있는데요.

SSL(Secure Socket Layer)라는 보안 프로토콜을 사용 하는 방식입니다.

(브라우저에서 http 말고 https를 사용, 자물쇠 표시 등)


이 방식도 알면 좋을 것 같긴 한데,

다음에 조금 더 공부하고, 여기까지 정리하겠습니다.




여유가 된다면, 프로젝트에 한번 적용해봐야겠습니다.



'Dev- > WEB' 카테고리의 다른 글

HTTP, HTTPS의 차이  (0) 2018.08.09
Web Server(웹 서버), Web Application Server(WAS)의 차이  (0) 2018.08.09
쿠키와 세션  (0) 2018.08.07
HTTP의 정의, 특징  (0) 2018.08.07
Tomcat war 파일 배포  (0) 2018.08.06