Skip to content

Commit

Permalink
12_13 기술면접 수정
Browse files Browse the repository at this point in the history
  • Loading branch information
Kdreamtomaster committed Dec 13, 2024
1 parent 82fc48f commit 4e7dc07
Show file tree
Hide file tree
Showing 2 changed files with 163 additions and 0 deletions.
77 changes: 77 additions & 0 deletions CS_basic/Network/SSL_TLS_HandShake/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
# SSL/TLS Handshake 과정

SSL/TLS 핸드쉐이크는 클라이언트와 서버 간에 안전한 통신 채널을 설정하는 과정입니다. 다음은 주요 단계를 설명한 내용입니다:

---

## 1. **Client Hello**
- 클라이언트가 서버에 핸드쉐이크를 시작하는 메시지를 보냅니다.
- 포함된 정보:
- 지원하는 **암호화 방식(Cipher Suites)** 목록
- **TLS/SSL 버전**
- 랜덤 데이터(Nonce)

---

## 2. **Server Hello**
- 서버가 클라이언트에 응답합니다.
- 포함된 정보:
- 선택된 **암호화 방식**
- **TLS/SSL 버전**
- 랜덤 데이터(Nonce)

---

## 3. **Server Certificate**
- 서버는 자신의 인증서를 클라이언트에 보냅니다.
- **인증서 내용**:
- 서버의 공개 키
- 서버의 도메인 이름
- 인증 기관(CA) 서명

---

## 4. **Key Exchange**
- **(옵션) Server Key Exchange**: 추가 키 교환 데이터를 전송 (예: DHE 또는 ECDHE 사용 시).
- **Client Key Exchange**:
- 클라이언트는 공유 키를 생성하기 위해 서버의 공개 키를 사용하여 데이터를 암호화한 후 서버에 전송합니다.

---

## 5. **Session Key 생성**
- 클라이언트와 서버는 각각 전송된 데이터를 바탕으로 세션 키를 생성합니다.
- 세션 키는 이후 대칭 암호화에 사용됩니다.

---

## 6. **Finished**
- 양측이 핸드쉐이크 완료 메시지를 암호화하여 전송합니다.
- 클라이언트와 서버는 각각 생성된 세션 키로 암호화된 "Finished" 메시지를 보냅니다.
- 메시지가 정상적으로 해독되면 핸드쉐이크가 완료됩니다.

---

## 결과: 보안 통신 시작
- 핸드쉐이크가 완료되면, 클라이언트와 서버 간의 데이터는 세션 키를 사용해 암호화되어 안전하게 전송됩니다.

---

## SSL/TLS 핸드쉐이크 과정 다이어그램

```plaintext
Client Server
| |
| ----------- Client Hello -------->|
| |
| <----------- Server Hello --------|
| |
| <------- Server Certificate ------|
| |
| - - (옵션) Server Key Exchange -->|
| |
| -------- Client Key Exchange ---->|
| |
| ----------- Finished ------------>|
| <----------- Finished ------------|
| |
| [ Secure Communication ] |
86 changes: 86 additions & 0 deletions CS_basic/Security/RSA/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@

# RSA 암호화 알고리즘

RSA는 공개 키 암호화 알고리즘으로, 공개 키와 개인 키를 사용하여 데이터를 암호화하고 복호화합니다. 아래는 RSA의 작동 원리와 과정을 설명합니다.

---

## 1. **RSA의 핵심 개념**
- **비대칭 암호화**:
- 공개 키(public key)는 데이터를 암호화하는 데 사용됩니다.
- 개인 키(private key)는 데이터를 복호화하는 데 사용됩니다.
- 소인수분해의 어려움에 기반:
- 큰 소수 두 개를 곱한 값(모듈러스)의 소인수분해가 매우 어렵다는 수학적 원리를 이용합니다.

---

## 2. **키 생성 과정**
1. 두 개의 큰 소수 \( p \)\( q \)를 선택:
- \( p \), \( q \)는 임의의 큰 소수.
2. \( n = p imes q \) 계산:
- \( n \)은 공개 키와 개인 키 모두에서 사용되는 모듈러스.
3. 오일러 함수 \( \phi(n) = (p-1) imes (q-1) \) 계산.
4. 공개 키 \( e \) 선택:
- \( 1 < e < \phi(n) \)이고 \( e \)\( \phi(n) \)과 서로소.
5. 개인 키 \( d \) 계산:
- \( d \)\( e imes d \mod \phi(n) = 1 \)을 만족하는 값.
6. 결과:
- **공개 키**: \( (e, n) \)
- **개인 키**: \( (d, n) \)

---

## 3. **암호화 과정**
1. 평문 \( M \)을 암호화:
- 암호문 \( C = M^e \mod n \)
2. \( M \)\( 0 \leq M < n \)을 만족해야 함.

---

## 4. **복호화 과정**
1. 암호문 \( C \)를 복호화:
- 평문 \( M = C^d \mod n \)

---

## 5. **RSA 과정 요약**
```plaintext
키 생성:
1. 두 소수 \( p \), \( q \) 선택
2. \( n = p imes q \), \( \phi(n) = (p-1) imes (q-1) \)
3. 공개 키 \( e \), 개인 키 \( d \) 생성
암호화:
- 입력 평문 \( M \)
- 암호문 \( C = M^e \mod n \)
복호화:
- 입력 암호문 \( C \)
- 평문 \( M = C^d \mod n \)
```

---

## 6. **RSA의 특성**
### 장점:
- 높은 보안성:
- 비대칭 암호화를 사용하여 키가 공개되어도 복호화가 어렵습니다.
- 디지털 서명 가능:
- 데이터 무결성과 송신자의 신뢰성을 보장.

### 단점:
- 속도:
- 대칭 암호화 방식보다 느림.
- 키 길이:
- 강력한 보안을 위해 긴 키를 사용해야 함.

---

## 7. **RSA 활용 사례**
- HTTPS 및 SSL/TLS에서 공개 키 교환.
- 디지털 서명 생성 및 검증.
- 이메일 암호화(GPG/PGP).

<script type="text/javascript" async
src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/3.2.0/es5/tex-mml-chtml.js">
</script>

0 comments on commit 4e7dc07

Please sign in to comment.