방학 때처럼 한 과목을 파는건 좀 어렵고 틈틈히 시간내서 http 완벽 가이드를 보고 있다. 디지털 인증서 설명이 빈약해서 잘 이해가 안됐는데 찾아봐서 이해한 내용을 정리해보자.
서버와 클라이언트는 비대칭키(주로 RSA)를 이용해서 암호화된 통신을 한다. 비대칭키는 대칭키와 다르게 평문을 인코딩과 디코딩하는데 각각 다른 키를 사용하는 것인데 둘 중 어떤 하나가 개인 키가 되고 다른 하나는 공개키가 된다. 유의해햐할 점은 인코딩(혹은 디코딩)하는데 사용되는 키가 개인 키가 아니라 두 키 중 어떤 하나가 개인키이고 나머지 하나는 공개키라는 것이다.
예를 들어 공개키가 인코딩하는데 사용되는 경우를 보자. 클라이언트는 서버의 공개키로 요청을 인코딩(암호화)한다. 인코딩 키가 공개키면 디코딩 키는 개인키, 즉 서버만 가지고 있으므로 디코딩은 서버만 할 수 있다. 반대도 마찬가지로 서버는 클라이언트의 공개키로 응답을 인코딩하고 클라이언트는 자신의 개인 키로 디코딩한다.
근데 아무리 암호화를 잘한다고 한들 나(클라이언트)와 통신하는 서버가 진짜인지 확신할 수 있을까? 해커가 서버로 위장해서 똑같이 암호화 알고리즘을 적용해서 통신하면 나는 그냥 비밀 통신으로 정보를 넘겨주는 꼴이된다. 암호화는 도청을 방지할 수는 있지만 상대방이 위장하는 것은 막지 못한다. 그래서 인증서가 필요하다.
내가 통신하고자 하는 서버의 공개키를 받으면 이게 진짜 그 서버의 공개키인지 제 3의 기관을 통해서 확인해야 한다. 이 기관을 CA라고 한다. 서버는 공개키를 인증기관에 '이거 내 공개키야'라고 등록을 한다. 그러면 인증기관은 자신의 "개인키"로 서버 공개키를 인코딩한다.(아까 서버와 클라이언트 통신 간에는 공개키로 인코딩했던것과 비교해보자.) 클라이언트(브라우저)는 인증기관의 공개키로(일반적으로 브라우저는 인증기관의 공개키를 미리 알고 있다.) 서버의 공개키를 디코딩한다. 디코딩이 잘 되면 인증기관이 인코딩한 공개키이고, 인증기관이 인코딩했다는 것은 인증기관에 등록된 공개키라는 것이다. 즉 내가 통신하고자하는 서버가 진짜 서버다. 만약 디코딩이 안되면 인증기관이 아닌 다른 누군가가 인코딩했다는 것이고 그 공개키는 믿을 수 없다.
헷갈릴까봐 덧붙이자면 공개키와 알고리즘의 소스코드도 알아도 개인키를 알아낼 수 없는 것이 비대칭 공개키 알고리즘이다.
참고 : sungjk.github.io/2016/09/30/Security.html
'컴퓨터 네트워크' 카테고리의 다른 글
Base64는 왜 쓰는 것일까? (1) | 2021.02.12 |
---|---|
HTTP API - PATCH는 멱등한가? (0) | 2021.01.11 |
네트워크 마지막 강의 - Wireless and Mobile (0) | 2020.08.16 |
네트워크 20강 - 링크 계층 (0) | 2020.08.16 |
네트워크 19강 - 라우팅과 브로드캐스팅 (0) | 2020.08.16 |