웹 서비스에서 주로 사용되는 HTTP는 암호화 되지 않은 평문을 데이터로 전달하게 되는데, 통신이 되는 도중에 패킷을 훔쳐보는 *스니핑 공격에 대응하기 위해서 TLS를 적용합니다.
스니핑(Sniffing)
네트워크 상에서 자신이 아닌 다른 상대방들의 패킷 교환을 엿듣는 것
TLS(전송 계층 보안)은 웹에서 암호화를 구현하는데 가장 널리 사용되는 프로토콜입니다.
TLS는 암호화 프로세스의 조합을 사용하여 네트워크를 통한 보안 통신을 제공합니다.
TLS가 있는 TCP/IP 프로토콜 스택은
HTTP -> TLS -> TCP -> IP 입니다.
TLS는 보안과 성능상 이슈로 두 가지의 암호화 방법을 혼용해서 사용합니다.
1. 대칭키 암호화 (Symmetric key algorithm)
2. 비대칭키 암호화 (Asymmetric key algorithm)
대칭키 암호화
대칭키 암호화 방식은 암호화를 하는 키와 복호화를 하는 키가 동일한 방식입니다.
하지만 이 대칭키를 상대방과 내가 서로 공유를 해야하는데, 대칭키를 상대에게 전달하는 방식에서 해킹을 당한다면 데이터가 노출될 수 있습니다.
비대칭키 암호화
이러한 대칭키 암호화의 근본적인 문제를 해결하고자 나온 것이 비대칭키 암호화 방식입니다.
하나의 키를 갖는 대칭키 암호화 방식과 달리, 비대칭키 암호화 방식은 한 쌍의 키(공개 키와 개인 키)를 갖게 됩니다.
통상적으로 공개키는 암호화를 개인키는 복호화를 한다고 알려져 있는데,
그것이 아닌 공개키로 암호화 하면 개인키로 복호화 할 수 있고, 개인키로 암호화 하면 공개키로 복호화 할 수 있습니다.
한쌍의 키로 암호화 복호화를 하는 방식을 RSA 알고리즘이라고 합니다.
즉 암호화를 위해 공개키를 전달하는 과정에서 공개키가 해킹으로 인해 데이터가 노출되더라도 복호화를 하지 못하기 때문에 보안적으로 좋습니다.
하지만 TLS는 대칭키 방식과 비대칭키 방식을 같이 사용하는 이유는 무엇일까요?
RSA 알고리즘을 이용한 암호화 방식은 복잡한 수학적 원리로 이루어져 있어, CPU 리소스를 크게 소모한다는 단점이 있기 때문입니다.
따라서 TLS의 암호화 방식은 결국 처음에 대칭키를 공유하는 통신을 비대칭키 방식을 이용하고, 실제 통신을 할 때는 CPU 리소스 소모가 적은 대칭키 방식으로 데이터를 주고 받습니다.
기본적으로 TLS가 제공하는 이점은 다음과 같습니다.
- 기밀성 (암호화)
- 데이터 무결성 : 통신 도중 데이터가 제 3자에 의해 변경될 일이 없다.
- 서버 인증 : 신뢰할 수 있는 서버이다.
우리는 TLS 기법을 사용하기 위해서 CA 기관으로 부터 공개키와 암호키를 발급 받아야 합니다.
CA(Certificate Authority)는 인증서를 발급해 주는 기관입니다. 아무 기업이나 할 수 있는 것이 아닌 신뢰성이 엄격하게 공인된 기업들 만이 진행할 수 있습니다. 이렇게 CA는 자체적으로 발급한 공개키와 개인키가 존재합니다.
CA 인증서 발급 과정
1. A회사에서 CA로 부터 도메인 등 여러 정보를 포함하여 인증서 발급을 요청합니다.
2. A회사에 대해 검증을 거친 후, CA의 공개키를 이용하여 발급 하고자 하는 회사의 공개키를 해싱(SHA-256 등)합니다.
-> '지문'으로 등록
3. 앞서 등록한 해시(지문)를 CA의 개인키로 암호화 하여 인증서에 '서명'으로 등록합니다.
4. 서버에게 디지털 서명, 발급자 정보 등이 등록되어 있는 인증서를 발급해줍니다. -> 상위 인증 기관이 하위 인증서가 포함하고 있는 공개키를 상위기관의 비밀키로 암호화 하여 상호 보증하게 되는 것을 인증서 체인이라고 합니다.
TLS 암호화 과정
1. 클라이언트는 브라우저에 신뢰하고 있는 CA 리스트들과 함께 그들의 공개키도 갖고있습니다.
2. 클라이언트가 서버에 접속하기 위해서 handshake가 이루어지면 서버는 자신의 인증서와 공개키를 클라이언트에 전달합니다.
3. 서버로 부터 받은 인증서를 자신이 가진 CA 리스트에 있는 기관에서 발급받은 것인지 확인하기 위해서 해당 CA 기관의 공개키로 서버 인증서의 서명을 복호화 합니다.
4. 복호화하여 나온 해시 값과 공개키를 해시한 값이 일치하면 인증서가 위조되지 않았음을 인증하고, 서버로부터 받은 공개키를 통해서 서버와 클라이언트가 사용할 대칭키를 전달 받습니다.
5. 서로 공유한 대칭키를 통해서 암호화된 데이터를 송수신 합니다.
다음은 TLS 통신을 Sequence Diagram으로 간단히 도식한 것입니다.
더 자세한 내용은 아래에 첨부된 oracle 공식 docs 링크를 참조하기를 추천드립니다.
[출처 : https://babbab2.tistory.com/4?category=960153]
[참조 : https://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/tls.html]
'ComputerScience > 네트워크' 카테고리의 다른 글
11. 라우터 (ROUTER) (0) | 2020.07.23 |
---|---|
10. VLAN(Virtual LAN) (0) | 2020.07.21 |
9. 스패닝 트리 알고리즘 (STP) (0) | 2020.07.21 |
8. 서브넷 마스크(Subnet Mask) (0) | 2020.07.20 |
7. IP주소(IP Address) (0) | 2020.07.20 |