웹 통신의 보안을 위해 설계된 암호화 프로토콜입니다. 이 프로토콜들은 대칭키 암호화와 비대칭키 암호화를 결합하여 사용하며, 이를 통해 효율적이면서도 강력한 보안을 제공합니다. A 서버와 B 클라이언트가 서로 통신을 할 때, 각 비대칭키를 통해서 통신을 한다면 안전하게 네트워크 보안을 유지할 수 있습니다.
비대칭 키(Asymmetric Key)는 공개 키 암호화(Public Key Cryptography) 방식에서 사용되는 두 개의 키 쌍을 의미해.
🔑 비대칭 키의 구성
• 누구나 접근할 수 있도록 공개된 키
• 데이터를 암호화할 때 사용됨
• 소유자만 알고 있어야 하는 비밀 키
• 암호화된 데이터를 복호화할 때 사용됨
🔁 비대칭 키의 원리
• 데이터를 공개 키로 암호화하면, 개인 키로만 복호화할 수 있어.
• 반대로 데이터를 개인 키로 서명하면, 공개 키로 검증할 수 있어.
비대칭키 암호화는 수학적으로 복잡한 연산을 사용해서 연산 비용이 매우 높아 대량의 데이터를 처리하려면 시간이 너무 오래 걸려서 웹사이트 속도가 느려짐. CPU 사용량으로 봤을 때 대칭키보다 비대칭키가 100~1000배 느릴수 있다. 비대칭 암호화는 평문보다 암호문이 커지기 때문에 데이터 전송량도 증가한다.
그래서 TLS 는 비대칭키 + 대칭키를 조합해서 성능과 보안을 모두 잡았다.
초기 핸드셰이크 과정에서 비대칭 암호화를 사용해서 대칭키를 안전하게 교환해
그 이후에는 대칭키로 데이터를 암호화하고 복호화해서 속도를 빠르게 유지한다.

위와 같은 방식에서는 문제점이 발생합니다. 통신은 안전하게 할 수 있으나, 우리가 never.com 와 같이 쳐서 들어갔을때 해당 도메인이 인증된 회사가 아니고 naver.com 과 같이 동일하게 페이지를 구성해 놓는다면 아이디,비밀번호 등이 해킹될 수 있는 문제점이 존재합니다. 그렇기 때문에 TLS 방식을 공식적으로 인정해주는 CA(Certificate Authroity) 기구가 존재합니다.
CA 를 통한 TLS 보안 방식은 어떻게 처리가 진행될까요?
특정 도메인을 가지고 잇는 회사는 CA 에 인증서 발급 요청을 합니다.
여기서 지문은 Finger Print 라고 부르며, A 회사의 공개 키를 SHA-256 등으로 해시한 값입니다.
Digital Signing 값은 앞서 등록한 지문을 개인키로 암호화 하여 인증서에 서명으로 등록합니다.

인증서를 발급받으면, 이제 A 회사의 서버는 아래와 같은 정보를 CA로부터 받습니다. 여기서 공개키는 CA 기관이 발급한 공개키와 A 회사를 증명하는 Digital Signing 값을 전달해줍니다.

이제 클라이언트와 서버가 서로 통신을 요청합니다. 그 과정에서 서버는 클라이언트에 CA 의 Digital Signing 값을 클라이언트에게 전달해 줍니다. 그런데 그냥 전달해주면 누군가 네트워킹 패킷을 보고 있다면 문제가 발생하겠죠? 이때 클라이언트의 공개키로 암호화해서 보내줍니다.

그런 다음 클라이언트는 자신의 개인키로 해당 Digital Signing 값을 복호화하고, 해당 Digital Signing 값을 CA public key 로 복호화 하면 해당하는 유저의 지문이 나옵니다. 이걸 단순히 믿으면 안되겠죠? 정확하게 CA 에서 발급한게 맞는지 확인해야 합니다.
그래서 클라이언트는 CA 에 해당 도메인의 public key 를 발급받고 해당 공개키를 해시하여 값이 같으면 인증됐다고 확인하빈다.

출처