대칭키와 비대칭키는 무슨 차이가 있을까?

김민재·2021년 12월 20일
0
post-thumbnail
post-custom-banner

*🔐Study Keyword :

✅ 대칭키와 비대칭키는 무엇이고 어떤 차이가 있을까?

HTTPS의 보안 기능이 구현되는 원리

  • 해당 원리를 알기 위해선 1>대칭키와 2>비대칭 키의 개념을 알아야한다.
  • 전쟁에서 아군에게 편지로 메세지를 보낼 때 중간에 편지를 탈취해도 알아볼 수 없도록 하려면 메시지의 내용을 암호화 해야 암호화 된 메세지를 아군만이 읽을 수 있다.

이처럼 이러한 방식들 중 하나가 이전 까지 사용되어왔던 1> 대칭키
방식으로 메시지를 보내는 쪽과 메시지를 받는 쪽이 메시지를 암호화하고 이를 다시 메시지로 바꿀 때, 복호화 시 같은 방식을 공유하는 것을 의미한다.

1. 대칭키(Symmetric Key)

WHAT IS❓

  • 대칭키? 암호화와 복호화에 같은 암호키(대칭키)를 사용하는 알고리즘을 의미한다.
  • 장점, 동일한 키를 주고받기 때문에, 매우 빠르다.

1> 유저의 컴퓨터와 네이버 서버에 동일한 키가 있다면 대칭 즉, 양쪽이 똑같다.
2> 유저가 로그인을 할때 실어 보내는 비밀번호를 동일한 키로 암호화한다.
3> 네이버에서는 마찬가지로 이를 복호화해서 인식한다.

대칭키의 한계?

  • 단점, 대칭키 전달과정에서 해킹 위험에 노출
  • 동일한 키를 양쪽이 공유하기 위해서는 결국 한번은 한쪽에서 다른쪽으로 해당 키를 전송해야 하기에 이 과정에서 중간에 누군가 키를 훔쳐 본다면 문제가 발생한다.
  • 이를 보완하여 등장한 방식이 비대칭 키 또는 공개 키라고 불리는 시스템이다.

2. 비대칭키(Public Key)

비대칭 키에는 2개의 키가 사용되는데 A키와 B키는 한 쌍이지만 서로 다르기 때문에 비대칭키라 부른다.

  • 비대칭키란? 암호화와 복호화에 사용하는 암호키를 분리한 알고리즘이다.
  • 자신이 가지고 있는 고유한 암호키(비밀키)로만 복호화할 수 있는 암호키(공개키)를 대중에 공개한다.
  • 대칭키 시스템에서는 어떤 키로 암호화를 하면 같은 키로 복호화를 할 수 있다.
  • 하지만 비대칭키 시스템에선 A키로 암호화를 하면 오직 B키로 만 복호화를 할 수 있고 반대로 B키로 암호화를 하면 A키로 만 풀 수 있다.

비대칭키로 해결할 수 있는 보안문제

1. 해킹 문제 해결 방식

  • 네이버 서버는 A,B 키들 중 하나 만을 비밀로 보관, 이것을 개인키라 부르고 다른 하나의 키는 누구나 볼 수 있도록 대중들에게 공개한다.
  • 사용자는 공개키로 비밀번호를 암호화 해서 네이버에 보낸다.
  • 이때 누군가 가로채도 같은 공개 키로는 이 암호문을 풀어낼 수가 없으며 이것을 볼 수 있는 건 오직 개인키를 가진 네이버 뿐이다.
    => 따라서 이러한 원리로 개인 정보들을 안심하고 사이트에 보낼 수 있게된다.

2. 사이트 신뢰 문제 해결 방식

  • 네이버 서버에서 유저에게 보내는 정보들은 일부가 네이버의 개인키로 암호가 되어 있다.
  • 유저가 네이버에 공개키로 풀어서 알아볼 수 있는 건 네이버의 개인 키로 암호화된 정보들 뿐이므로 외부 피싱 사이트에서 온 정보들은 네이버의 공개키로 풀리지 않기 때문에 네이버의 공개키로 열어보면 오류가 발생한다.
    => 따라서 신뢰할 수 있는 기관에서 우리에게 네이버 공개키만 검증해 준다면 그것을 기준으로 안전하게 네이버를 이용할 수 있다

HTTPS가 공개키와 대칭키를 활용해 구현되는 과정

  • 네이버가 우리에게 뿌린 공개키가 정품인지를 확인할 수 있어야한다.
  • 이러한 과정을 인증해주는 공인된 민간 기업을 Certificate Authority, CA라고 부른다.
    EX> 브라우저, 크롬 등 프로그램에는 CA들의 목록이 내장

브라우저에서 네이버에 접속할 때 거치는 일련의 과정들

  1. 클라이언트(브라우저)는 서버(네이버)를 신뢰하지 못하기 때문에 일종의 탐색 과정을 거치게 되고 이를 handshake, 악수라 지칭한다.
  2. 클라이언트는 어떤 랜덤한 데이터를 생생해서 서버에 보낸다.
  3. 그것을 받은 서버는 답변으로 마찬가지로 서버 측에서 생성한 무작위 데이터와 해당 서버에 인증서를 실어서 보내는데 이러한 과정이 클라와 서버는 핸드셰이킹 통신 과정이다.
  4. 클라이언트는 서버로 부터 받은 인증서가 진짜인지 브라우저에 내장된 CA들의 정보를 통해 확인하는데 이떄 비대칭 시스템을 사용한다.
  5. CA에 인증을 받은 인증서들은 해당 CA의 개인키로 암호화가 되어있기에 때문에 인증서가 진짜라면 브라우저에 저장된 그 CA에 공개키로 복호화를 할 수 있다.
  • 공개키로 복호화 될 수 있는 인증서를 발급할 수 있는 건 그에 대응하는 개인 키를 가진 CA뿐이다.
  • 만약 CA 리스트 중에 인증서가 해당하는 것이 없다면 브라우저의 주소창에 다음과 같은 표시가 뜬다.
  1. 성공적으로 복호화된 인증서에는 서버의 공개키가 포함되어 있는데 이때 주고 받은 데이터들은 대칭키 방식과 비대칭 키 방식이 혼합되어 사용된다.

대칭 키 방식과 비대칭 키 방식을 혼합하여 사용하는 이유?

  • 비대칭 키 방식으로 메시지를 암호화 및 복호화하는 건 대칭키로 할 때 보다 컴퓨터에 훨씬 큰 부담을 준다.
  • 따라서 사이트를 이용할 때 주고받을 다량의 데이터를 비대칭 치로 일일이 암호화, 복호화하는건 무리가 있다.

대칭키와 비대칭키 혼합 방식

=> 1. 데이터를 대칭키로 암호화를 하고 2. 그 대칭 키를 공유할 때 비대칭 키를 사용한다.

  • 클라이언트가 악수할 때 사용하던 무작위 데이터를 혼합해서 임시 키를 만들고 임시 키는 서버의 공개키로 암호화하여 서버로 보낸다.
  • 이후 양쪽에서 일련의 과정을 거쳐 동일한 키를 만들면 해당 서버와 클라이언트만 가지고 있는 대칭키를 갖게된다.

*💡conclusion

대칭키를 주고받을 때만 공개키 암호화 방식을 사용하고 이후에는 계속 대칭키 암호화 방식으로 통신한다.

#📑Study Source

profile
자기 신뢰의 힘을 믿고 실천하는 개발자가 되고자합니다.
post-custom-banner

0개의 댓글