HP OpenVMS Systems Documentation |
| 前へ | 次へ | 目次 | 索引 |
鍵を作成したら,ファイルの暗号化や復号化を行うことができます。それには,コマンド行で ENCRYPT コマンドおよび DECRYPT コマンドを使用するか,ENCRYPT$ENCRYPT_FILE() API を使用します。
ファイルの暗号化では,RMS ファイルを,固定長の 512 バイト・レコードで暗号化します。ファイル作成日付と変更日付,ファイルが順編成ファイルなのか索引編成ファイルなのか,そのレコード形式 (STREAM_LF,VAR など) などのファイルの特性と属性は保持されます。ユーザはファイルの暗号化に使用する鍵とデータアルゴリズムを指定しますが,ユーザの鍵は,ランダムな鍵,初期化ベクタ (IV),ランダム鍵レコード中のデータ・アルゴリズムを暗号化するために使用されます。ユーザが指定したデータ・アルゴリズムを使用してファイルの属性,機能レコード,そのデータ・レコードを暗号化するのは,ランダムな鍵です。
ファイルを復号化する際には,ユーザが指定した鍵はランダム鍵レコードを復号化するために使用され,ランダムな鍵 (データ鍵),IV,データ・アルゴリズムなどが取得されます。次に,ランダムな鍵,IV,データ・アルゴリズムを使用して,固定長の 512 バイト・レコードからファイル属性,機能レコード,データ・レコードが復号化され,元の形式に復元されます。
3.5.10.1 ファイルの暗号化と復号化の省略時のモード---DESCBC
特に指定しなければ,コマンド行からファイルを暗号化するときには,Encrypt は DESCBC アルゴリズムを使用してファイルを暗号化します。すなわち,鍵やデータ・アルゴリズムがコマンド行で指定されていない場合,DESCBC アルゴリズムとモードが使用されます。
DESCBC を使用して,ファイル file-name を鍵 key-name で暗号化し,ファイル file-name に出力する例は次のようになります。
$ ENCRYPT file-name key-name |
DESCBC を使用してファイルを復号化するには,次のコマンドを使用します。
$ DECRYPT file-name key-name |
3.5.10.2 AES データ・アルゴリズムと AES 鍵アルゴリズムの指定
ファイルを暗号化する際に省略時の DESCBC 以外のアルゴリズムを選択するには,DCL の ENCRYPT コマンドでデータと鍵のアルゴリズム修飾子が指定可能で,DECRYPT コマンドでは鍵アルゴリズム修飾子が指定可能です。
AES を使用してファイルを暗号化する場合は, /DATA_ALGORITHM=AESmmmkkk と /KEY_ALGORITHM=AESmmmkkk の両方を指定します。
Encrypt は,鍵と鍵アルゴリズムが一致することを期待します。 AES 鍵は AES 鍵アルゴリズムとともに使用し, DES 鍵は DES 鍵アルゴリズムとともに使用する必要があります。 ENCRYPT コマンドで /DATA_ALGORITHM=AESmmmkkk を指定しなかった場合の省略時のデータ・アルゴリズムは DES となります。 DES 鍵と KEY_ALGORITHM=DES を使用する場合も同じことがいえます。データは強力なアルゴリズムで保護されますが,鍵はそうではありません。
AES 鍵と DES 鍵,および各データ・アルゴリズムを混在させる機能は, OpenVMS Version 8.3 で使用できなくなりました。混在させた場合は,ENCRYPT$_AESMIXDES エラー状態となります。 |
AES を使用してファイルを復号化する場合は, /KEY_ALGORITHM=AESmmmkkk 修飾子だけを指定します。これは,ランダムな鍵が格納されているランダム鍵レコードを復号化するためにこの鍵アルゴリズムが使用され,ランダムな鍵を使用してファイルのデータ・レコードが復号化されるためです。データ・アルゴリズムの指定は不要であり,実際,修飾子が認識できないというエラー・メッセージが表示されます。
暗号化操作では,/KEY_ALGORITHM を指定せずに /DATA_ALGORITHM=AES を指定すると,エラーが発生します。省略時のアルゴリズム DESCBC を使用して,ランダムな鍵とファイル情報が格納されているランダム鍵レコードが暗号化されます。しかし,Encrypt は,ユーザの鍵が KEY アルゴリズムと一致することを期待します。一致しないと,エラーが発生します。つまり,key-name が AES 鍵の名前と値の場合,鍵が論理名テーブルから取り出され,DES マスタ鍵で復号化されると,鍵は誤って復号化され,操作が失敗して次のメッセージが表示されます。
|
ENCRYPT /DATA_ALGORITHM=AES /KEY_ALGORITHM=AES
AES には,省略時の暗号化および復号化ルーチン (AESCBC128) があり,モードと鍵のサイズが指定されずに AES が指定された場合 (すなわち /AES だけが指定された場合) に使用されます。これは,次の例のように,AES ファイル暗号化のショートカットとして使用できます。
$ ENCRYPT file-name key-name /KEY=AES /DATA=AES |
ファイルを復号化する際に省略時の DESCBC 以外のアルゴリズムを選択するには,DCL DECRYPT コマンドで鍵アルゴリズム修飾子だけを指定します。 AES を使用して復号化するときには,/KEY_ALGORITHM=AESmmmkkk 修飾子だけを指定します。ここで mmm は AES モードです。
指定が必要なのは鍵アルゴリズムだけです。データ・アルゴリズムは,暗号化されたファイルの鍵レコード中に,他のファイル情報とともに格納されています。鍵レコードは,ファイルを暗号化する際にユーザが指定した暗号鍵で暗号化されています。復号化操作の際,ユーザの鍵を使用してデータ鍵 (暗号化の際に生成されたランダムな鍵) が格納された鍵レコードを復号化し,そのアルゴリズムとともに使用して,ファイル中の残りのデータ・レコードが復号化されます。
3.5.11 ENCRYPT$ENCRYPT_FILE() API
AES ファイル・フラグ
ENCRYPT$ENCRYPT_FILE() API の形式は次のとおりです。
ENCRYPT$ENCRYPT_FILE(input-file, output-file, key-name, algorithm, file-flags, item-list ) |
ENCRYPT$ENCRYPT_FILE( ) API では,AES アルゴリズムを使用してファイルを暗号化する場合に使用される,追加の FILE_AES フラグ・マスク (および値) があります。 ENCRYPT$ENCRYPT_FILE_FLAGS は,暗号化の方向,ファイルの圧縮などのファイル操作を制御するために使用されます。 FILE_AES フラグは,ファイルの AES の初期化や暗号化操作を制御し, AES 鍵にフラグを設定します。
オプションの項目リストは,データ・アルゴリズム・パラメータを指定変更するために使用します。その目的は,アルゴリズムを,機能的に似ていて名前が異なる別のアルゴリズムで置き換えることです。ランダム鍵レコードに格納されているアルゴリズム名を,オーバーライド記述子でユーザが指定したアルゴリズムの名前で指定変更します。これにより,復号化環境のアルゴリズム名と異なるアルゴリズム名を使用して暗号化されたファイルを開くための方法が提供されます。
3.5.12 レコードの暗号化と復号化
ファイル・レコードは,次の Encrypt API で暗号化および復号化を行うことができます。
ENCRYPT$ENCRYPT_ONE_RECORD (input, output, key-name, algorithm) ENCRYPT$DECRYPT_ONE_RECORD (input, output, key-name, algorithm) |
1 レコードの暗号化で AES を使用するには,最初に AES 鍵を作成し,論理名テーブルに格納します (暗号化される)。 AES 鍵の名前と,選択した AESmmmkkk (モードと鍵のサイズ) アルゴリズムに対する ASCII テキストが格納されている記述子のアドレスを指定します。入力バッファと出力バッファ (記述子のアドレス) も指定します。
これらの 1 レコードの API では,鍵が論理名テーブルにすでに存在していることが前提です。これらの API は,主に少量のデータまたは数レコードだけを暗号化および復号化するために使用します。これは,ENCRYPT$ENCRYPT_ONE_RECORD( ) API の呼び出し時にオーバヘッドとなる操作があるためです。この API を呼び出すと,関数 ENCRYPT$INIT(),ENCRYPT$ENCRYPT() および ENCRYPT$DECRYPT(),ENCRYPT$FINI() も呼び出されます。 INIT,DECRYPT,および FINI 関数は,ユーザが key-name パラメータで指定した鍵の名前を使用して論理名テーブル中の鍵を復号化するために,最初の INITIAL の中で再帰的に呼び出されます。
多数のレコードを暗号化または復号化する必要がある場合は, ENCRYPT$xxCRYPT_ONE_RECORD() 呼び出しを使用
しないことをお勧めします。代わりに,API 関数 ENCRYPT$ENCRYPT() および ENCRYPT$DECRYPT() を使用して,通常の操作を行ってください。そのためには,暗号化や復号化を行う前に ENCRYPT$INIT() 関数を使用してコンテキストを初期化し,アプリケーションが終了する前に ENCRYPT$FINI() API を呼び出してメモリ構造体を解放します。
3.5.13 データの暗号化と復号化
ENCRYPT$ENCRYPT() ルーチンと ENCRYPT$DECRYPT() ルーチンは,最大 64 Kバイトのデータを暗号化処理するために,アプリケーションによって使用されます。
ENCRYPT$ENCRYPT (context, input, output [,output-length] [,initialization-vector] ENCRYPT$DECRYPT (context, input, output [,output-length] [,initialization-vector] |
これらのルーチンでは, ENCRYPT$ENCRYPT() や ENCRYPT$DECRYPT() を使用してデータ・ブロックの暗号化や復号化を行う前に, ENCRYPT$INIT() ルーチンで暗号化コンテキストを初期化する必要があります。コンテキスト・データ構造体を解放するために,最後に ENCRYPT$FINI() ルーチンを呼び出します。
出力バッファは,ブロック長の単位でパディングされたブロックを格納できる必要があります。ブロック長は,AES の場合は 16 バイトです (DES では 8 バイトです)。 output-length の値と initialization-vector (IV) パラメータは省略できます。 output-length は,書き込まれる (暗号化または復号化される) バイト数です。
AES IV は,16 バイトの値を参照するポインタです。内部構造体は,AES に対応できるように拡張されています。 DES IV は,8 バイトの値を参照するクォドワードです。
3.5.14 長さとブロック・モード・パディング
AES ブロックモード・アルゴリズム (AESCBCxxx および AESECBxxx) は, 16 バイトのブロック境界までデータをパディングします。 AES の場合,暗号化と復号化を行うと,1 バイトは 16 バイト, 72 バイトは 80 バイトなどとなります。 AES のパディング文字は,パディングされたバイト数を表す 16 進数です。たとえば,1 バイトのデータを暗号化すると,暗号化された 1 バイトのデータの後ろに 15 文字の 0F がパディングされ, 72 バイトのデータを暗号化すると,暗号化された 72 バイトのデータの後ろに 08 が 8 バイト分パディングされます。 DESECB モードと DESCBC モードでは,常にゼロがパディングされます。文字ストリーム・モード (AESCFBxxx, AESOFBxxx,DESCFB) ではデータがパディングされず,
output-length パラメータは実際のバイト数に一致します。
3.5.15 新しい AES 暗号化鍵,フラグ・マスク,値
新しい AES 暗号化 API ルーチンはありません。ただし,AES アルゴリズムとさまざまな鍵長の値に対応するために, OpenVMS Version 8.3 では AES 鍵と AES ファイル・フラグ・マスクおよび値が追加されていいます。
AES アルゴリズム,モード,および鍵長 (128 ビット,192 ビット,または 256 ビット) は,API ENCRYPT$ENCRYPT_FILE( ) および ENCRYPT$INIT( ) の algorithm パラメータで指定するか, ENCRYPT$GENERATE_KEY( ) API の algorithm-name パラメータで指定します。このパラメータは,以下のように文字列記述子の形式で,参照渡し (ポインタ) です。
AESCBC128 は省略時の暗号化であり,ユーザの鍵の暗号化および復号化を行って論理名に格納するためにも使用されます。これらの暗号化は,新しいイメージ・ファイル SYS$SHARE:ENCRYPT$ALG$AES.EXE 内のアルゴリズム・テーブルに格納された順序 (上記の順序) で検索されます。 |
以下の AES 暗号化操作はサポートされないため,お勧めできません。
$ encrypt /AUTHENTICATE /UPDATE *.exe KeyName /out=tt: |
MAC は IV も使用しますが,基となるアルゴリズムおよびキーが設定されたファイル MAC のモードは DESCBC です。 MAC は,ファイルのデータとファイルのセキュリティ属性が,最終的に DESCBC で暗号化されたブロックです。
ここでは,Monitor ユーティリティの機能拡張について説明します。
3.6.1 Align コマンド (I64 のみ)
Monitor ユーティリティは,アラインメント・フォルトに関する情報を表示するように拡張されました。この新しい MONITOR ALIGN コマンドは,Integrity サーバの OpenVMS でのみ有効で,Integrity サーバ・システムでの性能の問題をトラブルシューティングする際に役立ちます。
MONITOR ALIGN クラスは,秒あたりのアラインメント・フォルトの発生率と総アラインメント・フォルト数を,モード (カーネル・モード,エグゼクティブ・モード,スーパバイザ・モード,およびユーザ・モード) ごとに表示します。秒あたりのアラインメント・フォルト率が非常に高い場合は, SDA 経由で動作する Alignment Fault ユーティリティ (FLT) を使用し,アラインメント・フォルトの原因を解析してください。
Integrity サーバ・システムでは,すべてのアラインメント・フォルトはオペレーティング・システムで処理されるため,アラインメント・フォルトの発生率を追跡するためにカウンタをカウントアップすることができます。 Alpha では,アラインメント・フォルトはコンソールの PALcode で修正されるため,カウンタをカウントアップするためには大きなオーバヘッドが必要になります。そのため,MONITOR ALIGN コマンドは Integrity サーバでのみ使用できます。
ヘッダ・インクルード・ファイル $MONDEF も拡張され,新しい ALIGN クラスのレコード定義が追加されています。以前は,各クラス・タイプ・レコードの定数は用意されていませんでしたが, Version 8.3 の $MONDEF では,クラス番号用のシンボリック定数定義を MNR_CLS$K_xxx としてインクルードします。
次の例を参照してください。
$ monitor align
ALIGNMENT FAULT STATISTICS
on node MTDIB9
11-JAN-2006 16:58:07.25
CUR AVE MIN MAX
Kernel Alignment Faults 19529.00 19529.00 19529.00 19529.00
Exec Alignment Faults 7581.00 7581.00 7581.00 7581.00
Super Alignment Faults 0.00 0.00 0.00 0.00
User Alignment Faults 164972.00 164972.00 164972.00 164972.00
Total Alignment Faults 192082.00 192082.00 192082.00 192082.00
|
| 前へ | 次へ | 目次 | 索引 |