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
    HashMD5SHA1 // MD5とSHA1ハッシュを組み合わせで、TLSのRAS署名に使用する。
)

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