Documentation
¶
Overview ¶
rsaパッケージは、PKCS #1およびRFC 8017で指定されたRSA暗号化を実装します。
RSAは、このパッケージで使用される単一の基本操作であり、公開鍵暗号化または公開鍵署名のいずれかを実装するために使用されます。
RSAの暗号化および署名の元となる仕様は、PKCS #1であり、デフォルトでは "RSA暗号化"および "RSA署名"という用語は、通常PKCS #1バージョン1.5を指します。ただし、その仕様には欠陥があり、新しい設計はできる限りOAEPとPSSと呼ばれるバージョン2を使用するべきです。
このパッケージには2つのセットのインタフェースが含まれています。より抽象的なインタフェースが不要な場合は、v1.5 / OAEPでの暗号化/復号化、およびv1.5 / PSSでの署名/検証のための関数があります。公開鍵原則に対して抽象化する必要がある場合は、PrivateKey型がcryptoパッケージのDecrypterおよびSignerインタフェースを実装します。
秘密鍵を含む操作は、GenerateKey と一部の非推奨マルチプライム鍵を含む 操作を除いて、定数時間アルゴリズムを使用して実装されています。
Minimum key size ¶
[GenerateKey]は1024ビット未満のキーが要求された場合にエラーを返し、 すべてのSign、Verify、Encrypt、およびDecryptメソッドは1024ビット未満の キーで使用された場合にエラーを返します。そのようなキーは安全ではなく、 使用すべきではありません。
rsa1024min=0 GODEBUG設定はこのエラーを抑制しますが、必要な場合のみ テストでのみそうすることを推奨します。テストでは[testing.T.Setenv]を使用するか、 *_test.goソースファイルに"//go:debug rsa1024min=0"を含めることで このオプションを設定できます。
または、事前生成されたテスト専用の2048ビットキーについては GenerateKey (TestKey) の例を参照してください。
Index ¶
- Constants
- Variables
- func DecryptOAEP(hash hash.Hash, random io.Reader, priv *PrivateKey, ciphertext []byte, ...) ([]byte, error)
- func DecryptPKCS1v15(random io.Reader, priv *PrivateKey, ciphertext []byte) ([]byte, error)deprecated
- func DecryptPKCS1v15SessionKey(random io.Reader, priv *PrivateKey, ciphertext []byte, key []byte) errordeprecated
- func EncryptOAEP(hash hash.Hash, random io.Reader, pub *PublicKey, msg []byte, label []byte) ([]byte, error)
- func EncryptOAEPWithOptions(random io.Reader, pub *PublicKey, msg []byte, opts *OAEPOptions) ([]byte, error)
- func EncryptPKCS1v15(random io.Reader, pub *PublicKey, msg []byte) ([]byte, error)deprecated
- func SignPKCS1v15(random io.Reader, priv *PrivateKey, hash crypto.Hash, hashed []byte) ([]byte, error)
- func SignPSS(random io.Reader, priv *PrivateKey, hash crypto.Hash, digest []byte, ...) ([]byte, error)
- func VerifyPKCS1v15(pub *PublicKey, hash crypto.Hash, hashed []byte, sig []byte) error
- func VerifyPSS(pub *PublicKey, hash crypto.Hash, digest []byte, sig []byte, opts *PSSOptions) error
- type CRTValue
- type OAEPOptions
- type PKCS1v15DecryptOptionsdeprecated
- type PSSOptions
- type PrecomputedValues
- type PrivateKey
- func (priv *PrivateKey) Decrypt(rand io.Reader, ciphertext []byte, opts crypto.DecrypterOpts) (plaintext []byte, err error)
- func (priv *PrivateKey) Equal(x crypto.PrivateKey) bool
- func (priv *PrivateKey) Precompute()
- func (priv *PrivateKey) Public() crypto.PublicKey
- func (priv *PrivateKey) Sign(rand io.Reader, digest []byte, opts crypto.SignerOpts) ([]byte, error)
- func (priv *PrivateKey) Validate() error
- type PublicKey
Examples ¶
Constants ¶
const ( // PSSSaltLengthAuto causes the salt in a PSS signature to be as large // as possible when signing, and to be auto-detected when verifying. // // When signing in FIPS 140-3 mode, the salt length is capped at the length // of the hash function used in the signature. PSSSaltLengthAuto = 0 // PSSSaltLengthEqualsHash causes the salt length to equal the length // of the hash used in the signature. PSSSaltLengthEqualsHash = -1 )
const ( // PSSSaltLengthAuto は、PSS署名におけるソルトをできるだけ大きくし、検証時には自動で検出されるようにします。 PSSSaltLengthAuto = 0 // PSSSaltLengthEqualsHash は、署名に使用されるハッシュの長さと同じ長さのソルトを使用します。 PSSSaltLengthEqualsHash = -1 )
Variables ¶
var ErrDecryption = errors.New("crypto/rsa: decryption error")
ErrDecryptionはメッセージの復号化に失敗したことを表します。 適応攻撃を避けるために、意図的にあいまいです。
var ErrMessageTooLong = errors.New("crypto/rsa: message too long for RSA key size")
ErrMessageTooLong は、鍵のサイズに対して大きすぎるメッセージを暗号化または署名しようとした場合に返されます。 SignPSS を使用する場合、塩のサイズが大きすぎる場合にも返されることがあります。
var ErrVerification = errors.New("crypto/rsa: verification error")
ErrVerificationは署名を検証できなかったことを表します。 自己適応攻撃を避けるために、意図的にあいまいです。
Functions ¶
func DecryptOAEP ¶
func DecryptOAEP(hash hash.Hash, random io.Reader, priv *PrivateKey, ciphertext []byte, label []byte) ([]byte, error)
DecryptOAEP decrypts ciphertext using RSA-OAEP.
OAEP is parameterised by a hash function that is used as a random oracle. Encryption and decryption of a given message must use the same hash function and sha256.New() is a reasonable choice.
The random parameter is legacy and ignored, and it can be nil.
The label parameter must match the value given when encrypting. See EncryptOAEP for details.
Example ¶
ciphertext, _ := hex.DecodeString("4d1ee10e8f286390258c51a5e80802844c3e6358ad6690b7285218a7c7ed7fc3a4c7b950fbd04d4b0239cc060dcc7065ca6f84c1756deb71ca5685cadbb82be025e16449b905c568a19c088a1abfad54bf7ecc67a7df39943ec511091a34c0f2348d04e058fcff4d55644de3cd1d580791d4524b92f3e91695582e6e340a1c50b6c6d78e80b4e42c5b4d45e479b492de42bbd39cc642ebb80226bb5200020d501b24a37bcc2ec7f34e596b4fd6b063de4858dbf5a4e3dd18e262eda0ec2d19dbd8e890d672b63d368768360b20c0b6b8592a438fa275e5fa7f60bef0dd39673fd3989cc54d2cb80c08fcd19dacbc265ee1c6014616b0e04ea0328c2a04e73460")
label := []byte("orders")
plaintext, err := rsa.DecryptOAEP(sha256.New(), nil, test2048Key, ciphertext, label)
if err != nil {
fmt.Fprintf(os.Stderr, "Error from decryption: %s\n", err)
return
}
fmt.Printf("Plaintext: %s\n", plaintext)
// 暗号化は機密性のみを提供することを覚えておいてください。
// メッセージが正当性を想定した前に、暗号文には署名する必要があります。さらに、メッセージは順序が変更される可能性も考慮してください。
func DecryptPKCS1v15
deprecated
DecryptPKCS1v15は、RSAとPKCS #1 v1.5のパディングスキームを使用して 平文を復号化します。randomパラメータは旧式であり無視されます。nilでも構いません。
Deprecated: PKCS #1 v1.5暗号化は危険であり、使用すべきではありません。 この関数がエラーを返すかどうかによって秘密情報が開示されます。 攻撃者がこの関数を繰り返し実行させ、各インスタンスがエラーを返すかどうかを 学習できる場合、秘密鍵を持っているかのように復号化し署名を偽造することが できます。詳細は draft-irtf-cfrg-rsa-guidance-05 を参照してください。 代わりに EncryptOAEP と DecryptOAEP を使用してください。
func DecryptPKCS1v15SessionKey
deprecated
func DecryptPKCS1v15SessionKey(random io.Reader, priv *PrivateKey, ciphertext []byte, key []byte) error
DecryptPKCS1v15SessionKeyは、RSAとPKCS #1 v1.5のパディングスキームを使用してセッションキーを復号化します。randomパラメータは旧式であり、無視されることがあります。nilでも構いません。 DecryptPKCS1v15SessionKeyは、暗号文の長さが正しくない場合や、暗号文が公開モジュラスよりも大きい場合にエラーを返します。それ以外の場合はエラーは返されません。パディングが有効な場合、結果の平文メッセージはkeyにコピーされます。そうでない場合、keyは変更されません。これらの代替は一定時間内に発生します。この関数の使用者は、事前にランダムなセッションキーを生成し、その値でプロトコルを継続することが意図されています。 セッションキーが小さすぎる場合、攻撃者による総当たり攻撃が可能になる場合があります。攻撃者がそれを行えば、ランダムな値が使用されたかどうか(同じ暗号文に対しては異なる値になるため)と、したがってパディングが正しいかどうかを学ぶことができます。これはまた、この関数の目的を阻害します。少なくとも16バイトのキーを使用することで、この攻撃に対して保護されます。 このメソッドは、RFC 3218 Section 2.3.2 で説明されているBleichenbacher選択暗号文攻撃[0]に対する保護を実装しています。これらの保護は、Bleichenbacher攻撃を非常に困難にしますが、保護はDecryptPKCS1v15SessionKeyを使用するプロトコルの残りの部分がこれらの考慮事項に基づいて設計されている場合にのみ効果的です。特に、復号化されたセッションキーを使用する後続の操作が、キーに関する情報(たとえば、静的なキーかランダムキーか)を漏洩させる場合、これらの緩和策は無効になります。このメソッドは非常に注意して使用する必要があり、通常は既存のプロトコル(TLSなど)との互換性のために絶対に必要な場合にのみ使用するべきです。
- [0] "RSA暗号化標準PKCS #1に基づくプロトコルに対する選択暗号文攻撃", Daniel Bleichenbacher, 暗号学の進歩 (Crypto'98)
- [1] RFC 3218, CMSに対するミリオンメッセージ攻撃の防止, https://www.rfc-editor.org/rfc/rfc3218.html
Deprecated: PKCS #1 v1.5暗号化は危険であり、使用すべきではありません。 この関数で実装されている保護は、上記で説明したように制限的で脆弱です。 詳細は draft-irtf-cfrg-rsa-guidance-05 を参照してください。 代わりに EncryptOAEP と DecryptOAEP を使用してください。
Example ¶
RSAは非常に限られた量のデータしか暗号化できません。合理的な量の データを暗号化するために、ハイブリッドスキームが一般的に 使用されます:RSAはAES-GCMのような対称プリミティブの キーを暗号化するために使用されます。
暗号化の前に、データは既知の 構造に埋め込むことで「パディング」されます。これは多くの理由で行われますが、最も 明らかなのは、べき乗が剰余より大きくなるように 値が十分に大きいことを保証することです。(そうでなければ平方根で 復号化される可能性があります。)
これらの設計では、PKCS #1 v1.5を使用する場合、受信したRSAメッセージが 正しい形式であったかどうか(つまり、復号化の結果が正しく パディングされたメッセージであるかどうか)を開示することを避けることが 極めて重要です。これは秘密情報を漏洩するためです。 DecryptPKCS1v15SessionKeyはこの状況のために設計されており、 復号化された対称キー(正しい形式の場合)を、ランダムキーを含む バッファに定数時間でコピーします。したがって、RSAの結果が 正しい形式でない場合、実装は定数時間でランダムキーを使用します。
// ハイブリッド方式では、少なくとも16バイトの対称鍵を使用する必要があります。ここでは、RSA復号が正しく形成されていない場合に使用されるランダムな鍵を読み取ります。
key := make([]byte, 32)
if _, err := rand.Read(key); err != nil {
panic("RNG failure")
}
rsaCiphertext, _ := hex.DecodeString("aabbccddeeff")
if err := rsa.DecryptPKCS1v15SessionKey(nil, rsaPrivateKey, rsaCiphertext, key); err != nil {
// 発生したエラーは「公開される」ものであり、秘密情報なしでも判断できます。(例えば、RSA公開鍵の長さが不可能な場合など)
fmt.Fprintf(os.Stderr, "Error from RSA decryption: %s\n", err)
return
}
// 与えられたキーを使用して、対称スキームを使ってより大きな暗号文を複合することができます。
block, err := aes.NewCipher(key)
if err != nil {
panic("aes.NewCipher failed: " + err.Error())
}
// キーがランダムであるため、固定されたNonceを使用することは許容されます。
// (キー、Nonce)のペアは依然として一意である必要があります。
var zeroNonce [12]byte
aead, err := cipher.NewGCM(block)
if err != nil {
panic("cipher.NewGCM failed: " + err.Error())
}
ciphertext, _ := hex.DecodeString("00112233445566")
plaintext, err := aead.Open(nil, zeroNonce[:], ciphertext, nil)
if err != nil {
// RSAの暗号文の形式が不正です。AES-GCMの鍵が正しくないため、復号化はここで失敗します。
fmt.Fprintf(os.Stderr, "Error decrypting: %s\n", err)
return
}
fmt.Printf("Plaintext: %s\n", plaintext)
func EncryptOAEP ¶
func EncryptOAEP(hash hash.Hash, random io.Reader, pub *PublicKey, msg []byte, label []byte) ([]byte, error)
EncryptOAEP encrypts the given message with RSA-OAEP.
OAEP is parameterised by a hash function that is used as a random oracle. Encryption and decryption of a given message must use the same hash function and sha256.New() is a reasonable choice.
The random parameter is used as a source of entropy to ensure that encrypting the same message twice doesn't result in the same ciphertext. Most applications should use crypto/rand.Reader as random.
The label parameter may contain arbitrary data that will not be encrypted, but which gives important context to the message. For example, if a given public key is used to encrypt two types of messages then distinct label values could be used to ensure that a ciphertext for one purpose cannot be used for another by an attacker. If not required it can be empty.
The message must be no longer than the length of the public modulus minus twice the hash length, minus a further 2.
Example ¶
secretMessage := []byte("send reinforcements, we're going to advance")
label := []byte("orders")
// crypto/rand.Readerは暗号化関数のランダム化において十分なエントロピー源です。
rng := rand.Reader
ciphertext, err := rsa.EncryptOAEP(sha256.New(), rng, &test2048Key.PublicKey, secretMessage, label)
if err != nil {
fmt.Fprintf(os.Stderr, "Error from encryption: %s\n", err)
return
}
// 暗号化はランダムな関数のため、暗号文は毎回異なるものとなります。
fmt.Printf("Ciphertext: %x\n", ciphertext)
func EncryptOAEPWithOptions ¶ added in v1.26.0
func EncryptOAEPWithOptions(random io.Reader, pub *PublicKey, msg []byte, opts *OAEPOptions) ([]byte, error)
EncryptOAEPWithOptions encrypts the given message with RSA-OAEP using the provided options.
This function should only be used over EncryptOAEP when there is a need to specify the OAEP and MGF1 hashes separately.
See EncryptOAEP for additional details.
func EncryptPKCS1v15
deprecated
EncryptPKCS1v15は、RSAとPKCS #1 v1.5のパディングスキームを使用して 指定されたメッセージを暗号化します。メッセージの長さは、公開モジュラスの 長さから11バイトを引いた長さ以下である必要があります。
randomパラメータは、同じメッセージを2回暗号化しても同じ暗号文にならない ようにするためのエントロピーソースとして使用されます。Go 1.26以降、 安全なランダムバイトソースが常に使用され、GODEBUG=cryptocustomrand=1が 設定されない限りReaderは無視されます。この設定は将来のGoリリースで削除されます。 代わりに testing/cryptotest.SetGlobalRandom を使用してください。
Deprecated: PKCS #1 v1.5暗号化は危険であり、使用すべきではありません。 詳細は draft-irtf-cfrg-rsa-guidance-05 を参照してください。 代わりに EncryptOAEP と DecryptOAEP を使用してください。
func SignPKCS1v15 ¶
func SignPKCS1v15(random io.Reader, priv *PrivateKey, hash crypto.Hash, hashed []byte) ([]byte, error)
SignPKCS1v15 calculates the signature of hashed using RSASSA-PKCS1-V1_5-SIGN from RSA PKCS #1 v1.5. Note that hashed must be the result of hashing the input message using the given hash function. If hash is zero, hashed is signed directly. This isn't advisable except for interoperability.
The random parameter is legacy and ignored, and it can be nil.
This function is deterministic. Thus, if the set of possible messages is small, an attacker may be able to build a map from messages to signatures and identify the signed messages. As ever, signatures provide authenticity, not confidentiality.
Example ¶
message := []byte("message to be signed")
// 直接署名できるのは小さなメッセージだけです。そのため、メッセージ自体ではなくそのハッシュを署名します。これにはハッシュ関数が衝突耐性がある必要があります。SHA-256は、執筆時点(2016年)では最も弱いハッシュ関数です。
hashed := sha256.Sum256(message)
signature, err := rsa.SignPKCS1v15(nil, rsaPrivateKey, crypto.SHA256, hashed[:])
if err != nil {
fmt.Fprintf(os.Stderr, "Error from signing: %s\n", err)
return
}
fmt.Printf("Signature: %x\n", signature)
func SignPSS ¶ added in v1.2.0
func SignPSS(random io.Reader, priv *PrivateKey, hash crypto.Hash, digest []byte, opts *PSSOptions) ([]byte, error)
SignPSS calculates the signature of digest using PSS.
digest must be the result of hashing the input message using the given hash function. The opts argument may be nil, in which case sensible defaults are used. If opts.Hash is set, it overrides hash.
The signature is randomized depending on the message, key, and salt size, using bytes from random. Most applications should use crypto/rand.Reader as random.
func VerifyPKCS1v15 ¶
VerifyPKCS1v15 verifies an RSA PKCS #1 v1.5 signature. hashed is the result of hashing the input message using the given hash function and sig is the signature. A valid signature is indicated by returning a nil error. If hash is zero then hashed is used directly. This isn't advisable except for interoperability.
The inputs are not considered confidential, and may leak through timing side channels, or if an attacker has control of part of the inputs.
Example ¶
message := []byte("message to be signed")
signature, _ := hex.DecodeString("ad2766728615cc7a746cc553916380ca7bfa4f8983b990913bc69eb0556539a350ff0f8fe65ddfd3ebe91fe1c299c2fac135bc8c61e26be44ee259f2f80c1530")
// 直接署名できるのは小さなメッセージのみです。そのため、メッセージ自体ではなく、メッセージのハッシュが署名されます。これには、ハッシュ関数が衝突耐性を持つ必要があります。SHA-256は、書かれた時点(2016年)で使用すべき最も安全なハッシュ関数です。
hashed := sha256.Sum256(message)
err := rsa.VerifyPKCS1v15(&rsaPrivateKey.PublicKey, crypto.SHA256, hashed[:], signature)
if err != nil {
fmt.Fprintf(os.Stderr, "Error from verification: %s\n", err)
return
}
// シグネチャは公開鍵からのメッセージの有効な署名です。
func VerifyPSS ¶ added in v1.2.0
VerifyPSS verifies a PSS signature.
A valid signature is indicated by returning a nil error. digest must be the result of hashing the input message using the given hash function. The opts argument may be nil, in which case sensible defaults are used. opts.Hash is ignored.
The inputs are not considered confidential, and may leak through timing side channels, or if an attacker has control of part of the inputs.
Types ¶
type OAEPOptions ¶ added in v1.5.0
type OAEPOptions struct {
// Hashはマスク生成時に使用されるハッシュ関数です。
Hash crypto.Hash
// MGFHashはMGF1で使用されるハッシュ関数です。
// ゼロの場合、代わりにHashが使用されます。
MGFHash crypto.Hash
// ラベルは、暗号化の際に使用される値と等しい任意のバイトストリングです。
Label []byte
}
OAEPOptionsは、PrivateKey.Decrypt と EncryptOAEPWithOptions 関数を通じて OAEP暗号化と復号化にオプションを渡すことを可能にします。
type PKCS1v15DecryptOptions
deprecated
added in
v1.5.0
type PKCS1v15DecryptOptions struct {
// SessionKeyLenは、復号化されているセッションキーの長さです。
// ゼロでない場合、復号化中のパディングエラーにより、エラーが返される代わりに、この長さのランダムな平文が返されます。
// これらの代替は一定の時間で発生します。
SessionKeyLen int
}
PKCS1v15DecryptOptionsは、crypto.Decrypter インターフェースを使用して PKCS #1 v1.5復号化にオプションを渡すために使用されます。
Deprecated: PKCS #1 v1.5暗号化は危険であり、使用すべきではありません。 詳細は draft-irtf-cfrg-rsa-guidance-05 を参照してください。 代わりに EncryptOAEP と DecryptOAEP を使用してください。
type PSSOptions ¶ added in v1.2.0
type PSSOptions struct {
// SaltLengthはPSS署名で使用されるソルトの長さを制御します。
// それはバイト数の正数であるか、または特別なPSSSaltLengthの定数のいずれかです。
SaltLength int
// Hashはメッセージダイジェストを生成するために使用されるハッシュ関数です。ゼロでない場合、SignPSSに渡されたハッシュ関数を上書きします。PrivateKey.Signを使用する場合には必須です。
Hash crypto.Hash
}
PSSOptionsはPSS署名の作成と検証のためのオプションを含んでいます。
func (*PSSOptions) HashFunc ¶ added in v1.4.0
HashFunc returns opts.Hash so that PSSOptions implements crypto.SignerOpts.
type PrecomputedValues ¶
type PrecomputedValues struct {
Dp, Dq *big.Int
Qinv *big.Int
// CRTValuesは3番目以降の素数に使用されます。歴史的な偶然により、
// 最初の2つの素数のためのCRTはPKCS #1で異なる方法で処理されますが、
// この相互運用性は十分に重要です。
//
// 廃止予定:これらの値は、後方互換性のためにまだPrecomputeによって
// 埋められていますが、使用されていません。マルチプライムRSAは非常に稀ですが、
// 複雑さを制限するためにこのパッケージでCRTの最適化なしで実装されています。
CRTValues []CRTValue
// contains filtered or unexported fields
}
type PrivateKey ¶
type PrivateKey struct {
PublicKey
D *big.Int
Primes []*big.Int
// PrecomputedはRSAの操作を高速化するために事前計算された値を含んでいます。
// 利用可能な場合は、PrivateKey.Precomputeを呼び出して生成されなければなりません。
// また、変更してはいけません。
Precomputed PrecomputedValues
}
PrivateKeyはRSAキーを表します
func GenerateKey ¶
func GenerateKey(random io.Reader, bits int) (*PrivateKey, error)
GenerateKeyは指定されたビットサイズのランダムなRSA秘密鍵を生成します。
bitsが1024未満の場合、GenerateKey はエラーを返します。詳細については「 Minimum key size 」セクションを参照してください。
Go 1.26以降、安全なランダムバイトソースが常に使用され、GODEBUG=cryptocustomrand=1が 設定されない限りReaderは無視されます。この設定は将来のGoリリースで削除されます。 代わりに testing/cryptotest.SetGlobalRandom を使用してください。
Example ¶
package main
import (
"github.com/shogo82148/std/crypto/rand"
"github.com/shogo82148/std/crypto/rsa"
"github.com/shogo82148/std/crypto/x509"
"github.com/shogo82148/std/encoding/pem"
"github.com/shogo82148/std/fmt"
"github.com/shogo82148/std/os"
)
func main() {
privateKey, err := rsa.GenerateKey(rand.Reader, 2048)
if err != nil {
fmt.Fprintf(os.Stderr, "Error generating RSA key: %s", err)
return
}
der, err := x509.MarshalPKCS8PrivateKey(privateKey)
if err != nil {
fmt.Fprintf(os.Stderr, "Error marshalling RSA private key: %s", err)
return
}
fmt.Printf("%s", pem.EncodeToMemory(&pem.Block{
Type: "PRIVATE KEY",
Bytes: der,
}))
}
Output:
Example (TestKey) ¶
package main
import (
"github.com/shogo82148/std/crypto/x509"
"github.com/shogo82148/std/encoding/pem"
"github.com/shogo82148/std/fmt"
"github.com/shogo82148/std/strings"
)
func main() {
// これはRFC 9500, Section 2.1の安全でないテスト専用キーです。
// 遅いキー生成を避けるためにテストで使用できます。
block, _ := pem.Decode([]byte(strings.ReplaceAll(
`-----BEGIN RSA TESTING KEY-----
MIIEowIBAAKCAQEAsPnoGUOnrpiSqt4XynxA+HRP7S+BSObI6qJ7fQAVSPtRkqso
tWxQYLEYzNEx5ZSHTGypibVsJylvCfuToDTfMul8b/CZjP2Ob0LdpYrNH6l5hvFE
89FU1nZQF15oVLOpUgA7wGiHuEVawrGfey92UE68mOyUVXGweJIVDdxqdMoPvNNU
l86BU02vlBiESxOuox+dWmuVV7vfYZ79Toh/LUK43YvJh+rhv4nKuF7iHjVjBd9s
B6iDjj70HFldzOQ9r8SRI+9NirupPTkF5AKNe6kUhKJ1luB7S27ZkvB3tSTT3P59
3VVJvnzOjaA1z6Cz+4+eRvcysqhrRgFlwI9TEwIDAQABAoIBAEEYiyDP29vCzx/+
dS3LqnI5BjUuJhXUnc6AWX/PCgVAO+8A+gZRgvct7PtZb0sM6P9ZcLrweomlGezI
FrL0/6xQaa8bBr/ve/a8155OgcjFo6fZEw3Dz7ra5fbSiPmu4/b/kvrg+Br1l77J
aun6uUAs1f5B9wW+vbR7tzbT/mxaUeDiBzKpe15GwcvbJtdIVMa2YErtRjc1/5B2
BGVXyvlJv0SIlcIEMsHgnAFOp1ZgQ08aDzvilLq8XVMOahAhP1O2A3X8hKdXPyrx
IVWE9bS9ptTo+eF6eNl+d7htpKGEZHUxinoQpWEBTv+iOoHsVunkEJ3vjLP3lyI/
fY0NQ1ECgYEA3RBXAjgvIys2gfU3keImF8e/TprLge1I2vbWmV2j6rZCg5r/AS0u
pii5CvJ5/T5vfJPNgPBy8B/yRDs+6PJO1GmnlhOkG9JAIPkv0RBZvR0PMBtbp6nT
Y3yo1lwamBVBfY6rc0sLTzosZh2aGoLzrHNMQFMGaauORzBFpY5lU50CgYEAzPHl
u5DI6Xgep1vr8QvCUuEesCOgJg8Yh1UqVoY/SmQh6MYAv1I9bLGwrb3WW/7kqIoD
fj0aQV5buVZI2loMomtU9KY5SFIsPV+JuUpy7/+VE01ZQM5FdY8wiYCQiVZYju9X
Wz5LxMNoz+gT7pwlLCsC4N+R8aoBk404aF1gum8CgYAJ7VTq7Zj4TFV7Soa/T1eE
k9y8a+kdoYk3BASpCHJ29M5R2KEA7YV9wrBklHTz8VzSTFTbKHEQ5W5csAhoL5Fo
qoHzFFi3Qx7MHESQb9qHyolHEMNx6QdsHUn7rlEnaTTyrXh3ifQtD6C0yTmFXUIS
CW9wKApOrnyKJ9nI0HcuZQKBgQCMtoV6e9VGX4AEfpuHvAAnMYQFgeBiYTkBKltQ
XwozhH63uMMomUmtSG87Sz1TmrXadjAhy8gsG6I0pWaN7QgBuFnzQ/HOkwTm+qKw
AsrZt4zeXNwsH7QXHEJCFnCmqw9QzEoZTrNtHJHpNboBuVnYcoueZEJrP8OnUG3r
UjmopwKBgAqB2KYYMUqAOvYcBnEfLDmyZv9BTVNHbR2lKkMYqv5LlvDaBxVfilE0
2riO4p6BaAdvzXjKeRrGNEKoHNBpOSfYCOM16NjL8hIZB1CaV3WbT5oY+jp7Mzd5
7d56RZOE+ERK2uz/7JX9VSsM/LbH9pJibd4e8mikDS9ntciqOH/3
-----END RSA TESTING KEY-----`, "TESTING KEY", "PRIVATE KEY")))
testRSA2048, _ := x509.ParsePKCS1PrivateKey(block.Bytes)
fmt.Println("Private key bit size:", testRSA2048.N.BitLen())
}
Output:
func GenerateMultiPrimeKey
deprecated
GenerateMultiPrimeKeyは指定されたビットサイズとランダムソースで、マルチプライムRSA鍵ペアを生成します。
"On the Security of Multi-prime RSA"のテーブル1には、与えられたビットサイズの最大プライム数が示されています。
公開鍵は2つのプライムの場合と互換性がありますが、秘密鍵は異なります。したがって、特定の形式でマルチプライムの秘密鍵をエクスポートしたり、他のコードに後からインポートすることができない場合があります。
このパッケージではマルチプライムRSAのCRT最適化を実装していないため、2つ以上のプライムを持つキーのパフォーマンスは悪くなります。
Go 1.26以降、安全なランダムバイトソースが常に使用され、GODEBUG=cryptocustomrand=1が 設定されない限りReaderは無視されます。この設定は将来のGoリリースで削除されます。 代わりに testing/cryptotest.SetGlobalRandom を使用してください。
Deprecated: 上記のセキュリティ、互換性、およびパフォーマンスの理由により、 2つ以外のプライム数でこの関数を使用することはお勧めしません。 代わりに GenerateKey を使用してください。
func (*PrivateKey) Decrypt ¶ added in v1.5.0
func (priv *PrivateKey) Decrypt(rand io.Reader, ciphertext []byte, opts crypto.DecrypterOpts) (plaintext []byte, err error)
Decryptはprivで暗号文を復号化します。optsがnilまたは *PKCS1v15DecryptOptions 型の場合、PKCS #1 v1.5 復号化が実行されます。それ以外の場合、optsは *OAEPOptions 型でなければなりませんし、OAEP 復号化が行われます。
func (*PrivateKey) Equal ¶ added in v1.15.0
func (priv *PrivateKey) Equal(x crypto.PrivateKey) bool
Equalはprivとxが等価な値を持つかどうかを報告します。事前計算された値は無視されます。
func (*PrivateKey) Precompute ¶
func (priv *PrivateKey) Precompute()
Precomputeは将来の秘密鍵操作を高速化するためのいくつかの計算を実行します。 検証されていない秘密鍵に対して実行しても安全です。
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から読み取り、署名digestを生成します。optsが *PSSOptions の場合、PSSアルゴリズムが使用されます。それ以外の場合は、PKCS #1 v1.5が使用されます。digestは、opts.HashFunc()を使用して入力メッセージのハッシュ値を計算した結果でなければなりません。
このメソッドは crypto.Signer を実装しており、例えばハードウェアモジュールに保持される秘密部分をサポートするインターフェースです。一般的な使用法では、このパッケージ内のSign*関数を直接使用するべきです。
func (*PrivateKey) Validate ¶
func (priv *PrivateKey) Validate() error
Validateはキーに対して基本的な健全性チェックを実行します。 キーが有効な場合はnilを返し、そうでなければ問題を説明するエラーを返します。
PrivateKey.Precompute の後に実行すると、有効なキーに対してより高速に実行されます。