ECDSA 橢圓曲線簽名 使用指南
以 secp256k1 為例,私鑰 d 生成公鑰 Q=d·G;對訊息雜湊 e 用隨機數 k 產出簽名 (r,s),驗證用公鑰與 G。…
核心功能
- 在瀏覽器內生成 P-256 / P-384 橢圓曲線金鑰對
- 可選 SHA-256 / SHA-384 / SHA-512 作為簽名前的摘要演算法
- 對訊息簽名並用公鑰驗籤,簽名值可輸出 Base64 或十六進位制
- 用於核對金鑰配對與 alg 頭一致性,簽發前先自測
適用場景
- 比特幣、TLS 證書用 ECDSA 做輕量高安全簽名。
- 給內部服務簽發 JWT 時用 ES256:驗籤一次確認公鑰與私鑰配對、簽名演算法與頭部 alg 一致,避免上線後才發現金鑰錯配。
使用步驟
- 選擇曲線(P-256 對應 JWT 的 ES256,P-384 對應 ES384)
- 點生成金鑰對,儲存私鑰;公鑰可公開分發給驗籤方
- 選擇摘要演算法,一般與曲線配對:P-256 配 SHA-256、P-384 配 SHA-384
- 輸入待簽名訊息(如 JWT 的 header.payload),點簽名得到簽名值
- 把公鑰與簽名值交給對方驗籤;驗籤失敗先查 alg 與摘要演算法是否一致
實用技巧
- 必須使用符合規範的隨機源
- 給內部服務簽發 JWT 時用 ES256:驗籤一次確認公鑰與私鑰配對、簽名演算法與頭部 alg 一致,避免上線後才發現金鑰錯配。
常見問題
- ECDSA 為何比 RSA 短?
- 256 位橢圓曲線安全性≈3072 位 RSA,金鑰更短。
- 為什麼每次簽名結果都不一樣?
- ECDSA 簽名依賴一個隨機數 k,同一訊息兩次簽名會得到不同但都有效的簽名,這是正常且必要的設計——若 k 重複或可預測,攻擊者可直接反推私鑰(2010 年索尼 PS3 被攻破正是因此)。必須使用符合規範的隨機源。