암호화 - 단방향 암호(hash, MAC), 양방향 암호(대칭, 비대칭)

2025. 4. 23. 22:46·Cryptology

 

암호화의 목적: 기밀성 유지 🔐

정보 보호의 가장 중요한 목적 중 하나는 기밀성을 유지하는 것.

기밀성은 인가받은 사용자만 정보에 접근할 수 있도록 보장하는 성질 -> 이를 통해 민감한 정보를 안전하게 보호


단방향 암호화 (One-way Encryption) 🔄

단방향 암호화는 알고리즘을 사용해 암호화만 가능하고 복호화는 불가능한 방식. 주로 메시지 인증 용도로 사용되며, 이는 무결성을 보장하는 데 중점을 둠.

  • 무결성: 정보가 전송 중에 변경되지 않도록 하는 것. 즉, 아무나 정보를 변경할 수 없게 만들어 정보의 신뢰성을 만족시키는 것이 목적. 완벽, 순수

단방향 암호화의 특징

  1. 암호화는 가능하고 복호화는 불가능
  2. 원본이 조금이라도 달라지면 암호문이 정상적으로 작동하지 않음.
  3. 원본의 크기와 관계없이 암호문의 크기는 항상 동일

주요 특징:

  • Hash 알고리즘을 사용하여 계산된 고정 크기의 값을 이용해 진위 여부를 확인
  • 암호화 알고리즘은 존재하지 않으므로, 복호화가 불가능
  • 메시지의 무결성을 확인하는 데 사용암호문의 크기는 고정되어 있기 때문에, 원본의 크기와 암호문의 용량 크기를 보고 유추할 수 없다. 예를 들어, 1bit만 다르면 암호문은 아예 열리지 않으며, 다른 사람이 크기만 보고 원본을 추측할 수 없게 된다. 🤫

    • 암호화 종류 🧑‍💻
    •  
    • 1.MAC
    • 2. Hash 

 

 

    • MAC 주요 특징:

      • 암호화된 값으로, 복호화는 불가능
      • 메시지가 변조되지 않았는지 확인하기 위한 방법
      • 데이터를 전달할 때, 전송된 메시지가 원본 그대로인지 확인메시지 인증 코드 (MAC, Message Authentication Code) 📝
    • Hash 주요 특징:  
      •   데이터를 평문으로 사용하여지정 된 알고리즘으로 계산된 지정된 크기의 값을 이용하여 진위여부를 확인
      • 암호화의 알고리즘만 존재하므로 복호화가 불가능함 
  • 메시지 자체의 무결성을 확인하는 것인지, (변조여부) -hash
    이 메시지를 보낸 사용자가 증명된 사람인지 확인하는 것의 차이 -MAC

 

 


양방향 암호화 (Two-way Encryption) 🔑

양방향 암호화는 한 쌍의 알고리즘(암호화/복호화)을 통해 암호화된 데이터를 복호화할 수 있는 방식. 이를 통해 안전하게 데이터를 주고받을 수 있음. 🔄

주요 암호화 방식

  1. 대칭 암호화 (Symmetric Cryptography): 암호화와 복호화에 동일한 키를 사용하는 방식. 비밀키나 공유키라고도 불림.
  2. 비대칭 암호화 (Asymmetric Cryptography): 암호화와 복호화에 서로 다른 키를 사용하는 방식. 일반적으로 공개키와 개인키 쌍으로 이루어져 있다.

대칭 암호화 (Symmetric Encryption) 🔑

대칭 암호화는 암호화와 복호화에 동일한 키를 사용하는 방식으로, 주로 통신용 데이터 암호화에 사용

대칭 암호화 종류

  1. 스트림 암호화 (Stream Cipher): 비트, 바이트, 워드 단위로 데이터를 암호화하며, 암호화된 데이터의 크기는 변하지 않는다. 이 방식은 처리 속도가 빠름. 🔥
    • 예: RC4, A5/1 등
  2. 블록 암호화 (Block Cipher): 데이터는 고정된 크기의 블록으로 나누어 암호화. 처리 과정은 복잡하고 속도는 상대적으로 느리지만 보안성이 높다. 🧑‍💻
    • 예: DES, AES 등

대칭 암호화 알고리즘

  1. DES (Data Encryption Standard) 💻
    • 1974년 IBM에서 개발하고 1977년 미국의 표준으로 채택된 대칭 알고리즘.
    • 블록 크기: 64bit, 대칭 키 크기: 56bit (패리티 비트 포함)
    • 파이스텔 구조(Feistel structure)를 사용하여 16번의 Round 계산을 반복.
    • 하지만 무차별 대입 공격(Brute Force)으로 파괴 가능하므로 현재는 더 안전한 방식으로 대체. 🛡️
  2. 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: 이산대수 문제를 바탕으로 한 알고리즘이다.

비대칭 암호화의 장점 🏆

  1. 확장성: 여러 사용자 간 키를 안전하게 교환할 수 있어 확장성이 뛰어나다.
  2. Key 동기화 안정성: 비대칭 암호화는 키 교환과 관련된 안정성을 높여준다.
  3. 인증 및 부인 방지: 전자서명을 통해 인증과 부인 방지 기능을 제공한다.

비대칭 암호화의 단점 ⚠️

  1. 계산 복잡성: 수학적 알고리즘이 복잡하여 암호화/복호화 처리 속도가 느리다.
  2. 암호문 크기 증가: 암호화된 데이터의 크기가 상대적으로 커진다, 이는 통신 속도에 영향을 미친다.
  3. MITM (Man In The Middle) 공격: 공격자가 중간에서 데이터를 탈취할 수 있는 위험이 있다. -> 인증서(전자서명)를 통해 해결

-1,2번 해결을 위해 나온 것이 하이브리드이고 MITM을 해결하기 위한 것이 인증서 방법이다.


그래서 등장한,

하이브리드(Hybrid) 암호화 방식 🔀

하이브리드 암호화는 대칭 암호화와 비대칭 암호화의 장점을 결합하여 사용하는 방식이다. 🔑

하이브리드 암호화의 특징:

  • 대칭 암호화는 빠른 처리 속도를 자랑하고, 비대칭 암호화는 키 동기화와 인증에서 우수하다.
  • 대칭 암호화로 빠른 암호화/복호화를 수행하고, 비대칭 암호화로 세션 키를 안전하게 교환한다.

-Key 동기화 🔑

Key 동기화는 암호화를 수행하기 전에 암호화에 사용할 키를 서로 교환하는 과정

 

비대칭 암호화에서의 키 동기화 🔄

비대칭 암호화는 키 동기화의 안정성을 높여주는 역할을 한다.

  1. 비대칭 암호화로 비밀키를 교환한 후, 대칭 암호화 방식으로 실제 통신을 진행한다.
  2. 이 방식은 통신 속도와 보안을 모두 만족시킬 수 있다.

  1. Key-Wrapping (Session Key) 방식:

    • 임의의 값을 교환하여 한 시스템에서 생성된 비밀 키를 동기화하는 방식이다.
    • 프로그램 간 연결이 개시될 때마다 새로운 키를 생성하며, 이를 Session Key라고 한다. 이 Session Key에는 Life Time이 부여된다.
    • WEB에서 주로 사용된다.
    • 이 방식은 새로운 비밀 키를 생성하고 이를 비대칭 암호화를 통해 안전하게 교환한다. 🔄
      더보기
      세션키를 만들 때 클라이언트에서 대칭키를 만들어서 넘긴다.
      대칭키는 핸드쉐이크를 할 때 생성된 클라이언트, 서버의 난수와 premaster secret키(임의로 생성)로 만든다
  2. Diffie-Hellman 방식:
    Diffie-Hellman

    • Diffie-Hellman 방식은 임의의 값을 교환하여 비밀 키를 생성하고 동기화하는 방식이다.
    • 이산 대수를 이용하여, 초기 값으로 큰 수를 사용하면 공격자가 키를 획득하기 어려워 보안성이 강화된다.

1. 대칭키(세션키)를 먼저 "주는" 쪽

  • 클라이언트(브라우저)가 대칭키 생성의 주도권을 가집니다.
    • 클라이언트가 "Premaster Secret"라는 임의의 값을 생성합니다.
    • 이 값을 서버의 공개키로 암호화해서 서버에 전달합니다.
    • 서버는 자신의 개인키로 이를 복호화해 동일한 Premaster Secret 값을 얻습니다12.

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 핸드셰이크에서 대칭키는 어떻게 안전하게 만들어지는지 알고 싶어요
 
클라이언트와 서버가 세션키에 어떻게 합의하는지 궁금해요
 
공개키 암호화와 대칭키 암호화의 역할 차이는 무엇인가요
 
세션 키가 재사용되지 않도록 하는 방법은 무엇인지 알고 싶어요
 
 
 

TLS 세션키(대칭키) 생성 과정

1. 대칭키(세션키)를 먼저 "주는" 쪽

  • 클라이언트(브라우저)가 대칭키 생성의 주도권을 가집니다.
    • 클라이언트가 "Premaster Secret"라는 임의의 값을 생성합니다.
    • 이 값을 서버의 공개키로 암호화해서 서버에 전달합니다.
    • 서버는 자신의 개인키로 이를 복호화해 동일한 Premaster Secret 값을 얻습니다12.

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에서는 키 교환 방식이 일부 달라질 수 있습니다.

  1. https://wecandev.tistory.com/187
  2. 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
  3. https://www.cloudflare.com/ko-kr/learning/ssl/what-happens-in-a-tls-handshake/
  4. https://www.cloudflare.com/ko-kr/learning/ssl/what-is-a-session-key/
  5. 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
  6. 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
  7. 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
  8. https://jumbopop.tistory.com/13
  9. https://jh-labs.tistory.com/764
  10. https://babbab2.tistory.com/4
  11. 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
  12. https://velog.io/@9min3jun/SSL-TLS-%EB%8C%80%EC%B9%AD%ED%82%A4-%EA%B3%B5%EA%B0%9C%ED%82%A4
  13. https://jaeseongdev.github.io/development/2021/07/02/HTTPS,SSL,TLS/
  14. https://jeongchul.tistory.com/752
  15. https://clamp-coding.tistory.com/499
  16. https://trylhc.tistory.com/entry/TLS-%EC%9D%B8%EC%A6%9D%EC%84%9C-Certificate
  17. https://clamp-coding.tistory.com/498
  18. 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
  19. https://seolhee2750.tistory.com/262
  20. https://dydk1215.tistory.com/114

TLS 세션키(대칭키) 생성 과정

1. 대칭키(세션키)를 먼저 "주는" 쪽

  • 클라이언트(브라우저)가 대칭키 생성의 주도권을 가집니다.
    • 클라이언트가 "Premaster Secret"라는 임의의 값을 생성합니다.
    • 이 값을 서버의 공개키로 암호화해서 서버에 전달합니다.
    • 서버는 자신의 개인키로 이를 복호화해 동일한 Premaster Secret 값을 얻습니다12.

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에서는 키 교환 방식이 일부 달라질 수 있습니다.

  1. https://wecandev.tistory.com/187
  2. 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
  3. https://www.cloudflare.com/ko-kr/learning/ssl/what-happens-in-a-tls-handshake/
  4. https://www.cloudflare.com/ko-kr/learning/ssl/what-is-a-session-key/
  5. 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
  6. 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
  7. 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
  8. https://jumbopop.tistory.com/13
  9. https://jh-labs.tistory.com/764
  10. https://babbab2.tistory.com/4
  11. 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
  12. https://velog.io/@9min3jun/SSL-TLS-%EB%8C%80%EC%B9%AD%ED%82%A4-%EA%B3%B5%EA%B0%9C%ED%82%A4
  13. https://jaeseongdev.github.io/development/2021/07/02/HTTPS,SSL,TLS/
  14. https://jeongchul.tistory.com/752
  15. https://clamp-coding.tistory.com/499
  16. https://trylhc.tistory.com/entry/TLS-%EC%9D%B8%EC%A6%9D%EC%84%9C-Certificate
  17. https://clamp-coding.tistory.com/498
  18. 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
  19. https://seolhee2750.tistory.com/262
  20. https://dydk1215.tistory.com/114

TLS 세션키(대칭키) 생성 과정

1. 대칭키(세션키)를 먼저 "주는" 쪽

  • 클라이언트(브라우저)가 대칭키 생성의 주도권을 가집니다.
    • 클라이언트가 "Premaster Secret"라는 임의의 값을 생성합니다.
    • 이 값을 서버의 공개키로 암호화해서 서버에 전달합니다.
    • 서버는 자신의 개인키로 이를 복호화해 동일한 Premaster Secret 값을 얻습니다12.

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에서는 키 교환 방식이 일부 달라질 수 있습니다.

  1. https://wecandev.tistory.com/187
  2. 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
  3. https://www.cloudflare.com/ko-kr/learning/ssl/what-happens-in-a-tls-handshake/
  4. https://www.cloudflare.com/ko-kr/learning/ssl/what-is-a-session-key/
  5. 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
  6. 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
  7. 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
  8. https://jumbopop.tistory.com/13
  9. https://jh-labs.tistory.com/764
  10. https://babbab2.tistory.com/4
  11. 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
  12. https://velog.io/@9min3jun/SSL-TLS-%EB%8C%80%EC%B9%AD%ED%82%A4-%EA%B3%B5%EA%B0%9C%ED%82%A4
  13. https://jaeseongdev.github.io/development/2021/07/02/HTTPS,SSL,TLS/
  14. https://jeongchul.tistory.com/752
  15. https://clamp-coding.tistory.com/499
  16. https://trylhc.tistory.com/entry/TLS-%EC%9D%B8%EC%A6%9D%EC%84%9C-Certificate
  17. https://clamp-coding.tistory.com/498
  18. 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
  19. https://seolhee2750.tistory.com/262
  20. https://dydk1215.tistory.com/114

TLS 세션키(대칭키) 생성 과정

1. 대칭키(세션키)를 먼저 "주는" 쪽

  • 클라이언트(브라우저)가 대칭키 생성의 주도권을 가집니다.
    • 클라이언트가 "Premaster Secret"라는 임의의 값을 생성합니다.
    • 이 값을 서버의 공개키로 암호화해서 서버에 전달합니다.
    • 서버는 자신의 개인키로 이를 복호화해 동일한 Premaster Secret 값을 얻습니다12.

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에서는 키 교환 방식이 일부 달라질 수 있습니다.

  1. https://wecandev.tistory.com/187
  2. 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
  3. https://www.cloudflare.com/ko-kr/learning/ssl/what-happens-in-a-tls-handshake/
  4. https://www.cloudflare.com/ko-kr/learning/ssl/what-is-a-session-key/
  5. 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
  6. 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
  7. 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
  8. https://jumbopop.tistory.com/13
  9. https://jh-labs.tistory.com/764
  10. https://babbab2.tistory.com/4
  11. 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
  12. https://velog.io/@9min3jun/SSL-TLS-%EB%8C%80%EC%B9%AD%ED%82%A4-%EA%B3%B5%EA%B0%9C%ED%82%A4
  13. https://jaeseongdev.github.io/development/2021/07/02/HTTPS,SSL,TLS/
  14. https://jeongchul.tistory.com/752
  15. https://clamp-coding.tistory.com/499
  16. https://trylhc.tistory.com/entry/TLS-%EC%9D%B8%EC%A6%9D%EC%84%9C-Certificate
  17. https://clamp-coding.tistory.com/498
  18. 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
  19. https://seolhee2750.tistory.com/262
  20. https://dydk1215.tistory.com/114

 

 


Diffie-Hellman 키 동기화 동작 방식 🔄

Diffie-Hellman 키 동기화는 다음과 같은 절차로 동작한다:

전제 조건:

  • DH 키 그룹으로 정의되어 있고, 사용 시에는 같은 그룹을 선택해야 한다.
  • p: 소수(1024bit 이상)
  • g: DH 알고리즘 초기 값 (1 < g < p)

Client 측 동작:

  1. 임의의 개인 키(b)를 생성한다.
  2. 개인 키 b와 p, g 값을 이용해 공개 키(a)를 생성한다:
    • a=gbmod  pa = g^b \mod p
  3. 생성된 공개 키 a를 Server에게 전달한다.

Server 측 동작:

  1. 임의의 개인 키(y)를 생성한다.
  2. 개인 키 y와 p, g 값을 이용해 공개 키(x)를 생성한다:
    • x=gymod  px = g^y \mod p
  3. 생성된 공개 키 x를 Client에게 전달한다.

Client 측에서 비밀 키 생성:

  1. Client는 Server의 공개 키(x)와 자신의 개인 키(b)를 이용하여 비밀 키 s를 생성한다:
    • s=xbmod  ps = x^b \mod p

Server 측에서 비밀 키 생성:

  1. 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
'Cryptology' 카테고리의 다른 글
  • SSL - HTTPS, VSFTPS 구성해보기, 인증서 만들기
  • MITM(Man-in-the-Middle 공격과 인증서
  • SSH, SCP, firewalld, iptables 작동방식, 사용법
  • 암호학(Cryptology)이란? 요소, 과정, 종류
햅삐root
햅삐root
happyroot 님의 블로그 입니다. IT 보안 정리💛
  • 햅삐root
    햅삐한 root
    햅삐root
  • 전체
    오늘
    어제
    • 전체보기 IT (123)
      • Linux (21)
      • Network (23)
      • packet tracer& GNS3 (10)
      • Cryptology (7)
      • WEB (16)
      • DB (16)
      • Hacking (28)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    sqlinjection
    Hack
    injectionvector
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
햅삐root
암호화 - 단방향 암호(hash, MAC), 양방향 암호(대칭, 비대칭)
상단으로

티스토리툴바