XP_CRYPT GUI. コード作成ツール
はじめに
XP_CRYPT giuはXP_CRYPT 4.0以降のソフトを用いて暗号化するためのUDF、トリガーおよびビューの作成を簡単にするツールです。
暗号化の方法
XP_CRYPTは5種類の暗号化アルゴリズム:RSA(非対称アルゴリズム)、AES、Triple DES、DESXおよびRC4(対称アルゴリズム)をサポートしています。必要に応じてアルゴリズムを選択することができます。しかし、対称アルゴリズムに比べてRSAでの暗号化は相対的に遅い点に注意して下さい。
データを保護するには、まずデータベースにログインして下さい。ここでは、「pubs」というデータベースを用いています。このデータベースはSQLサーバと共にインストールされており、本や著者のデモデータが含まれています。

ログインすると、現在あるテーブルと暗号鍵のリストを表示する画面に移動します。現時点では何もデータがありません。

ここで、使用したいアルゴリズムを選択し、タイプに応じた鍵を作成してください。例ではRC4とRSAを選びます。
「鍵の追加」を選択ももしくはCtrl-Nを押してください。下のダイアログが表示されます。

「Password Alias」は鍵の名前であると考えて下さい。実際、これはSQLセッションでパスワードを保持する変数の名前です。

鍵を作成したので、パスワードを入力する必要があります。パスワードはテーブルに現存するデータの暗号化に使用されます。「パスワードの入力」をクリックしパスワードとして「test」を入力して下さい。


緑の記号「A」は「起動」を意味します。つまり現時点からこの鍵を使用することができます。
この例では、著者の氏名を暗号化します。これらのフィールドは「著者」のテーブルにあります。系図を開き、「au_lname」フィールドを選択して下さい。「フィールドの暗号化」チェックボックスをマークし、コンボボックスから暗号鍵を選択して下さい。

「暗号の選択」ドロップダウンメニューでは「鍵とパスワード」画面で作成された鍵が表示されます。現時点ではRC4鍵のみです。これを選択し、ツールバーで「保存」を押して下さい(Ctrl-S)。
この時点で、XP_CRYPTは暗号化に必要なスキーマの作成を開始します。左の系図から「テーブル」をクリックするとオペレーションのログをみることができます。

XP_CRYPTにより「enc_au_lname」というフィールドが追加されました。このフィールドには「au_lname」フィールドからの暗号化されたデータが入っています。いくつかのデータを選択するとこれを見ることができます。
SELECT enc_au_lname FROM authors
enc_au_lname
------------------------------
ydSrcsidbufzu9XZ
ydSrcsidbvfpt8TS
ydSrccidbvP6oNLTBg==
ydSrcMidbv+8nsTdGhA=
ydSrf8idbuPvoMDVDwGw
XP_XRYPTによって復号化結果を示すビューが作成されました。テーブルを暗号化した後は、このビューを使ってデータの選択・挿入を行って下さい。データは自動的に暗号化されます。このビューの名前はテーブル+最後の「ビュー」と同じですが作成後に名前の変更が可能です。
このビューから選択してみましょう:
SELECT au_lname FROM authorsView
au_lname
----------------------------------------
NULL
NULL
NULL
ここで、実際のデータの変わりにNULLが表示されます。これはSQLセッションにパスワードが存在しないためです。パスワードは「xp_crypt_set_var」という名のXP_CRYPT機能で設定されます。ここでは変数「pubs.pass1」に対して「test」というパスワードを設定する必要があります。実はこれはステップ3で入力されたのと同じパスワードです。
exec master..xp_crypt_set_var 'pubs.pass1','test'
SELECT au_lname FROM authorsview
au_lname
----------------------------------------
White
Green
Carson
....
アプリケーションへのパスワードの設定は一度だけで、セッション中使うことができます。xp_crypt_set_varを呼び出さずに選択してみて下さい。クエリー解析ツールを閉じるか時間切れになるまで作動します。SQLサーバに接続している他のユーザがこのデータを見ることはできません。パスワードはこのセッションに対してのみ設定されています。
さて、RSA鍵を作成し、名字フィールドを暗号化しましょう。

非対称暗号、RSAアルゴリズム、鍵サイズ1024およびパスワード通称「pass2」を選択して下さい。OKを押すとパスワードの問われます。このパスワードはテーブルに鍵を保存するために使用されますので、忘れないようにして下さい。パスワードとして「rsatest」を入力しましょう。実際に使用する際はもっと注意深くパスワードを選んで下さい。

鍵はすでに起動されており、使用開始が可能になっています。ダブルクリックするとどのような鍵なのかを見ることができ、公開鍵と秘密鍵が表示されています。公開鍵は暗号化にしようされ、非暗号化状態で保存されています。秘密鍵は厳重に保管、Triple DESで暗号化されているはずです。どちらの鍵もPEMフォーマットです。必要であれば別のアプリケーションでこれらの鍵を使用することができます。実際に使用する場合は紛失防止のため別の場所に鍵のコピーを保存して下さい。
暗号化したいフィールドを選択して下さい。この例ではau_lnameとphoneを選びます。両方のフィールドにRSA鍵を選択しCtrl-Sを押すかメニューから「保存」を選択して下さい。

必要なものはすべて自動的に作成され、現存のデータも暗号化されます。
注記:元の著者テーブルに暗号化されていない情報を含む、au_lname、 au_fname およびphoneフィールドが残っているかもしれません。XPPXRYPT GUIは、データからそれらのフィールドを意図的に削除しません。データが安全であることを確認してからご自身で削除を実行して下さい。暗号化する前にデータベースのバックアップを取ることを推奨します。
全てうまくいくかテストしてみて下さい:
EXEC master..xp_crypt_set_var 'pubs.pass1','test'
EXEC master..xp_crypt_set_var 'pubs.pass2','rsatest'
SELECT au_lname,au_fname,phone from authorsview
Output:
au_lname au_fname phone
---------------------------------------- -------------------- ------------
White Johnson 408 496-7223
Green Marjorie 415 986-7020
Carson Cheryl 415 548-7723
全てが作動しているのを確認後、始めのテーブルから元のフィールドを削除することができます。この例では、著者テーブルにあるau_lname, au_fname およびphoneは暗号化されたフィールドに保存されているため必要がありません。「authorsview からau_lname、au_fnameおよびphone を選択」に見られるものは復号化に伴ってオンフライ・ビューで作成されたフィールドです。
システム・テーブル
XP_CRYPT guiは作動中に各データベースに3つのテーブルを作成します。これは暗号化フィールド、トリガー、ビューなどに関する情報を保存するのに使用されます。
xpcrypt_ENCRYPTED_FIELDS
xpcrypt_GENERATED_KEYS
xpcrypt_TABLES
これらのテーブルを作成する必要はありません。アプリケーションからデータベースにログインすると、テーブルは自動的に作成されます。
注意!xpcrypt_TABLESテーブルにはRSAおよびDSA鍵が保存されます。鍵の紛失防止のため、暗号設定をした後は必ずこのテーブルをバックアップして下さい。RSAまたはDSA鍵を紛失した場合データの復号化もしくは有効化が不可能になります。このテーブルにパスワードは保存されません。手動でテーブルを変更しないで下さい。データベースごと、自動的に作成されたテーブルに鍵が保存されます。
|