4D では、その使用のコンテキストにかかわらず、データの守秘性を保つためにデータを暗号化することができます。具体的には、4D の暗号化では次のような主要な機能があります:
- データファイル全体ではなく、データベース内にて重要なデータのみを暗号化する機能
- データアクセスをプロテクトするための追加のセキュリティレイヤー
- ハードウェアに依存しない暗号化のため、自分でキーを管理することができます(外部ホスト会社を使用する際の要求にも対応します)。
注: 4D がどのようにセキュリティの問題を管理しているかという情報については、4D セキュリティガイド を参照してください。
4D では二つの暗号化モードを提供しており、それによって異なる要求に対応しています:
4D でのデータ暗号化は、以下の概念に基づいています:
- 粒度: 暗号化はテーブルレベルで行われます。重要なデータを格納しているテーブルはデータベースストラクチャー(.4db ファイル) 内で"暗号化可能"とフラグが立てられます。暗号化可能テーブルの設定の仕方のより詳細な情報については、暗号化可能 の段落を参照してください。
- 暗号化鍵: テーブルは、特定の"パスフレーズ"におけるSHA-256 アルゴリズムを使用して生成されたASE キーによって暗号化されます。この暗号化鍵はファイルやUSB キーなどの外部デバイスに保存することができ、必要になった時にのみサーバーに接続する、といった使い方が可能です。
- キーチェン: 暗号化されたデータファイルに対して、有効な暗号化キーが提供されると、メモリ内の4D キーチェーンの中に保管されます。そのため、いちいちキーを(デバイス経由あるいはds.provideDataKey( ) メソッド経由で)提供することなくデータファイルを閉じたり再度開いたりすることが可能です。クライアント/サーバー環境においては、キーチェーンはサーバー側に保管されます。キーチェンは4D 終了時に消去されます。
- パスフレーズ: パスフレーズは、より安全なバージョンのパスワードと言えます。パスワードより多くの文字数を含むことができ、暗号化キーを生成するのに使用されます。同じパスフレーズを使用すれば必ず同じ暗号化キーが生成されます。
- 対称的暗号化: データの暗号化と復号化に対して同じ暗号化キーが使用されます。
- 暗号化されたデータの読み出しと書き込み: 暗号化されたデータファイルに対して、有効な暗号化キーが提供された場合:
- 暗号化可能テーブルに対するデータ編集は、自動的にディスク上で暗号化されます。
- 暗号化可能テーブルから読み出されたデータは、メモリ内で自動的に復号化されます。
- ターゲットファイル: 暗号化はデータを扱うファイル全てに対して適用されます: .4dd, .journal, .4dIndex
警告: 暗号化キーもパスフレーズも紛失してしまった場合、たとえ4D テクニカルサービスを以ってしても、暗号化されたデータにアクセスすることは不可能です。
4D での暗号化は、シンプルな2ステップシナリオに基づいています:
ステップ 1: 暗号化するテーブルを選択
- デベロッパーが、データベースストラクチャーレベルにおいて暗号化するテーブルを選択します(暗号化可能参照)
- パフォーマンス上の理由から、重要なデータを格納しているテーブルのみが選択されることがのぞましいです。
- この時点では何の暗号化も行われておらず、ユーザーはデータ暗号化なしにいつも通り操作することができます。
ステップ2: 選択されたデータを暗号化する
- アプリケーションを配布する時(例えば顧客から要求された場合など)、デベロッパーはMaintenance & Security Center(MSC) または4D ランゲージを使用して、暗号化を有効化します。
- 事前に選択されていた全てのテーブルに対して、暗号化が実行されます。
- 暗号化キーが提供されていれば、暗号化されたデータは自動的に読み出し時に復号化され、保存する際に再暗号化されます。
注: 4D キーチェーンは実行中の4D セッションの間しか有効ではありません。これはメモリ内に保管され、4D アプリケーションが終了する際に自動的に削除されます。
この図では以下のステップが描かれています:
- ユーザーが暗号化されたデータファイルを開こうとすると、4D は4D キーチェーンの中に有効な暗号化キーがないかどうかを探します。見つかった場合暗号化されたデータへのアクセス(読み/書き)が許可されます。
- 4D キーチェーンの中に有効な暗号化キーが見つからない場合、4D は接続された全てのデバイス(の第1階層)の中を、有効な暗号化キーを格納している .4DKeyChain ファイルがないかどうかを探します(以下のデータ暗号化キーをファイルに保存する を参照してください)。
- この段階では、実はデータファイルは開いています。有効な暗号化キーが提供されていない場合、暗号化されたデータへの読み/書きアクセスは不可です。
- しかしながら、ユーザーは、以下の方法で有効な暗号化キーを提供することができます:
有効なデータ暗号化キーが提供された場合、暗号化されたデータへの読み/書きアクセスが許可されます。
-
有効な暗号化キーが見つかるたびに、そのキーは4D キーチェーンへと追加されます。暗号化キーを格納している接続デバイスは、暗号化キーが4D キーチェーンに追加されればそれ以降は接続されていなくても構いません。
データ暗号化キーファイルを作成することで、外部デバイス(例: USB キーや外部ディスクなど)にファイルを保存し、4D がスタートアップ時に自動的に、またはDiscover data key への呼び出しを経てそのファイルを使用し、データを復号化することができます。一度有効な暗号化キーが見つかれば、それはメモリ内の4D キーチェーン内に保存され、セッション全体を通じて使用されます。この段階で、外部デバイスは接続を取り外しても構いません。
暗号化キーファイルは以下のルールに準拠している必要があります:
- ファイル名は .4DKeyChain 拡張子を持っている必要があります。例: "myKeys.4DKeyChain"
- ファイルはJSON フォーマットのテキストファイルでなければなりません。
- ファイルには、一つまたは複数の暗号化キー/パスフレーズを、JSON オブジェクトまたはオブジェクトのコレクションに含めることができます。それぞれのオブジェクトはencodedKey またはpassPhrase プロパティを格納している必要があります。キーファイルの生成の仕方については、New data key コマンドを参照してください。
- ファイルは外部デバイスのルートレベルに保存されている必要があります。
- 複数の .4DKeyChain ファイルを同時に使用することは可能です。
注意: ファイル名に関係なく、見つかった全ての.4DKeychin ファイルのコンテンツは、解析されてデータとキーがマッチするかどうかをチェックされます。
以下は、3つのキーを格納しているキーファイルの一例です:
[
{ "encodedKey":"D1AB499C9BE1F210BDB[...]0F63EF6CE8CC0C6CA4" },
{ "encodedKey":"F68A20FCBC70[...]21B55F6D89687ABC7CFAB95720A" },
{ "passPhrase":"Bonjour il fait beau" }
]