secp256k1 vs ed25519: 암호화폐의 타원 곡선
목차
모든 암호화폐 트랜잭션에는 디지털 서명이 필요합니다 --- 자금을 보내는 사람이 실제로 해당 계정을 통제한다는 수학적 증명입니다. 이 서명은 타원 곡선의 속성에 의존하는 알고리즘에 의해 생성됩니다. 블록체인 세계를 지배하는 두 곡선은 secp256k1과 ed25519입니다. 같은 근본적 목적을 수행하지만, 설계, 성능 특성, 채택 역사가 매우 다릅니다.
이 가이드에서는 타원 곡선이 암호학에서 무엇을 하는지, secp256k1과 ed25519가 어떻게 다른지, 그 차이가 키 생성, 지갑 보안, 사용하는 블록체인에 무엇을 의미하는지 설명합니다.
타원 곡선이란?¶
암호학의 맥락에서 타원 곡선은 y^2 = x^3 + ax + b (secp256k1 같은 곡선) 또는 관련 형태(ed25519 같은 곡선)의 방정식으로 정의되는 수학적 구조입니다. 타원 곡선 암호학(ECC)의 보안은 타원 곡선 이산 로그 문제(ECDLP)에 기반합니다: 곡선 위의 점 P와 점 Q = k * P(k는 스칼라, *는 점 곱셈)가 주어졌을 때, P와 Q만으로 k를 결정하는 것이 계산적으로 불가능합니다.
암호화폐 용어로:
누구나 Q와 k로 생성된 서명을 알면 Q가 k * P와 일치하는지 확인할 수 있지만, Q에서 k를 추출할 수는 없습니다. 이것이 공개 키(및 그로부터 파생된 주소)를 공유하면서 개인 키를 비밀로 유지하는 것이 안전한 이유입니다.
ECC는 RSA와 동일한 보안을 훨씬 작은 키 크기로 제공합니다. 256비트 타원 곡선 키는 대략 3,072비트 RSA 키와 동일한 보안을 제공합니다. 이 컴팩트함은 트랜잭션의 모든 바이트에 저장 및 대역폭 비용이 드는 블록체인에 필수적입니다.
secp256k1: Bitcoin과 Ethereum의 곡선¶
secp256k1은 Bitcoin, Ethereum, 그리고 그 생태계의 대부분의 블록체인에서 사용되는 타원 곡선입니다. 이름은 다음과 같이 분해됩니다:
- sec --- 효율적 암호학 표준
- p --- 곡선이 소수 필드에서 정의됨
- 256 --- 소수가 256비트 길이
- k --- Koblitz 곡선(계산 효율성 이점이 있는 특정 클래스)
- 1 --- 표준에서 이 유형의 첫 번째(유일한) 곡선
곡선 방정식은: y^2 = x^3 + 7 (소수 p = 2^256 - 2^32 - 977으로 정의된 유한 필드 위).
사토시 나카모토는 2009년에 Bitcoin을 위해 secp256k1을 선택했습니다. 당시에는 이례적인 선택이었습니다. 대부분의 시스템은 NIST P-256 곡선(secp256r1이라고도 함)을 사용했습니다. secp256r1의 "r"은 매개변수에 검증 가능한 랜덤 시드를 사용함을 나타내는 반면, secp256k1의 매개변수는 랜덤성이 아닌 계산 효율성을 위해 선택되었습니다. 일부 암호학자들은 NIST 곡선이 NSA의 영향을 받은 매개변수를 가질 수 있다고 오래 우려해 왔습니다 --- 2013년에 밝혀진 Dual_EC_DRBG 스캔들로 증폭된 우려입니다. secp256k1은 매개변수가 단순하고 투명하기 때문에 이 의심을 완전히 피합니다: a = 0, b = 7.
서명: ECDSA¶
Bitcoin과 Ethereum에서 secp256k1과 쌍을 이루는 서명 알고리즘은 ECDSA --- 타원 곡선 디지털 서명 알고리즘입니다. Bitcoin이나 Ethereum 트랜잭션을 보낼 때, 지갑은 ECDSA를 사용하여 개인 키와 트랜잭션 해시로부터 서명을 생성합니다. 네트워크의 검증자가 공개 키를 사용하여 이 서명을 확인합니다.
secp256k1에서의 ECDSA 서명은 64바이트(두 개의 32바이트 값, 일반적으로 r과 s라 함)에 일부 구현에서 포함하는 복구 바이트를 더합니다. RFC 6979를 사용할 때 결정론적(Bitcoin과 Ethereum 모두 사용)이며, 동일한 메시지와 개인 키가 항상 동일한 서명을 생성합니다 --- 서명 시 무작위성이 필요하지 않습니다.
ECDSA의 한 가지 특성은 서명 가변성입니다: 유효한 서명 (r, s)가 주어지면, 쌍 (r, -s mod n)도 유효합니다. Bitcoin은 BIP66(엄격한 DER 인코딩)과 나중에 SegWit로 이를 해결했습니다. Ethereum은 s에 대한 정규 형태를 적용하여 해결합니다.
성능¶
최적화된 구현(Bitcoin Core에서 사용하는 libsecp256k1 등)에서의 secp256k1 검증은 빠릅니다: 현대 하드웨어에서 초당 수천 건의 검증. 그러나 ECDSA 서명 및 검증은 속도를 위해 처음부터 설계된 EdDSA(ed25519와 쌍을 이루는 알고리즘)보다 본질적으로 더 복잡합니다.
ed25519: Solana의 현대적 선택¶
ed25519는 Daniel J. Bernstein과 공동 연구자들이 설계한 타원 곡선입니다. 2011년에 발표되었으며, Bitcoin 출시 2년 후로, 보안과 성능 모두를 우선시하는 새로운 세대의 곡선 설계를 대표합니다.
이름은 소수 필드 2^255 - 19 (따라서 "25519") 위의 Edwards 곡선 형태를 가리킵니다. 사용되는 특정 곡선은 "edwards25519"라 불리는 꼬인 Edwards 곡선으로, Curve25519(Signal과 TLS 1.3 등의 키 교환에 널리 사용)와 쌍유리 동등입니다.
Solana는 서명 곡선으로 ed25519를 선택했으며, 여러 다른 현대 블록체인도 마찬가지입니다. 이 선택은 ed25519의 처리량 측면에서의 장점을 반영합니다 --- Solana의 고성능 아키텍처에 중요한 관심사입니다.
서명: EdDSA¶
ed25519와 쌍을 이루는 서명 알고리즘은 EdDSA --- Edwards 곡선 디지털 서명 알고리즘입니다. 구체적으로, Solana는 Ed25519(edwards25519와 함께하는 EdDSA)를 사용하며, 64바이트 서명을 생성합니다.
EdDSA는 ECDSA의 함정을 피하도록 설계되었습니다:
- 서명 시 무작위성이 필요 없음. EdDSA 서명은 본질적으로 결정론적 --- 논스는 개인 키와 메시지에서 해싱을 통해 파생됩니다. ECDSA의 경우, 서명 시 나쁜 난수 생성기가 개인 키를 완전히 유출할 수 있습니다(2010년 Sony의 PS3 서명 키에 이런 일이 발생했습니다).
- 서명 가변성 없음. EdDSA 서명은 단일 정규 형태를 가집니다.
- 더 빠른 배치 검증. 여러 Ed25519 서명을 개별적으로 검증하는 것보다 동시에 더 빠르게 검증할 수 있습니다 --- 고처리량 블록체인에 상당한 이점입니다.
- 더 간단한 구현. 알고리즘에 엣지 케이스와 분기 조건이 적어 사이드 채널 공격의 공격 면을 줄입니다.
성능¶
Ed25519는 벤치마크에서 ECDSA-secp256k1보다 일관되게 빠릅니다. 서명은 약 2-3배 더 빠르고, 단일 서명 검증은 대략 비슷하지만, 배치 검증에서 Ed25519가 진정으로 빛납니다 --- 수백 개의 서명을 하나씩 검증하는 것보다 훨씬 빠르게 검증할 수 있습니다. 블록에 수천 개의 트랜잭션이 포함될 수 있는 Solana에서 이 성능 차이는 상당합니다.
ECDSA vs EdDSA: 직접 비교¶
| 속성 | ECDSA (secp256k1) | EdDSA (ed25519) |
|---|---|---|
| 곡선 유형 | Short Weierstrass | Twisted Edwards |
| 키 크기 | 256비트 | 256비트 |
| 서명 크기 | 64-65바이트 | 64바이트 |
| 보안 수준 | ~128비트 | ~128비트 |
| 서명 속도 | 빠름 | 더 빠름 (2-3x) |
| 검증 속도 | 빠름 | 비슷 (단일), 더 빠름 (배치) |
| 결정론적 서명 | 선택적 (RFC 6979) | 내장 (설계상) |
| 서명 가변성 | 가능 (실제로는 완화) | 없음 |
| 논스 취약성 | 예 (나쁜 RNG가 키 유출) | 아니오 (논스가 키 + 메시지에서 파생) |
| 채택 | Bitcoin, Ethereum, BNB Chain, Tron, Dogecoin, Litecoin | Solana, XRP (부분), Cardano, Polkadot |
두 알고리즘 모두 약 128비트의 보안을 제공하며, 공격자가 키를 해독하기 위해 약 2^128번의 연산을 수행해야 합니다. 이는 현재 또는 예측 가능한 고전 컴퓨터의 능력을 훨씬 넘어섭니다. 차이는 원시 보안 강도가 아닌 구현 안전성과 성능에 있습니다.
키 보안이 실제로 어떻게 작동하는지에 대한 더 깊은 내용은 개인 키 보안 모범 사례를 참조하세요.
어떤 체인이 어떤 것을 사용하나?¶
곡선 선택은 블록체인이 내리는 가장 근본적인 아키텍처 결정 중 하나입니다. 주요 네트워크의 분류입니다:
secp256k1 체인¶
- Bitcoin --- 원조. 표준 트랜잭션에 secp256k1과 ECDSA를 사용하고, Taproot에는 Schnorr 서명(역시 secp256k1)을 사용합니다.
- Ethereum --- secp256k1과 ECDSA. 모든 EVM 호환 체인이 이 선택을 상속합니다.
- BNB Chain --- EVM 호환, secp256k1 사용.
- Polygon --- EVM 호환, secp256k1 사용.
- Arbitrum 및 Optimism --- Ethereum L2, secp256k1 상속.
- Tron --- ECDSA와 secp256k1 사용.
- Dogecoin --- Bitcoin 포크, secp256k1 사용.
- Litecoin --- Bitcoin 포크, secp256k1 사용.
- Avalanche (C-Chain) --- EVM 호환, secp256k1 사용.
ed25519 체인¶
- Solana --- Ed25519를 독점적으로 사용합니다. 이것이 Solana가 초당 수천 건의 트랜잭션을 처리할 수 있는 핵심 이유입니다.
- XRP --- secp256k1과 ed25519를 모두 지원합니다. 사용자가 키 생성 시 어떤 곡선을 사용할지 선택할 수 있습니다.
- Cardano --- Ed25519(구체적으로 Ed25519-BIP32, 확장 변형)를 사용합니다.
- Polkadot --- 주로 Sr25519(Ristretto25519 위의 Schnorr)를 사용하며, ed25519와 밀접하게 관련됩니다.
분리는 대체로 세대적입니다. 2015년 이전에 설계된 블록체인은 secp256k1을 사용하는 경향이 있습니다(Bitcoin의 선례를 따라). 2017년 이후 설계된 블록체인은 점점 ed25519 또는 관련 곡선을 선호합니다.
키 생성에 미치는 영향¶
타원 곡선의 선택은 키와 주소가 생성되는 방식에 직접적으로 영향을 미칩니다. SafeSeed의 도구를 사용하면 차이가 자동으로 처리되지만, 내부에서 무엇이 일어나는지 이해하면 도움이 됩니다.
secp256k1 키 생성¶
- 랜덤 256비트 수(개인 키)를 생성합니다. 1과
n - 1사이여야 하며, n은 secp256k1의 차수(~2^256)입니다. - 공개 키를 계산합니다: secp256k1의 생성점 G에 개인 키를 곱합니다. 결과는 곡선 위의 점 (x, y)입니다.
- 비압축 공개 키는 65바이트(04 접두사 + 32바이트 x + 32바이트 y)입니다. 압축 형태는 33바이트(02 또는 03 접두사 + 32바이트 x)입니다.
- 공개 키를 해시하여 주소를 생성합니다(Bitcoin은 SHA-256 + RIPEMD-160; Ethereum은 Keccak-256).
secp256k1 키는 Bitcoin Private Key Generator 또는 Ethereum Private Key Generator를 사용하여 생성할 수 있습니다.
ed25519 키 생성¶
- 랜덤 32바이트 시드를 생성합니다(BIP39 시드와 다름 --- 원시 키 자료).
- 시드를 SHA-512로 해시하여 64바이트를 생성합니다. 처음 32바이트(특정 비트가 클램핑됨)가 서명에 사용되는 스칼라가 됩니다. 마지막 32바이트는 서명 시 논스 생성에 사용됩니다.
- 공개 키를 계산합니다: edwards25519의 기본점 B에 스칼라를 곱합니다. 결과는 32바이트 압축 점입니다.
- 주소 형식은 체인별로 다릅니다. Solana에서는 공개 키 자체(Base58 인코딩)가 주소입니다.
ed25519 키는 Solana Private Key Generator를 사용하여 생성할 수 있습니다.
크로스 곡선 함의¶
secp256k1과 ed25519는 수학적으로 호환되지 않기 때문에, 한 곡선에서 유효한 개인 키는 다른 곡선의 키와 의미 있는 관계가 없습니다. Bitcoin과 Solana를 모두 지원하는 지갑에서 시드 구문을 복원하면, 지갑은 동일한 마스터 시드에서 두 개의 완전히 별도의 파생 프로세스를 실행합니다 --- Bitcoin/Ethereum 계정에는 secp256k1, Solana 계정에는 ed25519를 사용합니다. 공유된 시드가 유일한 연결입니다.
이것이 파생 경로에 코인 유형이 포함되는 이유입니다: Bitcoin의 경로(m/44'/0'/0'/0/0)와 Solana의 경로(m/44'/501'/0'/0')는 코인 유형 수준에서 분기하며, 각 분기는 해당 곡선을 사용합니다. 파생 경로가 체인 간에 어떻게 작동하는지에 대한 자세한 설명은 HD 지갑과 파생 경로 설명을 참조하세요.
양자 컴퓨팅은?¶
secp256k1과 ed25519 모두 Shor 알고리즘을 실행하는 충분히 강력한 양자 컴퓨터에 동일하게 취약하며, 이는 다항식 시간에 이산 로그 문제를 풀 수 있습니다. 어느 곡선도 다른 곡선보다 "양자 내성이 더 강한" 것은 아닙니다. 암호학 커뮤니티는 양자 내성 서명 체계를 개발하고 있지만, 아직 주요 블록체인이 이를 도입하지 않았습니다. 현재 평가는 양자 컴퓨팅과 암호화폐 위협을 참조하세요.
올바른 도구 선택¶
사용자로서 secp256k1과 ed25519 중에서 직접 선택하지 않습니다. 사용하는 블록체인이 그 선택을 합니다. Bitcoin과 Ethereum은 secp256k1을 필수로 합니다. Solana는 ed25519를 필수로 합니다. 선택할 수 있는 것은 체인이 요구하는 곡선을 올바르게 구현하는 도구를 사용하는 것입니다.
SafeSeed의 생성기는 이를 자동으로 처리합니다. Bitcoin Seed Phrase Generator는 secp256k1 키를 파생합니다. Ethereum Seed Phrase Generator도 마찬가지입니다. Solana Seed Phrase Generator는 ed25519 키를 파생합니다. 모두 전적으로 클라이언트 측에서 실행되며, 브라우저의 Web Crypto API를 사용하여 안전한 난수를 생성합니다. 개인 키 자료는 절대 장치를 떠나지 않습니다.
블록체인 아래의 곡선을 이해한다고 해서 일상적인 지갑 사용 방식이 바뀌지는 않습니다. 하지만 Solana 주소가 Ethereum 주소와 다르게 보이는 이유, 원시 Solana 개인 키를 Ethereum에서 사용할 수 없는 이유, 자금 뒤의 보안 가정이 왜 그토록 강력한지를 이해하는 데 도움이 됩니다. 이 곡선들은 암호화폐 소유권의 수학적 기반 --- 정상적인 사용에서는 보이지 않지만 절대적으로 근본적인 것입니다.