この関数は、CBC, OFB, CFB ,ECB
暗号モードのDES,TripleDES,Blowfish (デフォルト),3-WAY, SAFER-SK64,
SAFER-SK128, TWOFISH, TEA, RC2 ,GOST
のような広範なブロックアルゴリズムをサポートするmcryptライブ
ラリへのインターフェースです。加えて、"フリーではない" と思われる RC6 および IDEA
もサポートします。
注意 この拡張モジュールはWindows環境では利用できません。
ここで示す関数は、
mcrypt
を 使用して動作します。この拡張モジュールを使用するには、
ここ
からlibmcrypt-x.x.tar.gz をダウン
ロードし、含まれているインストール用の指示に従って下さい。
libmcrypt 2.4.xとリンクした場合、加えてブロックアルゴリズム:
CAST, LOKI97, RIJNDAEL, SAFERPLUS, SERPENT および次のストリーム暗
号: ENIGMA (crypt), PANAMA, RC4 ,WAKE がサポートされます。
libmcrypt 2.4.x を使用した場合、暗号モード nOFB もサポートされます。
この拡張機能を利用可能にするためには、 PHP を
--with-mcrypt
パラメータを 付けてコンパイルする必要があります。必ず、
--disable-posix-threads
を付けて libmcrypt をコンパイルするようにして下さい。
これらの関数の動作は、
php.ini
の設定により変化します。
表 1mcrypt設定オプション
名前 | デフォルト | 変更の可否 |
---|---|---|
mcrypt.algorithms_dir | NULL | PHP_INI_ALL |
mcrypt.modes_dir | NULL | PHP_INI_ALL |
これらの定数は、この拡張モジュールで定義されており、
この拡張モジュールがPHP内部にコンパイルされているか実行時に動的にロー
ドされるかのどちらかの場合のみ使用可能です。
mcryptは4つのブロック暗号モード(CBC, OFB, CFB,
ECB)で実行可能です。 libmcrypt-2.4.x以降にリンクした場合、ブロック暗号モード nOFG と
STREAMモードでも実行可能です。MCRYPT_MODE_mode 形式を関数で使用する
際には、いくつかの制約があります。ここで、これらの各モードの通常の使
用法の概要を示します。詳細なリファレンスおよび議論に関しては、 Applied Cryptography by
Schneier (ISBN 0-471-11709-9) を参照下さい。
MCRYPT_MODE_ECB (electronic codebook)
は、他のキーを暗号化すると いったランダムデータに適しています。出力データが短くランダムであ
るというECBの短所は、都合の良い逆の効果を持っています。
MCRYPT_MODE_CBC (cipher block
chaining)は、特に、ECBよりも著しく
高いセキュリティでファイルを暗号化する用途に適しています。
MCRYPT_MODE_CFB (cipher feedback)
は、1バイト毎に暗号化する必要がある バイトストリームを暗号化する際に最も適したモードです。
MCRYPT_MODE_OFB (output
feedback、8ビット形式) はCFBと互換性があ
りますが、エラーの伝播が許容されないアプリケーションに使用するこ
とが可能です。このモードは(8ビットモードで処理を行うため)安全では
なく、使用は推奨されません。
MCRYPT_MODE_NOFB (output feedback,
nビット形式) はOFB と互換です
が、アルゴリズムのブロックサイズを変更可能なため、より安全です。
MCRYPT_MODE_STREAM
は、WAKEやRC4のようないくつかのストリームアル ゴリズムを読み込む追加のモードです。
他のモードおよびランダムデバイス定数:
以下にmcrypt拡張モジュールにより現在サポートされている暗号のリス
トを示します。サポートされる暗号の完全なリストについては、 mcrypt.h の define
を参照下さい。mcrypt-2.2.x API に関する一般的
な規則は、MCRYPT_暗号名でPHPから暗号をアクセス可能であるというこ
とです。mcrypt-2.4.xおよびmcrypt-2.5.xのAPIについてもこれらの定数
は使用できますが、
mcrypt_module_open()
をコー ルする際に文字列で暗号名を指定することも可能です。
MCRYPT_ARCFOUR_IV (libmcrypt 2.4.x
のみ)
MCRYPT_ARCFOUR (libmcrypt 2.4.x
のみ)
MCRYPT_DES_COMPAT (libmcrypt 2.2.x
only)
MCRYPT_ENIGMA (libmcrypt 2.4.x のみ、
MCRYPT_CRYPTへのエイリアス)
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_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_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_TRIPLEDES (libmcrypt
2.4.xのみ)
MCRYPT_TWOFISH (mcrypt 2.x より古いバージョン、
またはmcrypt 2.4.xの場合)
MCRYPT_TWOFISH128 (TWOFISHxxx are
available in newer 2.x versions, but not in the
2.4.x versions)
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
章を参照下さい)
mcrypt は、上に示した暗号を用いて暗号化および復号化を
行うことが可能です。libmcrypt-2.2.xとリンクした場合、4つの重要な mcrypt コマンド (
mcrypt_cfb()
,
mcrypt_cbc()
,
mcrypt_ecb()
,
mcrypt_ofb()
) は、MCRYPT_ENCRYPT および MCRYPT_DECRYPT という
2つのモードの両方で実行可能です。
libmcrypt 2.4.xまたは2.5.xとリンクした場合、上記の関数も利用可能
ですが、新しい関数を使用されることを推奨します。