SSL(TLS)에 대하여 (개념 및 정의)
오늘 이야기 할 주제는 SSL이다.
웹과 브라우저를 다루다 보면 반드시 마주치게 되는 친구이다.
SSL SSL 하는데 SNL도 아니고 도대체 무엇인가?
유의 단어 : CA, Secure Sockets Layer
HTTP와 HTTPS의 차이점??
일단 우리는 HTTP라는 말을 너무도 많이 들어봤다. HTTP는 Http: HyperTexT Protocol의 약자이다. 이것도 결국 프로토콜이라는 것인데 하이퍼텍스트를 빠르게 교환하기 위한 프로토콜이다. 그럼 하이퍼텍
dog-foot-sleep.tistory.com
제 1강 네트워크 : 네트워크란?
한동안의 휴식기를 거쳐고 미루고 미뤄오던 제 2의 강의를 시작하려 한다. 시작은 네트워크! 네트워크라면 인프라 계열이나 보안이 아니고서야 직접적인 지식을 써먹기는 어렵지만 알아놓으면
dog-foot-sleep.tistory.com
제 2강 네트워크 :DNS와 IP
우리는 어딘가에 편지를 보낼 때 위치를 기반으로 한 주소로 편지를 보낸다. 물론 우리가 직접 해당 위치까지 가서 편지를 상대방의 우편함에 넣을 수도 있겠지만 그렇게 한다면 편지의 의미가
dog-foot-sleep.tistory.com
TCP/IP에 대하여
TCP/IP 개발을 하지 않아도 어디선가 들어본 단어. TCP/IP는 도대체 무엇인가? TCP/IP라고 하면 인터넷 프로토콜 스위트에서 가장 자주 쓰는 방식 IP와 TCP를 한번에 부르는 것이다 IP주소를 기반으로
dog-foot-sleep.tistory.com
우선 네트워크와 통신방법에 대한 기초적인 지식은 필수이다. 위 내용을 모른다면 먼저 읽어오기를 바란다.
아무튼 우리는 여러 기술을 통하여 하나의 컴퓨터에서 다른 컴퓨터에 접근하고 데이터를 가져오게 된다.
가져오는 데이터는 로그인이 필요 없이 모두가 볼 수있는 Public 한 데이터 일 수도 있으며(ex. 네이버 메인 화면), 은행 사이트에 로그인 하여 나의 계좌 잔고를 보여주는 Private한 데이터 일 수도 있다.
네트워크란 길을 통해 DNS와 IP로 주소를 확인하며 TCP/IP를 사용해 상대방의 집에 노크하고 HTTP 란 운송수단을 타고 도달한다고 생각해보자.
TCP/IP가 상대방과 소통하기 위해 악수를 하는 것인데,만약 당신이 대통령이라면 신원 모를 누군가와 경호원 없이 악수를 하겠는가? 그래서 악수를 하는 방법이 TCP/IP라면 신뢰하는 상대를 입증하고 소통하는 방법이 TLS이다.
네트워크라는 것이 참 오묘한데 누구나 이동할 수 있는 길이기 때문에 내 집 앞까지 누군가 노크를 한다고 모두를 내 집으로 들여보내줄 수는 없다.(당연한 말).
적어도 신원이 확인되어야 문을 열든 얼굴을 보든 할꺼 아니겠는가?
편지를 생각해보자. 우리집 우편함에 편지가 도착한 뒤, 누군가 그걸 찟어버릴 수도 있도 몰래 바꿔치기 할 수도 있고
가져가 버릴 수도 있다. 그렇다고 모든 편지를 금고로 호송할 수는 없다.(100g도 될까말까한 편지 한통에 1톤이 넘는 금고라...) 그건 자원의 낭비이기 때문이다.
그럼 웹과 브라우저로 돌아와서 생각해보자. 우리는 개인 브라우저를 통해 어떠한 사이트에 접속하여 그 데이터를 가져온다. 예를 들어 우리가 네이버를 접속하게 되면 네이버 메인 페이지가 보이고 거기엔 광고,이미지,Text 등 여러 데이터들이 우리의 브라우저에 도달하게 된다.
메인 페이지에서 로그인을 하려면 아이디와 비밀번호를 네이버의 서버에 보내야 된다. 만약 그 데이터가 맞다면 우리는 로그인 인증 성공이라는 데이터를 받아와야 개인 로그인 화면을 볼 수 있다.
만약 우리가 TLS를 사용하지 않는다면 내가 보내는 비밀번호가 유출 될 수 있고(보내는 데이터가 위변조 됨) 반대로 내가 결재하는 내용이 다이소 3천원짜리 그릇이 아니라 1억짜리 현금 송금(받았던 데이터가 위변조 되있음)이 될 수도 있는 것이다.
SSL(TLS)는 인터넷 환경에서 안전한 정보 전송을 위한 방법이다.
SSL이란?
SSL(Secure Sockets Layer)은 인터넷 상의 안전한 데이터 전송을 위해 설계된 암호화 프로토콜이다. SSL은 원래 Netscape에 의해 개발되었으며, 이후 전자 상거래, 온라인 뱅킹, 기밀 정보 전송과 같은 보안이 중요한 온라인 활동을 위한 표준으로 자리 잡았다. SSL의 핵심 목표는 인터넷을 통해 전송되는 데이터의 기밀성과 무결성을 보장하는 것이다.
SSL이 필요한 이유
- 데이터 기밀성 보장 : 암호화된 통신: TLS는 데이터를 암호화하여 전송한다. 이는 통신 중에 정보가 도청되더라도 외부인이 데이터를 읽거나 이해할 수 없게 만든다. 예를 들어, 온라인 쇼핑을 할 때 고객의 신용카드 정보와 같은 민감한 데이터가 암호화되어 전송되어야 한다.
- 데이터 무결성 유지 : 변경 방지: TLS는 전송 중인 데이터가 변경되거나 손상되는 것을 방지한다. 이는 데이터가 출발지에서 목적지까지 수정되지 않고, 원본 그대로 전송되었음을 보장한다.
- 인증 및 신뢰성 : 인증서를 통한 서버 인증: TLS는 디지털 인증서를 사용하여 서버의 신원을 인증한다. 사용자가 웹사이트에 접속할 때, TLS 인증서는 해당 사이트가 신뢰할 수 있고, 정당한 사이트임을 보증한다. 이는 피싱 사이트나 가짜 사이트로부터 사용자를 보호하는 데 중요하다.
SSL의 작동 방법
위 그림과 같이 우리의 웹 브라우저는 서버와 통신할 때 암호화 된 내용을 가지고 통신하게 된다.
근데 생각해보면 웹은 모두가 자유로이 돌아다닐 수 있고 일반 데이터는 위변조가 가능하지 않은가? 그럼 어떻게
서버에 데이터를 보내고 받는 것을 안전하게 통신 할 수 있을까?
방법은 바로 데이터를 암호화 하고 각자 비밀 키로 데이터를 받았을 때 암호를 풀어 내용을 읽는 것이다.
그럼 둘만의 비밀스런 대화가 가능하다.
근데 문제가 있다. 고양이 목에 방울을 다는건 기가막힌 방법이지만 누가 달 것인가??
비밀키를 중간에 가져가버리면 그 사람도 비밀 내용을 볼 수 있는 것 아닌가??
어떻게 안전하게 비밀키를 나누어 가질 수 있을까?
애초에 해커가 서버와 나와의 통신을 가로채면 어떻게 안전하게 암호화를 할 것인가?
TLS의 핵심은 크게 2가지이다. 'SSL Handshake' 과정을 통해 안전한 연결을 구축하고, 데이터를 암호화하는 데 필요한 키를 생성하는 것이다. 이 과정에서 서로 암호화를 위한 키를 나누어 가지는 방법이 중요하다.
TLS 핸드셰이크는 다음과 같은 단계를 포함한다:
SSL Handshake 과정
아래 내용은 SSL 통신과정을 한눈에 보여주는 그림이다.
SSL Handshake는 클라이언트와 서버 간의 안전한 통신 채널을 수립하는 과정이다.
1. Client Hello: 클라이언트는 서버에 접근하며, 사용 가능한 SSL 버전, 암호화 알고리즘, 압축 방법 등을 명시한 'Client Hello' 메시지를 전송한다. 이때 클라이언트는 TLS의 버전, 랜덤 데이터(클라이언트가 생성한 랜덤 데이터)와 암호화 할 방법에 대한 리스트, 압축 방식 등을 서버에게 넘겨준다. 랜덤 데이터는 추후 서버 측에서 키를 생성할 때 사용한다.
2. Server Hello: 클라이언트에서 Hello가 오면 서버는 'Server Hello' 메시지로 응답한다. 이 메시지에는 서버가 선택한 SSL의 버전, 사용할 암호화 알고리즘, 클라이언트가 제안한 옵션 중 서버가 지원하는 압축 방법 등이 있다. 클라이언트가 제안한 방법들 중 서버 역시 랜덤 데이터(서버 랜덤)를 제공한다.
즉 클라이언트가 너 뭐로 키를 만들래? 라고 묻고 서버는 나 이걸로 키를 만들래 라고 대답하는 것이다.
그럼 클라이언트와 서버는 각각 생성한 랜덤 데이터를 2개 보유하게 되며 최종 키를 생성하는데 사용한다.또한 서버는 자신의 디지털 인증서를 클라이언트에게 전송합니다. 이 인증서에는 서버의 공개키와 서버의 신원 정보 등등이 포함되어 있다. 여기서 맨 처음 언급한 CA란 것이 나온다.
CA란 (certificate authority) 의 약자로 말 그대로 인증 기관이라는 뜻이다. 웹 사이트나, 이메일 주소, 회사 등 디지털 신원을 확인 시켜주는 전자 문서를 발행시켜주는 곳을 말한다. 디지털 인증서 안에는 소유자의 신원정보(서버의 정보, 이름 등), 소유자의 공개키, 발급기관의 정보, 유효기관 등이 있다.
클라이언트는 이 디지털 인증서를 확인하여 내가 요청한 곳의 서버의 도메인과 일치하는지 브라우저나 운영체제에서 신뢰할 만한 CA 목록에 있는 인증서인지, 유효기간이 있는지 등을 확인한다.
해당 내용이 문제가 없다면 디지털 인증서를 신뢰한다.
클라이언트는 서버의 공개키를 사용하여 'Pre Master Secret'이라는 데이터를 생성하고, 이를 서버에게 암호화된 형태로 전송한다.
공개키에 대하여:
서버의 공개키는 인증서 내에 포함되어 있으며, 클라이언트가 서버와 안전하게 통신하기 위해 데이터를 암호화하는 데 사용된다. 특히, 클라이언트는 이 공개키를 사용하여 Pre Master Secret를 암호화하고 서버에게 전송한다.
서버의 공개키는 누구에게나 공개될 수 있으며, 이를 통해 암호화된 데이터는 오직 해당 공개키와 짝을 이루는 비밀키를 가진 서버만이 복호화할 수 있다. 이렇게 공개키로만 암호화를 하고 비밀키로만 복호화를 하는 암호화 방식을 비대칭 암호화 방식이라고 한다. 이러한 비대칭 암호화 방식을 사용해여 모두에게 키를 공개하고, 암호화 된 데이터를 공개키를 배포한 자만이 열어 볼 수 있도록 한다.
즉 클라이언트가 만든 Pre Master Secret를 안전하게 서버만 열어볼 수있도록 비대칭 암호화를 사용하는 것이다.
Pre Master Secret는 세션 키를 만드는데 사용하는데 이 세션키로 서로 암복호화를 하기 때문에 외부에 노출되서는 안된다.
Pre Master Secret이 서버에 안전하게 전송된 후, 서버는 자신의 비밀키를 사용하여 이를 복호화한다. 그런 다음 클라이언트와 서버는 이 Pre Master Secret와 각자의 랜덤 데이터를 조합하여 Master Secret를 생성한다. 이렇게 되면 양쪽 다 Master Secret 를 가지게 되는 것이다.
Master Secret를 바탕으로, 클라이언트와 서버는 실제 통신에 사용될 세션 키를 생성한다. 이 세션 키는 양 쪽 모두가 가지고 있기에 대칭적이다. 양쪽에서 같은 키로 암호화와 복호화를 하는 암호화 방식이 대칭키 암호화 방식이라고 한다.
대칭키 암호화은 통신의 기밀성과 무결성을 보장한다.
SSL 세션이 종료될 때까지 이 키는 통신에 계속 사용된다.. 세션이 종료되면 이 키는 폐기되고, 새로운 세션에서는 새로운 키가 생성된다.
SSL 연결 과정은 이러한 단계들을 통해 클라이언트와 서버 간의 안전하고 신뢰할 수 있는 통신 채널을 제공한다. 각 단계는 데이터의 기밀성, 무결성, 그리고 인증을 보장하기 위해 중요한 역할을 한다.
SSL의 중요성
SSL은 웹 보안에 있어 필수적인 요소이다. 특히, 개인 정보, 금융 정보, 기타 중요한 데이터를 처리하는 웹사이트에서는 SSL을 사용하여 사용자의 정보를 보호한다. SSL을 사용하는 웹사이트는 URL이 'https://'로 시작되며, 대부분의 웹 브라우저는 자물쇠 아이콘을 통해 SSL 보안 연결을 표시한다.
SSL과 TSL
TLS(Transport Layer Security)는 SSL의 후속 버전으로, 보안 강화와 여러 개선 사항을 포함하고 있다. 현재는 SSL 대신 TLS를 사용하는 것이 일반적이다. 그러나 많은 사람들이 여전히 SSL이라는 용어를 사용하여 TLS를 포함한 전체 프로토콜을 지칭한다.
공개키로 암호화 하지 않는 이유
그런데 생각해보자 공개키 방식이 있고 대칭키 방식이 있는데 그냥 공개키 방식으로 데이터를 암호화 하고 개인키로만 복호화 해서 데이터를 넘기면 되지 않을까라는 생각이 들지 않는가?
그 이유는 효율성에 있다. 기본적으로 공개치 암호 알고리즘은 비대칭키로서 모두에게 노출된다. 따라서 서버에선 따로 키를 관리하지 않아도 되지만 반대로 모두에게 공개되어 있기에 보안적인 이유로 대칭키의 키 값보다 더 길다. 왜냐하면 3자가 공개키를 파악할 수 없도록 어렵게 만들어져있기 때문이다. 따라서 공개키는 길 수 밖에 없고 복잡하기에 해당 키로 암호화 알고리즘을 돌리면 느릴 수 밖에 없다!
반대로 모든 교환 방식에서 대칭키로만 암복호화를 한다면 어떤 문제가 있을까?
바로 키 노출의 문제와 키 관리의 어려움이다. 공개키는 서버에서 하나의 비밀키만 가지고 있고 나머지 키는 클라이언트에게 책임을 넘긴다.
그러나 대칭키는 1대1로 키가 존재해야 한다. 모든 키를 동일하게 하면 하나만 유출 되어도 대형참사가 날 수 있고(그 예시로 CA의 비밀키가 유출되어 예전에 큰 사건이 난 적이 있다.), 반대로 모든 클라이언트 마다 대칭키를 따로 가지면 서버는 그 클라이언트의 수 N만큼 대칭키를 관리하여야기 때문에 어려움이 있다.
그래서 키 관리에 유리하지만 불특정 다수와 안전하지 않은 방법으로 전달하여 키를 나누어 가질 때는 공개키를 사용하고 데이터자원의 실제 교환에선 속도가 효율적인 대칭키를 사용하는 것이다.
결론
TLS 은 인터넷상의 안전한 통신을 위한 중요한 기술이다. 이는 데이터의 기밀성, 무결성을 보장하고, 사용자와 서비스 제공자 모두에게 신뢰할 수 있는 통신 환경을 제공한다. 따라서 TLS 은 현대 인터넷 환경에서 필수적인 보안 기능으로 자리 잡고 있다.