Db2 V11.5 と Luna HSMの連携 - マスター鍵を直接HSM上に作成する
Db2 V11.5 と Luna ハードウェア・セキュリティー・モジュール (HSM)の連携
マスター鍵を直接HSM上に作成する
Luna ハードウェア・セキュリティー・モジュール (以降 単純に"HSM"と表記します)は、高度なセキュリティ機能を有する環境での鍵管理や暗号化などの処理を行う専用のハードウェアアプライアンス製品です。Db2は ネイティブ暗号化でマスター鍵 (MK) を保管する鍵ストアを、HSM をつかって構成することが可能です。
本手順書では スタンドアローンのDb2 サーバーとHSMアプライアンス(SafeNet Network HSM 7)1台の構成で、Db2ネイティブ暗号化のマスター鍵をHSMに生成する方法を示します。 Db2 は AIX 7.2 上に Db2 11.5 Db2 Advanced Edition が導入されています。
本手順書は 前提記述している項目が完了している状態からガイドが始まります。HSM管理者が行う準備作業については、Db2-HSM 連携の事前準備 (クライアント導入からパーティション作成初期化まで) をご参照ください。
本手順書はタレス社より提供いただきました "IBM Db2 Integration Guide" (Document Part Number: 007-013741-001, Rev. B Release Date: November 2018) をベースに Db2 V11.5での経験を加えたものです。ある特定の環境・使用状況においての正確性が確認されていますが、すべての環境において同様の結果が得られる保証はありません。
これらの技術を自身の環境に適用する際には、自己の責任において十分な検証と確認を実施いただくことをお奨めいたします。
HSM ベースのマスター鍵作成方法
Db2 ネイティブ暗号化でHSMの使用を開始するためには、HSMにマスター鍵を作成・保管する必要があります。Db2 ネイティブ暗号化では次の方法でマスター鍵をHSMに準備することができます。
- ローカル鍵ストアに保管されたマスター鍵をHSMへ移行する。
- 直接HSMにマスター鍵を作成する。
ここでは 直接HSMにマスター鍵を作成する方法を説明します。
構成と手順の概略
本手順書では スタンドアローンのDb2 サーバーとHSMアプライアンス(SafeNet Network HSM 7)1台の構成で、Db2ネイティブ暗号化のマスター鍵をHSMに生成する方法を示します。
前提
HSM固有の前提
ここではすでに HSM固有の次のような設定が終了していることが前提となります。
- HSMアプライアンスの設置や初期化などが終了していること
- HSMアプライアンス上にDb2用のパーティションが作成されていること
- HSMクライアントが導入登録され、Db2用のパーティションがクライアントに割り当てられていること。
- 割り当てられているDb2用パーティションの初期化、 Crypto Officer , Crypto Userロールが初期化されていること。
2-4.のHSM管理者が行う準備作業については、Db2-HSM 連携の事前準備 (クライアント導入からパーティション作成初期化まで) をご参照ください。
以上の前提が満たされた結果、 vtl verify
コマンドを実⾏して、 Luna HSM クライアントがHSMアプライアンス上のDb2用のパーティションを参照できることを確認します。
[root@psm02:/usr/safenet/lunaclient/bin]# ./vtl verify
vtl (64-bit) v10.2.0-111. Copyright (c) 2020 SafeNet. All rights reserved.
The following Luna SA Slots/Partitions were found:
Slot Serial # Label
==== ================ =====
(省略)
1 1431591540409 hsminst2
[root@psm02:/usr/safenet/lunaclient/bin]#
このケースではスロットラベルSlot Labelはhsminst2です。
Db2の前提
Db2については、Db2が導入されDb2インスタンス が作成されていることが前提となります。 ここでは db2inst2というインスタンスを使用して HSM ベースのマスターキーを使用するDb2 ネイティブ暗号化を構成します。
必要な情報
このシナリオを実行するためには次のような情報が必要です。
本資料で使用する値 | |
---|---|
Luna HSM クライアント導入ディレクトリー <LunaClient installation dir>
|
/usr/safenet/lunaclient/ |
Db2用のパーティションを指すスロットラベル Slot label
|
hsminst2 |
Crypto Officer のパスワード | HSM4co! |
Db2 instance | db2inst2 |
db2_instance_home | /home/db2inst2 |
手順
手順1 : GSKitが導入構成済みであることを確認します。
まず Db2 ネイティブ暗号化を使用するために GSKitが導入構成済みであることを確認します。
Db2の導入で GSkitが導入されます。 GSkitのライブラリーは<db2_instance_home>/sqllib/lib32/gskit
あるいは <db2_instance_home>/sqllib/lib64/gskit
に存在します。
<db2_instance_home>/sqllib/db2profile
を実行して 環境を設定しましょう。
手順2 : PKCK#11鍵ストア構成ファイルを作成します。
Db2 ネイティブ暗号化でPKCS #11 鍵ストアにマスター鍵を保管するためには、 PKCS #11 鍵ストアの詳細情報を含む構成ファイルを作成する必要があります。Db2 サーバーに次のような詳細情報を含む構成ファイルluna.cfg
を作成します。
VERSION=1
PRODUCT_NAME=Luna
ALLOW_KEY_INSERT_WITHOUT_KEYSTORE_BACKUP=true
LIBRARY=<LunaClient installation dir>/lib/libCryptoki2_64.so
SLOT_LABEL=<Partition_label>
NEW_OBJECT_TYPE=PRIVATE
KEYSTORE_STASH=/home/<db2_instance>/sqllib/security/pkcs11_pw.sth
ALLOW_KEY_INSERT_WITHOUT_KEYSTORE_BACKUP
はTRUE
を設定しておきますLIBRARY
に指定する<LunaClient installation dir>/lib/libCryptoki2_64.so
が存在することを確認しておきましょう。本検証環境で<LunaClient installation dir>
は/usr/safenet/lunaclient/
です。
[db2inst2@psm02:/home/db2inst2]$ ls /usr/safenet/lunaclient/lib/libCryptoki2_64.so
/usr/safenet/lunaclient/lib/libCryptoki2_64.so
[db2inst2@psm02:/home/db2inst2]$
SLOT_LABEL でHSMのDb2用のパーティションを指すスロットを特定します。
KEYSTORE_STASHは絶対パスでstashファイルを指定します。stashファイルには PKCS #11 鍵ストアのパスワードが保持されます。Db2 インスタンスが PKCS #11 鍵ストアの認証のためにstashファイルを使用します。 stashファイルの作成は 手順3 で行います。
以上を考慮して 今回実際に作成した luna.cfg
が次です。
[db2inst2@psm02:/home/db2inst2]$ cat /home/db2inst2/sqllib/security/luna.cfg
VERSION=1
PRODUCT_NAME=Luna
ALLOW_KEY_INSERT_WITHOUT_KEYSTORE_BACKUP=true
LIBRARY=/usr/safenet/lunaclient/lib/libCryptoki2_64.so
SLOT_LABEL=hsminst2
NEW_OBJECT_TYPE=PRIVATE
KEYSTORE_STASH=/home/db2inst2/sqllib/security/pkcs11_pw.sth
[db2inst2@psm02:/home/db2inst2]$
手順3 : stash ファイルを作成します.
db2credmanを使用してstash ファイルを作成します.
参照 : db2credman - 資格情報とセキュリティー鍵の管理のコマンド (db2 提供)
# 実行コマンド
db2credman -stash -password <partition password> -to /home/<db2_instance>/sqllib/security/pkcs11_pw.sth
ここで <partition password>
は Crypto Officer のパスワードを使用します。
# 実行例
[db2inst2@psm02:/home/db2inst2]$ db2credman -stash -password HSM4co! -to /home/db2inst2/sqllib/security/pkcs11_pw.sth
Password successfully stashed to /home/db2inst2/sqllib/security/pkcs11_pw.sth
db2credman completed sucessfully.
[db2inst2@psm02:/home/db2inst2]$
# 実行結果 次のようにstashファイルが作成されています
[db2inst2@psm02:/home/db2inst2]$ ls -l /home/db2inst2/sqllib/security/pkcs11_pw.sth
-rw------- 1 db2inst2 db2iadm1 176 Jun 03 06:14 /home/db2inst2/sqllib/security/pkcs11_pw.sth
[db2inst2@psm02:/home/db2inst2]$
注意 : stashファイルにPKCS #11 鍵ストアのパスワードを保管することは オプショナルです。 ユーザーがパスワードを保管しておきたい(stashしたい)と考える場合 stashファイルを作成し構成ファイルのKEYSTORE_STASH
を指定する必要があります。
手順4 : Db2 インスタンスが PKCS #11鍵ストアを使用するように変更します。
データベースマネージャー構成パラメターの keystore_type
をpkcs11
, keystore_location
をPKCS #11 鍵ストア構成ファイル(luna.cfg
)へ変更します。
# 変更前の確認
[db2inst2@psm02:/home/db2inst2]$ db2 get dbm cfg | grep KEYSTORE
Keystore type (KEYSTORE_TYPE) = NONE
Keystore location (KEYSTORE_LOCATION) =
[db2inst2@psm02:/home/db2inst2]$
# 変更コマンド例
db2 update dbm cfg using keystore_type pkcs11
db2 update dbm cfg using keystore_location /home/db2inst2/sqllib/security/luna.cfg
# db2 再起動
db2stop ; db2start
# 変更を確認
[db2inst2@psm02:/home/db2inst2]$ db2 get dbm cfg | grep -i keystore
Keystore type (KEYSTORE_TYPE) = PKCS11
Keystore location (KEYSTORE_LOCATION) = /home/db2inst2/sqllib/security/luna.cfg
[db2inst2@psm02:/home/db2inst2]$
手順5 : 暗号化データベースを作成します。
暗号化データベースを作成するためにはCREATE DATABSE
コマンドにENCRYPT
オプションを付けて実行します。次は データベース名MYENCDB
をENCRYPT
オプション付きで作成しています。
[db2inst2@psm02:/home/db2inst2]$ db2 create db MYENCDB encrypt
DB20000I CREATE DATABASE コマンドが正常に完了しました。
[db2inst2@psm02:/home/db2inst2]$
作成されたデータベースMYENCDBを確認すると次のとおりEncrypted database
(日本語メッセージの場合は暗号化されたデータベース
)がYESとなっていることがわかります。
[db2inst2@psm02:/home/db2inst2]$ db2 get db cfg for MYENCDB | grep -i Encrypt
Encryption Library for Backup (ENCRLIB) = libdb2encr.a
Encryption Options for Backup (ENCROPTS) = CIPHER=AES:MODE=CBC:KEY LENGTH=256
Encrypted database = YES
[db2inst2@psm02:/home/db2inst2]$
HSMクライアントのlunacm
でHSMパーティションの内容を確認することができます。 role Crypto Officer
でpartition contents
を使用します。
-- co (Crypto Officer) で Login
lunacm:>role login -name co
enter password: *********
Command Result : No Error
lunacm:>partition contents
The 'Crypto Officer' is currently logged in. Looking for objects
accessible to the 'Crypto Officer'.
Object list:
Label: DB2_SYSGEN_db2inst2_MYENCDB_2020-06-03-08.45.22_A878F39E
Handle: 32
Object Type: Symmetric Key
Object UID: 2f0000001b000001d0610900
Number of objects: 1
Command Result : No Error
lunacm:>
手順6 : HSM上 のキーストアが稼働していることを確認しましょう
(1) データベースに接続します
# 実行コマンド
db2 connect to myencdb
# 実行例
[db2inst2@psm02:/2home/db2inst2]$ db2 connect to myencdb
Database Connection Information
Database server = DB2/AIX64 11.5.0.0
SQL authorization ID = DB2INST2
Local database alias = MYENCDB
[db2inst2@psm02:/home/db2inst2]$
(2) データベースに表STUDENT_MARKS
を作成します。
# 実行コマンド
db2 "CREATE TABLE STUDENT_MARKS (CLASS_NO CHAR(3) NOT NULL,DEPTNAME VARCHAR(36) NOT NULL,STUDNO CHAR(6) NOT NULL,MARKS CHAR(6) NOT NULL WITH DEFAULT)"
# 実行例
[db2inst2@psm02:/home/db2inst2]$ PTNAME VARCHAR(36) NOT NULL,STUDNO CHAR(6) NOT NULL,MARKS CHAR(6) NOT NULL WITH DEFAULT)" <
DB20000I The SQL command completed successfully.
[db2inst2@psm02:/home/db2inst2]$
(3) 表STUDENT_MARKS
にレコードを挿入します。
# 実行コマンド
db2 "INSERT INTO STUDENT_MARKS VALUES (10,'SCIENCE',001,95)"
db2 "INSERT INTO STUDENT_MARKS VALUES (10,'COMMERCE',002,90)"
# 実行例
[db2inst2@psm02:/home/db2inst2]$ db2 "INSERT INTO STUDENT_MARKS VALUES (10,'SCIENCE',001,95)"
DB20000I The SQL command completed successfully.
[db2inst2@psm02:/home/db2inst2]$ db2 "INSERT INTO STUDENT_MARKS VALUES (10,'COMMERCE',002,90)"
DB20000I The SQL command completed successfully.
[db2inst2@psm02:/home/db2inst2]$
(4) 表STUDENT_MARKS
のレコードを表示します。
# 実行コマンド
db2 "SELECT * FROM STUDENT_MARKS"
# 実行例
[db2inst2@psm02:/home/db2inst2]$ db2 "SELECT * FROM STUDENT_MARKS"
CLASS_NO DEPTNAME STUDNO MARKS
-------- ------------------------------------ ------ ------
10 SCIENCE 1 95
10 COMMERCE 2 90
2 record(s) selected.
[db2inst2@psm02:/home/db2inst2]$
(5) データベースへの接続を解除し非活動化します。
# 実行コマンド
db2 connect reset
db2 deactivate db MYIBM
(6) HSMアプライアンスのlunash
で、NTLSサービスを停止します。
参照 : service stop (LunaSH Command Reference Guide)
# 実行コマンド
service stop ntls
# 実行例 .. 接続中のセッションがあるためWARNINGがでている。
[local_host] lunash:>service stop ntls
Checking for connected clients before stopping NTLS service:
WARNING !! There are 2 client(s) connected to this Luna SA
appliance. It is recommended that you disconnect all clients
before stopping or restarting the NTLS service.
If you wish to proceed, type 'proceed', otherwise type 'quit'
> proceed
Proceeding...
Stopping ntls: [ OK ]
Command Result : 0 (Success)
[local_host] lunash:>
この後 データベースへ接続しようとするとエラーとなります。
# 実行コマンド
db2 connect to myencdb
# 実行例
[db2inst2@psm02:/home/db2inst2]$ db2 connect to myencdb
SQL1783N The command or operation failed because an error was encountered
accessing the PKCS #11 key manager. Reason code "13".
[db2inst2@psm02:/home/db2inst2]$
(7) NTLSサービスを開始します。
[local_host] lunash:>service start ntls
Starting ntls: [ OK ]
Command Result : 0 (Success)
[local_host] lunash:>
NTLSサービスが再開した直後 データベースへ接続しようとすると次のようなエラーとなります。
[db2inst2@psm02:/home/db2inst2]$ db2 connect to myencdb
SQL1783N The command or operation failed because an error was encountered
accessing the PKCS #11 key manager. Reason code "13".
[db2inst2@psm02:/home/db2inst2]$
NTLSサービスが停止するなどの障害後、Db2のサービスを開始するためにには、障害を解決した後、Db2の再起動が必要です。
[db2inst2@psm02:/home/db2inst2]$ db2stop ; db2start
06/03/2020 09:17:33 0 0 SQL1064N DB2STOP processing was successful.
SQL1064N DB2STOP processing was successful.
06/03/2020 09:17:35 0 0 SQL1063N DB2START processing was successful.
SQL1063N DB2START processing was successful.
[db2inst2@psm02:/home/db2inst2]$ db2 connect to myencdb
Database Connection Information
Database server = DB2/AIX64 11.5.0.0
SQL authorization ID = DB2INST2
Local database alias = MYENCDB
[db2inst2@psm02:/home/db2inst2]$
検証環境情報
本手順書は次の環境で作成しました。
- LUNA NETWORK HSM A700
- Software Version: 7.4.0-226
- Firmware: 7.3.3
- Luna Client 環境
- AIX V7.2 (oslevel –s : 7200-03-03-1914)
- LunaClient_10.2.0-111_AIX610-000399-002_SW_Universal_Client_10.2_AIX_RevA.tar
- IBM Db2 Server 11.5
参考文書
Luna HSM
- IBM Db2 Integration Guide" (Document Part Number: 007-013741-001, Rev. C Release Date: June 2020)
- Product Documentation
Db2 ネイティブ暗号化
Author And Source
この問題について(Db2 V11.5 と Luna HSMの連携 - マスター鍵を直接HSM上に作成する), 我々は、より多くの情報をここで見つけました https://qiita.com/mi-shimo/items/74ad1432a844083bd32c著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .