타원곡선 점 연산 계산기
유한체 위 타원곡선 y² = x³ + ax + b (mod p)에서 점 덧셈·두 배·스칼라 곱을 구합니다. 작은 곡선에서는 점을 전부 나열해 하세 정리로 검산하고, secp256k1에서 kG도 구할 수 있습니다.
P + Q (y² = x³ + 1x + 1 mod 23)
(17, 20)
두 점을 잇는 직선이 곡선과 만나는 세 번째 점을 x축에 대칭시킨 자리입니다. 좌표가 곡선식을 만족하는 것을 아래 점 목록에서 확인할 수 있습니다.
배가법 — k를 2진수로 읽으며 두 배 하고 더한다
| 비트 | 연산 | 누적 |
|---|---|---|
| 1 | 두 배 + 더하기 | (3, 10) |
| 1 | 두 배 + 더하기 | (19, 5) |
| 1 | 두 배 + 더하기 | (11, 3) |
스칼라 k를 2진수로 적으면 111입니다. 비트마다 두 배 하고, 비트가 1이면 P를 한 번 더합니다. k번 더하는 대신 3걸음이면 됩니다.
P가 만드는 순환군 ⟨P⟩ — 28개
(3, 10) → (7, 12) → (19, 5) → (17, 3) → (9, 16) → (12, 4) → (11, 3) → (13, 16) → (0, 1) → (6, 4) → (18, 20) → (5, 4) → (1, 7) → (4, 0) → (1, 16) → (5, 19) → (18, 3) → (6, 19) → (0, 22) → (13, 7) → (11, 20) → (12, 19) → (9, 7) → (17, 20) → (19, 18) → (7, 11) → (3, 13) → O (무한원점)
곡선 위의 점 — 27개 (+ 무한원점)
(0,1) (0,22) (1,7) (1,16) (3,10) (3,13) (4,0) (5,4) (5,19) (6,4) (6,19) (7,11) (7,12) (9,7) (9,16) (11,3) (11,20) (12,4) (12,19) (13,7) (13,16) (17,3) (17,20) (18,3) (18,20) (19,5) (19,18)
사용 방법
- 1법 p와 계수 a, b를 넣어 곡선을 정합니다. p는 소수여야 하고 4a³ + 27b²가 0이면 안 됩니다.
- 2두 점 P, Q의 좌표를 넣습니다. 곡선 위에 없는 점은 거절합니다.
- 3P + Q, 2P, kP를 확인하고 배가법 단계표에서 두 배·더하기가 어떻게 섞이는지 봅니다.
- 4「군의 위수」와 「하세 정리 범위」를 비교해 점을 전부 나열한 결과가 이론과 맞는지 확인합니다.
- 5secp256k1 탭에서 비트코인이 쓰는 곡선의 kG를 구할 수 있습니다.
자주 묻는 질문
두 점을 잇는 직선이 곡선과 만나는 세 번째 점을 x축에 대칭시킨 점입니다. 실수 위에서는 말 그대로 그림이고, 유한체에서는 그림을 그릴 수 없지만 같은 식이 그대로 성립합니다. P = Q일 때는 직선 대신 접선을 쓰기 때문에 두 배 공식이 따로 있습니다.
군의 항등원입니다. 두 점의 x가 같고 y가 서로 부호 반대이면 두 점을 잇는 직선이 수직이라 세 번째 교점이 없는데, 그때 나오는 것이 무한원점입니다. 좌표가 없는 점이라 코드에서는 보통 null로 다루고, 이 자리를 특별 취급하지 않은 구현이 가장 잘 틀립니다.
유한체 위 타원곡선의 점 개수 #E가 |#E − (p+1)| ≤ 2√p 안에 든다는 정리입니다. 점 개수는 대략 p 근처이고 그 흔들림이 √p 규모라는 뜻입니다. 이 계산기는 작은 곡선에서 점을 실제로 전부 나열해 세고 그 값이 범위 안에 드는지 함께 보여 줍니다.
4a³ + 27b² ≡ 0이면 곡선에 첨점이나 자기교차가 생겨 그 점에서 접선이 하나로 정해지지 않기 때문입니다. 덧셈 자체가 성립하지 않으므로 이 계산기는 그런 곡선을 거절합니다.
kP를 k번 더하는 대신 k의 비트 수만큼만 계산하기 위해서입니다. k를 2진수로 읽으며 매 비트에서 두 배 하고, 비트가 1이면 P를 한 번 더합니다. k가 256비트여도 약 256번의 두 배와 그만큼의 덧셈이면 끝납니다.
비트코인과 이더리움의 서명에 쓰이는 곡선으로, y² = x³ + 7 (mod 2²⁵⁶ − 2³² − 977)입니다. 개인키가 스칼라 k이고 공개키가 kG입니다. k에서 kG는 금방 구하지만 kG에서 k를 되찾는 것은 알려진 방법으로도 약 2¹²⁸걸음이 들어, 이 비대칭이 서명의 안전성을 떠받칩니다.
쓰지 마세요. 학습용입니다. 여기 구현은 상수 시간이 아니라 계산에 걸리는 시간으로 비밀값이 새는 부채널 공격에 그대로 노출되고, 난수 생성이나 키 관리도 전혀 다루지 않습니다.
전송되지 않습니다. 모든 계산은 브라우저 안에서 이뤄지고, 입력값은 이 기기에만 남습니다.
알아두면 좋은 점
- 작은 곡선에서는 곡선 위의 점을 전부 나열해 군의 위수를 세고, 하세 정리 |#E − (p+1)| ≤ 2√p 범위 안에 드는지 화면에서 함께 검산합니다.
- 검증은 군의 공리를 전수 검사하는 방식으로 했습니다. p = 23 곡선의 모든 점 쌍(과 결합법칙은 모든 세 쌍)에 대해 닫힘·항등원·역원·교환·결합을 확인했습니다.
- 스칼라 곱은 배가법으로 구한 값과 P를 k번 그냥 더한 값이 같은지 대조합니다. 세 곡선에서 모든 점과 k = 0 … 40을 훑었고, 화면에도 검산 결과를 함께 보입니다.
- secp256k1 상수는 계산으로 확인했습니다. p가 소수이고 2²⁵⁶ − 2³² − 977과 같은지, 생성점 G가 곡선 위에 있는지, 위수 n이 소수이고 nG = O인지, (n−1)G = −G인지, #E가 하세 범위에 드는지를 모두 테스트로 고정했습니다. 상수를 하나라도 잘못 적으면 이 검사가 깨집니다.
- 2G가 널리 알려진 값과 같은지도 따로 고정해 두었습니다. G만 맞으면 나머지는 계산으로 따라오지만, 회귀를 잡는 자리로 남겨 두었습니다.
- y = 0인 점을 두 배 하면 무한원점이 되는 경계도 테스트로 고정했습니다. 접선이 수직이 되는 자리라 나눗셈에서 0으로 나누는 사고가 나기 쉬운 곳입니다.
- 작은 곡선의 법 p는 2003까지만 받습니다. 점을 전부 나열하는 계산이라 그보다 크면 화면에 담기지 않습니다.
- 학습용입니다. 실제 암호 구현에 쓰지 마세요.
함께 보면 좋은 도구
마지막 검증: 2026년 9월 1일 · 결과는 참고용 추정치입니다.