티스토리 뷰

암호학

SSL

삼전동해커 2020. 10. 15. 13:25

SSL(Secure Socket Layer)

개인정보가 오고 가는 네트워크 구간은 스니핑에 의해 정보가 노출될 수 있다. 이럴 땐 보안서버를 이용해 패킷을 안전하게 암호화 해야한다. 

보안서버 구축은 SSL이나 SSO를 통해 구현할 수 있다.


SSL이란

전송계층(4계층)에서 동작하며 netscape사에서 개발한 서버와 클라이언트의 안전한 통신을 위해 개발되었다.

RSA 공개키 알고리즘, x.509 인증서 지원, 443번 포트를 사용한다.

전송계층 ~ 애플리케이션 계층에서 동작한다. 기밀성, 무결성, 인증의 3가지 보안 서비스를 제공한다.


SSL의 handshaking 과정

먼저 브라우저는 서버와 443번 포트로 3way handshake를 진행해 syn,syn ack,ack로 연결한다.


다음으로

ClientHello -> 

ServerHello/Certificate/ServerHelloDone ->

Certificate/ClientKeyExchange ->

ChangeCipherSpec/Finished


과정으로 진행한다.


1.암호화 알고리즘(Cipher Suite) 결정

2.데이터를 암호화할 대칭키 전달


위 두가지가 SSL handshake의 주 목적이다.


ClientHello

상호간 사용할 암호화 알고리즘을 선택하는 단계이다.

클라이언트가 서버에게 다음을 포함하는 ClientHello를 전송한다.

1.ssl 프로토콜 버전

2.세션 ID

3.Cipher Suite 목록

4.랜덤 바이트(재생 공격 방지용)


ServerHello

ClientHello에 대한 응답을 보낸다.

다음을 포함해 전송한다.

1.선택한 SSL 프로토콜 버전

2.세션 ID

3.cipher suite 목록 중 선택한 알고리즘

4.랜덤 바이트(재생 공격 방지용)


2개의 랜덤 바이트를 통해서 키를 생성할 수 있다.


Certificate

서버의 무결성을 증명하기위해 x.509 인증서를 client에게 전달하는 과정.

인증서 내부에는 server가 발행한 공개키가 있다.

client는 이 공개키를 이용해 데이터 암호화에 사용할 대칭키를 생성한다.


ServerKeyExchange/ServerHello Done

Certificate단계에서 인증서에 공개키를 포함하지 않을 경우 공개키를 전달하는 단계.


Certificate/ClientKeyExchange

client의 certificate는 서버가 인증을 요구할 경우 클라이언트를 인증하는 인증서 체인을 보낸다.

만약 요청이 있는데 인증을 하지 못할 경우 Alert 프로토콜이 전송된다.


certificate후 client는 서버의 공개키를 이용해 생성한 대칭키를 전달한다.

RSA를 사용했을 경우에는 대칭키를 전달하고, DH의 경우에는 대칭키를 생성할 재료를 교환한다.


changeCipherSpec/Finished

교환할 정보를 모두 교환한 후, 준비됐음을 알린다.


SSL 구성요소

1.changecipherspec protocol

2.alert protocol

3.record protocol


changecipherspec 프로토콜은  암호 알고리즘,키 교환 알고리즘,mac 암호화,hash 알고리즘을 서버와 클라이언트에게 알려주는 프로토콜이다.


alert 프로토콜은 handshaking 도중 client나 server의 오류로 비정상적인 동작이 발생할 경우 프로토콜 내부의 첫번째 바이트 level 필드를 통해 오류가 발생했음을 알려준다.

필드 값이 1인 경우 : warning의 의미로 통신의 중단은 없음.

필드 값이 2인 경우 : fatal의 의미로 서버와 클라이언트의 통신이 중단.


두번째 바이트는 이유를 설명해준다.


record 프로토콜은 상위 계층에서 선택한 암호 알고리즘, mac 암호화,hash 알고리즘을 이용해 데이터를 암호화 하고 생성된 암호문을 블록으로 나누고 압축해 mac을 붙여 송신하고, 수신받은 데이터를 복호화하여 상위 계층에 전달한다.



OpenSSL

보안 서버를 구축하기 위해 서버 측에서 openssl을 설치하고 개인키와 인증서를 생성해야한다.


heartbleed

openssl 암호화 라이브러리의 하트비트라는 확장모듈에서 발생하는 취약점으로 웹브라우저가 요청했을 때 데이터 길이를 검증하지 않아 메모리에 저장되어 있는 64KB의 평문이 노출된다.


'암호학' 카테고리의 다른 글

SSO  (0) 2020.10.17
OTP(One Time Password)  (0) 2020.10.16
전자서명  (0) 2020.10.13
블럭 암호 운용 방식  (0) 2020.10.13
대칭키, 공개키  (0) 2020.10.13
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함