๊ฐ๋ ์ดํด
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_rsa3. ์ฝ๋ ์๋ช
# ์ฝ๋ ์๋ช
์ฉ ํค ์์ฑ
openssl genrsa -out codesign.key 4096 # ๋์ ๋ณด์์ฑ ํ์๋ฌธ์ ํด๊ฒฐ ๊ฐ์ด๋
์ผ๋ฐ์ ์ธ ๋ฌธ์
1. ์ฑ๋ฅ ๋ฌธ์
# ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง
openssl speed rsa2048
# ์์คํ
๋ถํ ํ์ธ
top -b -n 12. ํธํ์ฑ ๋ฌธ์
# ์ต์ ํค ๊ธธ์ด ํ์ธ
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๊ฒฐ๋ก
ํค ๊ธธ์ด ์ ํ ๊ถ์ฅ์ฌํญ
- ์ผ๋ฐ์ ์ธ ์ฉ๋: 2048๋นํธ
- ๋์ ๋ณด์ ์๊ตฌ: 4096๋นํธ
- ๋ ๊ฑฐ์ ์์คํ : 2048๋นํธ ์ด์์ผ๋ก ์ ๊ทธ๋ ์ด๋
์ฃผ์์ฌํญ
- 1024๋นํธ ์ดํ ์ฌ์ฉ ๊ธ์ง
- ์์คํ ์ฑ๋ฅ ๊ณ ๋ ค
- ์ ๊ธฐ์ ์ธ ํค ๊ต์ฒด
- ์ ์ ํ ํค ๊ด๋ฆฌ ์ ์ฑ ์๋ฆฝ