도구스개발

타원곡선 점 연산 계산기

유한체 위 타원곡선 y² = x³ + ax + b (mod p)에서 점 덧셈·두 배·스칼라 곱을 구합니다. 작은 곡선에서는 점을 전부 나열해 하세 정리로 검산하고, secp256k1에서 kG도 구할 수 있습니다.

P + Q (y² = x³ + 1x + 1 mod 23)

(17, 20)

두 점을 잇는 직선이 곡선과 만나는 세 번째 점을 x축에 대칭시킨 자리입니다. 좌표가 곡선식을 만족하는 것을 아래 점 목록에서 확인할 수 있습니다.

P(3, 10)
Q(9, 7)
P + Q(17, 20)
2P (접선)(7, 12)
7P (배가법)(11, 3)
배가법 검산P를 k번 더한 값과 같습니다
P의 위수28 (28P = O)
군의 위수 #E28개 (무한원점 포함)
하세 정리 범위15 ~ 33
판별식 4a³ + 27b²8 (0이 아니라 정상)
하세 정리는 곡선 위의 점 개수가 |#E − (p+1)| ≤ 2√p 안에 든다고 말합니다. 이 곡선의 #E는 28이고 범위는 15 ~ 33이므로 범위 안에 듭니다. 점을 전부 나열해 센 값이라 이 검산이 통과하는 것은 나열과 덧셈이 모두 맞다는 뜻입니다.

배가법 — 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)

점 덧셈은 기하학에서 왔습니다. 두 점을 잇는 직선이 곡선과 만나는 세 번째 점을 x축에 대칭시킨 것이 P + Q입니다. P = Q일 때는 직선 대신 접선을 씁니다. 직선이 수직이라 세 번째 교점이 없을 때 나오는 것이 무한원점 O이고, 이것이 군의 항등원입니다 — 좌표가 없는 점이라 코드에서 따로 다뤄야 합니다.

사용 방법

  1. 1법 p와 계수 a, b를 넣어 곡선을 정합니다. p는 소수여야 하고 4a³ + 27b²가 0이면 안 됩니다.
  2. 2두 점 P, Q의 좌표를 넣습니다. 곡선 위에 없는 점은 거절합니다.
  3. 3P + Q, 2P, kP를 확인하고 배가법 단계표에서 두 배·더하기가 어떻게 섞이는지 봅니다.
  4. 4「군의 위수」와 「하세 정리 범위」를 비교해 점을 전부 나열한 결과가 이론과 맞는지 확인합니다.
  5. 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일 · 결과는 참고용 추정치입니다.