[CS]대칭키 vs 공개키(비대칭키)

김피자·2023년 3월 29일
0

CS

목록 보기
18/22

이전에 HTTP 통신 정리하면서 공개키와 대칭키에 대해 조금 정리했었는데 안보니깐 또 까먹었다.
기술 면접에서 PKI가 뭐냐, 모바일 인증서의 신뢰성을 어떻게 확보할 수 있냐는 질문에 네?...??라고 대답해버린 나를 위해 다시 정리하기로 마음먹었다.


인증성 보장

대칭키 vs 공개키(비대칭키)

  • 대칭키 : 암호화 복호화에 사용되는 키가 서로 같다.
  • 공개키 : 암호화 복호화에 사용되는 키가 서로 다르다.

대칭키

대칭키란 어떤 정보를 암호화, 복호화할 때 사용되는 키가 서로 동일(대칭)한 경우를 말한다.

어떤 정보가 대칭키를 통해 암호화 되었다면, 똑같이 키를 갖고 있는 사용자가 아니면 해당 정보를 확인할 수 없다.

따라서 암호화 된 정보를 주고받기 위해서는 송신자, 수신자 모두 같은 키를 가지고 있어야한다.

키를 안전하게 교환하는 것이 대칭키 암호화 방식의 가장 중요한 핵심

자물쇠가 달린 비밀 일기장을 영희를 통해 철수에게 주려는데 열쇠와 일기장을 같이 영희에게 주면 영희가 중간에서 비밀 일기장을 읽을 수 있지않을까?

이런 상황을 방지하기 위해서는 열쇠와 일기장을 다른 경로로 전달해야한다.

이처럼 대칭키 암호화 방식은 키가 없다면 누구도 열어볼 수 없어 안전하지만, 키를 가지고 있다면 누구나 열어볼 수 있다는 것이 함정 (키를 안전하게 전달하는 것이 핵심!)

장점

  • 암호화 방식에 속도가 빠르다.
  • 대용량 데이터 암호화에 적합하다.

단점

  • 키를 교환해야하는 문제가 있다.
  • 사람이 증가할수록 키 관리가 어려워진다.
  • 확장성이 떨어진다.
  • 탈취 걱정

대칭키는 기밀성은 보장하지만 무결성, 인증, 부인방지를 보장하지 않는다.


공개키(비대칭키)

어떤 정보를 암호화, 복호화할 때 사용하는 키가 서로 다른 경우를 말한다.

공개키 방식에는 개인키와 공개키 두 가지가 사용된다.

개인키 : 개인만 알고있는 키
공개키 : 모두가 알고있는 알려진 키

1) 공개키로 정보를 암호화 하는 경우

공개키는 알려진 키로 누구에게나 공개된 키를 의미한다.
어떤 정보를 특정 사용자에게 보낼 때, 해당 사용자의 공개키를 통해 정보를 암호화하여 전송한다.

철수한테 비밀 일기장을 보낼 때 누구나 알 수 있는 철수의 공개키를 통해 일기장을 암호화하여 보낸다. 이 철수의 공개키로 암호된 일기장을 열기 위해서는 철수만 알고있는 개인키로 열어야한다.

철수의 개인키는 철수 자신만 가지고있기 때문에 철수만 열 수 있다.

위에서 말한 대칭키의 단점 중 키 교환에 따른 문제를 해결할 수 있는 방법이다.

2) 개인키로 정보를 암호화한 경우

내 개인키로 일기장을 암호화해 철수에게 일기장을 보냈다.
이 일기장은 내 개인키로 암호화됐기 때문에 내 공개키가 있어야 열어볼 수 있다.
근데 내 공개키는 누구나 알 수 있도록 공개되어있다.
철수는 일기장을 받은 후 공개되어있는 내 공개키를 통해 일기장을 열 수 있다.

Q : 그럼 누구나 공개키로 일기장을 열어볼 수 있는 것 아닌가요?

라고 물어본다면 맞말이다!
보안에 취약한 이 방법을 그럼에도 사용하는 이유는 일기장에 무슨 내용이 써져있냐가 아닌 누가 일기장을 보냈냐에 초점을 둔 방법이기 때문이다.

내가 개인키로 암호화 한 일기장은 내 공개키를 통해서만 열어볼 수 있기 때문에 이 일기장은 내가 보낸게 확실하다는 뜻이 된다.

이러한 기술은 데이터 제공자의 신원이 보장되는 '전자서명'등 공인인증체계의 기본이다.


디지털 인증서 원리

신분증이나 운전면허증 같은 경우에는 실물로 가지고있으니깐 내꺼라는게 확실한데 모바일 신분증이나 인증서의 경우 어떻게 그 인증성을 보장할 수 있을까?

디지털 인증서의 경우 모두가 신뢰할 수 있는 제 3자인 인증기관 CA의 공개키(비대칭키) 암호화가 필요하다.

  1. user B는 CA에게 자신이 B임을 증명하고 자신의 공개 키가
    B의 공개키가 맞음을 인증하는 인증서를 발급한다.
  2. user B는 user A에게 자신의 공개키가 포함된 인증서를 준다.
  3. A는 자신이 신뢰할 수 있는 CA에게 이게 진짜 CA에서 발급한 인증서인지 확인한다.
  4. 맞으면 그 인증서에 포함된 B의 공개키로 데이터를 암호화 해 B에게 전달한다.

이렇게 해서 최종족으로 user B가 자신이 가지고 있는 개인키로 데이터를 복호화한다면, CA가 인증하는 B의~ 공개키에 대응하는 개인키를 가지고 있다는 것으로 현재 통신하고 있는 상대가 user B가 맞다는 것을 인증할 수 있다.


오늘은 간단하게 대칭키와 공개키에 대해 알아보았다.
진짜 공부할 것이 너무 많다는 것을 새삼 또 느꼈다> <


출처
https://velog.io/@gs0351/%EB%8C%80%EC%B9%AD%ED%82%A4-vs-%EA%B3%B5%EA%B0%9C%ED%82%A4%EB%B9%84%EB%8C%80%EC%B9%AD%ED%82%A4
https://universitytomorrow.com/22

profile
제로부터시작하는코딩생활

0개의 댓글