当サイトは、プログラミング言語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は、このような現状改善の一助になればとの思いから、開発されました。