import "crypto/rsa"
RSA暗号標準(PKCS#1)で定義されているRSA暗号を実装しています。
パッケージファイル
pkcs1v15.go rsa.go
DecryptOAEP関数
func DecryptOAEP(hash hash.Hash, rand io.Reader, priv *PrivateKey, ciphertext []byte, label []byte) (msg []byte, err os.Error)
DecryptOAEPは、RSA-OAEPを使っている暗号文を復号化します。rand != nilの場合、サイドチャネル攻撃を避けるためRSA blindingを使用します。
DecryptPKCS1v15関数
func DecryptPKCS1v15(rand io.Reader, priv *PrivateKey, ciphertext []byte) (out []byte, err os.Error)
DecryptPKCS1v15は、RSAおよびPKCS#1 v1.5のパディング方式を使用している平文を復号化します。rand != nilの場合、サイドチャネル攻撃を避けるためRSA blindingを使用します。
DecryptPKCS1v15SessionKey関数
func DecryptPKCS1v15SessionKey(rand io.Reader, priv *PrivateKey, ciphertext []byte, key []byte) (err os.Error)
DecryptPKCS1v15SessionKeyは、RSAおよびPKCS#1 v1.5のパディング方式を使用しているセッションキーを復号化します。rand != nilの場合、サイドチャネル攻撃を避けるためRSA blindingを使用します。ciphertextの長さが不正、またはモジュラスよりも大きい場合はエラーを返します。それ以外はエラーを返しません。パディングが有効であるとき平文メッセージはkeyへコピーされます。無効であるときはkeyを変更しません。これらの処理は一定の時間で行われます。この関数はユーザが事前にランダムなセッションキーを生成しておき、得られた値を使用して通信手順を継続してゆくことを前提にしています。これは攻撃者が平文に関する情報を得る可能性を排除するということです。“Chosen Ciphertext Attacks Against Protocols Based on the RSA Encryption Standard PKCS #1”、およびDaniel Bleichenbacher、Advances in Cryptology (Crypto ‘98)を参照してください。
EncryptOAEP関数
func EncryptOAEP(hash hash.Hash, rand io.Reader, pub *PublicKey, msg []byte, label []byte) (out []byte, err os.Error)
EncryptOAEPは、RSA-OAEPを使用して与えられたメッセージを暗号化します。メッセージの長さは公開モジュラス長-ハッシュ長の倍++2以下である必要があります。
EncryptPKCS1v15関数
func EncryptPKCS1v15(rand io.Reader, pub *PublicKey, msg []byte) (out []byte, err os.Error)
EncryptPKCS1v15は、RSAおよびPKCS#1 v1.5のパディング方式を使用して与えられたメッセージを暗号化します。メッセージは長は公開モジュラス長から11バイトを引いた値以下である必要があります。
警告:この関数を使用してセッションキー以外の平文を暗号化するのは危険です。新しい通信手順にはRSA OAEPを使用してください。
SignPKCS1v15関数
func SignPKCS1v15(rand io.Reader, priv *PrivateKey, hash PKCS1v15Hash, hashed []byte) (s []byte, err os.Error)
SignPKCS1v15は、RSA PKCS#1 v1.5のRSASSA-PSS-SIGNを使ってハッシュされているhashedの署名を計算します。hashedは、指定されたハッシュ関数を使って入力メッセージをハッシュした結果でなければなりません。
VerifyPKCS1v15関数
func VerifyPKCS1v15(pub *PublicKey, hash PKCS1v15Hash, hashed []byte, sig []byte) (err os.Error)
VerifyPKCS1v15は、RSA PKCS#1 v1.5の署名を検証します。hashedは指定されたハッシュ関数を使って入力メッセージをハッシュした結果で、sigは署名である必要があります。有効な署名はerrにnilが返されることによって示されます。
DecryptionError型
DecryptionErrorは、メッセージの復号化に失敗したことを表わします。適応的攻撃を避けるため、意図的に曖昧となっています。
type DecryptionError struct{}
(DecryptionError) String関数
func (DecryptionError) String() string
MessageTooLongError型
MessageTooLongErrorは、メッセージを暗号化する際、公開鍵の鍵長が長すぎたときに返されます。
type MessageTooLongError struct{}
(MessageTooLongError) String関数
func (MessageTooLongError) String() string
PKCS1v15Hash型
PKCS#1 v1.5の設計には、使用するハッシュ関数を正しく理解する必要があります。hash.Hashはこの限りではありません。
type PKCS1v15Hash int
const (
HashMD5 PKCS1v15Hash = iota
HashSHA1
HashSHA256
HashSHA384
HashSHA512
)
PrivateKey型
PrivateKeyはRSA鍵を表わします。
type PrivateKey struct {
PublicKey // public part.
D *big.Int // private exponent
P, Q *big.Int // prime factors of N
}
GenerateKey関数
func GenerateKey(rand io.Reader, bits int) (priv *PrivateKey, err os.Error)
GenerateKeyは、与えられたビット長のRSA鍵ペアを生成します。
(PrivateKey) Validate関数
func (priv PrivateKey) Validate() os.Error
PublicKey型
PublicKeyは、RSA鍵の公開部分を表わしています。
type PublicKey struct {
N *big.Int // modulus
E int // public exponent
}
VerificationError型
VerificationErrorは、署名検証に失敗したことを表わします。適応的攻撃を避けるため、意図的に曖昧となっています。
type VerificationError struct{}
(VerificationError) String関数
func (VerificationError) String() string
Trackback URL
Comments