Skip to content
TUWLAB.com
모든 게시물에 대하여 '링크'
방식의 퍼가기만 허용합니다.
한양대학교 전자통신컴퓨터공학부
바라미
  • 267
  • 2698188
DNS Powered by DNSEver.com
Security

SSL Handshake 과정

Posted 2016. 06. 21 Updated 2016. 06. 21 Views 7613 Replies 0

이 글에서는 네트워크 계층의 TCP Layer와 Application Layer 사이에서 보안 통신 기능을 제공하는 Secure Socket Layer (SSL)의 통신 시작 단계에서 Handshake 과정을 기술합니다.

※ 기술 과정에서 일부 필드는 생략하였습니다. 이 글에서는 Authentication과 Key Agreement과정을 중심으로 주요 필드들과 통신만 기술합니다.


0. [Client ↔ Server] TCP 3-Way Handshake

당연한 이야기지만, TCP위에서 동작하는 SSL은 TCP 연결이 성립된 상태에서 동작합니다. 따라서, SSL Handshake를 진행하기 위해서는 TCP 3-Way Handshake를 통해 TCP 연결이 수립(Established)되어 있어야 합니다.

PS. 시험에서 SSL Handshake과정을 쓰라고 했을 때 이 과정을 빼먹으면 감정당할지도 모릅니다.ㅎㅎ


1. [Client → Server] Client Hello

  • 지원하는 Cipher Spec(암호화 방법) 목록
  • Client Nonce

Nonce값은 일종의 난수(Random Number)이며, SSL 연결을 시도할 때마다 달라지게 됩니다. 이 Nonce를 사용하는 이유는 통신 내용을 통째로 덤프떠서 재전송하는 Replay Attack을 방지하기 위함입니다.

이 외에 SSL버전, 세션 식별자와 같은 정보들이 부가적으로 전송됩니다.


2. [Server → Client] Server Hello

  • 선택한 Cipher Spec
  • Server Certificate
  • Server Nonce

서버에서는 Client가 보낸 Cipher Spec중에서 하나를 선택하고 이를 Client에 알려줍니다. 보통 가장 높은 보안 수준을 제공하는 Cipher Spec을 선택하며, 추후 이루어질 보안 통신에서 이 방법으로 암호화를 하게 됩니다.

Certificate을 수신한 Client는 공인인증 기관(CA)의 Public Key로 이를 해독하여 Server의 Public Key를 획득합니다. TTP(Trusted Third Party)인 CA가 Certificate이 누구의 소유인지 보증하므로, 이 과정에서 Server는 Client에게 자신을 인증할 수 있습니다. 즉, Client는 자신이 최초에 의도했던 Server와 통신하고 있음을 이 과정에서 확인할 수 있게 되는 것입니다.


[Optional] 2.과 3.사이에 옵션으로, Client가 Server에게 인증하기 위한 Client Certificate전송 과정이 포함될 수 있습니다. ID와 패스워드를 이용한 로그인이 아닌 SSL 인증서를 통한 로그인을 지원하는 웹 사이트에 로그인하기 위해서는 브라우저에 인증서를 등록해 두어야 하는데, 이 때 이 등록해둔 SSL 인증서가 Server로 전송되는 것입니다.


3. [Client → Server] Client Key Exchange

  • Encrypted Pre-master secret (PMS)

Client에서 일종의 난수 값인 Pre-master secret(PMS)를 생성하고, 이를 Server의 Publiuc Key로 암호화하여 Server로 전송합니다.

이후 Client와 Server는 {PMS, Client Nonce, Server Nonce} 이 세 값을 바탕으로 각각 Encryption KeyMAC Key를 계산합니다. Encryption Key는 추후 사용될 암호화 통신에서 사용할 암호화 알고리즘에서 사용될 Key이고, MAC(Message Authentication Code) Key는 각 SSL Message Block에서 Message의 HMAC값 계산에 사용될 Key입니다.

참고적으로, SSL의 보안 통신에서 사용되는 Key는 대칭키입니다. 즉, Client 및 Server에서 각각 계산해서 생성한 Key들은 양측이 같은 값을 갖게 됩니다.


--- 보안 통신을 위한 Key 생성이 완료되었으므로, 여기서부터 암호화된 보안 통신이 시작됩니다. ---


4. [Client ↔ Server] Handshake Integrity Check

  • 그 동안 전송했던 모든 Message들에 대한 MAC값

이 단계부터 보안 통신이 가능하므로 본격적으로 Data를 교환할 수 있지만, 그 이전이 해야 할 일이 있습니다. 바로 그간 Handshake과정에서 주고받았던 Message의 무결성(Integrity)를 검증하는 것입니다.

즉, 비록 SSL Handshake가 정상적으로 이루어졌지만, 중간에 혹시 있을지 모를 공격자가 Handshake Message를 변조했을 가능성이 존재합니다. 예를 들어, Client가 지원 Cipher Spec 목록을 보낼 때 공격자가 이를 가로채서 높은 암호화 수준의 Spec을 제거한다거나, Server가 선택한 Spec을 낮은 암호화 수준의 Spec으로 변조하는 공격이 가능합니다. 이는 PMS가 교환되기 이전까지의 통신은 모두 암호화가 되지 않은 상태로 이루어지기 때문에 발생하는 문제입니다.

따라서 암호화 통신이 가능해진 첫 시점에 Client와 Server는 각각 그 동안 자신이 전송했던 모든 Message들의 MAC값을 계산해서 상대측에게 전송합니다. 상대방으로부터 받은 MAC값과 그 동안 자신이 받았던 Message들로부터 MAC값을 다시 계산한 값이 일치하는지 여부를 검사하여 Handshake Message들의 무결성을 체크할 수 있습니다.

이 Handshake과정의 무결성 체크까지 무사히 통과 하면 이제 비로소 본격적으로 보안 통신을 통한 Data 교환을 시작할 수 있게 됩니다.


서비스 선택
이용중인 SNS 버튼을 클릭하여 로그인 해주세요.
SNS 계정을 통해 로그인하면 회원가입 없이 댓글을 남길 수 있습니다.
댓글
?
Powered by SocialXE

List of Articles
번호 분류 제목 글쓴이 최근 수정일 조회 수
177 일반 [CMake 튜토리얼] 2. CMakeLists.txt 주요 명령과 변수 정리 1 file TUW 2019.10.02 187249
176 일반 [CMake 튜토리얼] 1. CMake 소개와 예제, 내부 동작 원리 file TUW 2018.06.13 173522
175 일반 [Make 튜토리얼] Makefile 예제와 작성 방법 및 기본 패턴 2 file TUW 2018.11.21 244081
174 일반 [적외선 통신] IR 리모컨 신호 분석 file TUW 2021.12.28 22659
173 일반 [적외선 통신] IR 송수신 소자, IR 송수신 회로 file TUW 2021.12.28 25397
172 일반 GitLab 코드리뷰 페이지 탭 크기(Tab Size) 4칸으로 바꾸기 file TUW 2021.12.28 4327
171 일반 Linux에서 Code Composer Studio (CCS) - Ti ARM 개발환경 구축하기 file TUW 2017.06.02 5190
170 Nginx Nginx에서 자동 Redirection(301 Permanently moved) 설정하기 TUW 2016.06.25 16987
169 Nginx Nginx에서 SSL(HTTPS) 보안 서버 설정하기 (+약간의 이론) TUW 2016.06.25 12412
» Security SSL Handshake 과정 TUW 2016.06.21 7613
167 Linux [Ubuntu] 원격 Shell에서 로그인 사용자 디스플레이에 GUI 프로그램 실행하기 TUW 2016.03.06 10917
166 Linux Root권한 없이 Wireshark 사용하기 file TUW 2017.06.02 110334
165 Linux fstab과 sshfs fuse를 활용한 원격 디렉토리 자동 마운트하기 TUW 2022.04.28 21039
164 Python [Django Tutorial] 9. Production - uWSGI를 통해 Nginx 웹 서버와 연동하기 1 TUW 2018.06.17 11287
163 Python [Django Tutorial] 8. Production - setting.py설정, Static파일 모으기 TUW 2017.06.16 5429
162 Python [Django Tutorial] 7. 백엔드 콘솔에 Custom Command 추가하기 file TUW 2017.06.16 4123
목록
Board Pagination Prev 1 2 3 4 5 6 7 ... 13 Next
/ 13

Powered by Xpress Engine / Designed by Sketchbook

sketchbook5, 스케치북5

sketchbook5, 스케치북5