*SSL과 TLS의 차이점?
-SSL(Secure Socket Layer)
-TLS(Transport Layer Security)
TLS는 SSL에서 발전한 것으로, SSL 3.0 이후에는 SSL기반의 TLS 1.0이 등장하여 사용된다고 보면 된다. 이름이 바뀌었다고 생각하면 쉬움
*TLS는 가장 중요한 두 가지 보안 사항을 고려함
-제 3자가 잘못된 정보를 보내는 것 => 인증서를 사용한 사용자 인증
-정보의 탈취 => 데이터 암호화
*TLS의 전제
-신뢰할 수 있는 인증서: 검증된 인증기관(CA), EV-SSL
-안전한 프로토콜을 제공(Protocol support), 안전한 암호(Secure Cipher Suites) 설정
*SSL 인증서의 내용
-서비스의 정보 (인증서를 발급한 CA, 서비스의 도메인 등등) => 신뢰 할 수 있는 서버임을 보장
-서버 측 공개키 (공개키의 내용, 공개키의 암호화 방법) => SSL 통신에 사용할 공개키를 클라이언트에게 제공
*CipherSuite: 암호화 알고리즘 집합
-키 교환, 인증 알고리즘
-데이터 암호화 알고리즘
-메시지 축약용 메시지 인증 코드(MAC) 알고리즘
ex) CipherSuite SSL_RSA_WITH_RC4_128_MD5
-키 교환, 인증 알고리즘: RSA
-데이터 암호화 알고리즘: 128비트 키를 사용하는 RC4
-MAC 알고리즘: MD5
*TLS를 사용한 통신 과정
먼저 TLS설정과 key교환을 하는 핸드셰이크(Handshake)를 하게 된다.
순서 | 단계 | 주체 | 내용 |
1 | [TLS설정] | Client -> Server |
지원하는 TLS버전, 지원하는 암호화 방식(CipherSuite), 세션 ID, 랜덤 데이터 등 전송(Client Hello) |
2 | [TLS설정] |
Server -> Client |
TLS버전, 암호화 방식, 인증서, 랜덤 데이터 등 전송(Server Hello) (이 때, server는 client의 인증서를 요청할 수 있고, client는 개인 키로 CA에 인증서를 받아야 함) |
3 | [TLS설정] | Client | 인증서 검증: 신뢰할 수 있는 서버임을 인증 -신뢰할 만한 CA에 의해 발급되었는지 내장된 CA 리스트에서 확인 -CA 공개키로 인증서 복호화 -디지털 서명 검증 -유효기간 확인 -폐기 상태 확인 주고받은 랜덤 데이터를 이용해 pre-master secret(대칭키) 생성 인증서에 포함 된 server의 public key로 pre-master secret 암호화 |
4 | [key교환] | Client -> Server |
암호화된 pre-master secret 전송(Client Key Exchange) |
5 | [key교환] | Server | private key로 pre-master secret 복호화 pre-master secret으로 master secret, session key 생성 (Client도 pre-master secret으로 master secret, session key를 만들고 동치를 확인하여 사용자 인증함) |
6 | [key교환] | Server -> Client |
대칭 키 암호화로 통신할것을 알림(Change Cipher Spec) |
7 | [key교환] | Server -> Client |
TLS 구성 완료 알림(Finished) |
8 | [key교환] | Client -> Server |
TLS 구성 완료 알림(Finished) |
handshake 이후, 데이터를 주고받을 때에 session key 값을 이용해 대칭키 방식으로 암호화 한다.
: TLS는 대칭 키+공개 키 방식이다. 데이터 통신 과정에는 대칭 키를 사용하고 대칭 키를 주고받을 때에 공개 키를 사용한다.
데이터를 주고받을 때 마다 공개 키를 사용하면 서버 부하가 심하고, 대칭 키를 그대로 보내면 보안 문제가 있기 때문에 이를 개선한 방법이다.
세션이 종료되면 SSL 통신이 끝났음을 서로 알리고, session key를 폐기한다.
*SSL/TLS 특징
-응용 프로그램 자체 구현 가능: 대부분의 다른 보안 프로토콜(EAP, IPsec 등)은 운영체제 등에 밀접하게 관련됨
-인증 구조: X.509에서 규정된 공개키 인증서 교환에 의해 상대방에 대한 인증 수행(RSA, DSA, ECDSA)
-키 교환 방식: RSA, Anonymous Diffie-Hellman, Ephermeral Diffie-Hellman(ECDH), Fixed Diffie-Hellman , Fortezza, SRP, PSK(Pre-shared key)
-대칭키 암호화 방식: RC2 (40), RC4 (40), RC4 (128), DES, Triple DES, IDEA, Camellia 등
-해쉬 알고리즘: MD5, SHA-1(TLS버전별 상이)
*TLS 버전별 특징
-TLS 1.0(RFC 2246) / 1.1(RFC 4346): SHA1 또는 SHA256 사용. 대부분의 브라우저가 지원 중단 예정.
-TLS 1.2(RFC 5246): SHA256만 사용.
MiTM(Man in The Middle), POODLE(Padding Oracle On Downloaded Legacy Encryption), SLOTH(Security Losses from Obsolete and Truncated Transcript Hashes), DROWN(Decrypting RSA with Obsolete and Weakened eNcryption) 공격에 취약점이 드러나고 있다.
-TLS 1.3(RFC 8446): 전송 절차를 간소화하고 인증서를 암호화하도록 개선.
*NSA(National Security Agency) 스위트 B 암호화: US NSA(National Security Agency)가 권장하는 암호화 알고리즘 set
-암호화 알고리즘: AES
-키 교환 알고리즘: ECDH(Elliptic Curve Diffie-Hellman)
-디지털 서명 알고리즘: ECDSA(Elliptic Curve Digital Signature Algorithm)
-해싱 알고리즘: SHA-256 또는 SHA-384
*기타
TLS는 TCP위에서 동작하는 프로토콜이지만, UDP에서는 DTLS (Datagram Transport Layer Security) RFC 6347(2012년)를 사용할 수 있다.
*Ref.
https://engineering.linecorp.com/ko/blog/best-practices-to-secure-your-ssl-tls/
http://www.ktword.co.kr/word/abbr_view.php?m_temp1=1957&m_search=S
https://opentutorials.org/course/228/4894
https://www.ibm.com/support/knowledgecenter/ko/SSFKSJ_7.1.0/com.ibm.mq.doc/sy10630_.htm
'Web' 카테고리의 다른 글
HTTP, HTTPS (0) | 2019.05.13 |
---|