HTTPS
HTTP 프로토콜을 보안 강화 버전으로 확장한 것이다.
HTTPS는 데이터 통신의 보안을 강화하기 위해 SSL 또는 TLS 프로토콜을 사용한다.
보안
데이터 암호화를 통해 중간자 공격을 방지하고
데이터의 무결성을 보장한다. 사용자와 서버간의 통신이 안전하게 이루어지도록 한다.
신원 인증
HTTPS는 SSL / TLS 인증서를 사용하여 서버의 신원을 인증한다.
이를 통해 사용자는 자신이 접속한 웹 사이트가 신뢰할 수 있는지 판단한다.
SEO 강화
검색 엔진에서는 HTTPS 사이트를 선호하며
HTTPS 사용 여부는 검색 엔진 최적화(SEO)에 긍정적인 영향을 미친다.
법적 요구 사항
일부 규제 기관이나 산업 규범에서 HTTPS 사용을 의무화하고 있다.
예를 들어, 결제 처리나 개인정보 보호와 관련된 웹 사이트에서는 HTTPS 사용이 필수적이다.
SSL / TLS
네트워크 동신에서 보안을 강화하는 프로토콜이다.
TLS 는 SSL의 후속 버전이며 웹 서버와 클라이언트 간의 통신에서
데이터의 안정성을 보장하고 인증을 제공한다.
SSL
1. 암호화: 데이터를 암호화하여 중간자가 가로채거나 변조할 수 없도록 보호한다.
2. 인증: 클라이언트가 접속한 서버의 신원을 확인하여 접속을 보장한다.
3. 무결성: 전송 중 데이터가 변조되지 않고 온전하게 전달되도록 보장한다.
TLS
1. 암호화 강화: SSL 보다 더 강력한 암호화 알고리즘을 지원한다.
2. 전송 무결성 보장: 데이터가 전송 중에 변조되지 않도록 보장한다.
3. 서버 인증: 클라이언트는 접속한 서버의 신원을 인증할 수 있다.
4. 상호 운용성: 다양한 플랫폼과 서비스 간의 상호 운용성을 제공한다.
5. 보 결함 수정: SSL의 보안 결함을 보완하고 새로운 보안 문제에 대응한다.
암호화

암호화는 승인된 당사자만 정보를 이해할 수 있도록 데이터를 스크램블 한 방법이다.
이를 복호화하려면 송신자와 수신자가 서로 동의한 키가 필요하다.
또한 이를 만들기 위해 키가 쓰이기도 한다.
스크램블

각 단어나 문자를 패턴에 따라 암호화는 것이 아닌
무작위 방식으로 개별 데이터 비트를 섞는다.
고급 암호화 표준으로 암호화된 파일의 경우 약 10회 스크램블되며
다른 컴퓨터가 키 없이 해독하기 어렵다.
비트가 높아질수록 스크램블을 많이 하고 복잡해진다.
대칭 암호화
키를 하나만 사용하는 암호화 방법이다.
키 관리가 어렵지만 처리 속도가 빠르고 간단하게 구현할 수 있다.
plaintext + key = ciphertext: hello + 2jd8932kd8 = X5xJCSycg14=
Ciphertext + key = plaintext: X5xJCSycg14 = + 2jd8932kd8 = hello
동작 원리
암호화
데이터를 전송하는 사람은 암호화할 데이터와 함께 특정한 알고리즘을 사용하여
암호화 키를 사용하여 데이터를 암호화한다.
복호화
데이터를 수신한 사람은 암호화된 데이터와 동일한 알고리즘과 키를 사용하여
데이터를 암호화한다.
키 관리
암호화와 복호화에 동일한 키를 사용하기 때문에 키의 관리가 중요하다.
키를 안전하게 관리하지 않으면 데이터가 위험에 노출될 수 있다.
속도
대칭 암호화는 복잡한 수학적 계산 없이 키를 이용해 데이터를 빠르게 암호화하고
복호화할 수 있어 처리 속도가 빠르다.
사용 사례
데이터 전송
대칭 암호화는 HTTPS 프로토콜에서 데이터 전송을 보호하는 데 사용된다.
저장 데이터 암호화
디스크에 저장된 데이터를 암호화하여 보호할 때 사용된다.
예를 들어 데이터베이스의 암호화 기능 등에서 사용된다.
파일 암호화
파일 수준에서 데이터를 보호하는 데 사용된다.
보안이 필요한 문서나 개인 정보가 포함된 파일을 암호화할 때 사용된다.
비대칭 암호화
공개키 암호화라고도 한다.
데이터를 암호화하고 복화하는 데 두 개의 서로 다른 키를 사용하는 암호화 기술이다.
이러한 키는 공개키와 비밀키 한 쌍으로 이루어져 있다.
데이터의 기밀성과 무결성을 보장하며 인증을 제공한다.
동작 원리
공개키와 개인키 생성
공개키와 개인키를 생성한다. 두 키는 수학적으로 연관되어 있으나
공개키를 통해 개인키를 추론할 수 없다.
암호화
데이터를 전송하려는 사람은 수신자의 공개키를 사용하여 데이터를 암호화한다.
이 암호화된 데이터는 수신자의 공개키로만 복호화 할 수 있다.
복호화
데이터를 수신한 수신자는 자신의 개인키를 사용하여 암호화된 데이터를 복호화한다.
이 과정에서 공개키로 암호화된 데이터는 개인키로만 해독할 수 있기 때문에 데이터의 기밀성이 보장된다.
비대칭 암호화의 특징
기밀성
공개키로 암호화된 데이터는 개인키로만 복호화할 수 있기 때문에 데이터의 기밀성이 보장된다.
인증
개인키를 통해 암호화된 데이터는 공개키로만 복호화 할 수 있기 때문에 데이터의 출처를 인증할 수 있다.
전자 서명
개인키로 생성된 전자 서명은 공개키로만 검증이 가능하다. 데이터의 무결성을 보장할 수 있다.
사용 사례
SSL/TLS
웹에서 데이터 전송 시에 사용되며 공개키 인증서를 통해 서버와 클라이언트 간의 통신을 보호한다.
전자 메일 보안
전자 메일의 암호화와 서명을 위해 사용된다.
전자 서명
디지털 문서의 인증과 무결성 검증에 사용된다.
암호화의 필요성
암호화는 의도된 수신자 또는 송신자를 제외하고는 통신을 하이재킹하여 읽을 수 없게 한다.
이를 통해 민감한 데이터의 유출을 방지하고 데이터 무결성을 보장한다.
TLS 핸드셰이크
SSL(Secure Socket Layer)은 SSL 1.0부터 시작해서 SSL 2.0, SSL 3.0, TLS(TransportLayer Security Protocol) 1.0
TLS 1.3까지 버전이 올라가며 마지막으로 TLS로 명칭이 변경되었다.

TLS 핸드셰이크는 클라이언트와 서버 간의 안전한 통신을 설정하기 위한 프로토콜이다.
이 과정에서 클라이언트와 서버는 서로의 신원을 인증하고 통신에 사용할 암호화 알고리즘과 키를 생성한다.
보안 소켓 (SSL)에서도 동일한 방식으로 동작하며 데이터의 기밀성과 무결성을 보장하여
중간자 공격을 방지하고 안전한 통신을 가능하게 한다.
TLS 핸드셰이크 과정
1. Hello 메시지 교환
클라이언트가 서버에게 첫 번째 Hello 메시지를 보낸다.
클라이언트가 지원하는 TLS 버전, 사이퍼슈트와 클라이언트 랜덤값 (무작위 문자열) 임시 DH 매개변수를 서버에게 보낸다.
2. 서버 Hello 응답
서버는 클라이언트에게 Hello 응답을 보낸다.
이 응답에는 서버가 선택한 TLS 버전, 사용할 암호화 알고리즘, 서버 인증서 (공개키 인증서)가 포함된다.
3. 인증
클라이언트는 서버가 보낸 인증서를 검증한다.
인증서는 서버의 공개키를 포함하고 있으며 클라이언트는 이를 사용하여 데이터를 암호화한다.
4. Pre-master secret 생성
클라이언트와 서버는 Pre-master secret라는 임시 암호 키를 생성한다.
이 임시 암호키는 실제 통신에 사용될 세션 키를 생성하는데 사용된다.
5. 세션 키 생성
클라이언트와 서버는 각각 Pre-master secret를 사용하여 세션 키를 생성한다.
이 세션키는 데이터를 암호화하고 복호화하는 데 사용된다.
6. Finished 메시지
클라이언트와 서버는 각각 생성한 세션 키를 사용하여 Finished 메시지를 서로 교환한다.
이 메시지는 핸드셰이크가 완료되었음을 나타내며 이후 데이터 전송이 암호화되어 보호된다.
보안세션이 시작되었다고도 한다.
키 교환 알고리즘
각 알고리즘은 사용 환경, 보안 요구사항, 계산 리소스 등에 따라 선택될 수 있으며
암호화 통신에서는 키 교환 알고리즘이 데이터의 기밀성과 무결성을 보장한다.
DH (Diffie-Hellmain)

1976년에 개발된 공개키 암호화의 초기 형태로
서버와 클라이언트가 서로의 공개 키를 이용해 공유 비밀 키를 생성한다.
중간자 공격에 대비할 수 있는 보안성을 제공한다.
디피헬만을 사용하는 DHE와 타원곡선암호화 방법과 DH를 섞은 ECDHE가 있다.
보통 ECDHE를 사용한다.
RSA 키 교환
RSA 알고리즘은 공개키 암호화와 디지털 서명을 기반으로 한다.
RSA 키 교환은 공개키 암호화를 사용하여 통신 상대방에게 대칭 키를 안전하게 전달하는 방법으로 사용될 수 있다.
TLS 1.3 버전에서는 RSA 같은 경우 취약점이 있어 공식적으로 지원하지 않는다.
RSA의 취약점

RSA의 경우 클라이언트가 생성한 임시 암호값을 서버로 전송하지만
DH의 경우 클라이언트와 서버가 교환한 DH 매개변수를 사용해 개인키를 만든다.
이 때문에 RSA는 클라이언트에서 생성한 임시 암호값이 탈취당한 경우 해킹의 위험이 있다.
DH의 경우 탈취당해도 공통의 암호키를 만들지 못한다.
타원곡선 암호화 방법

곡선을 사용하여 개인 키 보유자만 알 수 있는 타원곡선을 그린다.
이걸 기반으로 교차점을 생성하고, 교차점의 수를 기반으로 암호를 설정한다.
사이퍼 슈트
프로토콜, AEAD 사이퍼 모드, 해싱 알고리즘이 나열된 규약이다.
암호제품군이라고도 불리며 TLS 1.3 버전에는 다섯 개가 있다.
1. TLS_AES_128_GCM_SHA256
2. TLS_AES_256_GCM_SHA384
3. TLS_CHACHA20_POLY1305_SHA256
4. TLS_AES_128_CCM_SHA256
5. TLS_AES_128_CCM_8_SHA256
TLS: 프로토콜
AES_128_GCM: AEAD 사이퍼 모드
SHA256: 해싱 알고리즘
AEAD 사이퍼 모드
AEAD는 데이터 암호화 알고리즘이며 AES_128_GCM 등이 있다.
주요 특징
암호화
평문 데이터를 암호화하여 암호문(암호화된 데이터)를 생성한다.
암호화된 데이터는 외부에서 읽을 수 없다.
인증
인증 태그라고도 불리는 추가적인 데이터를 생성하여 원본 데이터의 무결성을 보호한다.
인증 대그는 데이터가 중간에 변경되었는지 검증하는 역할을 수행한다.
보안성
AEAD 모드는 암호화와 인증 과정을 결합하여 보안성을 강화한다.
인증 태그를 통해 데이터의 무결성이 유지되고 암호화된 데이터는 키를 가지지 않은 공격자에게는
의미 없는 데이터로 보호된다.
해싱 알고리즘
임의의 데이터를 데이터를 추정하기 힘든 고정된 길이의 고유한 값으로 변환하는 알고리즘이다.
이 고유한 값은 해시 값, 또는 해시 코드라고 불린다.
데이터의 무결성을 확인하거나, 검색 속도를 개선하거나, 데이터를 저장 및 관리하는데 사용된다.
해싱 알고리즘의 특징

고유한 해시 값
동일한 입력 데이터에 대해 항상 동일한 해시 값이 생성된다.
입력 데이터의 변경 여부를 확인할 수 있다.
고정된 길이
해시 값의 길이는 고정되어 있으며 입력 데이터의 크기에 관계없이 일정한 크기의
해시 값을 생성한다.
빠른 연산
해싱 알고리즘은 빠르게 연산이 가능하다. 많은 양의 데이터를 처리할 때 유용하다.
단방향성
해싱은 단방향 함수이다. 해시 값을 기반으로 원래 데이터를 복원하는 것은 불가능하다.
이러한 특성 때문에 비밀번호와 같은 보안적인 목적으로 사용된다.
충돌 가능성
서로 다른 입력 데이터에 대해 동일한 해시 값이 생성될 수 있다.
이를 해시 충돌이라고 한다.
해싱 알고리즘은 어떻게 쓰이나요?

인증서가 올바른 인증서인지 확인할 때 전자서명을 이용하는데
송신자가 자신의 신원을 증명하면서 해싱 알고리즘이 쓰인다.
인증 생성작업
전자 서명을 만드는데 서명되는 메시지를 해싱한다.
인증 확인작업
메시지를 복호화해서 해시를 서로 비교해 올바른 메시지인지 확인한다.
전자서명
프로그램 안에 제작자 표시를 할 때, 제작자를 쉽게 조작 못하도록 만든 장치가 전자서명이다.
이 전자서명을 통해 인증서에 적힌 주체가 서비스 제공자인지 확인하고
인증서에 기록된 전자서명을 기반으로 복호화한다.
인증서에 기록된 정보들을 해시 함수에 입력하여 해시를 얻어낸 후 두 해시의 일치 여부를 확인한다.
이를 통해 인증서의 유효성을 검증한다.
인증서
1. 주체 (인증서를 발급한 CA, 도메인, 웹사이트 소유자, 인증자 소유자
2. 공개키 (공개키, 공개키 암호화 방법)
포함하는 데이터 파일이다. 인증기관인 CA에서 발급한 SSL인증서를 기반으로
인증작업을 수행한다.
주체는 클라이언트가 접속한 서버가 클라이언트가 의도한 서버가 맞는지 확인할 때 쓰인다.
공개키는 처음 인증작업을 수행할 때 쓰인다.
CA

클라이언트의 서버가 클라이언트가 의도한 서버가 맞는지 보장한다.
이 인증서를 발급하는 기업들을 CA라고 부른다.
서비스의 도메인, 공개키와 같은 정보는 서비스가 CA로부터 인증서를 구입할 때 제출해야 한다.
단일 도메인: 단 하나의 도메인에 적용되는 인증서
와일드카드: 도메인의 하위 도메인도 포함하는 인증서
멀티 도메인: 각자 다수의 도메인에 적용될 수 있는 인증서
0 - RTT
세션키가 생성된 후 다시 사이트에 방문한다면 미리 만들어 놓은 세션키를 기반으로 연결을 생성한다.
이 때 인증에 관한 RTT가 발생되지 않기 때문에 0 - RTT라는 특징을 가진다.
왜 네트워크 보안을 해야 할까요?

신용카드 등 민감한 금융정보를 다루는데 이점이 있고
HTTP/2를 구현할 수 있다.
TLS 패킷 분석
네트워크에서 TLS 프로토콜을 사용하여 암호화된 통신을 분석한다.
클라이언트와 서버 간의 안전한 통신을 가능하게 하는 프로토콜로
HTTPS의 기반 기술로 사용된다.
TLS 패킷 분석을 통해 통신 내용의 암호화 방법, 사용된 알고리즘, 인증서 정보 등을 이해하고
필요한 경우 문제 해결 및 보안 강화를 위한 정보를 얻을 수 있다.
TLS 패킷 분석을 위한 주요 단계 및 도구
Wireshark 사용
https://www.wireshark.org/
Wireshark는 네트워크를 패킷으로 실시간으로 캡쳐하고 분석한다.
네트워크 트래픽 캡처
TLS 패킷 분석을 위해 먼저 통신하는 클라이언트와 서버 사이의 네트워크 트래픽을 캡처한다.
Wireshart와 같은 패킷 분석 도구를 사용한다.
TLS 핸드셰이크 분석
TLS 통신이 설정되는 초기 핸드셰이크 과정을 분석한다.
클라이언트와 서버는 서로의 신원을 확인하고 사용할 암호화 알고리즘과 키를 설정한다.
Wireshark는 핸드셰이크 과정을 시각적으로 분석할 수 있는 기능을 제공한다.
암호화된 데이터 분석
TLS 통신에서는 핸드셰이크 후에 데이터가 암호화되어 전송된다.
암호화된 데이터의 구조와 패턴을 분석하여 실제 데이터의 내용은 볼 수 없지만
암호화 알고리즘, 키 교환 방식, 암호화 모드 등을 파악할 수 있다.
인증서 분석
TLS 통신에서 서버는 클라이언트에게 공개키 인증서를 제공한다.
이 인증서를 분석하여 서버의 공개키, 서버의 신원 확인 정보 등을 확인할 수 있다.
TLS 버전 및 알고리즘 확인
패킷 분석을 통해 사용된 TLS 버전과 암호화 알고리즘을 확인할 수 있다.
보안 문제를 확인하고 강화하기 위해 사용된 TLS 버전과 알고리즘 설정을 검토할 수 있다.