secp256k1 (SECG 256-bit Koblitz Curve)

암호학수정일

secp256k1은 SECG(효율적 암호 표준 그룹)의 SEC 2 문서에 정의된 256비트 타원곡선으로, 방정식 y² = x³ + 7을 사용합니다. Bitcoin이 채택한 뒤 Ethereum, Tron, BNB Chain 등 수많은 블록체인이 같은 곡선을 쓰면서 암호화폐의 사실상 표준 곡선이 되었습니다.

자세히 알아보기

이름은 규칙대로 읽을 수 있습니다. sec = SEC 표준, p = 소수체 위 곡선, 256 = 비트 길이, k = 코블리츠(Koblitz)형, 1 = 첫 번째 곡선이라는 뜻입니다. 정의 체의 소수는 p = 2²⁵⁶ − 2³² − 977이고, 계수는 a = 0, b = 7입니다. 곡선 위 점의 개수(위수) n은 약 1.158 × 10⁷⁷인 소수이며, 보조인수(cofactor)는 1입니다. 모든 점이 하나의 큰 소수 위수 군에 속하므로 작은 부분군 공격을 걱정할 필요가 적습니다.

보안 강도는 약 128비트입니다. a = 0인 특수 구조 덕분에 GLV 자기준동형사상(endomorphism)을 이용한 고속 연산이 가능하고, 계수가 '7'처럼 단순해 설계자가 뒷문을 심었을 여지가 적다는 점도 장점으로 꼽힙니다. 반면 TLS 등에서 널리 쓰는 NIST P-256(secp256r1)은 무작위처럼 보이는 계수를 가지며 서로 다른 곡선입니다. 두 곡선을 혼동하면 키와 서명이 호환되지 않습니다.

개인 키는 1 이상 n 미만의 정수이고, 공개 키는 기준점 G에 개인 키를 곱한 점입니다. 공개 키는 비압축 65바이트(0x04 + x + y) 또는 압축 33바이트(0x02/0x03 + x)로 표현됩니다. Bitcoin Taproot(BIP-340)은 x좌표만 쓰는 32바이트 공개 키를 사용합니다.

블록체인·암호화폐에서는

Bitcoin은 secp256k1 위에서 ECDSA와 슈노르 서명을 모두 사용합니다. Ethereum 주소는 64바이트 비압축 공개 키(x‖y)의 Keccak-256 해시 중 마지막 20바이트입니다. Tron 주소도 같은 방식으로 20바이트를 만든 뒤 앞에 0x41을 붙여 Base58Check로 인코딩하므로 'T'로 시작합니다. 그래서 같은 개인 키로 Ethereum과 Tron 주소를 모두 만들 수 있으며, 이더리움 계열 체인 간 주소가 동일한 이유도 같은 곡선과 같은 유도 방식을 쓰기 때문입니다.

쉽게 말하면

비트코인 생태계가 함께 쓰기로 약속한 '공용 수학 지도'입니다. 지갑마다 같은 지도를 쓰기 때문에 어떤 지갑에서 만든 키든 다른 지갑과 노드가 서명을 검증할 수 있습니다.

예시

Ethereum 주소 = Keccak-256(공개 키 x‖y)의 마지막 20바이트 → 0x로 시작하는 40자리 16진수. Tron 주소 = 0x41 + 같은 20바이트 → Base58Check → T로 시작하는 34자 문자열.

이 글은 학습을 위한 일반 정보이며 투자 권유나 법률 자문이 아닙니다. 가상자산은 가격 변동이 크고 원금 손실 위험이 있습니다.