본문 바로가기

IT기술전반

https 관련 (대칭키와 비대칭키)

https의 중요한 기능 두가지

1. 서버와 클라이언트가 주고받는 데이터를 누가 훔쳐보더라도 알아보지 못하게 암호화하여 교환

2. 이 서버가 믿을 수 있는 서버인지를 확인해주는 기능(이것은 인증기관 CA를 통해 이루어짐)

 

대칭키는 서버와 클라이언트가 동일한 키를 갖는 것이고, 비대칭키(일명 공개키) 방식은 서버는 개인키를 갖고 클라이언트에게 공개키를 주는 방식이다.

 

서버와 클라이언트가 대칭키를 가지고 데이터를 주고받으면 중간에 누가 가로채더라도 내용을 알아볼수 없다. 문제는 양측이 어떻게 동일한 대칭키를 가질수 있느냐이다. 대칭키를 나눠가지다가 누군가 탈취할 수 있기 때문이다.


비대칭키로 주고받으면 안전하겠지만 모든 데이터를 비대칭키로 주고받는 것은 시스템에 많은 부하를 주게된다.

 

결론은 비대칭키 방식을 이용해 대칭키를 서로 가지게 된 후, 그 다음부터는 대칭키로 데이터를 주고받게 된다.


비대칭키 방식으로 서버/클라이언트가 같은 대칭키(일명 세션키)를 가지게 되면 그 다음부터 모든 데이터는 대칭키로 처리한다.

서버/클라이언트가 같은 값을 가지는 대칭키가 세션키라면 세션에 따라 만들어지는 것이므로, 항상 값이 바뀌는 것일듯 하다.

 

처리흐름

브라우저가 서버접속시 handshake 과정을 거치는데, 먼저 브라우저가 임의의 데이터를 보낸다

그다음 서버는 응답으로 임의의 데이터와 SSL인증서를 보내준다. 근데 이 SSL인증서는 CA(인증기관)에서 발급해준 것이며,

CA의 개인키로 암호화된 상태이다. 그리고 브라우저에는 이 CA목록 및 CA의 공개키를 가지고 있으며 브라우저에 내장된 CA의 공개키로 암호화된 인증서를 복호화한다. 인증서 복호화에 성공했다는 것은 -> CA의 공개키로 풀렸다는 것이며 그것은 이 인증서가 CA의 개인키로 암호화된 것이며, 즉 CA가 발급한 것이 맞으므로 이 사이트는 신뢰할수 있는 사이트란 것이다. 실제로 브라우저에 신뢰할수 있다는 글자가 나오거나, 주소글자가 녹색으로 바뀌어서 신뢰할수 있다 or 안전하다라고 알려준다.

 

이 SSL인증서 내용을 보면(브라우저에서 볼수 있다) 암호화 방식 및 서버(네이버등)의 공개키가 들어있다. 이 공개키를 가지고 브라우저는 대칭키를 만들어 공개키로 암호화시킨뒤 서버전송, 서버는 개인키로 이걸 풀면 -> 서버와 클라이언트는 동일한 대칭키를 가지게 되고, 이걸로 데이터를 주고받는다.

 

웹서버를 운영하는 입장에서는 아래와 같은 순서가 된다.

1. 내 서버의 개인키/공개키를 생성한다.

2. CA로부터 내 서버의 SSL인증서를 발급받는다. 이 SSL인증서 내부에는 서버의 공개키가 들어있고, CA의 개인키로 암호화되어있다.

3. 이 인증서를 저장해두고, ssl 통신을 설정해둔다.

4. 브라우저가 접속하면 이 인증서를 전송해준다.

5. 브라우저는 받은 인증서를 CA의 공개키로 복호화한다. 브라우저는 공인된 CA들의 공개키를 내부에 보관하고 있다.

6. 인증서 복호화에 성공했다면, 해당 인증서는 CA가 발급한 것이 증명된다. 또한 인증서를 보내준 웹서버도 CA가 인증한 서버임이 증명된다.

7. 브라우저는 복호화한 인증서로부터 서버의 공개키를 획득한다.

8. 브라우저는 pre master secret키를 만들고, 서버의 공개키로 암호화하고 서버로 전송한다.

9. 서버는 pre master secret키를 개인키로 복호화한다. 이것을 가지고 master secret값 생성, 그리고 세션키를 만든다.

10. 서버의 개인키/브라우저 공개키로 이 세션키를 공유하면 이것이 바로 대칭키가 된다. 이 키는 세션종료시 폐기된다.

참고한 블로그 :https://curryyou.tistory.com/207