[네트워크] RSA 암호화 알고리즘이 무엇이며 기존의 문제점을 어떻게 해결할 수 있을까?
데이터를 송수신할 때는 두 가지의 문제점이 존재한다.
1. 열쇠 전달 문제
2. 넌 누구야? 문제
열쇠 전달 문제
A가 C한테 데이터를 송신할 때 B(해커)가 데이터를 가로채 데이터를 위·변조 시키면 바뀐 데이터를 C는 수신받는 상황이 발생한다.
이러한 상황을 방지하기 위해 A가 C에게 보낼 데이터를 암호화하여 송신하면 중간에 B가 가로채도 데이터가 암호화되어 있기 때문에 위·변조가 불가능하다.
그러나 C도 데이터를 복호화할 방법을 모르기 때문에 사전에 A로부터 복호화하는 방법을 안내 받아야 한다.
그런데 이러한 복호화 방법도 결국 데이터이고 이것도 주고받아야 하기 때문에 모순에 빠지게 된다.
이 데이터를 주고 받는 도중에 B가 개입하여 탈취할 수 있으니!
넌 누구야? 문제
A가 C한테 데이터를 송신할 때 B(해커)가 데이터를 가로채 데이터를 위·변조 시키면 바뀐 데이터를 C는 수신받는 상황이 발생한다.
만약 이 데이터가 "10시까지 신사역으로 와"인데 B가 가로채 "9시까지 신사역으로 와"로 바꾸고 보내면 C는 곧이 곧대로 믿을 수 밖에 없다.
결국 A든 C든 '누가 보냈는지'를 정확히 인지해야만 한다.
이것이 인증 문제(넌 누구야?)이다.
RSA
이러한 문제는 RSA 암호화 방식으로 해결이 가능하다.
RSA는 두 가지의 Key가 존재한다.
1. Public Key(공개키)
2. Private Key(개인키)
공개키와 개인키는 는 모든 사람들이 각각 갖고 있는 키이다.
공개키는 본인을 포함한 다른 사람들도 가질 수 있지만 개인키는 본인만 갖고 있어야 한다.
데이터를 암호화할 때 공개키로 암호화를 하면 암호화된 데이터는 개인키로 복호화가 가능하다.
물론 반대로 개인키로 암호화를 하면 공개키로 복호화도 가능하다.
공개키 암호화 방식을 활용한 열쇠 전달 문제 해결하기
A가 C에게 보내고자 하는 데이터를 공개키를 이용해서 암호화를 해야 한다. 공개키는 C의 공개키를 사용해야 한다.
어떻게 C의 공개키를 사용할 수 있을까? C의 공개키를 어디서 얻을까?
공개키는 본인을 포함한 다른 사람들도 가질 수 있기 때문에 어떠한 공개키라도 다운로드해서 내 PC에 가져올 수 있다.
A가 C에게 보낼 데이터를 C의 공개키를 사용해서 암호화를 하여 C에게 송신했다고 가정하자.
중간에 B 해커가 이를 탈취해서 데이터를 보고 싶어도 볼 수가 없다.
왜냐하면 C의 공캐키로 암호화가 되어 있기 때문에 데이터를 복호화하기 위해서는 C의 개인키가 필요하다.
하지만 B 해커는 B 개인키, B 공개키만 갖고 있기 때문에 복호화를 할 수 없다.
따라서 C는 안전하게 A가 보낸 데이터를 수신할 수 있다.
이로써 열쇠 전달 문제를 해결하였다.
위와 같이 공개키로 암호화를 해서 데이터를 송수신하는 방법은 '공개키 방식'이라 하며 '비대칭 키 방식'이라고도 한다.
'비대칭 키 방식'은 암호화를 하는 키와 복호화를 하는 키가 다르기 때문에 파생된 용어이다.
개인키 암호화 방식을 활용한 인증 문제(너 누구야?) 해결하기
A가 C에게 보내고자 하는 데이터를 A의 개인키를 사용해 암호화를 하고 C에게 송신했다고 가정하자.
C는 이 데이터를 받아 A의 공개키로 열어서 복호화할 수 있다.
C는 A가 보낸 데이터를 받고 A의 공개키로 복호화를 했기 때문에 인증(너 누구야?) 문제를 해결할 수 있다.
A가 보낸 데이터를 해커가 가로채면 A의 공개키만 있으면 복호화를 할 수 있는데 문제가 되지는 않을까?
물론 B 해커도 마찬가지로 이 데이터를 가로채 A의 공개키로 열어서 확인할 수 있다.
그래서 개인키 암호화를 하고자 하는 데이터는 기밀을 가진 데이터가 아닌 전 세계 사람들이 봐도 상관이 없는 데이터이다.
이것은 전자 문서에서 서명(전자 서명)으로 쓰인다.
디지털 방식에서 인증으로 사용하는 것이 개인키 암호화 방식이다.
그러면 이쯤에서 한 가지의 의문점이 들 수 있다.
공개키 암호화 방식으로 데이터를 전송하면 수신 측에서는 송신 측이 누구인지 어떻게 알지?
수신 측 공개키로만 암호화하면 누구나 데이터를 보낼 수 있을텐데..
공개키, 개인키 암호화 방식을 모두 사용하면 된다.
가령 A가 C에게 데이터를 보낸다고 가정하자.
1. A는 C의 공개키로 데이터를 암호화한다.
2. C의 공개키로 암호화되어 있는 데이터를 한 번더 A의 개인키로 암호화한다.
C는 A로부터 데이터를 수신하면 다음과 같은 과정을 거치면 열쇠 전달 문제와 인증 문제를 모두 해결할 수 있다.
1. A의 공개키로 데이터를 1차 복호화한다.
2. 본인(C)의 개인키로 데이터를 2차 복호화한다.
참고 문서