Mcrypt暗号化関数

PHP マニュアル
前のページ |  | 次のページ

# LIVMcrypt暗号化関数

ここで示す関数は、mcrypt を 使用して動作します。

この関数は、CBC, OFB, CFB ,ECB 暗号モードのDES,TripleDES,Blowfish (デフォルト),3-WAY, SAFER-SK64, SAFER-SK128, TWOFISH, TEA, RC2 ,GOST のような広範なブロックアルゴリズムをサポートするmcryptライブ ラリへのインターフェースです。加えて、"フリーではない" と思われる RC6 および IDEA もサポートします。

libmcrypt 2.4.xとリンクした場合、加えてブロックアルゴリズム: CAST, LOKI97, RIJNDAEL, SAFERPLUS, SERPENT および次のストリーム暗 号: ENIGMA (crypt), PANAMA, RC4 ,WAKE がサポートされます。 libmcrypt 2.4.x を使用した場合、暗号モード nOFB もサポートされます。

この拡張機能を使用するには、ここ から libmcrypt-x.x.tar.gz をダウンロードし、含まれているインストール用の 指示に従って下さい。この拡張機能を利用可能にするためには、 PHP を `--with-mcrypt` パラメータを 付けてコンパイルする必要があります。必ず、 `--disable-posix-threads`を付けて libmcrypt をコンパイルして下さい。

mcrypt は、上に示した暗号を用いて暗号化および復号化を 行うことが可能です。libmcrypt-2.2.xとリンクした場合、4つの重要な mcrypt コマンド (mcrypt_cfb(), mcrypt_cbc(),mcrypt_ecb(), mcrypt_ofb()) は、MCRYPT_ENCRYPT および MCRYPT_DECRYPT という 2つのモードの両方で実行可能です。

例 1入力値を2.2.xにおいて ECB モードの TripleDES で暗号化する
    <?php
    $key = "this is a very secret key";
    $input = "Let us meet at 9 o'clock at the secret place.";

    $encrypted_data = mcrypt_ecb (MCRYPT_3DES, $key, $input, MCRYPT_ENCRYPT);
    ?>

この例では、`$encrypted_data`に文字列として暗号化 されたデータが返されます。

libmcrypt 2.4.x とリンクした場合、上記の関数も利用可能ですが、新し い関数を使用されることを推奨します。

例 22.4.xにおいてECBモードでTripleDESにより入力を暗号化する
    <?php
    $key = "this is a very secret key";
    $input = "Let us meet at 9 o'clock at the secret place.";

    $td = mcrypt_module_open (MCRYPT_TripleDES, "", MCRYPT_MODE_ECB, "");
    $iv = mcrypt_create_iv (mcrypt_enc_get_iv_size ($td), MCRYPT_RAND);
    mcrypt_generic_init ($td, $key, $iv);
    $encrypted_data = mcrypt_generic ($td, $input);
    mcrypt_generic_end ($td);
    ?>

この例は、`$encrypted_data`に文字列として暗号化さ れたデータを取得します。

mcryptは4つのブロック暗号モード(CBC, OFB, CFB, ECB)で実行可能です。 libmcrypt-2.4.xにリンクした場合、ブロック暗号モード nOFG とSTREAM モードでも実行可能です。MCRYPT_MODE_mode 形式を関数で使用する際に は、いくつかの制約があります。ここで、これらの各モードの通常の使用 法の概要を示します。詳細なリファレンスおよび議論に関しては、 Applied Cryptography by Schneier (ISBN 0-471-11709-9) を参照下さい。

- ECB (electronic codebook) は、他のキーを暗号化するといった ランダムデータに適しています。 出力データは短くランダムであるという ECB の短所は、 都合の良い逆の効果を持っています。

- CBC (cipher block chaining) は、特に、 ECB よりも著しく高いセキュリティで ファイルを暗号化する用途に適しています。

- CFB (cipher feedback) は、1バイト毎に暗号化する必要がある バイトストリームを暗号化する際に最も適したモードです。

- OFB (output feedback、8ビット形式) は CFB と互換性がありますが、 エラーの伝播が許容されないアプリケーションに使用することが可能 です。このモードは(8ビットモードで処理を行うため)安全ではなく、 使用は推奨されません。

- nOFB (output feedback, n ビット形式) はOFB と互換ですが、 アルゴリズムのブロックサイズを変更可能なため、より安全です。

- STREAM は、WAKE や RC4 のようないくつかのストリームアルゴリズム を読み込む追加のモードです。

PHP は、現在ビットストリームの暗号化/複合化をサポートしていません。 現在のところ、PHP は文字列の処理のみをサポートしています。

サポートされる暗号の完全なリストについては、mcrypt.h の define を 参照下さい。mcrypt-2.2.x API に関する一般的な規則は、MCRYPT_暗号名 でPHPから暗号をアクセス可能であるということです。mcrypt-2.4.x API についてもこれらの規則は成り立ちますが、 mcrypt_module_open() をコールする際に文字列で暗 号名を指定することも可能です。

以下に現在 mcrypt 拡張機能においてサポートされている暗号の簡単なリストを 示します。mcrypt がサポートする暗号がこのリストにのっていない場合、 このドキュメントが古いと仮定して下さい。

- MCRYPT_3DES

- MCRYPT_ARCFOUR_IV (libmcrypt 2.4.x のみ)

- MCRYPT_ARCFOUR (libmcrypt 2.4.x のみ)

- MCRYPT_BLOWFISH

- MCRYPT_CAST_128

- MCRYPT_CAST_256

- MCRYPT_CRYPT

- MCRYPT_DES

- MCRYPT_DES_COMPAT (libmcrypt 2.2.x のみ)

- MCRYPT_ENIGMA (libmcrypt 2.4.x のみ, MCRYPT_CRYPTへのエイリアス)

- MCRYPT_GOST

- MCRYPT_IDEA (non-free)

- MCRYPT_LOKI97 (libmcrypt 2.4.x のみ)

- MCRYPT_MARS (libmcrypt 2.4.x のみ, non-free)

- MCRYPT_PANAMA (libmcrypt 2.4.x のみ)

- MCRYPT_RIJNDAEL_128 (libmcrypt 2.4.x のみ)

- MCRYPT_RIJNDAEL_192 (libmcrypt 2.4.x のみ)

- MCRYPT_RIJNDAEL_256 (libmcrypt 2.4.x のみ)

- MCRYPT_RC2

- MCRYPT_RC4 (libmcrypt 2.2.x のみ)

- MCRYPT_RC6 (libmcrypt 2.4.x のみ)

- MCRYPT_RC6_128 (libmcrypt 2.2.x のみ)

- MCRYPT_RC6_192 (libmcrypt 2.2.x のみ)

- MCRYPT_RC6_256 (libmcrypt 2.2.x のみ)

- MCRYPT_SAFER64

- MCRYPT_SAFER128

- MCRYPT_SAFERPLUS (libmcrypt 2.4.x のみ)

- MCRYPT_SERPENT (libmcrypt 2.4.x のみ)

- MCRYPT_SERPENT_128 (libmcrypt 2.2.x のみ)

- MCRYPT_SERPENT_192 (libmcrypt 2.2.x のみ)

- MCRYPT_SERPENT_256 (libmcrypt 2.2.x のみ)

- MCRYPT_SKIPJACK (libmcrypt 2.4.x のみ)

- MCRYPT_TEAN (libmcrypt 2.2.x のみ)

- MCRYPT_THREEWAY

- MCRYPT_TRIPLEDES (libmcrypt 2.4.x のみ)

- MCRYPT_TWOFISH (以前のバージョン mcrypt 2.x または、mcrypt 2.4.x 用)

- MCRYPT_TWOFISH128 (TWOFISHxxx は 2.x より新しいバージョンで利用 可能ですが、2.4.x バージョンでは利用不可)

- MCRYPT_TWOFISH192

- MCRYPT_TWOFISH256

- MCRYPT_WAKE (libmcrypt 2.4.x のみ)

- MCRYPT_XTEA (libmcrypt 2.4.x のみ)

CFB および OFBモードでは、それぞれの暗号関数に初期化ベクトル(IV) を指定する必要があり、CBCモードではIVを指定することが可能です。 IV は、ユニークである必要があり、暗号化/複合化の際に同じである 必要があります。暗号化されて保存されたデータの場合、関数の出力を (ファイル名の MD5 キーのように) 保存されたデータの位置を表す インデックスとして使用することができます。もしくは、暗号化されたデー タと共にIV を渡すことができます。(このトピックに関する議論について は、Applied Cryptography by Schneier (ISBN 0-471-11709-9) の 9.3 章を参照下さい)

前のページ | ホーム | 次のページ
mcal_week_of_year | 上に戻る | mcrypt_cbc