アプリケーションで実装するデータの機密保護

アプリケーションで実装するデータの機密保護

セキュリティ2024.10.10

IBMi1

はじめに

IBM PowerのOS IBM i(AS/400) は、企業の各種業務を処理するシステムを構築することを念頭に設計されているため、
業務システムで求められる各種のセキュリティに対応した機能が実装されています。
データを保管するファイルや、プログラムを構成する各種オブジェクトに対しては、
使用可能なユーザーを個別に設定することが可能で、対象業務の担当者以外のユーザーが機密情報を保持しているファイルや、 機密情報を照会するプログラムを実行することを制限することが出来ます。

アプリケーションでの機密保護の必要性

しかし、一般的にシステムを運用する体制としては、対象業務の担当者であるユーザーの他に、
システム自体を運用するシステム部門のユーザーもいて、そのシステム部門のユーザーの中の最高権限を保持するユーザーは、 機密保護担当者となって、他のユーザーに対する各種セキュリティ設定を実施することが可能になっています。
この場合、そのシステム部門の機密保護担当者は、対象業務の担当者のみがアクセスすべき機密情報を保持しているファイルに対し、 独自に権限を付加したユーザーを作成すれば、アクセスすることが可能になってしまいます。
機密情報を処理するプログラムが、運用状況を監査するログを記録するなどのセキュリティ対策をアプリケーションレベルで実装していたとしても、 SQLや各種クエリーツール等を使用して、データを保管するファイルに対して直接アクセスすれば、 アプリケーションレベルで実装しているセキュリティ対策機能は、無効化することが出来てしまいます。

画像1 

企業の業務で扱う各種データの中には、法的な要件として、このようなシステム部門の機密保護担当者である
ユーザープロファイルを使用した不正なアクセスも排除し、
対象業務の担当者のみがアクセスできるようにする機密保護が求められるケースもあります。
このようなデータとしては、例えば個人番号、いわゆるマイナンバーが挙げられます。
マイナンバーの情報は税関係や、社会保険関係の各種申告データに出力することが求められるため、
そのような申告データを出力する、給与計算や人事業務を扱うシステムにおいては、
社員から収集したマイナンバーをシステムに登録して管理し、
申告データ出力機能を実行する際は、そのマイナンバーを処理して申告データを作成します。
このマイナンバーのデータを登録するファイルに対しては、システムの機密保護担当者によるアクセスも不可能だが、
マイナンバーを扱う業務担当者のみがアクセス可能になるような、アプリケーションレベルで実装する機密保護が求められます。

データの暗号化による機密保護の実装

このような機密保護の要件に対応するシステムを構築する際は、対象データは直接ファイルに保管するのではなく、
暗号化パスワードによるデータの暗号化を行った上でファイルに保管する対応が有効になります。
データを照会・出力する際は、暗号化の際に用いたものと同じパスワードにより、データの復号化を行ってデータを出力します。
暗号化パスワード自体は、システム部門のユーザーに対しては機密保護担当者であっても知らせず、
機密情報を扱う業務の実際の担当者のみが把握している状態にすれば、それ以外のユーザーは、
仮にSQLや各種クエリーツール等を使用して、機密情報データを保管するファイルに対して直接アクセスしても、
データは暗号化されているため、暗号化パスワードが判らなければ、機密情報を復元することは出来ません。

pic2 

IBM PowerのOS IBM i (AS/400) 上にアプリケーションシステムを構築するに当たり、
RPGやCLによるプログラム、データベースファイルでシステムを実装する際には、
プログラミング言語としてのRPGやCLには、データの暗号化を直接行う機能が有る訳ではありませんが、
OSであるIBM iが提供している機能として、各種のデータ暗号化処理に対応した機能が、
API(Application Program Interface)として提供されています。
IBM i(AS/400)が提供するAPIの実体は、システムライブラリーQSYSに存在しているプログラムとなっていますので、
APIの仕様に則って受け渡しパラメータをセットするパラメータリストを定義し、
そのパラメータと共にAPIの実体であるプログラムを呼び出せば、
RPGやCLによるプログラムからも、APIで提供されるデータの暗号化の機能を使用することが出来ます。


pic3

IBM iが提供するデータの暗号化API

IBM iが提供するAPIの仕様の詳細な説明は、IBM i Information Centerで「Cryptographic Services API」を参照すると確認できます。

pic4 
Cryptographic Services APIは、データ暗号化の機能を多岐にわたって提供しているため、APIも数多くありますが、
基本的なデータの暗号化・復号化に際して使用するAPIは、以下の3種です。

1.ハッシュ値計算 Calcurate Hash (QC3CALHA)

ハッシュ値計算は、データ暗号化・復号化の際に指定するパスワードを保管する目的で使用されます。
パスワード自体を、そのまま保管すると、機密情報の漏洩につながりますので、
パスワードの内容からハッシュ値計算を行い、その計算結果をデータベースファイルに保管します。

pic5 

機密情報を扱う処理を実行する際は、パスワードを入力させ、その入力内容のハッシュ値計算を行い、
その計算結果と、保管されているパスワードのハッシュ値とを比較してパスワードの正誤判定を行います。

ハッシュ値計算とは、元のデータの内容から特定のアルゴリズムで計算処理を行って値を得る計算方法ですが、
計算結果から元の値を逆算することは理論的に困難であり、且つ、異なるデータ内容からは異なる計算結果のハッシュ値が一般的に得られ、 同じハッシュ値が得られる別々のデータを求めることも理論的に困難であることから、
パスワードをファイルに保管する際に用いられる計算処理です。

ハッシュ値計算は、回数が少ないと総当たり攻撃によりパスワードが判明してしまう脆弱性につながりますので、
1回目はパスワード自体を元にハッシュ値計算を行い、2回目は1回目の結果を元にハッシュ値計算を行う、
次は2回目の結果を元に3回目の計算を行うという繰り返しの計算処理を、1,000回、10,000回などシステム要件に応じて十分な回数行うことで、 総当たり攻撃によるパスワード判明を時間的に困難にすることで、脆弱性を防ぎます。

2.データ暗号化 Encrypt Data (QC3ENCDT)
機密情報データを登録する際に、データを暗号化するのに用いるAPIです。
処理の実行時にはパスワードを入力させて、ハッシュ値計算により正誤判定して、
正しいパスワードであることが確認できたら、そのパスワードをパラメータにして機密情報データの暗号化を行います。
暗号化した結果を、データベースファイルに保管します。

pic2 

機密情報データを暗号化する際のアルゴリズムは、IBM i のAPIにおいて、複数の種類のものが提供されていて、
パラメータの指定により選択できるようになっています。各種の暗号化アルゴリズムは、
無線LANなどでも使用されている、世界標準として採用されているものから選択できるようになっており、
データのサイズや、アルゴリズムの強度、計算処理速度など、システム要件に応じて適したものを選択できるようになっています。

3.データ復号化 Decrypt Data (QC3DECDT)
機密情報データを出力する際に、データを復号化するのに用いるAPIです。
処理の実行時にはパスワードを入力させて、ハッシュ値計算により正誤判定して、
正しいパスワードであることが確認できたら、そのパスワードをパラメータにして
データベースファイルに保管されている、暗号化された機密情報データの復号化を行います。
復号化した結果を、画面・帳票・出力データなどに出力します。

pic6 
データの復号化の際も、アルゴリズムの選択などパラメータで処理方法は選択できるようになっていますので、
暗号化の際に選択したパラメータと合わせることで、暗号化と復号化を正しくセットで行うことが出来ます。

まとめ

IBM PowerのOS IBM i(AS/400) や、そのプログラミング言語RPGは、前身のAS/400, OS/400の時代からは30年以上の歴史があり、 30年以上前の当時には、システム要件としては一般的でなかった機能は、プログラミング言語RPGの中には組み込まれていませんが、 OSであるIBM i(AS/400)は、バージョンアップ、リリースアップの都度、最新のビジネスのトレンドに対応して、 適宜、ニーズが高まっている新機能をOSであるIBM i(AS/400)の標準機能に組み込んでおり、その新機能はAPIを介してアクセスすることで、 一般的にレガシーシステムと呼ばれるプログラミング言語RPGで実装されたシステムからも、利用することが出来ます。
このような実装方法を行うことにより、プログラミング言語RPGで構築された過去のシステムの資産を有効活用しつつ、
アプリケーションレベルで実装するデータの暗号化による機密保護の確保という、最新のシステム要件にも対応することが出来ます。