암호화의 목적: 기밀성 유지 🔐
정보 보호의 가장 중요한 목적 중 하나는 기밀성을 유지하는 것.
기밀성은 인가받은 사용자만 정보에 접근할 수 있도록 보장하는 성질 -> 이를 통해 민감한 정보를 안전하게 보호
단방향 암호화 (One-way Encryption) 🔄
단방향 암호화는 알고리즘을 사용해 암호화만 가능하고 복호화는 불가능한 방식. 주로 메시지 인증 용도로 사용되며, 이는 무결성을 보장하는 데 중점을 둠.
- 무결성: 정보가 전송 중에 변경되지 않도록 하는 것. 즉, 아무나 정보를 변경할 수 없게 만들어 정보의 신뢰성을 만족시키는 것이 목적. 완벽, 순수
단방향 암호화의 특징
- 암호화는 가능하고 복호화는 불가능
- 원본이 조금이라도 달라지면 암호문이 정상적으로 작동하지 않음.
- 원본의 크기와 관계없이 암호문의 크기는 항상 동일
주요 특징:
- Hash 알고리즘을 사용하여 계산된 고정 크기의 값을 이용해 진위 여부를 확인
- 암호화 알고리즘은 존재하지 않으므로, 복호화가 불가능
- 메시지의 무결성을 확인하는 데 사용암호문의 크기는 고정되어 있기 때문에, 원본의 크기와 암호문의 용량 크기를 보고 유추할 수 없다. 예를 들어, 1bit만 다르면 암호문은 아예 열리지 않으며, 다른 사람이 크기만 보고 원본을 추측할 수 없게 된다. 🤫
- 암호화 종류 🧑💻
- 1.MAC
- 2. Hash
- 암호화 종류 🧑💻
-
- MAC 주요 특징:
- 암호화된 값으로, 복호화는 불가능
- 메시지가 변조되지 않았는지 확인하기 위한 방법
- 데이터를 전달할 때, 전송된 메시지가 원본 그대로인지 확인메시지 인증 코드 (MAC, Message Authentication Code) 📝
- Hash 주요 특징:
- 데이터를 평문으로 사용하여지정 된 알고리즘으로 계산된 지정된 크기의 값을 이용하여 진위여부를 확인
- 암호화의 알고리즘만 존재하므로 복호화가 불가능함
- MAC 주요 특징:
- 메시지 자체의 무결성을 확인하는 것인지, (변조여부) -hash
이 메시지를 보낸 사용자가 증명된 사람인지 확인하는 것의 차이 -MAC
양방향 암호화 (Two-way Encryption) 🔑
양방향 암호화는 한 쌍의 알고리즘(암호화/복호화)을 통해 암호화된 데이터를 복호화할 수 있는 방식. 이를 통해 안전하게 데이터를 주고받을 수 있음. 🔄
주요 암호화 방식
- 대칭 암호화 (Symmetric Cryptography): 암호화와 복호화에 동일한 키를 사용하는 방식. 비밀키나 공유키라고도 불림.
- 비대칭 암호화 (Asymmetric Cryptography): 암호화와 복호화에 서로 다른 키를 사용하는 방식. 일반적으로 공개키와 개인키 쌍으로 이루어져 있다.
대칭 암호화 (Symmetric Encryption) 🔑
대칭 암호화는 암호화와 복호화에 동일한 키를 사용하는 방식으로, 주로 통신용 데이터 암호화에 사용
대칭 암호화 종류
- 스트림 암호화 (Stream Cipher): 비트, 바이트, 워드 단위로 데이터를 암호화하며, 암호화된 데이터의 크기는 변하지 않는다. 이 방식은 처리 속도가 빠름. 🔥
- 예: RC4, A5/1 등
- 블록 암호화 (Block Cipher): 데이터는 고정된 크기의 블록으로 나누어 암호화. 처리 과정은 복잡하고 속도는 상대적으로 느리지만 보안성이 높다. 🧑💻
- 예: DES, AES 등
대칭 암호화 알고리즘
- DES (Data Encryption Standard) 💻
- 1974년 IBM에서 개발하고 1977년 미국의 표준으로 채택된 대칭 알고리즘.
- 블록 크기: 64bit, 대칭 키 크기: 56bit (패리티 비트 포함)
- 파이스텔 구조(Feistel structure)를 사용하여 16번의 Round 계산을 반복.
- 하지만 무차별 대입 공격(Brute Force)으로 파괴 가능하므로 현재는 더 안전한 방식으로 대체. 🛡️
- AES (Advanced Encryption Standard) 🔐
- DES의 취약점을 보완하기 위해 미국 표준기술연구소(NIST)에서 공모하여 채택한 알고리즘.
- 블록 크기: 128bit, 대칭 키 크기: 128/192/256bit
- SPN 구조를 이용하여 더욱 안정적이고 빠른 암호화를 제공.
비대칭 암호화 (Asymmetric Cryptography) 🔑
비대칭 암호화는 공개키 암호화(Public Key Encryption)라고도 불리며, 암호화와 복호화에 두 개의 서로 다른 키를 사용하는 암호화 기법이다. 이 두 키는 수학적 관계를 통해 계산된 한 쌍의 키로 이루어져 있다.
- 공개키(Public Key): 누구나 요청할 수 있는 공개된 키이다. 이 키는 암호화에 사용된다.
- 사설키(Private Key): 오직 키 소유자만 알고 있어야 하며, 암호화된 데이터를 복호화하는 데 사용된다.
비대칭 암호화의 특징 💡
- 공개키로 암호화된 데이터는 오직 사설키로만 복호화할 수 있다.
- 사설키로 암호화된 데이터는 공개키로만 복호화할 수 있다.
- 비밀키 교환과 전자서명 등에서 주로 사용된다. ✍️
주요 특징:
- 기밀성이 요구되는 작은 데이터의 암호화에 적합하다.
- Key 동기화 문제를 해결하고, 전자서명에서 중요한 역할을 한다.
비대칭 암호화 알고리즘 ⚙️
비대칭 암호화는 수학적인 문제를 기반으로 만들어진다. 예를 들면, 소인수분해, 이산대수, 타원곡선 등이 사용된다.
주요 알고리즘:
- RSA: 대표적인 소인수분해 기반의 암호화 알고리즘이다.
- ECC (Elliptic Curve Cryptography): 타원곡선을 이용한 고급 암호화 알고리즘이다.
- ElGamal: 이산대수 문제를 바탕으로 한 알고리즘이다.
비대칭 암호화의 장점 🏆
- 확장성: 여러 사용자 간 키를 안전하게 교환할 수 있어 확장성이 뛰어나다.
- Key 동기화 안정성: 비대칭 암호화는 키 교환과 관련된 안정성을 높여준다.
- 인증 및 부인 방지: 전자서명을 통해 인증과 부인 방지 기능을 제공한다.
비대칭 암호화의 단점 ⚠️
- 계산 복잡성: 수학적 알고리즘이 복잡하여 암호화/복호화 처리 속도가 느리다.
- 암호문 크기 증가: 암호화된 데이터의 크기가 상대적으로 커진다, 이는 통신 속도에 영향을 미친다.
- MITM (Man In The Middle) 공격: 공격자가 중간에서 데이터를 탈취할 수 있는 위험이 있다. -> 인증서(전자서명)를 통해 해결
-1,2번 해결을 위해 나온 것이 하이브리드이고 MITM을 해결하기 위한 것이 인증서 방법이다.
그래서 등장한,
하이브리드(Hybrid) 암호화 방식 🔀
하이브리드 암호화는 대칭 암호화와 비대칭 암호화의 장점을 결합하여 사용하는 방식이다. 🔑
하이브리드 암호화의 특징:
- 대칭 암호화는 빠른 처리 속도를 자랑하고, 비대칭 암호화는 키 동기화와 인증에서 우수하다.
- 대칭 암호화로 빠른 암호화/복호화를 수행하고, 비대칭 암호화로 세션 키를 안전하게 교환한다.
-Key 동기화 🔑
Key 동기화는 암호화를 수행하기 전에 암호화에 사용할 키를 서로 교환하는 과정
비대칭 암호화에서의 키 동기화 🔄
비대칭 암호화는 키 동기화의 안정성을 높여주는 역할을 한다.
- 비대칭 암호화로 비밀키를 교환한 후, 대칭 암호화 방식으로 실제 통신을 진행한다.
- 이 방식은 통신 속도와 보안을 모두 만족시킬 수 있다.
- Key-Wrapping (Session Key) 방식:
- 임의의 값을 교환하여 한 시스템에서 생성된 비밀 키를 동기화하는 방식이다.
- 프로그램 간 연결이 개시될 때마다 새로운 키를 생성하며, 이를 Session Key라고 한다. 이 Session Key에는 Life Time이 부여된다.
- WEB에서 주로 사용된다.
- 이 방식은 새로운 비밀 키를 생성하고 이를 비대칭 암호화를 통해 안전하게 교환한다. 🔄
더보기세션키를 만들 때 클라이언트에서 대칭키를 만들어서 넘긴다.
대칭키는 핸드쉐이크를 할 때 생성된 클라이언트, 서버의 난수와 premaster secret키(임의로 생성)로 만든다
- Diffie-Hellman 방식:
Diffie-Hellman
- Diffie-Hellman 방식은 임의의 값을 교환하여 비밀 키를 생성하고 동기화하는 방식이다.
- 이산 대수를 이용하여, 초기 값으로 큰 수를 사용하면 공격자가 키를 획득하기 어려워 보안성이 강화된다.
1. 대칭키(세션키)를 먼저 "주는" 쪽
- 클라이언트(브라우저)가 대칭키 생성의 주도권을 가집니다.
2. 대칭키(세션키)는 어떻게 만들어지나?
- 핸드셰이크 과정에서 클라이언트와 서버가 각각 난수(random value)를 생성해 교환합니다.
- 클라이언트: Client Random
- 서버: Server Random
- 클라이언트가 생성한 Premaster Secret을 서버의 공개키로 암호화해 서버로 전송합니다.
- 서버는 자신의 개인키로 Premaster Secret을 복호화합니다.
- 최종적으로, 클라이언트와 서버는 아래 3가지 값을 조합해 세션키(대칭키)를 생성합니다:
- Client Random
- Server Random
- Premaster Secret
- 이 과정을 통해 양쪽 모두 동일한 세션키(대칭키)를 계산하게 되며, 이 키로 이후의 모든 데이터가 암호화됩니다12.
3. 요약 표
난수 생성 | 클라이언트/서버 | 각자 난수(Client Random, Server Random) 생성 및 교환 |
Premaster Secret 생성 | 클라이언트 | 임의의 Premaster Secret 생성 |
Premaster Secret 전달 | 클라이언트 | 서버의 공개키로 암호화해 서버에 전송 |
Premaster Secret 복호화 | 서버 | 자신의 개인키로 복호화 |
세션키(대칭키) 생성 | 클라이언트/서버 | Client Random, Server Random, Premaster Secret로 세션키 생성 |
4. 추가 설명
- 대칭키(세션키)는 네트워크로 직접 전달되지 않고, 양쪽이 동일한 방식으로 계산해 얻습니다.
- 이 방식은 중간에 키가 노출되는 위험을 막아줍니다.
- 실제 데이터 통신은 이 세션키(대칭키)로 암호화되어 빠르고 안전하게 이루어집니다12.
결론적으로, 클라이언트가 Premaster Secret을 생성해 서버에 전달하고, 양쪽이 난수와 Premaster Secret을 조합해 세션키(대칭키)를 만들어 사용합니다.
이 과정은 TLS 1.2 기준이며, TLS 1.3에서는 키 교환 방식이 일부 달라질 수 있습니다.
TLS 세션키(대칭키) 생성 과정
1. 대칭키(세션키)를 먼저 "주는" 쪽
- 클라이언트(브라우저)가 대칭키 생성의 주도권을 가집니다.
2. 대칭키(세션키)는 어떻게 만들어지나?
- 핸드셰이크 과정에서 클라이언트와 서버가 각각 난수(random value)를 생성해 교환합니다.
- 클라이언트: Client Random
- 서버: Server Random
- 클라이언트가 생성한 Premaster Secret을 서버의 공개키로 암호화해 서버로 전송합니다.
- 서버는 자신의 개인키로 Premaster Secret을 복호화합니다.
- 최종적으로, 클라이언트와 서버는 아래 3가지 값을 조합해 세션키(대칭키)를 생성합니다:
- Client Random
- Server Random
- Premaster Secret
- 이 과정을 통해 양쪽 모두 동일한 세션키(대칭키)를 계산하게 되며, 이 키로 이후의 모든 데이터가 암호화됩니다12.
3. 요약 표
난수 생성 | 클라이언트/서버 | 각자 난수(Client Random, Server Random) 생성 및 교환 |
Premaster Secret 생성 | 클라이언트 | 임의의 Premaster Secret 생성 |
Premaster Secret 전달 | 클라이언트 | 서버의 공개키로 암호화해 서버에 전송 |
Premaster Secret 복호화 | 서버 | 자신의 개인키로 복호화 |
세션키(대칭키) 생성 | 클라이언트/서버 | Client Random, Server Random, Premaster Secret로 세션키 생성 |
4. 추가 설명
- 대칭키(세션키)는 네트워크로 직접 전달되지 않고, 양쪽이 동일한 방식으로 계산해 얻습니다.
- 이 방식은 중간에 키가 노출되는 위험을 막아줍니다.
- 실제 데이터 통신은 이 세션키(대칭키)로 암호화되어 빠르고 안전하게 이루어집니다12.
결론적으로, 클라이언트가 Premaster Secret을 생성해 서버에 전달하고, 양쪽이 난수와 Premaster Secret을 조합해 세션키(대칭키)를 만들어 사용합니다.
이 과정은 TLS 1.2 기준이며, TLS 1.3에서는 키 교환 방식이 일부 달라질 수 있습니다.
- https://wecandev.tistory.com/187
- https://velog.io/@tkdtkd97/%EB%8C%80%EC%B9%AD%ED%82%A4-%EA%B3%B5%EA%B0%9C%ED%82%A4-HTTPS-SSLTLS-handshake
- https://www.cloudflare.com/ko-kr/learning/ssl/what-happens-in-a-tls-handshake/
- https://www.cloudflare.com/ko-kr/learning/ssl/what-is-a-session-key/
- https://sunrise-min.tistory.com/entry/TLS-Handshake%EB%8A%94-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%A7%84%ED%96%89%EB%90%98%EB%8A%94%EA%B0%80
- https://aeng-is-young.tistory.com/entry/HTTPSSSLTLS-%EC%84%B8%EC%85%98-%EC%84%B1%EB%A6%BD-%EA%B3%BC%EC%A0%95
- https://velog.io/@jungbumwoo/SSLTLS%EC%9D%B4%EB%9E%80-%EA%B7%B8%EB%A6%AC%EA%B3%A0-%EB%8C%80%EC%B9%AD%ED%82%A4%EC%99%80-%EA%B3%B5%EA%B0%9C%ED%82%A4
- https://jumbopop.tistory.com/13
- https://jh-labs.tistory.com/764
- https://babbab2.tistory.com/4
- https://velog.io/@1im_chaereong/HTTPS-SSLTLS-%ED%95%B8%EB%93%9C%EC%85%B0%EC%9D%B4%ED%81%AC%EC%99%80-%EC%84%B8%EC%85%98-%EA%B4%80%EB%A6%AC-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0
- https://velog.io/@9min3jun/SSL-TLS-%EB%8C%80%EC%B9%AD%ED%82%A4-%EA%B3%B5%EA%B0%9C%ED%82%A4
- https://jaeseongdev.github.io/development/2021/07/02/HTTPS,SSL,TLS/
- https://jeongchul.tistory.com/752
- https://clamp-coding.tistory.com/499
- https://trylhc.tistory.com/entry/TLS-%EC%9D%B8%EC%A6%9D%EC%84%9C-Certificate
- https://clamp-coding.tistory.com/498
- https://cuziam.tistory.com/entry/TLSHTTPS%EC%9D%98-%EB%8F%99%EC%9E%91-%EC%9B%90%EB%A6%AC%EC%99%80-%EA%B3%BC%EC%A0%95
- https://seolhee2750.tistory.com/262
- https://dydk1215.tistory.com/114
TLS 세션키(대칭키) 생성 과정
1. 대칭키(세션키)를 먼저 "주는" 쪽
- 클라이언트(브라우저)가 대칭키 생성의 주도권을 가집니다.
2. 대칭키(세션키)는 어떻게 만들어지나?
- 핸드셰이크 과정에서 클라이언트와 서버가 각각 난수(random value)를 생성해 교환합니다.
- 클라이언트: Client Random
- 서버: Server Random
- 클라이언트가 생성한 Premaster Secret을 서버의 공개키로 암호화해 서버로 전송합니다.
- 서버는 자신의 개인키로 Premaster Secret을 복호화합니다.
- 최종적으로, 클라이언트와 서버는 아래 3가지 값을 조합해 세션키(대칭키)를 생성합니다:
- Client Random
- Server Random
- Premaster Secret
- 이 과정을 통해 양쪽 모두 동일한 세션키(대칭키)를 계산하게 되며, 이 키로 이후의 모든 데이터가 암호화됩니다12.
3. 요약 표
난수 생성 | 클라이언트/서버 | 각자 난수(Client Random, Server Random) 생성 및 교환 |
Premaster Secret 생성 | 클라이언트 | 임의의 Premaster Secret 생성 |
Premaster Secret 전달 | 클라이언트 | 서버의 공개키로 암호화해 서버에 전송 |
Premaster Secret 복호화 | 서버 | 자신의 개인키로 복호화 |
세션키(대칭키) 생성 | 클라이언트/서버 | Client Random, Server Random, Premaster Secret로 세션키 생성 |
4. 추가 설명
- 대칭키(세션키)는 네트워크로 직접 전달되지 않고, 양쪽이 동일한 방식으로 계산해 얻습니다.
- 이 방식은 중간에 키가 노출되는 위험을 막아줍니다.
- 실제 데이터 통신은 이 세션키(대칭키)로 암호화되어 빠르고 안전하게 이루어집니다12.
결론적으로, 클라이언트가 Premaster Secret을 생성해 서버에 전달하고, 양쪽이 난수와 Premaster Secret을 조합해 세션키(대칭키)를 만들어 사용합니다.
이 과정은 TLS 1.2 기준이며, TLS 1.3에서는 키 교환 방식이 일부 달라질 수 있습니다.
- https://wecandev.tistory.com/187
- https://velog.io/@tkdtkd97/%EB%8C%80%EC%B9%AD%ED%82%A4-%EA%B3%B5%EA%B0%9C%ED%82%A4-HTTPS-SSLTLS-handshake
- https://www.cloudflare.com/ko-kr/learning/ssl/what-happens-in-a-tls-handshake/
- https://www.cloudflare.com/ko-kr/learning/ssl/what-is-a-session-key/
- https://sunrise-min.tistory.com/entry/TLS-Handshake%EB%8A%94-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%A7%84%ED%96%89%EB%90%98%EB%8A%94%EA%B0%80
- https://aeng-is-young.tistory.com/entry/HTTPSSSLTLS-%EC%84%B8%EC%85%98-%EC%84%B1%EB%A6%BD-%EA%B3%BC%EC%A0%95
- https://velog.io/@jungbumwoo/SSLTLS%EC%9D%B4%EB%9E%80-%EA%B7%B8%EB%A6%AC%EA%B3%A0-%EB%8C%80%EC%B9%AD%ED%82%A4%EC%99%80-%EA%B3%B5%EA%B0%9C%ED%82%A4
- https://jumbopop.tistory.com/13
- https://jh-labs.tistory.com/764
- https://babbab2.tistory.com/4
- https://velog.io/@1im_chaereong/HTTPS-SSLTLS-%ED%95%B8%EB%93%9C%EC%85%B0%EC%9D%B4%ED%81%AC%EC%99%80-%EC%84%B8%EC%85%98-%EA%B4%80%EB%A6%AC-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0
- https://velog.io/@9min3jun/SSL-TLS-%EB%8C%80%EC%B9%AD%ED%82%A4-%EA%B3%B5%EA%B0%9C%ED%82%A4
- https://jaeseongdev.github.io/development/2021/07/02/HTTPS,SSL,TLS/
- https://jeongchul.tistory.com/752
- https://clamp-coding.tistory.com/499
- https://trylhc.tistory.com/entry/TLS-%EC%9D%B8%EC%A6%9D%EC%84%9C-Certificate
- https://clamp-coding.tistory.com/498
- https://cuziam.tistory.com/entry/TLSHTTPS%EC%9D%98-%EB%8F%99%EC%9E%91-%EC%9B%90%EB%A6%AC%EC%99%80-%EA%B3%BC%EC%A0%95
- https://seolhee2750.tistory.com/262
- https://dydk1215.tistory.com/114
TLS 세션키(대칭키) 생성 과정
1. 대칭키(세션키)를 먼저 "주는" 쪽
- 클라이언트(브라우저)가 대칭키 생성의 주도권을 가집니다.
2. 대칭키(세션키)는 어떻게 만들어지나?
- 핸드셰이크 과정에서 클라이언트와 서버가 각각 난수(random value)를 생성해 교환합니다.
- 클라이언트: Client Random
- 서버: Server Random
- 클라이언트가 생성한 Premaster Secret을 서버의 공개키로 암호화해 서버로 전송합니다.
- 서버는 자신의 개인키로 Premaster Secret을 복호화합니다.
- 최종적으로, 클라이언트와 서버는 아래 3가지 값을 조합해 세션키(대칭키)를 생성합니다:
- Client Random
- Server Random
- Premaster Secret
- 이 과정을 통해 양쪽 모두 동일한 세션키(대칭키)를 계산하게 되며, 이 키로 이후의 모든 데이터가 암호화됩니다12.
3. 요약 표
난수 생성 | 클라이언트/서버 | 각자 난수(Client Random, Server Random) 생성 및 교환 |
Premaster Secret 생성 | 클라이언트 | 임의의 Premaster Secret 생성 |
Premaster Secret 전달 | 클라이언트 | 서버의 공개키로 암호화해 서버에 전송 |
Premaster Secret 복호화 | 서버 | 자신의 개인키로 복호화 |
세션키(대칭키) 생성 | 클라이언트/서버 | Client Random, Server Random, Premaster Secret로 세션키 생성 |
4. 추가 설명
- 대칭키(세션키)는 네트워크로 직접 전달되지 않고, 양쪽이 동일한 방식으로 계산해 얻습니다.
- 이 방식은 중간에 키가 노출되는 위험을 막아줍니다.
- 실제 데이터 통신은 이 세션키(대칭키)로 암호화되어 빠르고 안전하게 이루어집니다12.
결론적으로, 클라이언트가 Premaster Secret을 생성해 서버에 전달하고, 양쪽이 난수와 Premaster Secret을 조합해 세션키(대칭키)를 만들어 사용합니다.
이 과정은 TLS 1.2 기준이며, TLS 1.3에서는 키 교환 방식이 일부 달라질 수 있습니다.
- https://wecandev.tistory.com/187
- https://velog.io/@tkdtkd97/%EB%8C%80%EC%B9%AD%ED%82%A4-%EA%B3%B5%EA%B0%9C%ED%82%A4-HTTPS-SSLTLS-handshake
- https://www.cloudflare.com/ko-kr/learning/ssl/what-happens-in-a-tls-handshake/
- https://www.cloudflare.com/ko-kr/learning/ssl/what-is-a-session-key/
- https://sunrise-min.tistory.com/entry/TLS-Handshake%EB%8A%94-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%A7%84%ED%96%89%EB%90%98%EB%8A%94%EA%B0%80
- https://aeng-is-young.tistory.com/entry/HTTPSSSLTLS-%EC%84%B8%EC%85%98-%EC%84%B1%EB%A6%BD-%EA%B3%BC%EC%A0%95
- https://velog.io/@jungbumwoo/SSLTLS%EC%9D%B4%EB%9E%80-%EA%B7%B8%EB%A6%AC%EA%B3%A0-%EB%8C%80%EC%B9%AD%ED%82%A4%EC%99%80-%EA%B3%B5%EA%B0%9C%ED%82%A4
- https://jumbopop.tistory.com/13
- https://jh-labs.tistory.com/764
- https://babbab2.tistory.com/4
- https://velog.io/@1im_chaereong/HTTPS-SSLTLS-%ED%95%B8%EB%93%9C%EC%85%B0%EC%9D%B4%ED%81%AC%EC%99%80-%EC%84%B8%EC%85%98-%EA%B4%80%EB%A6%AC-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0
- https://velog.io/@9min3jun/SSL-TLS-%EB%8C%80%EC%B9%AD%ED%82%A4-%EA%B3%B5%EA%B0%9C%ED%82%A4
- https://jaeseongdev.github.io/development/2021/07/02/HTTPS,SSL,TLS/
- https://jeongchul.tistory.com/752
- https://clamp-coding.tistory.com/499
- https://trylhc.tistory.com/entry/TLS-%EC%9D%B8%EC%A6%9D%EC%84%9C-Certificate
- https://clamp-coding.tistory.com/498
- https://cuziam.tistory.com/entry/TLSHTTPS%EC%9D%98-%EB%8F%99%EC%9E%91-%EC%9B%90%EB%A6%AC%EC%99%80-%EA%B3%BC%EC%A0%95
- https://seolhee2750.tistory.com/262
- https://dydk1215.tistory.com/114
TLS 세션키(대칭키) 생성 과정
1. 대칭키(세션키)를 먼저 "주는" 쪽
- 클라이언트(브라우저)가 대칭키 생성의 주도권을 가집니다.
2. 대칭키(세션키)는 어떻게 만들어지나?
- 핸드셰이크 과정에서 클라이언트와 서버가 각각 난수(random value)를 생성해 교환합니다.
- 클라이언트: Client Random
- 서버: Server Random
- 클라이언트가 생성한 Premaster Secret을 서버의 공개키로 암호화해 서버로 전송합니다.
- 서버는 자신의 개인키로 Premaster Secret을 복호화합니다.
- 최종적으로, 클라이언트와 서버는 아래 3가지 값을 조합해 세션키(대칭키)를 생성합니다:
- Client Random
- Server Random
- Premaster Secret
- 이 과정을 통해 양쪽 모두 동일한 세션키(대칭키)를 계산하게 되며, 이 키로 이후의 모든 데이터가 암호화됩니다12.
3. 요약 표
난수 생성 | 클라이언트/서버 | 각자 난수(Client Random, Server Random) 생성 및 교환 |
Premaster Secret 생성 | 클라이언트 | 임의의 Premaster Secret 생성 |
Premaster Secret 전달 | 클라이언트 | 서버의 공개키로 암호화해 서버에 전송 |
Premaster Secret 복호화 | 서버 | 자신의 개인키로 복호화 |
세션키(대칭키) 생성 | 클라이언트/서버 | Client Random, Server Random, Premaster Secret로 세션키 생성 |
4. 추가 설명
- 대칭키(세션키)는 네트워크로 직접 전달되지 않고, 양쪽이 동일한 방식으로 계산해 얻습니다.
- 이 방식은 중간에 키가 노출되는 위험을 막아줍니다.
- 실제 데이터 통신은 이 세션키(대칭키)로 암호화되어 빠르고 안전하게 이루어집니다12.
결론적으로, 클라이언트가 Premaster Secret을 생성해 서버에 전달하고, 양쪽이 난수와 Premaster Secret을 조합해 세션키(대칭키)를 만들어 사용합니다.
이 과정은 TLS 1.2 기준이며, TLS 1.3에서는 키 교환 방식이 일부 달라질 수 있습니다.
- https://wecandev.tistory.com/187
- https://velog.io/@tkdtkd97/%EB%8C%80%EC%B9%AD%ED%82%A4-%EA%B3%B5%EA%B0%9C%ED%82%A4-HTTPS-SSLTLS-handshake
- https://www.cloudflare.com/ko-kr/learning/ssl/what-happens-in-a-tls-handshake/
- https://www.cloudflare.com/ko-kr/learning/ssl/what-is-a-session-key/
- https://sunrise-min.tistory.com/entry/TLS-Handshake%EB%8A%94-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%A7%84%ED%96%89%EB%90%98%EB%8A%94%EA%B0%80
- https://aeng-is-young.tistory.com/entry/HTTPSSSLTLS-%EC%84%B8%EC%85%98-%EC%84%B1%EB%A6%BD-%EA%B3%BC%EC%A0%95
- https://velog.io/@jungbumwoo/SSLTLS%EC%9D%B4%EB%9E%80-%EA%B7%B8%EB%A6%AC%EA%B3%A0-%EB%8C%80%EC%B9%AD%ED%82%A4%EC%99%80-%EA%B3%B5%EA%B0%9C%ED%82%A4
- https://jumbopop.tistory.com/13
- https://jh-labs.tistory.com/764
- https://babbab2.tistory.com/4
- https://velog.io/@1im_chaereong/HTTPS-SSLTLS-%ED%95%B8%EB%93%9C%EC%85%B0%EC%9D%B4%ED%81%AC%EC%99%80-%EC%84%B8%EC%85%98-%EA%B4%80%EB%A6%AC-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0
- https://velog.io/@9min3jun/SSL-TLS-%EB%8C%80%EC%B9%AD%ED%82%A4-%EA%B3%B5%EA%B0%9C%ED%82%A4
- https://jaeseongdev.github.io/development/2021/07/02/HTTPS,SSL,TLS/
- https://jeongchul.tistory.com/752
- https://clamp-coding.tistory.com/499
- https://trylhc.tistory.com/entry/TLS-%EC%9D%B8%EC%A6%9D%EC%84%9C-Certificate
- https://clamp-coding.tistory.com/498
- https://cuziam.tistory.com/entry/TLSHTTPS%EC%9D%98-%EB%8F%99%EC%9E%91-%EC%9B%90%EB%A6%AC%EC%99%80-%EA%B3%BC%EC%A0%95
- https://seolhee2750.tistory.com/262
- https://dydk1215.tistory.com/114
Diffie-Hellman 키 동기화 동작 방식 🔄
Diffie-Hellman 키 동기화는 다음과 같은 절차로 동작한다:
전제 조건:
- DH 키 그룹으로 정의되어 있고, 사용 시에는 같은 그룹을 선택해야 한다.
- p: 소수(1024bit 이상)
- g: DH 알고리즘 초기 값 (1 < g < p)
Client 측 동작:
- 임의의 개인 키(b)를 생성한다.
- 개인 키 b와 p, g 값을 이용해 공개 키(a)를 생성한다:
- a=gbmod pa = g^b \mod p
- 생성된 공개 키 a를 Server에게 전달한다.
Server 측 동작:
- 임의의 개인 키(y)를 생성한다.
- 개인 키 y와 p, g 값을 이용해 공개 키(x)를 생성한다:
- x=gymod px = g^y \mod p
- 생성된 공개 키 x를 Client에게 전달한다.
Client 측에서 비밀 키 생성:
- Client는 Server의 공개 키(x)와 자신의 개인 키(b)를 이용하여 비밀 키 s를 생성한다:
- s=xbmod ps = x^b \mod p
Server 측에서 비밀 키 생성:
- Server는 Client의 공개 키(a)와 자신의 개인 키(y)를 이용하여 비밀 키 s를 생성한다:
- s=aymod ps = a^y \mod p
이렇게 해서 Client와 Server는 동일한 비밀 키 s를 가지게 된다. 이 비밀 키는 이후 통신에 사용된다.
보통 클라이언트가 사용할 수 있는 알고리즘과 관련된 내용을 전부 서버 측에 전송을 하고, 서버는 그중 하나의 알고리즘을 선택하여 협상과정을 진행한다. 한쪽에서 정수와 소숫값을 임의로 정해서 보내준다.
하지만 이는 프로그램마다 조금씩 다르기 때문에 다 분석을 해봐야 한다.
'Cryptology' 카테고리의 다른 글
리눅스 방화벽 및 서버 구축 실습 (vm 4개로 서로 통신, log기록설정 등 해보기) (0) | 2025.05.27 |
---|---|
SSL - HTTPS, VSFTPS 구성해보기, 인증서 만들기 (0) | 2025.04.30 |
MITM(Man-in-the-Middle 공격과 인증서 (0) | 2025.04.25 |
SSH, SCP, firewalld, iptables 작동방식, 사용법 (0) | 2025.04.23 |
암호학(Cryptology)이란? 요소, 과정, 종류 (0) | 2025.04.22 |