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.pdel |-- log コピー環境構築時は書き込み権限を付与します。 |-- private_assets | |-- conf | | |-- demo | | | |-- MANDATORY デモ用のマップファイル・レシピファイルがあります。 | | | |-- OPTIONAL デモ用のマスクルール定義ファイルがあります。 | | | |-- ini デモ用のPDEL専用INIファイルがあります。 | | | `-- wrapper | | `-- org | | |-- MANDATORY 自作したマップファイル・レシピファイルの配置ディレクトリです。 | | `-- ini 自作レシピ用のPDEL専用INIファイルがあります。 | |-- contents | | `-- ja | | |-- command | | |-- glossary | | |-- index | | |-- spec | | `-- usage | | `-- php | |-- engine PDEL本体(Pdel.php)・ラッパークラスのサンプル等があります。 | |-- plugins | `-- site_generator `-- public_assets |-- _download |-- engine | `-- 1.8.2 |-- org | |-- css | |-- img | |-- js | `-- resource | `-- ja | |-- css | |-- img | `-- js `-- plugins |-- UI | `-- 1.9.1 | |-- css | | `-- ui-lightness | | `-- images | `-- js |-- bootstrap | `-- 2.1.1 | |-- css | |-- img | |-- js | `-- navi-ver `-- google
;このように記述します。値をダブルクォーテーション等で囲まないでください。 AUTH_MODE = 5
;このように記述します。値は必ずダブルクォーテーションで囲んでください。 OFILE = ".MASK_RULE_FILE.txt" ;PDELでは論理型 (boolean)も文字列として指定します。PHPのparse_ini_file関数では ;ダブルクォーテーションで囲まない true は boolean ではなく integer として解析されるからです。 UL_ASC_ORDER = "true"
;これはフルパス型の例です。 MFILE_DIR = "/opt/webapp/lib/vendor/pdel/conf/MANDATORY" ;これは相対ディレクトリ型の例です。必ず . で始めてください。 ;相対の基準となるディレクトリはPDEL本体(Pdel.php)が配置されたディレクトリです。 MFILE_DIR = "./../conf/MANDATORY" ;これは定数使用型の例です。定数は < と > で囲みます。クラス定数も使用可能です。 MFILE_DIR = "<APL_HOME><DIRECTORY_SEPARATOR>env<DIRECTORY_SEPARATOR>pdel" ;これは環境変数使用型の例です。環境変数は { と } で囲みます。定数との併用も可能です。 MFILE_DIR = "{APL_HOME}<DIRECTORY_SEPARATOR>env<DIRECTORY_SEPARATOR>pdel"
チェックを実施する項目 | ポイント |
---|---|
一般アクセス権限が400または000であること。(400はファイル所有OSユーザにのみ読み込み権限が付与された状態、000は全OSユーザに一般アクセス権限が付与されていない状態です。ここでいう一般アクセス権限とは、隠し権限<Linuxであればsetfaclで設定される権限>を除いた権限のことです。) | 8 |
ファイル配置ディレクトリにシンボリックリンクが含まれないこと | 4 |
ファイル本体がシンボリックリンクでないこと | 2 |
ハードリンク数が1であること | 1 |
;これは全項目実施する場合の例です。(8 + 4 + 2 + 1 = 15) MFILE_CHK_TYPE = 15 ;これは「一般アクセス権限が400または000であること」以外の3項目を実施する場合の例です。 ;(4 + 2 + 1 = 7) MFILE_CHK_TYPE = 7
;利用者権限レベルがNullの場合、マスキングを行わないのであれば、このように記述します。 UL_EMPTY = "null:false" ;利用者権限レベルがNullまたは空文字列の場合、マスキングを行うのであれば、 ;このように記述します。 UL_EMPTY = "null:true|null_str:true" ;利用者権限レベルにEmpty値が設定されない場合、このように記述します。 UL_EMPTY = "PDEL-NULL"キー項目 = "Empty値:trueまたはfalse"
Empty値として指定可能な文字列 | PHPの演算子===でtrueと判定される値 |
---|---|
null | null |
null_str | '' ※空文字列です |
zero | 0 |
false | false |
true | true |
(a) PDEL_ENV (b) MASK_ENV_COM (c) MASK_ENV_LEVEL_NUM (d) MASK_ENV_LEVEL_NUM_STR (e) MASK_ENV_LEVEL_STR条件ごとに必要なセクションは下記のとおりです。○は定義必須、×は定義不可能なセクションです。なお、下記でいう利用者権限レベルの連続数値とは「初級スタッフが1、スタッフが2、リーダーが3、マネージャが4」のように「最小値から最大値までの間に、空き数値のない数値体系」のことで、そうでないものを非連続数値とします。
条件 | セクション | パターン | ||||||
---|---|---|---|---|---|---|---|---|
(a) | (b) | (c) | (d) | (e) | ||||
データマスキングを行わない | ○ | × | × | × | × | 1 | ||
データマスキングを行う | 無条件に行う | ○ | ○ | × | × | × | 2 | |
条件に応じて行う | 利用者権限レベルが連続数値(昇順) | ○ | ○ | ○ | × | × | 3 | |
利用者権限レベルが非連続数値(昇順) | ○ | ○ | × | ○ | × | 4 | ||
利用者権限レベルが文字列(昇順) | ○ | ○ | × | × | ○ | 5 | ||
利用者権限レベルが連続数値(降順) | ○ | ○ | ○ | × | × | 6 | ||
利用者権限レベルが非連続数値(降順) | ○ | ○ | × | ○ | × | 7 | ||
利用者権限レベルが文字列(降順) | ○ | ○ | × | × | ○ | 8 |
キー | 設定値 | 記述方法 | 備考 |
---|---|---|---|
AUTH_MODE | デフォルト認証モード | 数値 | 概略イメージの手順Bも併せて御参考願います。 |
MFILE_DIR | 必須ファイル配置ディレクトリ | ディレクトリ | マップファイルおよびレシピファイルを配置するディレクトリを指定します。 |
MFILE_CHK_TYPE | 必須ファイルチェック方法 | ファイル属性チェック方法 | マップファイルおよびレシピファイルに対する「ファイル属性チェック方法」を指定します。 |
キー | 設定値 | 記述方法 | 備考 |
---|---|---|---|
OFILE_DIR | マスクルール定義ファイル配置ディレクトリ | ディレクトリ | マスクルール定義ファイルを配置するディレクトリを指定します。 |
OFILE | マスクルール定義ファイル名 | 文字列 | パス部分を除いたマスクルール定義ファイル名を指定します。 |
OFILE_CHK_TYPE | マスクルール定義ファイルチェック方法 | ファイル属性チェック方法 | マスクルール定義ファイルに対する「ファイル属性チェック方法」を指定します。 |
SKIP_DECRYPT | 復号スキップモード | 文字列 | 小文字の true または false をダブルクォーテーションで囲って指定します。PDELの復号は「復号処理の前にデータマスキングを行うかどうか?の判断」を行います。データマスキングを行うと判断された場合、「暗号化されたデータの復号処理」を行わない場合 true 、行う場合 false を指定します。(データマスキングを行うと判断された場合、 true が指定されていれば処理時間が速くなります。但し復号に失敗した場合、マスクルール定義ファイルの「復号失敗時の名称」ではなく「復号成功時の名称」が復号結果となります。) |
STRICT_MASK | STRICTマスク実施モード | 文字列 | 小文字の true または false をダブルクォーテーションで囲って指定します。データマスキングを実施する場合、マスクルール定義ファイルに必ず該当レシピの定義を求める場合 true 、求めない場合 false を指定します。(データマスキングを実施するケースでマスクルール定義ファイルに該当レシピが存在しない場合、STRICT_MASKがtrueであれば復号エラー、falseであれば復号された実データをPDELは返します。) |
キー | 設定値 | 記述方法 | 備考 |
---|---|---|---|
UL_MIN | 利用者権限レベル最小値 | 数値または文字列 | 利用者権限レベルの「数値としての最小値」を数値で指定します。文字列を指定するのは「利用者権限レベルがPHPの定数として定義されている等の理由で、直接記述するのが好ましくない」場合のみで、その場合は UL_MIN = "PDEL-NULL" と指定します。 |
UL_MAX | 利用者権限レベル最大値 | 数値または文字列 | 利用者権限レベルの「数値としての最大値」を数値で指定します。文字列を指定するのは「利用者権限レベルがPHPの定数として定義されている等の理由で、直接記述するのが好ましくない」場合のみで、その場合は UL_MAX = "PDEL-NULL" と指定します。 |
UL_ASC_ORDER | 利用者権限レベル昇順区分 | 文字列 | 小文字の true または false をダブルクォーテーションで囲って指定します。「利用者権限レベル」と「実際の権限」が比例する場合(「利用者権限レベル」が大きいほど、「実際の権限」も大きくなる場合)true、そうでない場合 false を指定します。 |
UL_EMPTY | Empty値処理方法 | Empty値処理方法 | 利用者権限レベルにEmpty値(Null値等)が設定されている場合「データマスキングを行う・行わない」を指定します。 |
キー | 設定値 | 記述方法 | 備考 |
---|---|---|---|
UL_LIST | 利用者権限レベルリスト | 文字列 | 利用者権限レベルを UL_LIST_DEL で指定されたデリミタで、昇順または降順で区切って指定します。 「利用者権限レベルがPHPの定数として定義されている等の理由で、直接記述するのが好ましくない」場合 UL_LIST = "PDEL-NULL" と指定します。 |
UL_LIST_DEL | 利用者権限レベルリスト用デリミタ | 文字列 | 利用者権限レベルリストで用いるデリミタを半角1文字で指定します。 |
UL_ASC_ORDER | 利用者権限レベル昇順区分 | 文字列 | 小文字の true または false をダブルクォーテーションで囲って指定します。「利用者権限レベルリスト」を先頭から「実際の権限の小さい順」に指定した場合 true、そうでない場合 false を指定します。 |
UL_EMPTY | Empty値処理方法 | Empty値処理方法 | 利用者権限レベルにEmpty値(Null値等)が設定されている場合「データマスキングを行う・行わない」を指定します。 |
;【UL_LIST・UL_LIST_DEL・UL_ASC_ORDERの例】 ;利用者権限レベルの「実際の権限」が小さい順に10、20、30、40である場合の例です。 UL_LIST = "10,20,30,40" UL_LIST_DEL = "," UL_ASC_ORDER = "true" ;これは次のように指定しても同じです。 UL_LIST = "40,30,20,10" UL_LIST_DEL = "," UL_ASC_ORDER = "false"
キー | 設定値 | 記述方法 | 備考 |
---|---|---|---|
UL_LIST | 利用者権限レベルリスト | 文字列 | 利用者権限レベルを UL_LIST_DEL で指定されたデリミタで、昇順または降順で区切って指定します。 「利用者権限レベルがPHPの定数として定義されている等の理由で、直接記述するのが好ましくない」場合 UL_LIST = "PDEL-NULL" と指定します。 |
UL_LIST_DEL | 利用者権限レベルリスト用デリミタ | 文字列 | 利用者権限レベルリストで用いるデリミタを半角1文字で指定します。 |
UL_ASC_ORDER | 利用者権限レベル昇順区分 | 文字列 | 小文字の true または false をダブルクォーテーションで囲って指定します。 「利用者権限レベルリスト」を先頭から「実際の権限」の小さい順に指定した場合 true、そうでない場合 false を指定します。 |
UL_EMPTY | Empty値処理方法 | Empty値処理方法 | 利用者権限レベルにEmpty値(Null値等)が設定されている場合「データマスキングを行う・行わない」を指定します。 |
;【UL_LIST・UL_LIST_DEL・UL_ASC_ORDERの例】 ;利用者権限レベルの「実際の権限」が小さい順にA、B、C、Dである場合の例です。 UL_LIST = "A,B,C,D" UL_LIST_DEL = "," UL_ASC_ORDER = "true" ;これは次のように指定しても同じです。 UL_LIST = "D,C,B,A" UL_LIST_DEL = "," UL_ASC_ORDER = "false" ;利用者権限レベルが文字列の場合「利用者権限レベルリストの指定順序」が ;ランダム(ASCII文字コードでランダム)であってもエラーとはなりません。 ;例えば次のように指定すると、 ;初級スタッフはA、スタッフはD、リーダーはC、マネージャはBのようにPDELは判断します。 UL_LIST = "A,D,C,B" UL_LIST_DEL = "," UL_ASC_ORDER = "true"
手順 | 内容 |
---|---|
1 | お好みのマップファイル・レシピファイルを作成します。 |
2 | データマスキングを行う場合、マスクルール定義ファイルを作成します。 |
3 | PDEL専用INIファイルを作成します。 |
4 | 作成した各ファイルおよびPDEL本体(Pdel.php)をサーバに配置します。 |
<?php
//PDEL本体が/opt/webapp/lib/vendor/pdel/Pdel.phpの場合
require_once('/opt/webapp/lib/vendor/pdel/Pdel.php');
//PDEL専用INIファイルを定数APL_HOMEが示すディレクトリ配下の
//confディレクトリ配下にMyPdel.iniという名前で作成した場合
$o_pdel = new Pdel('<APL_HOME><DIRECTORY_SEPARATOR>conf<DIRECTORY_SEPARATOR>MyPdel.ini');
<?php
//PDEL本体が/opt/webapp/lib/vendor/pdel/Pdel.phpの場合
require_once('/opt/webapp/lib/vendor/pdel/Pdel.php');
//PDEL専用INIファイルが/opt/webapp/lib/vendor/pdel/.pdel.iniの場合
$o_pdel = new Pdel();
パターン | 内容 |
---|---|
レシピパラメータB型暗号化 | 有効期限付き暗号化を絶対時刻型で実施する暗号化です。 |
レシピパラメータC型暗号化 | セッション・ハイジャック・チェック付き暗号化を任意情報で実施する暗号化です。 |
レシピパラメータBC型暗号化 | レシピパラメータB型暗号化とレシピパラメータC型暗号化を同時に実施する暗号化です。 |
レシピパラメータなし暗号化 | 上記いずれにも該当しない暗号化です。 |
<?php
/*
第1引数:暗号化を行う文字列
第2引数:レシピ名の文字列
第3引数:絶対時刻情報(key_b=YYYYMMDDhhmmss形式で指定)の文字列。
日時はPDELが動作するPHP環境に設定されたタイムゾーンのローカル日時。
戻り値:連想配列(後述)
*/
//クレジットカード番号(1234567890123456)をV_TIME_CARDというレシピで暗号化し、
//2012年10月31日23時59分59秒まで復号を許可する場合
//(この例は2012年9月に作成しました。)
$s_card = '1234567890123456';
$s_key_b = 'key_b=20121031235959';
$a_ret = $o_pdel->encrypt($s_card , 'V_TIME_CARD' , $s_key_b);
<?php
/*
第1引数:暗号化を行う文字列
第2引数:レシピ名の文字列
第3引数:任意項目(key_c=xxxxxxxxxxxx形式で指定)の文字列
戻り値:連想配列(後述)
*/
//クレジットカード番号(1234567890123456)をV_UDID_CARDというレシピで暗号化し、
//復号時に同じ端末識別番号が指定された場合のみ復号を許可する場合
//(端末識別番号が取得できることを前提にしています。)
$s_card = '1234567890123456';
//$s_udidには端末識別番号が設定済みと仮定
$s_key_c = 'key_c=' . $s_udid;
$a_ret = $o_pdel->encrypt($s_card , 'V_UDID_CARD' , $s_key_c);
<?php
/*
第1引数:暗号化を行う文字列
第2引数:レシピ名の文字列
第3引数:絶対時刻情報(key_b=YYYYMMDDhhmmss形式で指定)の文字列
日時はPDELが動作するPHP環境に設定されたタイムゾーンのローカル日時。
第4引数:任意項目(key_c=xxxxxxxxxxxx形式で指定)の文字列
戻り値:連想配列(後述)
*/
//クレジットカード番号(1234567890123456)をV_TIME_AND_UDID_CARDというレシピで暗号化し、
//2012年10月31日23時59分59秒まで、かつ
//復号時に同じ端末識別番号が指定された場合のみ復号を許可する場合
//(この例は2012年9月に作成しました。また、端末識別番号が取得できることを前提にしています。)
$s_card = '1234567890123456';
$s_limit_time = 'key_b=20121031235959';
//$s_udidには端末識別番号が設定済みと仮定
$s_key_c = 'key_c=' . $s_udid;
$a_ret = $o_pdel->encrypt($s_card , 'V_TIME_AND_UDID_CARD' , $s_key_b , $s_key_c);
<?php
/*
第1引数:暗号化を行う文字列
第2引数:レシピ名の文字列
戻り値:連想配列(後述)
*/
//クレジットカード番号(1234567890123456)をV_CARDというレシピで暗号化する場合
$s_card = '1234567890123456';
$a_ret = $o_pdel->encrypt($s_card , 'V_CARD');
連想配列のキー | PDELが設定する値 |
---|---|
status | 成功時はtrue、失敗時はfalseが設定されます。 |
result | 成功時は暗号化後の文字列、失敗時は空文字列が設定されます。 |
limit_time | 有効期限付き暗号化が成功した場合、暗号化結果の有効期限となる日時がYYYYMMDDhhmmss形式で設定されます。 (相対時刻型はPDELが算出した日時、絶対時刻型はパラメータで指定された日時となります。ともにPDELが動作するPHP環境に設定されたタイムゾーンのローカル日時です。 )それ以外の場合、キーそのものが設定されません。 |
detail | 失敗時の詳細情報がエラー分類1桁:詳細情報形式で設定されます。詳細は後述。成功時は空文字列が設定されます。 |
パターン | 内容 |
---|---|
権限なし・ レシピパラメータC型復号 |
|
権限あり・ レシピパラメータC型復号 |
|
権限なし復号 |
|
権限あり復号 |
|
<?php
/*
第1引数:PDELで暗号化された文字列
第2引数:暗号化時に用いたレシピ名の文字列
第3引数:任意項目(key_c=xxxxxxxxxxxx形式で指定)の文字列
戻り値:連想配列(後述)
*/
//$udidには端末識別番号が設定済みと仮定
$s_key_c = 'key_c=' . $udid;
//$s_encrypted_dataにはPDELでV_UDID_CARDというレシピで暗号化されたデータが設定済みと仮定
$a_ret = $o_pdel->decrypt($s_encrypted_data , 'V_UDID_CARD' , $s_key_c);
<?php
/*
第1引数:PDELで暗号化された文字列
第2引数:暗号化時に用いたレシピ名の文字列
第3引数:利用者権限レベル
第4引数:任意項目(key_c=xxxxxxxxxxxx形式で指定)の文字列
戻り値:連想配列(後述)
*/
//$udidには端末識別番号が設定済みと仮定
$s_key_c = 'key_c=' . $udid;
//$s_encrypted_dataにはPDELでV_UDID_CARDというレシピで暗号化されたデータが設定済みと仮定
//$m_user_levelには利用者権限レベルが設定済みと仮定
$a_ret = $o_pdel->decrypt($s_encrypted_data , 'V_UDID_CARD' , $m_user_level , $s_key_c);
<?php
/*
第1引数:PDELで暗号化された文字列
第2引数:暗号化時に用いたレシピ名の文字列
戻り値:連想配列(後述)
*/
//$s_encrypted_dataにはPDELでV_CARDというレシピで暗号化されたデータが設定済みと仮定
$a_ret = $o_pdel->decrypt($s_encrypted_data , 'V_CARD');
<?php
/*
第1引数:PDELで暗号化された文字列
第2引数:暗号化時に用いたレシピ名の文字列
第3引数:利用者権限レベル
戻り値:連想配列(後述)
*/
//$s_encrypted_dataにはPDELでV_CARDというレシピで暗号化されたデータが設定済みと仮定
//$m_user_levelには利用者権限レベルが設定済みと仮定
$a_ret = $o_pdel->decrypt($s_encrypted_data , 'V_CARD' , $m_user_level);
連想配列のキー | PDELが設定する値 |
---|---|
status | 成功時はtrue、失敗時はfalseが設定されます。 |
result |
|
result_type |
resultのタイプを示す数字が設定されます。
|
detail | 失敗時の詳細情報がエラー分類1桁:詳細情報形式で設定されます。詳細は後述。成功時は空文字列が設定されます。 |
API | PDEL専用INIファイル対象項目 |
---|---|
使用方法 | |
void ___setUserLevelNumber (int user_level_min , int user_level_max) |
MASK_ENV_LEVEL_NUMセクションの UL_MINおよびUL_MAX |
第1引数:UL_MINに相当する数値情報 第2引数:UL_MAXに相当する数値情報 戻り値:なし |
|
void ___setUserLevelString (string user_level_list) |
MASK_ENV_LEVEL_NUM_STRセクションまたは MASK_ENV_LEVEL_STRセクションのUL_LIST |
第1引数:UL_LISTに相当する文字列情報 戻り値:なし |
F:Pdel.php(1625)decrypt error(session hijack check error)
のようにエラー分類1桁:詳細情報形式の文字列が設定されます。先頭1桁のエラー分類は、認識されたエラー事象を分類したコードです。(上記例の詳細情報は、当コンテンツ作成時点のPDELが出力したものであり、正式版PDELとは異なる可能性があります。)
エラー分類 | エラー事象 | 考えられる原因 |
---|---|---|
A | パラメータエラー | PDELを使用するアプリケーションのバグ |
B | マップファイル定義関連エラー | マップファイルの定義ミスまたは環境構築ミス |
C | レシピファイル定義関連エラー | レシピファイルの定義ミスまたは環境構築ミス |
D | セッション・ハイジャック・チェック用キー項目エラー | 想定外ブラウザ・中継サーバ使用 |
E | 暗号化時エラー | 暗号化時のエラー(PDELを使用するアプリケーションのバグ。現状、固定長暗号化で暗号可能最大バイト数を超えた情報の暗号化でのみ発生。発生する・しないがランダムなため、ここに分類) |
F | 復号時エラー(セッション・ハイジャック・チェックエラー) | 悪意のある第三者による攻撃 |
G | 復号時のエラー(認証情報B日時情報不正) | 悪意のある第三者による攻撃 |
H | 復号時のエラー(有効期限超過) | 有効期限超過後の復号 |
I | 復号時のエラー(その他) | 暗号化時と異なる環境での復号 |
J | マスクルール定義ファイル関連エラー | マスクルール定義ファイルの定義ミスまたは環境構築ミス |
Z | その他のエラー | その他のエラー(内部文字エンコーディングがASCII互換文字コードでない、PHPやOSが正しくインストールされていない、システムクラッシュ等) |
オーバーライドを前提にしたエラー処理関数 void ___error_proc(array $a_ret , string $s_recipe_name) 第1引数:PDELが処理結果として返す連想配列 第2引数:レシピ名 戻り値:なし
手順 | 内容 |
---|---|
1 | 公開ディレクトリ直下にzipファイルのpdelディレクトリおよび配下の全ファイルをコピーします。(WinSCP等でPCから転送する場合、必ずバイナリモードで転送してください。) |
2 | pdel/log ディレクトリに対して書き込み権限を付与します。(注) |