비대칭키 암호는 암호화에 쓰는 키와 복호화에 쓰는 키(프로그램) 가 다르다는 뜻이다.
자물쇠를 열 때와 잠글 때 다른 열쇠가 필요하다고 생각하자.
비대칭키 암호의 장점은 안전하다는 것이다.
해커가 키 둘 중 하나를 얻었다 한들 나머지 하나가 없으면 반쪽짜리 승리다.
단점은 느리다는 것이다.
그래서 현대에 와선 비대칭키 암호화를 써서 대칭키 암호 키를 전송하는 방법을 쓴다.
대칭키가 더 빠르니까.
그리고 비대칭키 암호 중 가장 유명한 게 RSA다.
RSA는 소수를 사용한 공개키-개인키 암호다.
RSA 암호에서는 늘 두 개의 키가 존재한다. 공개키, 개인키.
공개키로 암호화한 문서는 개인키로만 복호화된다.
개인키로 암호화한 문서는 공개키로만 복호화된다.
이중 개인키는 공개하지 않고 숨겨 놓으며 공개키는 자유롭게 풀어둔다.
이렇게 하면 준비는 끝이다.
A라는 사람에게 비밀스럽게 정보를 송신하려면 A의 공개키로 암호화를 걸어서 송신하면 된다.
그럼 그걸 해독 가능한 사람은 개인키를 가진 A뿐이다.
반대로 이 특성을 사용해 인증서를 만들 수도 있다.
A가 어떤 문서를 자신의 개인키로 암호화해서 B에게 보낸다고 치자.
그러면 B는 공개되어 있는 A의 공개키로 문서를 복호화해 읽어볼 것이다.
A의 공개키로 복호화된다는 것은 A의 개인키로 암호화되었다는 뜻이니,
위변조되지 않은 A의 문서라는 인증이다.
당연하지만 RSA 암호 역시 만드는 법은 당당히 공개하고 있다.
단, 공개키를 가지고 개인키를 알아내는 법은...불가능에 가깝다.
어마어마하게 큰 소수 두 개를 곱한 수를 소인수분해해야 하는데,
현대 수학에선 큰 수를 유효한 시간 내로 소인수분해할 수가 없다.
전 세계의 컴퓨터를 다 동원해도 우주가 먼저 멸망한다.