https
전자서명과 HTTPS 의 역할이 굉장히 헷갈렸다. 둘 다 공개키 암호화를 사용하기 때문이다. 하지만 둘은 사용되는 역할이 다르다.
전자서명은 어떠한 권위 주체가 문서의 진위여부를 ‘서명’ 해주는 것이다. 이 과정에서 ‘공개키 암호화’ 가 쓰인다.
편의상 서명을 희망하는 객체를 C, 서명을 해주는 객체를 S 라고 부르겠다.
C 가 ‘서명을 희망한다’ 는 것은 문서 내용을 MD 혹은 SHA 로 해쉬해서 문서 뒤에 붙여주는 과정을 의미한다.
S 가 ‘서명을 해준다’ 는 것은 S 가 가진 비밀키로 해쉬값을 암호화해서 그 문서 뒤에 붙여주는 과정을 의미한다.
C1 가 ‘서명을 확인한다’ 는 것은 S 가 뿌린 공개키(보통 OS 안에 내장됨)로 암호문을 복호화하고, 문서 내용을 해쉬해서 두 값을 비교하는 것을 의미한다.
HTTPS 는 S와 C 가 통신을 할 때 암호화된 전송을 하게 해주는 SSL 프로토콜 위에서 HTTP 전송을 하는 것을 의미한다. 이 과정에서도 ‘공개키 암호화’ 가 쓰인다. 여기서는 ‘전자서명’ 까지도 쓰인다.
SSL 프로토콜은 클라이언트가 서버의 신원을 확인함과 동시에 클라이언트와 서버간의 통신을 암호화해주는 프로토콜을 의미한다.
편의상 클라이언트를 C 서버를 S 라고 부르겠다
어떻게 클라이언트가 서버의 신원을 확인할 수 있을까?
클라이언트가 서버에 접속을 할 때 서버는 [본인의 공개키, 서버 도메인 정보, CA 정보, CA의 전자서명] 등이 들어있는 SSL 인증서를 건네준다. 그때 클라이언트는 CA 에게 이 인증서를 건네주어 네가 인증한 신뢰할 수 있는 기관이 맞는지를 확인받는다. 인증이 완료되면 그 후로 서버의 공개키를 사용해서 암호화한 request 요청을 보낸다.
TODO) 인증서 내부의 구성
실제로 CA에게 인증서를 건네주지는 않고 CA 가 OS 에 뿌린 공개키로 CA 에게 확인받는 행위를 하는 것이다..! 이걸 전자서명 방식으로 한다.
그리고나서 C 는 세션키를 하나 생성을 해서 아까 받은 인증서 안에 있는 대칭키로 암호화해서 S 에게 알려준다
자 이제는 handshake 과정이 끝났다 그림으로 그려보면 다음과 같다
이렇게 되면 15분에서 1시간정도 세션이 유지되는 동안에는 저렇게 암호화해서 통신한다.
세션이 만료되고 나면 기존 세션키에다가 새로운 랜덤 데이터를 집어넣은 새로운 세션키를 만드는데 이 과정은 암호적으로도 좋고 세션키를 다시 만드는 자원도 얼마 들지 않는다.
'CS' 카테고리의 다른 글
[CS] 라이브러리, Cmake, 자바 소켓 통신 (0) | 2023.09.18 |
---|---|
[CS] machine code 와 byte code 의 차이 (0) | 2023.09.15 |
[CS] call back 이란, 동기식과 비동기식 (0) | 2023.03.14 |
[CS] 데스크톱 가상화란 (0) | 2023.03.07 |
[네트워크] 포트(port) 란 (2) | 2023.03.07 |