티스토리 뷰

dev

공개키 비밀키 암호화 방식

IT's me 2020. 2. 2. 22:01

오늘은 공개키와 비밀키 암호화 방식에 대해서 알아보겠습니다. 우리가 실제로 PC나 모바일, 태블릿 등의 제품을 이용할 때 눈에 보이지 않게 뒤에서 항상 일어나는 일들이 있지요.

 

세상의 모든 암호화를 둘로 나눈다.

바로 데이터 암호화와 복호화입니다. 우리가 사용하는 인터넷도 이제는 http(암호화가 안되는 인터넷 프로토콜 방식) 서비스를 찾기 힘듭니다. 거의 모든 개인 쇼핑몰, 영세한 사이트들 조차 https( 암호화가 되는 인터넷 프로토콜 방식 )를 기본적으로 적용하고 있습니다.

 

우리가 일상생활에서 인터넷만 이용하더라도 기본적으로 암호화 처리가 이루어지고 있다는 거죠. 또 앱을 이용하거나 웹을 이용할 때 비밀번호나 주민등록번호와 같은 민감한 정보들은 아예 별도로 암호화 처리하도록 되어있는 경우도 많습니다. 이런거 많이 보셨죠?

비밀번호나 주민번호 입력 암호화

이 민감정보를 암호화하는 방식은 디바이스의 메모리부터 실제 서버까지의 종단간( End to End ) 암호화를 지원해야하고, 또 하고 있기에 안심하고 입력할수 있다는 신뢰감을 가득 주게 됩니다~!

 

메모리 단계부터 암호화가 되기에 메모리 해킹으로부터도 안전한거죠! 이렇게 수 없이 많이 사용되는암호화 방식에는 공개키(비대칭) 방식과 비밀키(대칭키) 방식으로 나눌 수 있습니다.

 

암호화 방식에는 공개키(비대칭키)와 비밀키(대칭키) 방식이 있다.


1. 공개키, 비밀키에서 사용하는 암호화 키란 뭘까?

처음엔 아주 간단한 사실부터 머리에 넣어볼까요? 이 키라는게 뭔지요. 암호화를 하기 위해선 암호화 대상 데이터가 있을 겁니다. 뭐 여러가지가 있겠지요. 아마도 주요 대상은 여러분의 비밀번호나 계좌번호, 카드번호, 주민번호, 주소, 전화번호이런 것들이 있을 겁니다.

 

공개키, 비밀키에서 사용하는 암호화 키란

그리고 암호화 알고리즘도 꽤나 많이 있지요( 공개키 : RSA, 비밀키 : AES 등... )

더 쉽게 생각해봅시다. 암호 알고리즘에 키값과 데이터를 같이 넣으면 키값에 해당하는 암호화된 데이터가 나온다고요.

f암호 알고리즘( 키값 , 암호화할 대상 데이터 ) = 암호화된 데이터

두단계 더 쉽게 예를 들기 위해 샘플 예를 들어봅시다.

 

1. 암호 알고리즘( '라이aAaAaA', '010-1111-1111' ) = 'kckfjekvcklEEkckfKKldofdkj=='

2. 암호 알고리즘( '라이bBbBbB', '010-1111-1111' ) = 'eeefjekvcklKKkcbfbbldofdbj=='

 

'라이aAaAaA'와 '라이bBbBbB'라는 두가지의 다른 키로 동일한 데이터를 암호화 하더라도 키가 다르기 때문에 다른 암호화된 데이터가 나옵니다. 얼마나 이 키값이 중요한지 알 수 있겠죠? 이 전산에서 키라는 것은 알고리즘에 넣을 키값 우리 눈으로 봤을 때는 문자열 정도로 인식하고 있어도 무리가 없을 것 같습니다. ㅎㅎㅎ

 

키값은 특정 문자열 값인데...

 


2. 비밀키(private key, 대칭키) 방식과 원리

 

비밀키가 뭐냐면...속닥속닥...

비밀키에 대해 얘기해볼까요? 말 그대로 이 비밀키 값을 서로 몰래 나눠갖는 것을 비밀키(대칭키)방식이라고 합니다. 암/복호화 키가 같기에 대칭형 키라고도 부릅니다.

 

이것도 쉽게 예를 들어봅시다. 철수와 영희가 있습니다. 이 둘은 데이트를 할 때 서로 약속을 했습니다. 철수가 영희집 앞으로 가서 야옹 세번을 외치면 나오라고요.

 

철수 영희

 

1. 이 때 철수와 영희가 사전에 한 야옹 세번의 약속이 사전에 키를 나눠갖는 행위가 되고

2. 밤에 철수가 영희네 집앞에서 야옹 세번을 외치는 행위는 사전의 약속(키)를 통해 암호화된 값을 영희에게 전달하는 과정이며

3. 영희는 사전의 약속(키)를 통해 야옹 세번을 나오라는 뜻으로 복호화*를 할수 있게 되는 것입니다.

복호화 : 암호화의 반대말, 원래의 값으로 풀어내다.

이러면 암호화된 야옹 세번의 외침은 다른 사람들에겐 별 의미 없는... 때론 미친놈처럼 보이긴 하겠지만 속뜻은 알수 없겠죠. 비밀키 암호화 방식의 사례가 되는 것입니다.

 

이렇게 사전에 나눠가진 키로 처리하기에 키가 노출이 되는 경우 다른사람들도 풀어낼수가 있기에 비밀키 관리는 특별 주의 대상이며 노출되었다면 키를 바꾸어야 겠죠? 야옹 세번에서 멍멍 두번으로 한다던지요. 철수가 그 동네에서 미친놈이 되어가는 건 더 심해지겠지만...

 

 


3. 공개키 방식과 원리

내 키를 다 알려줄게. 내 키는....

이번엔 공개키 방식에 대해서 알아봅시다. 공개키 방식은 암호화 키와 복호화 키가 다르기에 비대칭형키라고도 부릅니다. 영문으론 public key겠죠? 이 부분은 머리 속에 그냥 넣읍시다. 암호화를 해야할 암호화 키와 풀어낼 수 있는 복호화 키가 따로 있다는 수학적 논리를 근거로 합니다.

 

그렇기 때문에 암호화 키를 만 천하에 공개할 수 있습니다. 어떻게 그럴수 있냐구요. 이런 논리입니다.

 

공개키 공식
아주 큰 소수(비밀키) * 아주 큰 소수(비밀키)**=**합성수(공개키)

 

여기서 아주 큰 소수가 비밀키가 되는건데 합성된 수를 가지고 소인수 분해를 해서 비밀키를 찾아내려면 현재 대부분의 공개키가 2048 bit 이상으로 되어있고 이정도 수치는 컴퓨터로 해독 하려면 수백년이 걸려도 풀수가 없거라 합니다.

 

물론 컴퓨팅 파워가 강해져서 기간이 단축된다면 bit 수를 늘리면 되는 간단한 일입니다. 2,048 → 4,096 과 같이요. 원리로 푸는게 아니니까요.

 

공개키로 잠근 문은 비밀키로만 열수 있다규!!!

이 공개키 방식은 사전에 비밀키를 나눠갖지 않아도 되므로 보안에 더 강력하다 할 수 있고 ( 애초에 비밀은 혼자 알고 있는것이 가장 강력하잖아요. ) 막 뿌릴 수 있으니 다수의 사용자나 시스템을 상대로 한 서비스에 이점을 갖고요. 푸는 키가 따로 있는 만큼 속도가 느리다는게 약점입니다.

 

그래서 공개키 방식으로 비밀키 방식의 비밀키를 처음에만 몰래 주고 속도가 빠른 비밀키방식으로 암호화 처리를 하는 하이브리드 방식을 많이 씁니다.

 

마지막으로 한번 더 요점을 정리해볼까요?

비밀키 방식은 암/복호화 키가 같으며 사전에 몰래 주고 받아놓아야 한다.
공개키 방식은 암/복호화 키가 따로 있고 공개키를 모두에게 나눠주어도 풀 수 있는 건 복호화 키를 가진 나 뿐이다.


4. 실제 공개키, 비밀키 응용 대화 사례

실제 공개키, 비밀키 응용 대화 사례

저는 개발쪽 직군에서 암호화 프로그램들을 몇번 이용해봤고, 공개키나 비밀키 방식의 솔루션들을 둘다 이용해 본것 같네요. 보통 대화는 이런식으로 얘기합니다.

 

"인증서를 쓰나요? (공개키 방식인지 묻는 것)" → 공개키 방식

"자체 등록할까요, 공인인증서로 받을까요? (공인기관에서 받아야 하는지 묻는 것)"

 

"암호화 키값을 드리겠습니다, 또는 주세요 ( 사전에 나눠갖는... ) " → 비밀키 방식

"키값은 'lie*****' 뒤번호는 제 폰번호로 압축해서 메일로 전달해드렸습니다. 처리하신후 즉시 삭제 부탁드립니다.(몰래 나눠 갖는 방식)"

 

이제 암호화 방식에 대한 건 보안이나 IT전공이 아니더라도 관심을 가지고 상식선으로 이해하고 있어도 되지 않나 싶어 포스팅을 해봅니다. 저도 포스팅을 하면서 이런 저런 자료들을 보니 리마인드도 되고 좋네요. 오늘은 공개키와 비밀키 방식에 대해서 정리해봤습니다.


댓글
최근에 올라온 글
최근에 달린 댓글