Documentation
¶
Overview ¶
ecdsaパッケージは、FIPS 186-4およびSEC 1、バージョン2.0で定義されている楕円曲線デジタル署名アルゴリズムを実装しています。
このパッケージによって生成される署名は確定的ではありませんが、エントロピーは秘密鍵とメッセージと混合され、ランダム性源の故障の場合には同じレベルのセキュリティを実現します。
私有鍵を扱う操作は、elliptic.P224、elliptic.P256、elliptic.P384、または elliptic.P521 によって返される [elliptic.Curve]が使用される限り、定数時間アルゴリズムを使用して実装されています。
Example ¶
package main import ( "github.com/shogo82148/std/crypto/ecdsa" "github.com/shogo82148/std/crypto/elliptic" "github.com/shogo82148/std/crypto/rand" "github.com/shogo82148/std/crypto/sha256" "github.com/shogo82148/std/fmt" ) func main() { privateKey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) if err != nil { panic(err) } msg := "hello, world" hash := sha256.Sum256([]byte(msg)) sig, err := ecdsa.SignASN1(rand.Reader, privateKey, hash[:]) if err != nil { panic(err) } fmt.Printf("signature: %x\n", sig) valid := ecdsa.VerifyASN1(&privateKey.PublicKey, hash[:], sig) fmt.Println("signature verified:", valid) }
Output:
Index ¶
- func Sign(rand io.Reader, priv *PrivateKey, hash []byte) (r, s *big.Int, err error)
- func SignASN1(rand io.Reader, priv *PrivateKey, hash []byte) ([]byte, error)
- func Verify(pub *PublicKey, hash []byte, r, s *big.Int) bool
- func VerifyASN1(pub *PublicKey, hash, sig []byte) bool
- type PrivateKey
- type PublicKey
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Sign ¶
Sign は、ハッシュ(大きなメッセージのハッシュの結果である必要があります)をプライベートキー priv を使用して署名します。 もしハッシュがプライベートキーの曲線順序のビット長よりも長い場合、ハッシュはその長さに切り詰められます。 結果の署名は、2つの整数のペアとして返されます。ほとんどのアプリケーションでは、r, s と直接扱う代わりに SignASN1 を使用するべきです。
func SignASN1 ¶ added in v1.15.0
SignASN1は、大きなメッセージをハッシュ化した結果であるハッシュに対して、 秘密鍵privを使用して署名します。ハッシュが秘密鍵の曲線順序のビット長よりも長い場合、 ハッシュはその長さに切り詰められます。ASN.1エンコードされた署名を返します。
署名はランダム化されています。ほとんどのアプリケーションでは、crypto/rand.Reader を rand として使用する必要があります。なお、返される署名はrandから読み取られた バイトに対して決定論的に依存しないことに注意してください。また、呼び出しやバージョン間で変更される可能性があります。
func Verify ¶
Verifyは、公開鍵pubを使用してハッシュのr、sの署名を検証します。 戻り値は署名の有効性を記録します。ほとんどのアプリケーションでは、r、sと直接取り扱う代わりに、VerifyASN1を使用する必要があります。
入力は機密とはみなされず、タイミングのサイドチャネルを通じて、または攻撃者が入力の一部を制御している場合に漏洩する可能性があります。
func VerifyASN1 ¶ added in v1.15.0
VerifyASN1は公開鍵pubを使用してハッシュのASN.1エンコードされた署名sigを検証します。 返り値は署名が有効かどうかを示します。
入力は機密とはみなされず、タイミングのサイドチャネルを通じて、または攻撃者が入力の一部を制御している場合に漏洩する可能性があります。
Types ¶
type PrivateKey ¶
PrivateKeyはECDSAの秘密鍵を表します。
func GenerateKey ¶
GenerateKeyは指定された曲線の新しいECDSA秘密鍵を生成します。
ほとんどのアプリケーションではrandとして[crypto/rand.Reader]を使用する必要があります。注意点として、randから読み取ったバイトに決定的な依存関係を持たない返された鍵は、呼び出し間やバージョン間で変更される可能性があります。
func (*PrivateKey) ECDH ¶ added in v1.20.0
func (k *PrivateKey) ECDH() (*ecdh.PrivateKey, error)
ECDHは ecdh.PrivateKey としてkを返します。キーが ecdh.Curve.NewPrivateKey の定義に従って無効である場合や、Curveが crypto/ecdh でサポートされていない場合はエラーを返します。
func (*PrivateKey) Equal ¶ added in v1.15.0
func (priv *PrivateKey) Equal(x crypto.PrivateKey) bool
Equalはprivとxが同じ値を持つかどうかを報告します。
Curveが比較される方法の詳細については、 PublicKey.Equal を参照してください。
func (*PrivateKey) Public ¶ added in v1.4.0
func (priv *PrivateKey) Public() crypto.PublicKey
Publicはprivに対応する公開鍵を返します。
func (*PrivateKey) Sign ¶ added in v1.4.0
func (priv *PrivateKey) Sign(rand io.Reader, digest []byte, opts crypto.SignerOpts) ([]byte, error)
privを使用してダイジェストに署名し、randからランダム性を読み取ります。opts引数 は現在は使用されていませんが、crypto.Signerインターフェースに準拠するために、 メッセージのダイジェストに使用されるハッシュ関数であるべきです。
このメソッドはcrypto.Signerを実装しており、たとえばハードウェアモジュールにプライベートパートが 保持されているキーをサポートするインターフェースです。一般的にはこのパッケージの SignASN1 関数を直接使用できます。