RSA 암호화, 많이 들어보셨죠?
RSA는 1970년대에 만든 사람 3명의 수학자 이름 앞자를 따온 암호화 이론 입니다.
수학자가 개발한 만큼, 수학에 기반한 암복호화 기술인 것을 알 수 있죠.
정확하게는 소인수분해가 어려운 점을 이용 합니다.
아휴, 이번 글 읽고 싶지 않죠?
걱정마세요.
아래는 수학은 다 빼고, 쉬운 이야기로 풀어가겠습니다.
암복호화의 why 는 무엇 일까요?
보낸 사람과 받는 사람만 이해 할 수 있는 커뮤니케이션 이겠죠.
즉, 비밀 대화 입니다.
대면으로는 조용한 곳에서 둘이서만 이야기 하면 됩니다.
비대면으로는 어떻게든 통신 수단이 쓰이게 됩니다.
여기서 문제가 발생 하죠.
통신 수단에서 비밀이 새어나갈 수 있다는 것입니다.
그럼 어떻게 해야 할까요?
통신 수단에서 누가 보거나 듣더라도, 그 뜻을 알 수 없게 하면 됩니다.
암호화는 그래서 사용 됩니다.
서로 규칙을 모르면 암호문을 평문으로 바꿀수 없는 거죠.
암호화 방식은 여러 방법이 있지만, 대표적인 3가지는 AES
, DES
, RSA
입니다.
그리고, 크게 2가지 종류가 있어요.
말이 좀 어려운가요? 더 쉽게 써보겠습니다.
암호문을 만들려면, 다시 풀 수 있는 키
가 필요합니다.
자물쇠를 열려면 키가 필요하듯이요. 그 키를 어떻게 구성하냐에 달려 있어요.
대칭키 암호화
는 키가 1개 뿐 입니다.
자물쇠랑 같습니다. 이 키 하나로 열고 잠그고 합니다.
여는 키와 잠그는 키가 같아서 대칭키 라고 합니다.
비대칭키 암호화는 키가 2개 한세트 인데요.
특수한 자물쇠 입니다. 키 하나는 열기만 가능하고, 하나는 잠그기만 가능해요.
이제 좀 쉽지요?
그래서 대칭키 방식으로 1등은 AES
이고, 미국 국가기관에서 개발했습니다.
비대칭키 방식 1등은 단연 RSA
입니다. 수학자들이 개발 했죠.
오늘 주제는 RSA
이니까, 요 RSA
를 좀 더 파고 들어가봅시다.
비대칭키 암호화는 키가 2개 한세트라고 했습니다.
하나는 열기만, 하나는 잠그기만요.
현실에서는 존재할 수 없겠지만, 수학으로는 가능 합니다.
그런데, 왜 키를 2개로 나누는지 그것을 알아야 할 거예요.
A
,B
두 사람이 있어요. 그리고 편지
가 있습니다.
A
가 B
한테 편지를 자물쇠로 잠궈서 보내려고 합니다.
그런데 둘이 너무 멀리 떨어져 살고. 절대로 만날 수 없습니다.
그래서 전달은 택배나 우편만 가능해요.
이 상황에서 편지를 A가 B에게 안전하게 보내려면 어떻게 해야 할까요?
어떻게든 키를 보내기만 하면 중간에 누군가 가로챌 수 있어요.
결국 안전한 방법이 없게 됩니다.
그런데, 비대칭 키 자물쇠가 있다면 상황이 달라져요.
위와 똑같은 상황으로 가정할께요.
A
가 B
에게 편지를 보내야 하는데요.
이때, 이번에는 반대로 B가 A에게 일단 자물쇠와 키를 하나 먼저 줍니다. A가 아니라 B(받는사람)가요.
이때, 키는 자물쇠를 잠그기만 할 수 있는 키 입니다.
또한, 자물쇠는 열려있어서, 내용물을 담고 한번 받은 키로 잠그면 됩니다.
그러니까 니 편지를 내가 준 자물쇠로 잠궈서 보내줘
라고 B
가 말하는 셈이 돼죠.
B
한테 자물쇠와 키를 받은 A
는 편지를 자물쇠에 넣고 받은 키로 잠근 다음에요.
그냥 택배든 우편이든 보내면 됩니다.
이 자물쇠로 잠긴 박스를 중간에 누가 가로채도요.
한번 잠긴 자물쇠는요.
B
가 아니면 누구도 열수 없습니다.
열수 있는 키는 오직 B
만 가지고 있고, B
는 이 키를 어느곳에도 보낸 적이 없이 집에만 보관 했거든요.
어때요?
결국 먼저 받는 사람이 안전하게 받기 위해,
누구든 나한테 안전하게 뭘 보내고 싶을때는,
이런 식 입니다.
잘 이해 하셨나요?
위 내용만 보면 완벽한 보안 유지에, 신박 한 느낌이 들었을 것입니다.
맞아요 신박해요.
그러나, 역시나 단점이 있습니다.
앞서, RSA
는 수학자에 의해 개발되었다고 했습니다.
그렇습니다.
숫자는 커질수록 계산이 느린 것은 인지상정이겠죠.
고로 RSA
로 많은 데이터를 암호화 하려면, 처리할 수 있는 숫자 범위를 넘어버리는 문제가 생깁니다.
암호키의 길이는 일반적으로 1024 bit
또는 2048 bit
를 사용하고, 키 길에 따라 암호화 가능한 평문 텍스트 양이 결정 됩니다.
좋다 말았쥬?
이런 단점도 또 다른 신박한 해결책이 있습니다.
상대적으로 RSA
같은 비대칭키 암호화
보다 대칭키 암호화
는 엄청나게 빠릅니다.
텍스트 양도 제한이 거의 없구요.
그러나 대칭키 암호화
는 키가 하나뿐이라 위험하다 했죠?
그러니까 하나는 위험하고, 하나는 느린데…
이 둘을 잘 조합해서 이렇게 하는 것입니다.
바로,
RSA
로 서로만 알 수 있는 암호키 자체
를 하나 만들어서 먼저 주고 받고,
그 후에는 속도가 빠른 대칭키 방식
으로 암/복호화 하는 것이죠 ㅎㅎㅎ
Wow. 엄청나죠?
이런 신박한 방법은 물론, 제가 생각 한게 아닙니다.
SSL (https)
이 암호화를 하는 원리와 같습니다.
즉, 초기에 RSA
로 암호키를 주고 받고요.
그 후에 모든 데이터는 AES
같은 대칭키 암호화로 주고 받습니다.
안전하고, 아무도 가로챌 수 없겠죠?
정확하게 RSA
에서는
풀기만 가능한 키를 개인키(Private Key)
잠그기만 가능한 키를 공개키(Public Key)
라고 합니다.
(또한 키 2개가 용도를 서로 바꿀 수도 있습니다. 공개키로 암호화 하여 개인키로 복호화 하거나, 개인키로 암호화하여 공개키로 복호화 하거나)
RSA
는 암복호화 뿐만 아니라, 신분 증명으로도 쓰여요.
개인키는 그 개인밖에 안가지고 있으므로,
내가 그들의 공개키로 뭘 보내면, 그 개인만 볼 수 있다는 점을 이용하여,
내가 보낸 글자를 해석하는 것은 개인키를 가진 너만 가능한데, 너는 그 글자를 해석했으니, 니가 맞구나! 그럼 신분이 증명 됐네!
라는 원리 입니다. 이것은 공인인증서의 신분 증명 원리이기도 합니다.
최대한 쉽게 쓰려고 노력했습니다.
이 글은 RSA의 기초를 말한 것으로, 앞으로 암호화를 공부하시는데 작은 도움이 되셨으면 좋겠습니다.
오늘도 즐거운 하루 되세요.
아임웹 CTO 매튜 드림.