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”を参照してください。

EncryptOAEP関数

func EncryptOAEP(hash hash.Hash, rand io.Reader, pub *PublicKey, msg []byte, label []byte) (out []byte, err os.Error)

EncryptOAEPはRSA-OAEPを使用し、メッセージを暗号化します。メッセージはモジュラスから、ハッシュ長の2倍に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は署名である必要があります。有効な署名は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の設計には、使用するハッシュ関数を正しく理解する必要があります。

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