Closed minaver closed 1 year ago
공개키 - 개인키 관계가 무조건 공개키로 암호화 -> 개인키로 복호화 과정이 아닌 반대 방향으로 개인키로 암호화 -> 공개키로 복호화 되는 경우도 있다고 한다.
이 경우는 기존 이해한 방식대로 개인키를 가져야지만 공개키로 암호화된 데이터를 복호화하여 사용할 수 있어 데이터를 보안하여 전달할 수 있는 방법이다.
이 경우는 공개키로 복호화가 가능하니 공개키를 가진 모든 사용자가 데이터를 복호화 할 수 있는 경우이다. 처음에 들었을 때는 읭? 그러면 키가 무슨 소용이고 암호화가 무슨 소용이지? 이라는 생각이 먼저 든다. 설명을 찾아보니 이 방법을 사용하는 이유는 데이터 보완이 주 목적이 아닌 데이터 제공자의 신원을 보장하기 위해 사용하는 방식이라고 한다. 암호화된 데이터가 공개키로 복호화된다는 건 공개키와 쌍을 이루는 개인키에 의해 암호화 되었음을 의미하고 이는 데이터의 신원 확인이 보장된다는 것이다.
즉, 사용자가 검증된 열쇠(공개키)를 들고 있고 데이터들이 비밀 상자(개인키로 암호화)안에 들어있을 때 해당 비밀 상자가 사용자들이 들고 있는 검증된 열쇠로 열린다면 '아 이 검증된 열쇠를 뿌린 사용자가 만든 데이터가 맞구나!' 라고 확신할 수 있다는 이야기이다.
즉 브라우저가 CA 기업의 SSL 인증서를 CA 기업의 공개키로 복호화하는 것은 해당 SSL 인증서가 CA 기업이 정상적으로 발급한 인증서임을 인증하는 과정인 것이다.
HTTPS 인증 과정에 대해 다시 정리해보자 HTTPS 인증 과정의 목적은 서버 - 클라이언트 사이에 주고받을 데이터의 암호화 알고리즘을 결정, 동일한 대칭키를 공유하는 것이다.
대칭키를 pure하게 네트워크를 사용하여 공유하면 탈취의 위험이 굉장히 크다. 그래서 이 대칭키를 암호화하여 서버와 클라이언트만 알 수 있게끔 공유한다.
-- TCP Handshake 시작 --
- 3-way handshake
-- SSL Handshake 시작 --
(Client -> Server) 2. Client Hello (Server -> Client) 3. Server Hello, Certificate, Server Key Exchange, Server Hello Done (Client -> Server) 4. Client Key Exchange, Change Ciper Spec (Server -> Client) 5. Server / Client SSL Handshake Finished
-- SSL Handshake 종료 --
HTTPS 가 TCP 기반의 프로토콜이기 때문에 SSL Handshake 에 앞서 연결을 생성하기 위한 과정이다.
Client Hello
클라이언트에서 통신하고 싶은 서버로 연결을 시도하는 패킷을 전송한다.
Server Hello
Client Hello
에 대해 서버가 응답 패킷을 보낸다.
Certificate
, Server Key Exchange
, Server Hello Done
Certificate
: Server 의 SSL 인증서 내용을 전달
Server Key Exchange
: Certificate 내의 SSL 인증서에 서버의 공개키(public key)가 없는 경우, 서버가 직접 서버의 공개키를 전달
Server Hello Done
: 서버가 행동을 마쳤다는 의미이다.
Client Key Exchange
, Change Ciper Spec
Client Key Exchange
: Certificate
나 Server Key Exchange
에서 확보한 서버의 공개키로 통신할 데이터를 암호화할 대칭키를 암호화한다. (서버에게 외부 탈취없이 전달하기 위해!)
Change Ciper Spec
: SSL Handshake 의 완료를 알림.
서버는 클라이언트가 전달한 암호화된 대칭키(비밀키)를 받았다. 이 키는 서버의 공개키로 암호화되었으니, 서버의 비밀키로 복호화해서 얻을 수 있다. 이로서 클라이언트와 서버가 외부의 탈취없이 동일한 대칭키를 공유할 수 있게 됐다.
서버와 클라이언트가 통신할때 합의해야 하는 알고리즘들과 운용 방식을 정리한 정보
SSL/TLS_(키교환 알고리즘)_(인증 알고리즘)_WITH_(대칭 암호 알고리즘)_(블록 암호 운용 방식)_(해시 알고리즘)
이슈
HTTPS 프로토콜을 살펴보던중
공개키로 암호화된 데이터는 개인키(비밀키)가 있어야 복호화 할 수 있는 것으로 이해했는데 해당 과정에서는 CA 기업의 공개키로 암호화된 기업의 공개키를 CA 기업의 공개키로 복호화하는 것처럼 설명하였다. HTTPS 통신 중 클라이언트가 CA 기업의 암호를 푸는 방법은 무엇일까?