๊ฐ๋ ์ดํด
๊ธฐ๋ณธ ๊ฐ๋
ECDSA์ Ed25519๋ ๋ชจ๋ ํ์๊ณก์ ์ ์ด์ฉํ ๋์งํธ ์๋ช ์๊ณ ๋ฆฌ์ฆ์ด๋ค. ๋ ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ ๋ชฉ์ ์ ๊ฐ์ง์ง๋ง ๊ตฌํ ๋ฐฉ์๊ณผ ํน์ฑ์์ ์ฐจ์ด๊ฐ ์๋ค.
์ค์ํ ๋น์
์ํ์ ๋์ฅ ์์คํ ๋ณํ์ ์ ์ฌํ๋ค:
- ECDSA: ์ ํต์ ์ธ ๋์ฅ ์์คํ (๋์ฅ ์ฐ์ ๋๋ง๋ค ์ํฌ ์ ํ)
- Ed25519: ํ๋์ ์ธ ์ ์ ๋์ฅ (ํญ์ ์ผ์ ํ ํ์ง์ ๊ฒฐ๊ณผ๋ฌผ)
์ฃผ์ ์ฐจ์ด์
๊ตฌ์กฐ์ ์ฐจ์ด
graph TB subgraph "ECDSA ํน์ง" A[๋ค์ํ ๊ณก์ ] --> B[์์ ๋์ k ํ์] B --> C[๊ตฌํ ๋ณต์ก] end subgraph "Ed25519 ํน์ง" D[๊ณ ์ ๊ณก์ ] --> E[๊ฒฐ์ ์ ๋์] E --> F[๊ตฌํ ๋จ์] end
์์ ์ฑ ๋น๊ต
sequenceDiagram participant ECDSA participant Ed25519 Note over ECDSA: ์์ ๋์ k ์์ฑ ํ์ Note over ECDSA: ์๋ชป๋ k ์ ํ ์<br/>๊ฐ์ธํค ๋ ธ์ถ ์ํ Note over Ed25519: ๊ฒฐ์ ์ ๋์ ์ฌ์ฉ Note over Ed25519: ๊ตฌํ ์ค์ ์ํ ๋ฎ์
- Ed25519์์ ๋งํ๋ โ๊ฒฐ์ ์ ๋์โ๋ ์ค์ ๋ก๋ ๋ฉ์์ง์ ๊ฐ์ธํค๋ฅผ ์ด์ฉํด ์์ฑ๋๋ ๊ฐ์ด๋ค
sequenceDiagram participant M as ๋ฉ์์ง participant K as ๊ฐ์ธํค participant H as ํด์ ํจ์ participant R as "๋์" Note over M,R: Ed25519 ๋์ ์์ฑ ๊ณผ์ M->>H: ๋ฉ์์ง ์ ๋ ฅ K->>H: ๊ฐ์ธํค ์ ๋ ฅ H->>R: hash(๋ฉ์์ง + ๊ฐ์ธํค) Note over R: ์ด ๊ฐ์ด ๋์๋ก ์ฌ์ฉ๋จ
์ฐจ์ด์ ๋น๊ต:
graph TB subgraph "ECDSA" A[์ธ๋ถ ๋์ ์์ฑ๊ธฐ] --> B[์์ ๋์ k] B --> C[๋งค๋ฒ ๋ค๋ฅธ ๊ฐ] C --> D[์ค์ ๊ฐ๋ฅ์ฑ] end subgraph "Ed25519" E[๋ฉ์์ง + ๊ฐ์ธํค] --> F[ํด์ ํจ์] F --> G[๊ฒฐ์ ์ ๊ฐ] G --> H[ํญ์ ๊ฐ์ ๊ฒฐ๊ณผ] end
์ฆ:
- ECDSA: ์ธ๋ถ์์ ๋์ ์์ฑ (์ํ!)
- Ed25519: ๋ฉ์์ง์ ํค๋ก ๊ณ์ฐ (์์ !)
๊ฐ์ ๋ฉ์์ง๋ฅผ ์๋ช ํ๋ฉด:
- ECDSA: ๋งค๋ฒ ๋ค๋ฅธ ์๋ช ์์ฑ
- Ed25519: ํญ์ ๋์ผํ ์๋ช ์์ฑ
์ด๊ฒ์ด ์คํ๋ ค ๋ ์์ ํ ์ด์ :
- ๊ตฌํ ์ค์ ๊ฐ๋ฅ์ฑ ์์
- ์์ธก ๋ถ๊ฐ๋ฅ์ฑ์ ์ฌ์ ํ ์ ์ง
- ์ฌํ ๊ฐ๋ฅํ ๊ฒฐ๊ณผ
๊ตฌํ ์์
๊ธฐ๋ณธ ๊ตฌํ ๋น๊ต
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import ec, ed25519
class SignatureComparison:
"""
ECDSA์ Ed25519 ์๋ช
๋น๊ต ๊ตฌํ
"""
def __init__(self):
# ECDSA ํค ์์ฑ
self.ecdsa_private = ec.generate_private_key(ec.SECP256K1())
self.ecdsa_public = self.ecdsa_private.public_key()
# Ed25519 ํค ์์ฑ
self.ed25519_private = ed25519.Ed25519PrivateKey.generate()
self.ed25519_public = self.ed25519_private.public_key()
def ecdsa_sign(self, message: bytes) -> bytes:
"""
ECDSA๋ก ๋ฉ์์ง ์๋ช
- ์์ ๋์ k๋ฅผ ์ฌ์ฉํ๋ค
- ๊ตฌํ์ด ๋ณต์กํ๋ค
"""
return self.ecdsa_private.sign(
message,
ec.ECDSA(hashes.SHA256())
)
def ed25519_sign(self, message: bytes) -> bytes:
"""
Ed25519๋ก ๋ฉ์์ง ์๋ช
- ๊ฒฐ์ ์ ๋์๋ฅผ ์ฌ์ฉํ๋ค
- ๊ตฌํ์ด ๋จ์ํ๋ค
"""
return self.ed25519_private.sign(message)์๋ชป๋ ๊ตฌํ๊ณผ ์ฌ๋ฐ๋ฅธ ๊ตฌํ
์๋ชป๋ ECDSA ๊ตฌํ
# ์ทจ์ฝํ ECDSA ๊ตฌํ
class InsecureECDSA:
def __init__(self):
self.k = 123456 # ๊ณ ์ ๋ k ์ฌ์ฉ - ์ ๋ ํ๋ฉด ์ ๋จ!
def sign(self, message):
# ๋์ผํ k๋ก ์๋ช
- ๊ฐ์ธํค ๋
ธ์ถ ์ํ
return sign_with_k(message, self.k)์ฌ๋ฐ๋ฅธ ๊ตฌํ
# ์์ ํ ๊ตฌํ
import secrets
class SecureSignature:
def ecdsa_sign(self, message):
# ECDSA: ์ํธํ์ ์ผ๋ก ์์ ํ ๋์ ์์ฑ
return self.ecdsa_private.sign(
message,
ec.ECDSA(hashes.SHA256())
)
def ed25519_sign(self, message):
# Ed25519: ๋ณ๋์ ๋์ ํ์ ์์
return self.ed25519_private.sign(message)์ฑ๋ฅ ์ธก์
๋ฒค์น๋งํฌ ์ฝ๋
import time
def benchmark_signatures():
"""
์๋ช
์๊ณ ๋ฆฌ์ฆ ์ฑ๋ฅ ๋น๊ต
"""
msg = b"Hello, World!"
iterations = 1000
# ECDSA ์ฑ๋ฅ ์ธก์
ecdsa_times = []
for _ in range(iterations):
start = time.time()
ecdsa_sign(msg)
ecdsa_times.append(time.time() - start)
# Ed25519 ์ฑ๋ฅ ์ธก์
ed25519_times = []
for _ in range(iterations):
start = time.time()
ed25519_sign(msg)
ed25519_times.append(time.time() - start)
return {
'ecdsa_avg': sum(ecdsa_times) / len(ecdsa_times),
'ed25519_avg': sum(ed25519_times) / len(ed25519_times)
}์ค์ ์ฌ์ฉ ์ฌ๋ก
์ ์ฉ ๋ถ์ผ
graph TB subgraph "ECDSA ์ฌ์ฉ" A[Bitcoin] --> B[๊ธฐ์กด ๊ธ์ต ์์คํ ] C[SSL/TLS] --> D[์น ๋ณด์] end subgraph "Ed25519 ์ฌ์ฉ" E[SSH] --> F[์๊ฒฉ ์ ์] G[Signal] --> H[๋ณด์ ๋ฉ์ ์ ] end
๋ณด์ ๊ณ ๋ ค์ฌํญ
์ํ ์์
graph TB subgraph "ECDSA ์ํ" A[์์ ๋์ k] --> B[์๋ชป๋ ๋์] B --> C[๊ฐ์ธํค ๋ ธ์ถ] end subgraph "Ed25519 ์ํ" D[๊ตฌํ ์ ํ] --> E[ํธํ์ฑ ๋ฌธ์ ] E --> F[์ ์ฉ ์ด๋ ค์] end
์ ํ ๊ฐ์ด๋
์ํฉ๋ณ ๊ถ์ฅ์ฌํญ
-
์๋ก์ด ํ๋ก์ ํธ
- Ed25519๋ฅผ ์ฌ์ฉํ๋ค
- ๊ตฌํ์ด ๋จ์ํ๋ค
- ์ฑ๋ฅ์ด ์ฐ์ํ๋ค
-
๊ธฐ์กด ์์คํ
- ECDSA๋ฅผ ์ ์งํ๋ค
- ํธํ์ฑ์ ๋ณด์ฅํ๋ค
- ์ ์ง์ ๋ง์ด๊ทธ๋ ์ด์ ์ ๊ณํํ๋ค
๊ฒฐ๋ก
ํต์ฌ ์ ๋ฆฌ
- Ed25519๊ฐ ๋ ํ๋์ ์ด๋ค
- ECDSA๋ ์ฌ์ ํ ๋๋ฆฌ ์ฌ์ฉ๋๋ค
- ์ํฉ์ ๋ง๋ ์ ํ์ด ์ค์ํ๋ค
์ฃผ์์ฌํญ
- ECDSA ์ฌ์ฉ ์ ๋์ ์์ฑ์ ์ฃผ์ํ๋ค
- Ed25519 ์ ํ ์ ํธํ์ฑ์ ๊ฒํ ํ๋ค
- ๋ณด์ ์ ๋ฐ์ดํธ๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ํ์ธํ๋ค