PDEL for PHP5

Practical and Decryptable Encryption Library for PHP5   (Version 1.2.1)

Special thanks for your access. Sorry , this site is Japanese(UTF-8) version only.

  
当サイトへのアクセス、ありがとうございます。

  • 当サイトはブラウザの表示領域を横1000px、縦640px程度、またはそれ以上にして閲覧してください。(特に縦は820px以上を推奨します。)
  • あなたのブラウザはpxpxです。
  • 表示領域が小さいと、メニューが綺麗に表示されず、読みにくくなります。
  • 推奨サイズ以上で閲覧しているにもかかわらず、メニューのTop~ダウンロードが表示領域最上部に固定されない場合、当サイトを再読み込みしてください。
   当サイトは、プログラミング言語PHP用に開発されたオープンソースライブラリ PDEL for PHP5(以降PDELと記します。PDELはピーデルと発音してください。)の仕様や使用方法等を解説するサイトです。

   PDELとは Practical and Decryptable Encryption Library の略で、文字列データ専用の実用的かつ復号可能な暗号化ライブラリという意味です。(PDELの解説に際し、極力平易な表現を心掛けたつもりですが、PDELの仕様上、一般的なプログラマの人には馴染みの薄い用語も用いなければなりません。用語集も準備しましたので、よろしければ適宜ご参考ください。)

   情報システムのセキュリティ対策は、年々重要性が高まっています。ところが「データベース等に格納する重要な情報を暗号化しているか?」というと、そうでないシステムが数多く存在します。

   「システム開発者のセキュリティに対する認識が低かったので、暗号化していない」と言ってしまえばそれまでですが、システム開発者が躊躇することなく使用できる「復号可能な暗号化ライブラリ」が少ないのも、大きな原因の一つではないでしょうか。PHPではMcrypt系関数PEARのCrypt_Blowfish等で提供されています。しかしこれらは、次の3点の問題があります。

   1点目は、他のライブラリの使用を前提にしているので、OSやPHPのバージョンアップ等に注意を要することです。(PEARはE_STRICTに準拠していないライブラリも多く、品質面で利用を躊躇される人も少なくないのではないでしょうか。)

   2点目は、マニュアル類が不親切で、例えば「10バイトの情報を暗号化すると、何バイトに拡張されるのか?」「暗号化結果に、Null、¥、%、&、カンマ、シングルクォーテーション、ダブルクォーテーション等のシステム誤作動を起こしかねない文字が含まれる可能性があるのか?」等がわかりずらいことです。

   3点目は、復号の失敗を判断できない(と思われる)ことです。(何らかの調査のため「氏名等が暗号化されている本番環境をコピーして調査専用環境を構築する」ようなケースをイメージしてください。セキュリティを確保するため、本番環境と調査専用環境で異なるキーを用いたいところですが、システム誤作動を起こしかねない文字の影響で、本番環境と調査専用環境で同じキーを用いるとすれば、それは残念な暗号化です。どういうことかというと、暗号化時と復号時で異なるキーを使用すると、復号に失敗するのですが、失敗を判断できないライブラリは、でたらめな文字列を復号結果として返すのです。でたらめな文字列にはシステム誤作動を起こしかねない文字が含まれる可能性があります。)

   このような現状は好ましくありません。しかもクラウドの普及も考慮すれば、容易に使用できる「復号可能な暗号化ライブラリ」のニーズは低くないのではないでしょうか。(クラウドに関しては「セッション・アフィニティ機能が無いタイプのクラウド ≒ セッション変数が使用できないタイプのクラウド」の場合、「復号可能な暗号化ライブラリ」があれば、CookieやHTMLの隠しタグ等で代替する方式も、安全性が高まるでしょう。)

   PDELは、このような現状改善の一助になればとの思いから、開発されました。
   PDELの特徴は次の6点です。

   1点目は、他のライブラリに依存しないことです。(他のライブラリを使用しないPHP標準関数のみで実装しています。もっとも、このことは処理時間が速くないことを意味します。デモでは処理時間の確認も行えるので、よろしければご確認ください。また、皆様の環境でもPDELの処理時間を確認できるよう、一部例外を除き、当サイト一式はダウンロードしたzipファイル内に含まれています。よろしければ皆様の環境に当サイトのコピー環境を構築し、PDELの処理時間をご確認ください。)

   2点目は、強度でバラエティに富んだ暗号化方法をテキストファイルで複数定義できることです。(暗号化の結果が「常に可変値となる可変暗号化」「常に固定値となる固定暗号化」「暗号化前の情報のバイト数に影響されない固定長暗号化」が選択できます。汎用的なプログラムは「プログラム本体から物理的に独立したYAMLやXML等の外部ファイル」で動作を決定することがよくありますが、そのイメージです。PDELの暗号化方法はレシピと呼ぶテキストファイルで定義します。氏名用のレシピ、メールアドレス用のレシピ、電話番号用のレシピ、住所用のレシピ、クレジットカード番号用のレシピ、等のように定義できます。)

   3点目は、標準オプション機能として、データマスキング機能を備えていることです。(「常にマスキングを行う」「システム利用者の権限レベルに応じたデータマスキングを行う」ことが行えます。権限レベルに応じたデータマスキングとは「顧客のメールアドレスは、中級以上のスタッフには復号した実データを表示するが、中級未満のスタッフには MAD と表示する」といったデータマスキングのことです。)

   4点目は、標準オプション機能として、有効期限付き暗号化が行えることです。「相対日時型(暗号化した時刻から48時間以内は復号できるが、それを超えると復号できない等)」「絶対日時型(来月5日までは復号できるが、それを超えると復号できない等)」の暗号化が可能です。

   5点目は、標準オプション機能として、セッション・ハイジャック・チェック付き暗号化が行えることです。

   6点目は、復号の失敗を認識できることです。

   「復号可能な暗号化」というテーマに関心をお持ちの人は「データマスキング、有効期限付き暗号化、セッション・ハイジャック対策」等にも関心を持っておられる割合が高いのではないでしょうか。PDELは、これらを標準オプション機能として備えることにより、他のライブラリとの差別化を図りました。

※PDELはE_STRICT準拠です。
   PDEL(本体およびコピー環境構築用のファイル一式)の使用条件は、以下とします。

  • ライセンス
    MITとします。ソースコードの改変や商用利用等に、一部例外を除き、制約はありません。PDELを組み込んだシステムのソースコードについて、ソースコードの開示義務もありません。
  • ライセンスの例外
    当サイトではいくつかの外部ライブラリ等を使用させていただいています。当サイトをもとに何らかのサイトを構築される場合、外部ライブラリ等の使用条件に従ってください。(使用している外部ライブラリ等は後述。)
  • 責任範囲
    万一、PDEL(当サイトでの解説や、皆様の環境で構築されたコピー環境等も含みます)に起因する何らかのトラブルが起きたとしても、PDELの作成者であるexceptionCatcherは一切の責任を負いません。全て自己責任で使用してください。
  • 動作環境
    • マルチプロセス環境(マルチスレッドでない環境)かつPHP5.0以上で実行されることを前提にしています。推奨はPHP5.2以上です。(5.0以上の全てのバージョンでの動作を保証するものではありません。動作確認したPHPの一番低いバージョンは5.0.4です。PHP5.2以上を推奨するのは、標準で2038年問題に対応したDateTimeクラスが使用できるからです。PHP5.2未満の環境で「有効期限付き暗号化」を行った場合、2038年問題が原因で「日時のチェックが正しく行われない」可能性があります。)
    • マルチスレッド環境では、FastCGIのPHP5.0以上で実行されることを前提にしていますが、PHPマニュアルにも記されているように、マルチスレッド環境は非推奨です。
      ※マルチスレッド関連の問題が理解できない人は、以下もよろしければ参考にしてください。
      http://exceptioncatcher.seesaa.net/article/230406599.html
    • PHP実行時の内部文字エンコーディングがASCII互換の文字コード(1文字を1~4バイトで表現するUTF-8等)であることを前提にしています。1文字を2バイトまたは4バイトで表現するUTF-16、1文字を4バイトで表現するUTF-32の場合、PDELは動作しません。
  • 当サイトはリンクフリーです。
  • 当サイトは下記時間帯でサイトを停止します。(日本時間です。)
    • 毎日午前4時0分~午前4時5分の5分間
    • 毎週月曜日午前6時0分~午前7時0分の1時間
    ※上記以外にも、事前通告なしにサイトを停止することがあります。
  • 当サイトの動作確認は2012年9月時点におけるWindows7/WindowsXP用主要ブラウザの最新バージョン(IE9・IE8・Chrome22・Firefox15・Safari5)で行っています。レガシーなブラウザやMacOSでの動作は未確認です。Operaは、デモとツールでデザインが崩れ、読みにくくなります。
  • 当サイト構築に際し、次のライブラリ等を使用させていただきました。ありがとうございました。
    【ブラウザ系】 【PHP系】(PDEL本体では未使用ですが、当サイトのデモ等で使用しています。)
   PDELオフィシャルサイトのバージョン1.2.1を公開しました。(2014年1月12日)

  • PDELオフィシャルサイトの変更箇所
    • デモ環境構築時、「デモ環境用PHPの日本語環境定義方法によっては文字化けする不具合」を解消しました。
      従来は生成するHTMLに
      <meta charset="utf-8">
      を指定し、PHP側で
      mb_internal_encoding('UTF-8');
      としていましたが、PHP側で
      mb_http_output('UTF-8');
      ob_start('mb_output_handler');
      を追加しなくてはならないことが判明したので、追加しました。
      
    • 当サイトで使用させて頂いているライブラリのリンク先URL変更に対応しました。(Twitter BootstrapおよびBrowser Capabilities Projectの2サイトのリンク先URLを変更しました。)
    • 当サイトで使用させて頂いているbrowscap(Browser Capabilities Projectで公開されているfull_php_browscap.ini)を最新のものに更新しました。(browscapとはPHP標準関数のget_browserで使用するINIファイルです。PDELを最初にリリースした2012年10月時点では、OS・ブラウザ/バージョン情報が正しく解析されたのですが、2014年1月時点ではIE11等、解析が正しく行われないようです。当サイトでは、デモで「暗号化実行」クリック後、「暗号化時情報」のタブで「再確認...」クリックで表示される画面でOS・ブラウザ/バージョン情報を表示するために使用しています。browscapが正確でなくても、PDEL本体の動作には、何の問題もありません。)
    • その他些細な変更を行いました。

   PDEL本体およびオフィシャルサイトのバージョン1.2.0を公開しました。(2013年1月6日)

  • PDEL本体の変更箇所(バグ1件の改修とパフォーマンス改善)
    • レシピファイル解析機能の暗号可能最大バイト数(デモの実行結果画面の結果詳細タブで表示される情報)算出機能で「Extendコマンド定義時の算出機能」のバグを修正しました。(Extendコマンド定義時の「2で割る機能の実装が漏れていた」ので改修しました。なお、オフィシャルサイトの同機能の解説に「端数切り捨て」が記されていなかったので、併せて追記しました。)
    • 文字列操作処理を中心に改善を行い、処理速度向上を行いました。(併せてデモ実行結果画面の「結果詳細タブ」で表示される「暗号化トータル処理時間」「復号トータル処理時間」に、Pdelと無関係な機能実行時間も含まれていたので、それらを取り除きました。)
  • PDEL本体以外(オフィシャルサイト)の変更箇所
    • 些細な誤記等をいくつか修正しました。

   PDEL本体およびオフィシャルサイトのバージョン1.1.0を公開しました。(2012年10月29日)

  • PDEL本体の変更箇所(1箇所のみ変更)
    • セッション・ハイジャック・チェック付き暗号化におけるZFIP取得論理で、サーバ環境変数HTTP_X_FORWARDED_FORが設定されている場合のIPアドレス取得論理を変更しました。(サーバ環境変数HTTP_CLIENT_IPが設定されている場合と同様に、REMOTE_ADDRを連結した文字列をIPとするよう、変更しました。)
  • PDEL本体以外(オフィシャルサイト)の変更箇所
    • PDEL本体の変更に関連し、オフィシャルサイトの仕様等の説明を変更しました。
    • ダウンロードの方式を変更しました。また、それに伴い、オフィシャルサイトのディレクトリ構成も変更しました。
    • 些細な誤記をいくつか修正しました。
    • jQueryUIについて、最新バージョン(1.9.1)を使用するようにしました。

   PDEL本体およびオフィシャルサイトのバージョン1.0.0を公開しました。(2012年10月17日)

  • オープンソースの場合、最初の公開は0.1版等となることが多いようですが、PDELは本番環境へのリリースも想定し、1.0.0版として公開しました。(「0.1版を本番環境にリリースするのか?」等の疑念を抱かれる人がおられるかも知れないからです。)
  • PDELのバージョン番号体系は、PDEL本体メジャーバージョン番号.PDEL本体マイナーバージョン番号.PDELオフィシャルサイトバージョン番号とします。
    • PDEL本体メジャーバージョン番号
      PDEL本体の大規模な機能変更時にインクリメントします。
    • PDEL本体マイナーバージョン番号
      PDEL本体の小規模な機能変更時にインクリメントします。PDEL本体メジャーバージョン番号がインクリメントされた場合、ゼロにリセットされます。
    • PDELオフィシャルサイトバージョン番号
      PDEL本体以外のオフィシャルサイト変更時にインクリメントします。PDEL本体メジャーバージョン番号またはPDEL本体マイナーバージョン番号がインクリメントされた場合、ゼロにリセットされます。
   PDELに関する質問・バグ報告・ご意見や、当サイトの誤記等ございましたら、以下のブログにコメントをお願いします。(質問の前には必ず仕様使用方法をよく読んでください。)

http://exceptioncatcher.seesaa.net/article/297820886.html

  • コメントに対する回答は保証されません。
  • 趣旨に反するコメントは承認されません。
  • コピー環境構築関連の質問(PHPやApache・IIS等のインストール方法や設定方法等も含みます)は一切受け付けません。
  • 日本語以外のコメントは承認されません。
    If you post comment written in language except Japanese , your comment will not authorize. (Sorry , I am not good at language except Japanese.)