プラグインのアーキテクチャとインターフェイス

GT.Mには、テスト済みのリファレンス実装に記載されているように、広く利用可能な暗号化パッケージを使用するリファレンス実装が含まれています。あなたの選択: FISがGT.Mをテストしたパッケージを使用するか、反対に選んだ別のパッケージにGT.Mをインターフェースするかを選択することができます。先に述べたように、FISでは、特定のパッケージ(テストしたものでもない)を推奨したりサポートしたりせず、本番環境で使用するパッケージを確実にサポートする必要があります。参照実装は、必要に応じてカスタマイズできるソース・コードだけでなく、オブジェクト・コードを実行できるようにコンパイルされて提供されています。

ソース・コードから参照実装を構築するには、Cコンパイラ、make、ld、標準ヘッダファイル、暗号化ライブラリのヘッダファイルなど、プラットフォーム用の標準開発ツールが必要です。

このセクションでは、GT.Mとプラグインのアーキテクチャとインタフェースについて説明します。あなたが提供するプラグインが参照実装と同じインターフェースをGT.Mに提示することを保証する必要があります。

パッケージング

参照実装は、デフォルトで $gtm_dist/plugin/gtmcrypt にあります。

参照実装には次のものが含まれます:

  1. すべてのソース・ファイルとスクリプトを含む $gtm_dist/plugin/gtmcrypt サブディレクトリにあります。スクリプトには、libgtmcrypt.so と "ヘルパー" スクリプト(例えば、add_db_key.sh)をビルド/インストールするために必要なものが含まれています。これらのスクリプトの簡単な説明は次のとおりです:

    show_install_config.sh

    $gtm_crypt_plugin にGT.Mプロセスが使用する暗号ライブラリと暗号を報告します。値がある場合は libgtmcrypt.so にリンクされているライブラリの名前になります。

    gen_sym_hash.sh

    show_install_config.sh を使用して、現在インストールされている暗号化設定を識別し、提供された対称キーに対して適切な暗号化ハッシュを生成できるようにします。

    import_and_sign_key.sh

    お互いの公開キーをインポートして署名します。

    gen_sym_key.sh

    他の人がデータベース・ファイルの暗号化に使用する対称暗号キーを生成します。

    encrypt_sign_db_key.sh

    秘密キーを使用して対称暗号キーを復号化し、他の公開キーで暗号化し、秘密キーで署名します。

    add_db_key.sh

    マスター・キー・ファイルにキーを追加します。

  2. GT.Mが期待するプラグイン・インタフェースは、gtmcrypt_interface.h で定義されています。このファイルを変更しないでください。プラグインが提供しなければならないインターフェースを定義します。

  3. $gtm_dist/plugin/libgtmcrypt.so [10] は、GT.Mによって動的にリンクされ、次に暗号化パッケージを呼び出す実行可能ファイルを含む共有ライブラリです。$gtm_dist/utf8 ディレクトリが存在する場合、../pluginへのシンボリックリンクが含まれているはずです。

  4. ソース・コードは、$gtm_dist/plugin/gtmcrypt/source.tar ファイルにあります。libgtmcrypt.soをコンパイルしてインストールするには以下のスクリプトが含まれています。

    build.sh

    ソースコード から libgtmcrypt.so をコンパイルし、次のパラメータを持ちます:

    • gcrypt または openssl:暗号化ライブラリを指定

    • d または p:プロダクションには p を使用し、デバッグには d を使用

    • AES256CFBまたはBLOWFISHCFB(オプション):このオプション・パラメーターでは、暗号化プラグインの作成に使用する暗号を指定できます。デフォルトはAES256CFBです。

    install.sh

    libgtmcrypt.so をインストールし、次のパラメータを設定します:

    • gcrypt または openssl:暗号化ライブラリを指定

    • AES256CFBまたはBLOWFISHCFB(オプション):このオプション・パラメーターでは、暗号化プラグインの作成に使用する暗号を指定できます。デフォルトはAES256CFBです。

GT.M 外部インターフェイスへの拡張

GT.Mは、( gtmxc_types.hファイルに )追加のC構造体を提供します:

  1. gtmcrypt_key_t - キーへのハンドルであるデータ型。GT.Mデータベースエンジン自体はキーを操作しません。プラグインはキーを保持し、GT.Mデータベース・エンジンがキーを参照するために使用するキーへのハンドルを提供します。

  2. xc_fileid_ptr_t - ファイルを一意に識別するためにGT.Mによって維持される構造体へのポインタ。ファイルには、絶対パス名と相対パス名の結果としてだけでなく、シンボリック・リンクのために、またファイルシステムをファイル名階層の複数の場所にマウントできるため、複数の名前があることに注意してください。GT.Mはファイルを一意に識別できる必要があります。

カスタマイズされたプラグイン実装で使用する必要はありませんが、GT.Mは、ファイルを一意に識別するために次の関数を提供します(また参照実装でも使用します):

  1. xc_status_t gtm_filename_to_id(xc_string_t *filename, xc_fileid_ptr_t *fileid) - ファイル名をとり、そのファイルのファイルID構造を提供する関数。

  2. xc_status_t gtm_is_file_identical(xc_fileid_ptr_t fileid1, xc_fileid_ptr_t fileid2) - 2つのファイルIDが同じファイルにマップされるかどうかを決定する関数。

  3. gtm_xcfileid_free(xc_fileid_ptr_t fileid) - ファイルID構造体を解放する関数。

オペレーション

Mumps、MUPIPおよびDSEプロセスは、共有ライブラリにあるプラグインインタフェース関数に動的にリンクします。The functions serve as software "shims" to interface with an encryption library such as libmcrypt or libgpgme / libgcrypt これらの関数は、 libmcrypt libgpgme / libgcrypt などの暗号化ライブラリとのインタフェースを提供するソフトウェア「shim」として提供されます。

プラグイン・インタフェース関数は次のとおりです:

  1. gtmcrypt_init()

  2. gtmcrypt_getkey_by_name()

  3. gtmcrypt_getkey_by_hash()

  4. gtmcrypt_hash_gen()

  5. gtmcrypt_encrypt()

  6. gtmcrypt_decrypt()

  7. gtmcrypt_close()

  8. and gtmcrypt_strerror()

GT.Mデータベースは複数のデータベースファイルで構成されていますが、それぞれに独自の暗号化キーがありますが、複数のファイルに同じキーを使用できます。したがって、gtmcrypt* 関数は、複数のデータベース・ファイルの複数のキーを管理することができます。これらの関数のプロトタイプは gtmcrypt_interface.h にあります。

コア・プラグイン・インタフェース関数は、すべて xc_status_t 型の値を返します。

  • gtmcrypt_init() は初期化を行います。環境変数 $gtm_passwd が存在し、文字列値が空の場合、GT.Mは最初のMプログラムがロードされる前にgtmcrypt_init() を呼び出します: そうでなければ、暗号化されたデータベースファイルに対して最初の操作を試みるときに gtmcrypt_init() を呼び出します。

  • 一般に、gtmcrypt_getkey_by_hash または MUPIP CREATEの場合、gtmcrypt_getkey_by_name はキー取得を実行し、gtmcrypt_decrypt() および gtmcrypt_encrypt() が呼び出されたときにそれらを見つけることができる場所にキーを配置します。

  • GT.Mがバイトブロックをデコードする必要があるときはいつでも、gtmcrypt_decrypt() を呼び出して暗号化されたデータをデコードします。GT.Mデータベース暗号化が動作するレベルでは、数値データ、MまたはUTF-8モードの文字列データ、照合アルゴリズムによって変更されたかどうかは関係ありません。暗号化と復号化は、単純に一連のバイトで動作します。

  • GT.Mはバイトブロックを暗号化する必要があるときはいつでも、gtmcrypt_encrypt() を呼び出してデータを暗号化します。

  • 暗号化が使用されている場合( gtmcrypt_init() が以前に呼び出され成功した場合)、GT.Mはプロセス終了時およびコアファイルを生成する前に gtmcrypt_close() を呼び出します。gtmcrypt_close() は、コアファイルにクリアテキスト・キーが表示されないように、メモリ内のキーを消去する必要があります。

より詳細な説明が続きます。

  • gtmcrypt_key_t *gtmcrypt_getkey_by_name(xc_string_t *filename) - MUPIP CREATEは、この関数を使用してデータベースファイルのキーを取得します。この関数は、メモリ・キーリング内の指定されたファイル名を検索し、その対称暗号キーへのハンドルを返します。指定されたファイル名に対して複数のエントリがある場合、参照実装は、そのファイル名の最後に発生するものに一致するエントリをマスター・キー・ファイルに返します。

  • xc_status_t gtmcrypt_hash_gen(gtmcrypt_key_t *key, xc_string_t *hash) - MUPIP CREATEはこの関数を使用してキーからハッシュを生成し、そのハッシュをデータベースファイルヘッダーにコピーします。最初のパラメータはキーのハンドルで、2番目のパラメータは256バイトのバッファを指します。使用されるハッシュ・アルゴリズムが256バイトより小さいハッシュを提供する場合、gtmcrypt_hash_gen() は、256バイトバッファ内の未使用領域をゼロで埋める必要があります。

  • gtmcrypt_key_t *gtmcrypt_getkey_by_hash(xc_string_t *hash) - GT.Mはデータベースファイルオープン時にこの関数を使用して、データベースファイルヘッダーからのハッシュを使用して正しいキーを取得します。この関数は、メモリ・キー・リング内の指定されたハッシュを検索し、対応する対称暗号キーへのハンドルを返します。MUPIP LOAD, MUPIP RESTORE, MUPIP EXTRACT, MUPIP JOURNAL および MUPIP BACKUP -BYTESTREAM は、入力に使用するファイルが派生した現在または以前のデータベースに対応するキーを見つけるためにこれを使用します。

  • xc_status_t gtmcrypt_encrypt(gtmcrypt_key_t *key, xc_string_t *inbuf, xc_string_t *outbuf) and xc_status_t gtmcrypt_decrypt(gtmcrypt_key_t *key, xc_string_t *inbuf, xc_string_t *outbuf) - GT.Mは、これらの関数を使用してデータを暗号化および復号化します。第1のパラメータは、対称暗号キーへのハンドルであり、第2のパラメータは、暗号化または復号化するデータブロックへのポインタであり、第3のパラメータは、暗号化または復号化データの結果ブロックへのポインタです。gtmcrypt_decrypt()は、適切なキー(対称暗号と同じキー)を使用して、gtmcrypt_encrypt() で暗号化されたデータバッファを復号化できなければなりません。そうでなければ、暗号化されたデータは回復不能になります [11] 。先に説明したように、GT.Mは文字列の暗号化されたテキストとクリアテキストのバージョンが同じ長さであることを要求します。

  • char *gtmcrypt_strerror() - GT.Mはこの関数を使用して、プラグインがエラー・ステータスを返すと、プラグインから追加エラー・コンテキストを取得します。この関数は、最後に発生したエラーに関連する追加のテキストへのポインタを返します。GT.Mはこのテキストをエラー報告の一部として表示します。エラーに追加のコンテキストや説明がない場合、この関数はnull文字列を返します。.

これらの機能のリファレンス実装の完全なソースコードは、GT.Mと同じ条件でライセンスされています。あなたは、あなたの特定のGT.Mデータベースの暗号化ニーズに合わせて変更する自由があります。変更内容を他の人に再配布することを検討したい場合は、GT.Mライセンスを確認してください。



[10] 異なるコンピューティング・プラットフォームは、.sl と .dll を含む共有ライブラリに対して異なるファイル拡張子を使用することがあります。このドキュメントでは可読性のために .so を使用していますが、実際の名前はプラットフォームによって異なる場合があります。

[11] 暗号のそのような失敗は、おそらくGT.Mに損傷したデータベースとして現れるでしょう。

inserted by FC2 system