データ要素暗号化
データ要素暗号化の使用法
データ要素暗号化により、データベース全体を暗号化するよりも、アプリケーション・データをよりきめ細かく暗号化する方法が実現されます。漏洩防止が必要な機密データ要素のためのものです。例えば、顧客のレコードでクレジット・カード情報のフィールドを排他的に暗号化できます。検査結果 (HIV 検査など) を表示するフィールドを患者レコードで排他的に暗号化できます。社会保障番号が記載されたレコードで該当フィールドを排他的に暗号化できます。
データ要素暗号化は、管理ポータルからではなく、(API により) プログラムで使用できます。API によりアクセスできるので、アプリケーション・コードでこれを使用できます。データ要素暗号化をデータベース暗号化で使用するオプションがあります (両方を使用する必要はありません)。
アプリケーションでデータ要素暗号化を使用するには、アプリケーション実行時に必要なキーが使用可能である必要があります。キーを使用可能にするには、これを有効にします。詳細は、"プログラムで管理するキー"、またはポータルを使用する場合は "データ要素暗号化キーの有効化" を参照してください。キーが有効化されると、InterSystems IRIS® データ・プラットフォームではその一意の識別子が有効化キーのテーブルに表示されます。アプリケーションではその識別子を使用してキーを参照し、暗号化処理のためにメモリにロードできます。同時に 4 つまでのキーを有効にできるので、データ要素暗号化では複数のキーが必要なタスクのインフラストラクチャが実現します。
データ要素暗号化のデータを暗号化する際、InterSystems IRIS では結果として得られる暗号化テキストと共に暗号化キーの一意の識別子を格納します。一意の識別子により、暗号化テキスト自体のみを使用して解読時にシステムでキーを識別できます。
ここでは以下について説明します。
プログラムで管理するキー
データ要素暗号化は API により使用できるので、キーを管理するための一連の呼び出しもあります。
これらはすべて、%SYSTEM.EncryptionOpens in a new tab クラスのメソッドです。
データ要素暗号化の呼び出し
データ要素暗号化で利用できるシステム・メソッドは、%SYSTEM.EncryptionOpens in a new tab クラスのすべてのメソッドで、以下のとおりです。
上記のメソッド名の先頭はすべて “AESCBCManagedKey” になります。それらのメソッドが AES (Advanced Encryption Standard) を CBC (Cipher Block Chaining) モードで使用し、マネージド・キー暗号化の一連のツールの一部であるためです。
“ManagedKey” が名前に含まれない AESCBC メソッドは、古いメソッドでこれらの目的では使用できません。
$SYSTEM.Encryption.AESCBCManagedKeyEncrypt
このメソッドのシグニチャは、通常の呼び出しと同様に以下のようになります。
$SYSTEM.Encryption.AESCBCManagedKeyEncrypt
(
plaintext As %String,
keyID As %String,
)
As %String
各要素の内容は以下のとおりです。
-
plaintext — 暗号化対象となる暗号化されていないテキスト。
-
keyID — 平文の暗号化に使用されるデータ暗号化キーの GUID。
-
メソッドは、暗号化されたテキストを返します。
メソッドが正常に実行できなかった場合、このメソッドは <FUNCTION> エラーまたは <ILLEGAL VALUE> エラーをスローします。このメソッドの呼び出しを Try-Catch ループに記述します。Try-Catch の詳細は、"TRY-CATCH メカニズム" を参照してください。
詳細は、"$SYSTEM.Encryption.AESCBCManagedKeyEncryptOpens in a new tab" のクラス・リファレンス・コンテンツを参照してください。
$SYSTEM.Encryption.AESCBCManagedKeyDecrypt
このメソッドのシグニチャは、通常の呼び出しと同様に以下のようになります。
$SYSTEM.Encryption.AESCBCManagedKeyDecrypt
(
ciphertext As %String
)
As %String
各要素の内容は以下のとおりです。
-
ciphertext — 解読対象となる暗号化テキスト。
-
メソッドは、解読された平文を返します。
メソッドが正常に実行できなかった場合、このメソッドは <FUNCTION> エラーまたは <ILLEGAL VALUE> エラーをスローします。このメソッドの呼び出しを Try-Catch ループに記述します。Try-Catch の詳細は、"TRY-CATCH メカニズム" を参照してください。
キー ID は解読対象となる暗号化テキストに関連付けられるため、キー ID をこの呼び出しで含める必要はありません。
詳細は、"$SYSTEM.Encryption.AESCBCManagedKeyDecryptOpens in a new tab" のクラス・リファレンス・コンテンツを参照してください。
$SYSTEM.Encryption.AESCBCManagedKeyEncryptStream
このメソッドのシグニチャは、通常の呼び出しと同様に以下のようになります。
$SYSTEM.Encryption.AESCBCManagedKeyEncryptStream
(
plaintext As %Stream.Object,
ciphertext As %Stream.Object,
keyID As %String,
)
As %Status
各要素の内容は以下のとおりです。
-
plaintext — 暗号化対象となる暗号化されていないストリーム。
-
ciphertext — 暗号化ストリームを受け取る変数。
-
keyID — plaintext の暗号化に使用されるデータ暗号化キーの GUID。
-
メソッドは %StatusOpens in a new tab コードを返します。
詳細は、"$SYSTEM.Encryption.AESCBCManagedKeyEncryptStreamOpens in a new tab" のクラス・リファレンス・コンテンツを参照してください。
$SYSTEM.Encryption.AESCBCManagedKeyDecryptStream
このメソッドのシグニチャは、通常の呼び出しと同様に以下のようになります。
$SYSTEM.Encryption.AESCBCManagedKeyDecryptStream
(
ciphertext As %Stream.Object,
plaintext As %Stream.Object
)
As %Status
各要素の内容は以下のとおりです。
-
ciphertext — 解読対象となる暗号化ストリーム。
-
plaintext — 解読ストリームを受け取る変数。
-
メソッドは %StatusOpens in a new tab コードを返します。
キー ID は解読対象となる暗号化テキストに関連付けられるため、キー ID をこの呼び出しで含める必要はありません。
詳細は、"$SYSTEM.Encryption.AESCBCManagedKeyDecryptStreamOpens in a new tab" のクラス・リファレンス・コンテンツを参照してください。
リアルタイムのデータの再暗号化のサポート
データ要素暗号化では、InterSystems IRIS アプリケーションで、暗号化されたデータ要素を新しいキーで再暗号化する処理をサポートできます。
暗号化されたデータ要素には暗号化キーの識別子が格納されているので、これによって、データの再暗号化の処理が単純になります。暗号化テキストのハンドルと有効なキーを与えられるだけで、アプリケーションは再暗号化を実行できます。例えば、データ要素暗号化では、機密データをダウンタイムなしで再暗号化できる機能がサポートされています。これは特に、PCI DSS (Payment Card Industry Data Security Standard) 要件を満たすことが必要な場合など、法的な理由でこの処理が必要な場合に便利です。
データの再暗号化が必要な場合、新しいキーを作成し、アプリケーションに対して、これが新しい暗号化キーであることを指定します。その後、要素を解読してから新しいキーで暗号化するバックグラウンド・アプリケーションを実行するなどの処理を実行できます。この処理では暗号化に指定されたキーを使用し、解読にも必ずその適切なキーを使用します。これはキーが暗号化されたデータと共に格納されるためです。