Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
【 OpenSource協議会 – System i 】i to Open分科会
IBM i V7.1 最新機能IBM i での暗号化
- フィールドプロシジャー- SQL 組込み関数
2011/05/18
IBM i での暗号化
1.フィールド・プロシジャーとは
・フィールド単位でトリガーの設定を可能にした機能
・暗号化ロジックと組み合わせることで、フィールド単位での暗号化が可能
・フィールドプロシジャは暗号化専用の機能ではない
2.フィールド・プロシジャーの利用方法
・CREATE TABLE / ALTER TABLE で宣言する際に、下記の3つの処理を
1つのプログラム(フィールド・プロシジャー)に書いておくことが必須
宣言される際の処理、暗号化の処理、復号化の処理
・ILE C/RPG/COBOL でプログラム(フィールド・プロシジャー)を作成する
・トリガーが作動するタイミングは、アプリケーション、SQLからのアクセス、
ネイティブレコードレベルアクセス、SELECT、RUNQRY、DSPPFM、
CPYF、バイナリーFTP など
3.考慮点
・ テーブル作成時にフィールド・プロシジャーが実行されるため、事前にフィールド・プロ
シジャーのコンパイルが完了していることが必須です
・ 誤ったコーディングをするとデータが壊れるため要注意する
・ フィールド・プロシジャーを削除すると、データを読み書きが不可になる
IBM i での暗号化
4.SQLの組込み関数によるデータストリングの暗号化
・暗号化アルゴリズムを使用してデータ・ストリングを暗号化
AES(Advanced Encryption Standard)RC2(RSA Data Security Inc.で開発のアルゴリズム Ron’s Cipher #2)Triple DES(トリプル Data Encryption Standard)
IBM i での暗号化- フィールドプロシジャー
◎ 機能について
・ フィールド単位でトリガーの設定が可能です
・ 暗号化ロジックと組み合わせることで、フィールド単位での暗号化が可能になる
・ フィールドプロシジャーは暗号化専用の機能ではない
◎利用方法
・ CREATE TABLE / ALTER TABLE で宣言する際に、下記の3つの処理を1つのプログラム(フィールド・プロシジャー)に書いておくことが必須です
① CREATE TABLE / ALTER TABLE で宣言される際の処理② エンコーディング(暗号化)の処理
③ デコーディング(復号化)の処理
・ ILE C/RPG/COBOL 用のインクルードファイルが QSYSINC/H/SQLFP で提供されています
・ トリガーが作動するタイミングの主なものは下記の通りです
① アプリケーション、SQLからのアクセス② ネイティブのレコードレベルのアクセス
③ SELECT、RUNQRY、DSPPFM、CPYF、バイナリーFTP など
フィールド・プロシジャー(暗号化の拡張)
◎手順① : フィールド・プロシジャーのコーディング
・ パラメータの渡し方やコーディングの作法はマニュアルに記載あり(かなり複雑)
・ パラメータとして「機能コード」に宣言時には「8」、書込み時には「0」、読取り時には「4」が入ってプログラムが呼出されるので、それぞれに対応したコーディングを行う・ エンコードとデコードでデータが確実に元に戻るように、コーディングするのはユーザーの
責任になる
・ 誤ったコーディングをするとデータが壊れるため要注意する
フィールド・プロシジャー(暗号化の拡張)
フィールド・プロシジャー:サンプルプログラム(ILE C)
フィールド・プロシジャー:サンプルプログラム(ILE C)
◎手順②: フィールド・プロシジャーのコンパイル
・ コンパイル時には、活動化グループ ACTGRP(*CALLER) を指定する
> CRTCMOD MODULE(KTEST71/FPROC) SRCFILE(KTEST71/QCSRC)
> CRTPGM PGM(KTEST71/FPROC) ACTGRP(*CALLER)
フィールド・プロシジャー(暗号化の拡張)
◎手順③ : フィールドプロシジャーを指定したテーブルの作成
・ KTEST71/FPROC が フィールドプロシジャー のILE プログラムです・ (10) は属性のパラメータです
> create table ktest71.fptest(id char( 2)
, name char(10) fieldproc ktest71.fproc(10))
◎考慮点
・ テーブル作成時にフィールド・プロシジャーが実行されるため、事前にフィールド・プロ
シジャーのコンパイルが完了していることが必須です
・ ストアード・プロシジャー等と異なり、CREATE PROCEDURE等でDBに対して宣言する必要はない
フィールド・プロシジャー(暗号化の拡張)
◎手順④ : 作成したテーブルへのデータの更新/表示
・ ファイルをREAD/WRITE/UPDATEする度にフィールド・プロシジャーが実行される・ ただし、テストした限りは暗号化された値を見る術はなし。 ユーザープログラムが読み取
る前にはデコードされるため、暗号化されたデータの確認は不可です
・ エンコード/デコートが非対称なフィールド・プロシジャーを意図的に作成したところ、正しく
暗号化されていたことは確認しました
・ フィールド・プロシジャーを削除すると、データを読み書きが不可になる
> INSERT INTO KTEST71.FPTEST VALUES('01', 'abcdefghij')
> INSERT INTO KTEST71.FPTEST VALUES('02', 'jihgfedcba')
フィールド・プロシジャー(暗号化の拡張)
> select * from ktest71.fptest
フィールド・プロシジャー(暗号化の拡張)
Display Data
....+....1....ID NAME01 abcdefghij02 jihgfedcba
IBM i での暗号化- SQL 組込み関数
◎ENCRYPT_AESENCRYPT_AES 関数は、AES(Advanced Encryption Standard) 暗号化アルゴリズムを使用してデータ・ストリングを暗号化した結果の値を返します。暗号化解除に使用されるパスワードは、パスワード・ストリング値か、暗号化パスワードの値(SET ENCRYPTION PASSWORD ステートメントで割り当てられる) です。
data-string暗号化するストリング値を戻す式。ストリング式は、組み込みストリング・データ・タイプで
なければなりません。
password-string6バイト以上 127バイト以下の文字ストリング値を戻す式。
hint-stringデータ所有者がパスワードを思い出すのに役立つ最大32 バイトの文字ストリング値を戻す式。
SQL 組込み関数 (スカラー関数) : ENCRYPT_AES
結果のデータ・タイプは、以下の表に示すとおり、最初の引数によって決まります。
SQL 組込み関数 (スカラー関数) : ENCRYPT_AES
結果の長さ属性は、指定される引数によって次のように異なります。
・パスワード・ストリングを指定し、ヒント・ストリングを指定しない場合、データ・ストリングの
長さ属性に24 を足し、それに16 バイト境界までのバイト数を足したものになります。・それ以外の場合は、データ・ストリングの長さ属性に64 を足し、それに16 バイト境界までのバイト数を足したものになります。
列の長さの計算例を以下に示します。
暗号化されていないデータの最大長 6 バイト
次の16 バイト境界までのバイト数 10 バイト
オーバーヘッド 24 バイト(または32 バイト)
----------
暗号化されたデータの列の長さ 40 バイト(または48 バイト)
暗号化されていないデータの最大長 32 バイト
16 バイト境界までのバイト数 0 バイト
オーバーヘッド 24 バイト(または32 バイト)
----------
暗号化されたデータ列の長さ 56 バイト
SQL 組込み関数 (スカラー関数) : ENCRYPT_AES
◎テーブルの作成とデータの登録
> create table ktest71.TABLE1(id char(5), name2 VARCHAR (40) FOR BIT DATA)
> INSERT INTO ktest71.TABLE1
VALUES('00001',ENCRYPT_AES('AAAAAAAAAA','123456'))
> INSERT INTO ktest71.TABLE1
VALUES('00002',ENCRYPT_AES('bbbbbbbbbb','123456'))
SQL 組込み関数 (スカラー関数) : ENCRYPT_AES
◎データの確認
> RUNQRY * ktest71.TABLE1
> SELECT * FROM ktest71.TABLE1
SQL 組込み関数 (スカラー関数) : ENCRYPT_AES
Display ReportLine ....+....1....+....2....+....3....+....4....+..
ID NAME2 000001 00001 < * *Nレ/ &? |*レ/ &? |*e@sァ.*Gf*I' ヲ*ロ000002 00002
◎データの確認
> SELECT ID,DECRYPT_CHAR(NAME2,'123456') as name2 FROM ktest71.TABLE1
SQL 組込み関数 (スカラー関数) : ENCRYPT_AES
◎ENCRYPT_RC2ENCRYPT_RC2 関数は、RC2(RSA Data Security Inc.で開発のアルゴリズム Ron’s Cipher #2) 暗号化アルゴリズムを使用してデータ・ストリングを暗号化した結果の値を返します。暗号化解除に使用されるパスワードは、パスワード・ストリング値か、暗号化パスワードの値(SET ENCRYPTION PASSWORD ステートメントで割り当てられる) です。
data-string暗号化するストリング値を戻す式。ストリング式は、組み込みストリング・データ・タイプで
なければなりません。
password-string6バイト以上 127バイト以下の文字ストリング値を戻す式。
hint-stringデータ所有者がパスワードを思い出すのに役立つ最大32 バイトの文字ストリング値を戻す式。
SQL 組込み関数 (スカラー関数) : ENCRYPT_RC2
結果のデータ・タイプは、以下の表に示すとおり、最初の引数によって決まります。
SQL 組込み関数 (スカラー関数) : ENCRYPT_RC2
結果の長さ属性は、指定される引数によって次のように異なります。
・password-string が指定されているが、hint-string は指定されていない場合は、data-stringの長さ属性に16 を足し、それに次の8 バイト境界までのバイト数を足したものになります。・それ以外の場合は、データ・ストリングの長さ属性に48 を足し、それに次の8バイト境界までのバイト数を足したものになります。
列の長さの計算例を以下に示します。
暗号化されていないデータの最大長 6 バイト
次の8 バイト境界までのバイト数 2 バイト
オーバーヘッド 8 バイト(または16 バイト)
--------
暗号化されたデータの列の長さ 16 バイト(または32 バイト)
暗号化されていないデータの最大長 32 バイト
次の8 バイト境界までのバイト数 8 バイト
オーバーヘッド 8 バイト(または16 バイト)
--------
暗号化されたデータの列の長さ 48 バイト(または56 バイト)
SQL 組込み関数 (スカラー関数) : ENCRYPT_RC2
◎テーブルの作成とデータの登録
> create table ktest71.TABLE2(id char(5), name2 VARCHAR (24) FOR BIT DATA)
> INSERT INTO ktest71.TABLE2
VALUES ('00003',ENCRYPT_RC2('CCCCCCCCCC','234567'))
> INSERT INTO ktest71.TABLE2
VALUES ('00004',ENCRYPT_RC2('dddddddddd','234567'))
SQL 組込み関数 (スカラー関数) : ENCRYPT_RC2
◎データの確認
> RUNQRY * ktest71.TABLE2
> SELECT * FROM ktest71.TABLE2
SQL 組込み関数 (スカラー関数) : ENCRYPT_RC2
Display ReportLine ....+....1....+....2....+....3....+....4....+..
ID NAME2 000001 00003 *ラ� *N*Tk* *Y.キ Mマ*テ* 000002 00004 *2 朶****** ******** End of report ********
◎データの確認
> SELECT ID,DECRYPT_CHAR(NAME2,'234567') as name2 FROM ktest71.TABLE2
SQL 組込み関数 (スカラー関数) : ENCRYPT_RC2
◎ENCRYPT_TDESENCRYPT_TDES 関数は、TDES(トリプル Data Encryption Standard) 暗号化アルゴリズムを使用してデータ・ストリングを暗号化した結果の値を返します。暗号化解除に使用されるパスワードは、パスワード・ストリング値か、暗号化パスワードの値(SET ENCRYPTION PASSWORD ステートメントで割り当てられる) です。
data-string暗号化するストリング値を戻す式。ストリング式は、組み込みストリング・データ・タイプで
なければなりません。
password-string6バイト以上 127バイト以下の文字ストリング値を戻す式。
hint-stringデータ所有者がパスワードを思い出すのに役立つ最大32 バイトの文字ストリング値を戻す式。
SQL 組込み関数 (スカラー関数) : ENCRYPT_TDES
結果のデータ・タイプは、以下の表に示すとおり、最初の引数によって決まります。
SQL 組込み関数 (スカラー関数) : ENCRYPT_TDES
結果の長さ属性は、指定される引数によって次のように異なります。
・パスワード・ストリングを指定し、ヒント・ストリングを指定しない場合、データ・ストリングの
長さ属性に24 を足し、それに8 バイト境界までのバイト数を足したものになります。・それ以外の場合は、データ・ストリングの長さ属性に56 を足し、それに8 バイト境界までのバイト数を足したものになります。
列の長さの計算例を以下に示します。
暗号化されていないデータの最大長 6 バイト
次の8 バイト境界までのバイト数 2 バイト
オーバーヘッド 16 バイト(または24 バイト)
--------
暗号化されたデータの列の長さ 24 バイト(または32 バイト)
暗号化されていないデータの最大長 32 バイト
8 バイト境界までのバイト数 0 バイト
オーバーヘッド 16 バイト(または24 バイト)
--------
暗号化されたデータの列の長さ 48 バイト(または56 バイト)
SQL 組込み関数 (スカラー関数) : ENCRYPT_TDES
◎テーブルの作成とデータの登録
> create table ktest71.TABLE3(id char(5), name2 VARCHAR (32) FOR BIT DATA)
> INSERT INTO ktest71.TABLE3
VALUES ('00005',ENCRYPT_TDES('EEEEEEEEEE','345678'))
> INSERT INTO ktest71.TABLE3
VALUES ('00006',ENCRYPT_TDES('ffffffffff','345678'))
SQL 組込み関数 (スカラー関数) : ENCRYPT_TDES
◎データの確認
> RUNQRY * ktest71.TABLE3
> SELECT * FROM ktest71.TABLE3
SQL 組込み関数 (スカラー関数) : ENCRYPT_TDES
Display ReportLine ....+....1....+....2....+....3....+....4....+..
ID NAME2 000001 00005 *¥+ *Nレ/ &? |*xシ!$モ&F9*�*Sゥ*ョ* 000002 00006 *hツ *Nレ/ &? |*ノ
◎データの確認
> SELECT ID,DECRYPT_CHAR(NAME2,'345678') as name2 FROM ktest71.TABLE3
SQL 組込み関数 (スカラー関数) : ENCRYPT_TDES
◎IBMサイト
- インフォメーションセンター
- iSeries and AS/400 Information Center- SQL解説書 V7.1
参考)