๊ฐœ๋… ์ดํ•ด

RSA ํ‚ค ๊ธธ์ด๋ž€?

RSA ํ‚ค ๊ธธ์ด๋Š” ์•”ํ˜ธํ™”์— ์‚ฌ์šฉ๋˜๋Š” ํ‚ค์˜ ๋น„ํŠธ ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ด๋Š” ๋ณด์•ˆ ๊ฐ•๋„๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ํ•ต์‹ฌ ์š”์†Œ์ด๋‹ค.

์‹ค์ƒํ™œ ๋น„์œ 

์ž๋ฌผ์‡ ์˜ ํ•€ ๊ฐœ์ˆ˜์™€ ์œ ์‚ฌํ•˜๋‹ค:

  • ํ•€์ด ์ ์œผ๋ฉด: ์—ด๊ธฐ ์‰ฝ์ง€๋งŒ ๋ณด์•ˆ์„ฑ ๋‚ฎ์Œ
  • ํ•€์ด ๋งŽ์œผ๋ฉด: ์—ด๊ธฐ ์–ด๋ ต์ง€๋งŒ ์‚ฌ์šฉ์ด ๋ถˆํŽธ
  • ์ ์ ˆํ•œ ํ•€ ๊ฐœ์ˆ˜: ๋ณด์•ˆ๊ณผ ์‚ฌ์šฉ์„ฑ์˜ ๊ท ํ˜•

ํ‚ค ๊ธธ์ด๋ณ„ ํŠน์ง•

๋ณด์•ˆ ๊ฐ•๋„ ๋น„๊ต

graph TB
    subgraph "ํ‚ค ๊ธธ์ด์™€ ๋ณด์•ˆ์„ฑ"
        A[1024 ๋น„ํŠธ] --> B[ํ˜„๋Œ€ ์ปดํ“จํ„ฐ๋กœ<br/>ํ•ด๋… ๊ฐ€๋Šฅ]
        C[2048 ๋น„ํŠธ] --> D[ํ˜„์žฌ ํ‘œ์ค€<br/>์ถฉ๋ถ„ํ•œ ๋ณด์•ˆ]
        E[4096 ๋น„ํŠธ] --> F[๋งค์šฐ ๊ฐ•๋ ฅ<br/>๋ฏธ๋ž˜ ๋Œ€๋น„]
    end

์„ฑ๋Šฅ ์˜ํ–ฅ

graph LR
    subgraph "์ฒ˜๋ฆฌ ์‹œ๊ฐ„"
        A[1024 ๋น„ํŠธ] -->|"๋น ๋ฆ„"| B[0.1x]
        C[2048 ๋น„ํŠธ] -->|"ํ‘œ์ค€"| D[1x]
        E[4096 ๋น„ํŠธ] -->|"๋А๋ฆผ"| F[4x]
    end

๊ตฌํ˜„ ์˜ˆ์‹œ

OpenSSL์„ ์‚ฌ์šฉํ•œ ํ‚ค ์ƒ์„ฑ

# 1024๋น„ํŠธ ํ‚ค ์ƒ์„ฑ (๊ถŒ์žฅํ•˜์ง€ ์•Š์Œ)
openssl genrsa -out weak.key 1024
 
# 2048๋น„ํŠธ ํ‚ค ์ƒ์„ฑ (๊ถŒ์žฅ)
openssl genrsa -out standard.key 2048
 
# 4096๋น„ํŠธ ํ‚ค ์ƒ์„ฑ (๋†’์€ ๋ณด์•ˆ)
openssl genrsa -out strong.key 4096

ํ‚ค ์ •๋ณด ํ™•์ธ

# ํ‚ค ์ •๋ณด ํ™•์ธ
openssl rsa -in standard.key -text -noout
 
# ๊ณต๊ฐœํ‚ค ์ถ”์ถœ ๋ฐ ํ™•์ธ
openssl rsa -in standard.key -pubout -out public.key
openssl rsa -pubin -in public.key -text -noout

์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ

๋ฒค์น˜๋งˆํฌ ํ…Œ์ŠคํŠธ

# RSA ํ‚ค ์ƒ์„ฑ ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ
openssl speed rsa1024 rsa2048 rsa4096
 
# ์„œ๋ช… ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ
openssl speed -elapsed -evp sha256 -sign

๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ ์˜ˆ์‹œ ์ฝ”๋“œ

import time
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.backends import default_backend
 
def measure_key_generation(size):
    start = time.time()
    private_key = rsa.generate_private_key(
        public_exponent=65537,
        key_size=size,
        backend=default_backend()
    )
    end = time.time()
    return end - start
 
# ๋‹ค์–‘ํ•œ ํ‚ค ๊ธธ์ด ํ…Œ์ŠคํŠธ
sizes = [1024, 2048, 4096]
for size in sizes:
    time_taken = measure_key_generation(size)
    print(f"{size} ๋น„ํŠธ ํ‚ค ์ƒ์„ฑ ์‹œ๊ฐ„: {time_taken:.2f}์ดˆ")

๋ณด์•ˆ ๊ณ ๋ ค์‚ฌํ•ญ

ํ‚ค ๊ธธ์ด ์„ ํƒ ๊ธฐ์ค€

graph TB
    A[ํ‚ค ๊ธธ์ด ์„ ํƒ] --> B[์‚ฌ์šฉ ๋ชฉ์ ]
    A --> C[๋ณด์•ˆ ์š”๊ตฌ์‚ฌํ•ญ]
    A --> D[์„ฑ๋Šฅ ์š”๊ตฌ์‚ฌํ•ญ]
    
    B --> E[๊ฐœ์ธ ์‚ฌ์šฉ]
    B --> F[๊ธฐ์—… ์‚ฌ์šฉ]
    B --> G[์ •๋ถ€ ๊ธฐ๊ด€]
    
    E --> H[2048 ๋น„ํŠธ]
    F --> I[2048/4096 ๋น„ํŠธ]
    G --> J[4096 ๋น„ํŠธ]

์‹œ๊ฐ„์— ๋”ฐ๋ฅธ ๊ถŒ์žฅ ๊ธธ์ด

timeline
    title RSA ํ‚ค ๊ธธ์ด ๋ณ€ํ™”
    2000 : 1024 ๋น„ํŠธ
    2010 : 2048 ๋น„ํŠธ
    2020 : 2048/4096 ๋น„ํŠธ
    2030 : 4096 ๋น„ํŠธ ์ด์ƒ

์‹ค์ œ ์‚ฌ์šฉ ์‚ฌ๋ก€

1. ์›น ์„œ๋ฒ„ SSL/TLS

# Nginx SSL ์„ค์ • ์˜ˆ์‹œ
ssl_certificate /etc/ssl/certs/certificate.crt;  # 2048๋น„ํŠธ ๊ถŒ์žฅ
ssl_certificate_key /etc/ssl/private/private.key;

2. SSH ํ‚ค

# SSH ํ‚ค ์ƒ์„ฑ
ssh-keygen -t rsa -b 2048 -f ~/.ssh/id_rsa

3. ์ฝ”๋“œ ์„œ๋ช…

# ์ฝ”๋“œ ์„œ๋ช…์šฉ ํ‚ค ์ƒ์„ฑ
openssl genrsa -out codesign.key 4096  # ๋†’์€ ๋ณด์•ˆ์„ฑ ํ•„์š”

๋ฌธ์ œ ํ•ด๊ฒฐ ๊ฐ€์ด๋“œ

์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ

1. ์„ฑ๋Šฅ ๋ฌธ์ œ

# ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง
openssl speed rsa2048
 
# ์‹œ์Šคํ…œ ๋ถ€ํ•˜ ํ™•์ธ
top -b -n 1

2. ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ

# ์ตœ์†Œ ํ‚ค ๊ธธ์ด ํ™•์ธ
openssl s_client -connect example.com:443 2>/dev/null | grep "Server public key"

๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๊ด€๋ฆฌ

ํ‚ค ๊ด€๋ฆฌ ์Šคํฌ๋ฆฝํŠธ

#!/bin/bash
 
# ํ‚ค ์ •๋ณด ํ™•์ธ ์Šคํฌ๋ฆฝํŠธ
check_key_strength() {
    local key_file=$1
    local bits=$(openssl rsa -in "$key_file" -text -noout | grep "Private-Key:" | grep -o "[0-9]*")
    
    if [ "$bits" -lt 2048 ]; then
        echo "๊ฒฝ๊ณ : $key_file ์€ ๋ณด์•ˆ์— ์ทจ์•ฝํ•œ $bits ๋น„ํŠธ ํ‚ค์ž…๋‹ˆ๋‹ค."
    else
        echo "์ •์ƒ: $key_file ์€ ์•ˆ์ „ํ•œ $bits ๋น„ํŠธ ํ‚ค์ž…๋‹ˆ๋‹ค."
    fi
}
 
# ์‚ฌ์šฉ ์˜ˆ
check_key_strength private.key

๊ฒฐ๋ก 

ํ‚ค ๊ธธ์ด ์„ ํƒ ๊ถŒ์žฅ์‚ฌํ•ญ

  1. ์ผ๋ฐ˜์ ์ธ ์šฉ๋„: 2048๋น„ํŠธ
  2. ๋†’์€ ๋ณด์•ˆ ์š”๊ตฌ: 4096๋น„ํŠธ
  3. ๋ ˆ๊ฑฐ์‹œ ์‹œ์Šคํ…œ: 2048๋น„ํŠธ ์ด์ƒ์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ

์ฃผ์˜์‚ฌํ•ญ

  1. 1024๋น„ํŠธ ์ดํ•˜ ์‚ฌ์šฉ ๊ธˆ์ง€
  2. ์‹œ์Šคํ…œ ์„ฑ๋Šฅ ๊ณ ๋ ค
  3. ์ •๊ธฐ์ ์ธ ํ‚ค ๊ต์ฒด
  4. ์ ์ ˆํ•œ ํ‚ค ๊ด€๋ฆฌ ์ •์ฑ… ์ˆ˜๋ฆฝ