[암호화] 대칭키(비공개키)와 비대칭키(공개키) 란 ?

반응형

저번 포스팅에서 "암호화"에 대해 알아보았습니다.

암호화에는 단방향 암호화, 양방향 암호화 두 종류가 있었는데요.

이번 포스팅에선  양방향 암호화인 대칭키(비공개키)와 비대칭키(공개키)에 대해 설명해 보도록하겠습니다.

 

암호화, 복호화란 무엇인지에 대해 궁금하신 분들은 아래 포스팅을 참고하시면 됩니다.

 

암호화, 복호화란 ? 쉽게 알아보자.

암호란 ? 평문을 암호문으로 변환하거나 암호문을 평문으로 변환하는 기술을 의미합니다. 평문 해독 가능한 형태의 텍스트 ( 보고 알아볼 수 있다. ) "12345" , "안녕하세요", "반갑습니다" 암호문

hstory0208.tistory.com

 


대칭키(비공개키)

암복호화에 사용하는 키가 동일한 암호화 방식으로 공통키라고도 합니다.

송수신자는 서로 공유된 대칭키를 가지고 통신하게 됩니다.

 

예를 들어
내 컴퓨터와 다른 서버에 동일한 키가 있다면
서버에 로그인할 때 실어보내는 비밀번호를 동일한 키로 암호화하고
서버에서는 동일한 키로 복호화해 인식합니다.

 

대칭키의 특징

암복호화서로 동일한 키가 사용되는 암호화 방식. 그래서 키를 비공개합니다.

    • 대표 알고리즘  : DES, 3DES, AES, SEED, ARIA 등

 

장점

비대칭키(공개키) 암호화 방식에 비해 암호화/복호화가 비교적 덜 복잡한 연산으로 이뤄져 속도가 빠릅니다.

 

단점

키를 교환해야한다는 문제 (키 배송 문제)가 존재해 송신 측에서 수신측에 암호 키를 전달하는 과정에서 노출우려와 키가 탈취될 수 있는 문제가 있습니다.

 

이러한 키 배송 문제를 해결하기 위한 방법으로 다음과 같은 방법들이 있습니다.

  • 키의 사전 공유에 의한 해결
  • 키 배포센터에 의한 해결
  • Diffie-Hellman 키 교환에 의한 해결
  • 공개키 암호에 의한 해결

비대칭키(공개키)

암복호화에 사용하는 키가 서로 다른 암호화 방식

따라서 비대칭키 암호화 에서는 송수신자 모두 한쌍의 키(개인키, 공개키)를 갖고있게 됩니다.

  • 공개키 = 모든 사람이 접근 가능한 키
  • 개인키(비밀키) = 각 사용자만이 가지고 있는 키

 

비대칭키의 암호화 방식

공개키를 통해서 암호화를 하고 비밀키를 통해서 복호화를 합니다.
공개키는 공개해도 상관없으니 키 관리에 어려움이 없으나, 속도가 느리다.

 

 

예를 들어, A가 B에게 데이터를 보낸다고 할 때,

A는 B의 공개키로 암호화한 데이터를 보내고 B는 본인의 개인키로 해당 암호화된 데이터를 복호화해서 보기 때문에

암호화된 데이터는 B의 공개키에 대응되는 개인키를 갖고 있는 B만이 볼 수 있게 되는 것 입니다.

1. 초기 설정 단계

A와 B 각각 자신의 공개키/개인키 쌍을 생성 후, 서로의 공개키를 교환

각자 자신의 개인키는 안전하게 보관

 

2. A가 B에 요청하는 단계

A는 보내고 싶은 요청 메시지를 B의 공개키로 암호화해 암호화된 요청을 B에게 전송.

B는 자신의 개인키로 요청 메시지를 복호화하여 확인.

 

3. B가 A에게 응답하는 단계

B는 응답 메시지를 A의 공개키로 암호화해 암호화된 응답을 A에게 전송.

A는 자신의 개인키로 응답 메시지를 복호화하여 확인.

 

이렇게 각자 상대방의 공개키로 암호화해 요청을 전송하고 수신자는 자신만의 개인키로 복호화하는 과정이 이뤄집니다.

만약 해커가 B의 공개키를 탈취한다 해도, B의 개인키로만 복호화가 가능하기 때문에 안전하지만

복잡한 암호화/복호화 연산이 이뤄지기 때문에 속도가 느리다는 단점이 있습니다.

 

장점

개인키로만 복호화가 가능하기 때문에, 공개키가 교환 과정에서 탈취당해도 안전합니다.

 

단점

대칭키 비대칭키 모두 암/복호화가 필요하지만 비대칭키는 2개의 키를 사용하며, 더 복잡한 연산이 필요해 속도가 느립니다.

 

비대칭키와 대칭키를 혼합한 하이브리드 방식

속도 문제 해결과 키 교환의 안전성을 보장하기 위해 HTTPS 같은 통신에서는 다음과 같은 하이브리드 방식을 사용합니다.

  1. 처음엔 클라이언트와 서버가 비대칭키 암호화 방식으로 키를 교환하고 대칭키를 암호화하여 전달.
  2. 서버는 개인키로 암호화된 대칭키를 얻음
  3. 대칭키를 사용하여 통신

참고자료
https://www.uname.in/129