暗号化の概念

このトピックでは、暗号化機能の基本的な知識および IBM® i オペレーティング・システムが稼働するシステムの暗号化サービスの概要を示します。

暗号化

暗号化は、情報の秘匿や認証を行うことを目的とする、データの操作プロセスの研究および実装です。

IBM i 暗号化サービスは、 データのプライバシーの保護、データ保全性の維持、通信相手の認証、および否認防止 (相手がメッセージを送信したことを否定する場合) などに役立ちます。

暗号アルゴリズム

暗号アルゴリズム は、 データを保護するためにデータの変換時に使用される数学的方法です。

暗号アルゴリズム
暗号アルゴリズムは、理解可能な情報 (非暗号化テキスト) を理解不能な データ断片 (暗号文) に変換し、その理解不能なデータを変換して、理解可能な情報に 戻すことができます。
暗号アルゴリズムには、以下の 2 つのタイプがあります。
  • 対称

    対称または秘密 鍵アルゴリズムでは、 通信の当事者間で共用の秘密鍵を使用します。 暗号化および暗号化解除の両方に、 同じ鍵を使用します。Advanced Encryption Standard (AES) は、対称鍵アルゴリズムの例です。

    対称鍵アルゴリズムには、以下の 2 つのタイプがあります。
    • ブロック暗号

      ブロック暗号 では、 暗号アルゴリズムが固定サイズのデータ・ブロックに対して作用します。 例えば、ブロック・サイズが 8 の場合は、8 バイトの非暗号化テキストが 一度に暗号化されます。 通常、暗号化/暗号化解除操作を行うユーザー・インターフェースでは、 低レベル暗号化機能を繰り返し呼び出すことによって、ブロック・サイズよりも 長いデータを取り扱います。

    • ストリーム暗号

      ストリーム暗号 は ブロック単位で作用するのではなく、一度に 1 ビット (または 1 バイト) のデータを変換します。 基本的に、ストリーム暗号は提供された鍵を基にして鍵ストリームを生成します。 生成された鍵ストリームは、非暗号化テキストのデータで排他的論理和演算されます。

  • 非対称

    非対称 または公開鍵 アルゴリズム (PKA) では、鍵のペアが使用されます。一方の鍵である秘密鍵は秘密にされ、 誰とも共用されません。もう一方の鍵である公開鍵は秘密ではなく、他人と共用できます。 これらの鍵のどちらか一方でデータが暗号化されると、 そのデータはもう一方の鍵でしか暗号を解除して復元することができません。この 2 つの鍵は数学的に関連していますが、 秘密鍵を公開鍵から派生させることは事実上不可能です。 公開鍵アルゴリズムの例としては、RSA アルゴリズムがあります。

    公開鍵アルゴリズムは、対称鍵アルゴリズムよりも処理に時間がかかります。 通常、アプリケーションでは、公開鍵アルゴリズムを使用して対称鍵の (鍵の配布のための) 暗号化、 および (ディジタル・シグニチャー生成における) ハッシュの暗号化を行います。

鍵と暗号アルゴリズムが一緒になってデータを変換します。 サポートされるすべてのアルゴリズムがパブリック・ドメインにあります。 したがって、鍵はデータへのアクセスを制御します。 データを保護するには、鍵を保護する必要があります。

一方向ハッシュ・アルゴリズム
暗号ハッシュ・アルゴリズムは、可変長の入力ストリングから固定長の 出力ストリング (ダイジェストという) を生成します。 実際に、ハッシュ関数には以下のような優れた点があります。
  • 衝突防止: データの一部が変更されると、別のハッシュが生成されます。
  • 一方向: この関数は不可逆なものです。 つまり、あるダイジェストを生成した元のデータを明らかにすることはできません。
鍵配布アルゴリズム
暗号化されたデータを別の場所で暗号化解除する必要がある場合は、 安全な方法で鍵を配布することは困難なことがあります。鍵の配布方法は多数あります。 一部の方法では、暗号アルゴリズムを採用します。
  • RSA: 対称鍵を暗号化してから、配布する場合は、RSA 公開鍵を使用します。 対称鍵を暗号化解除するには、対応する秘密鍵を使用します。
  • Diffie-Hellman: 通信相手は D-H パラメーターを 生成して、交換してから、PKA 鍵ペアの生成に使用します。公開鍵が交換されると、各当事者は対称鍵を独自に計算することができます。
乱数生成アルゴリズム
多くのセキュリティー関連関数は乱数の生成に依存します。 乱数の生成は、暗号化サービスを使用する IBM i 内、 または CCA を使用する暗号化コプロセッサー上の両方で実行されます。両方とも、FIPS によって 承認された疑似乱数発生ルーチン (PRNG) を使用します。

暗号化コプロセッサーでは、電子ノイズ源が、ランダムなビット値アキュムレーターへの 予測不能な入力を提供します。ハードウェア出力は定期的に、FIPS 140-1 によって 承認された疑似乱数発生ルーチンにシードを与えます。

IBM i 疑似乱数発生ルーチンは、IBM i LIC (ライセンス内部コード) にあります。これは、「FIPS 186-2, Digital Signature Standard (DSS)」の 『Appendix 3』の PRNG アルゴリズムを使用します。

暗号強度の高い疑似乱数が得られるかどうかは、シードの質に依存します。 FIPS 186-1 アルゴリズムでは、システム・シード・ダイジェストからシードが与えられます。 システムは、システム情報から収集したデータを使用するか、 利用できる場合には、暗号化コプロセッサーの乱数発生ルーチンを使用して、自動的にシードを生成します。 システムの生成したシードがまったく予測不能なものであるということはありません。 暗号化コプロセッサーを利用できない場合には、システム・シード・ダイジェストに 独自のランダム・シードを (Add Seed for Pseudorandom Number Generator API を 使用して) 追加しなければなりません。 この作業は、LIC (Licensed Internal Code) をインストール後、可能な限りすみやかに実行する必要があります。

暗号操作

さまざまな暗号操作 で 1 つ以上のアルゴリズム が使用されます。 目的に応じて、暗号操作とアルゴリズム (複数可) を選択してください。 例えば、データ保全性を維持するためには、 MAC (メッセージ確認コード) 操作と AES アルゴリズムを使用します。

システムには、暗号化操作をサポートする API セットがいくつか用意されています。 詳しくは、このトピックの末尾にある『システム暗号化の概要』を参照してください。

データのプライバシー

データのプライバシー (機密性) 保護を目的とした暗号操作により、 無許可ユーザーはメッセージを読み取ることができなくなります。 データのプライバシー保護には以下の操作が含まれます。

暗号化および暗号化解除
暗号化操作は、暗号アルゴリズムと鍵を使用して、プレーン・テキスト・データを暗号文に変換します。 プレーン・テキスト・データを復元するには、暗号化解除操作で同じアルゴリズムと鍵を使用しなければなりません。
暗号化および暗号化解除は、オペレーティング・システムの任意のレベルで実行できます。 次の 3 つのレベルがあります。
フィールド・レベルの暗号化
ユーザー・アプリケーションは、フィールド・レベルの暗号化を使用して、明示的に暗号サービスを要求します。鍵の生成、 選択、配布、および暗号化するデータは、ユーザー・アプリケーションによって完全に制御されます。
セッション・レベルの暗号化
システムは、セッション層での暗号化を使用して、アプリケーションに代わって暗号サービスを要求します。アプリケーションが、暗号化が行われていることを認識している場合も、していない場合もあります。
リンク・レベルの暗号化
リンク・レベルの暗号化は、プロトコル・スタックの最下層で実行されますが、 通常、リンク・レベルの暗号化のための専用のハードウェアで実行されます。
暗号化コプロセッサーは、フィールド・レベルの暗号化と Secure Sockets Layer (SSL) セッション確立の暗号化の両方に使用できます。VPN は、IBM i でサポートされますが、コプロセッサーを使用しません。さらに、SNA セッション・レベルの暗号化もサポートされません。
変換
変換操作は、ある鍵を使用して暗号化されたデータを暗号化解除し、 それを別の鍵を使用して暗号化します。 これは、アプリケーション・プログラム内のプレーン・テキスト・データの露出を避けるために、 1 ステップで実行されます。

データの保全性、認証性、否認防止

データを暗号化するということは、 データを操作 (例えば、反復、削除、さらには変更など) できないということではありません。 データを信頼するためには、データが許可された送信元から送られていて、かつ変更されていないことを知る必要があります。 こうした目的のために、別の暗号操作が必要になります。

ハッシュ (メッセージ要約)
ハッシュ操作は、認証に有用です。 例えば、あるダイジェストのコピーを保持しておき、後日新しく生成されたダイジェストと比較することができます。 それらのダイジェストが同一のものであれば、データは変更されていません。
MAC (メッセージ確認コード)
MAC 操作は、秘密鍵と暗号アルゴリズムを使用して値 (MAC) を生成する操作です。 後でこの値を使用することによって、データが変更されていないことを確認することができます。 通常、MAC は送信メッセージの最後に追加されます。 メッセージの受信側は、送信側と同じ MAC 鍵、およびアルゴリズムを使用して MAC を複製します。 受信側の MAC がメッセージと共に送信された MAC と一致すれば、そのデータは変更されていません。

MAC 操作はメッセージの認証には役立ちますが、送信データがプレーン・テキストのままであるため、 無許可の読み取り防止にはなりません。 データのプライバシーと保全性の両方を保つには、MAC 操作を実行した後に、メッセージ全体を暗号化する必要があります。

HMAC (Hash MAC)
HMAC 操作は、暗号ハッシュ関数と共用秘密鍵を使用して認証値を生成する操作です。 使用方法は MAC と同じです。
署名/検証
署名操作は、ディジタル署名と呼ばれる認証値を生成する操作です。 署名操作は以下のように実行されます。
  1. 署名対象のデータがハッシュされ、ダイジェストが生成される。
  2. PKA アルゴリズムと秘密鍵を使用してダイジェストが暗号化され、署名が生成される。
検証操作は以下のように実行されます。
  1. 送信側の PKA 公開鍵を使用して署名が暗号化解除され、ダイジェスト 1 が生成される。
  2. 署名されたデータがハッシュされ、ダイジェスト 2 が生成される。
  3. 2 つのダイジェストが同一であれば、署名の有効性が証明される。
送信側のみが秘密鍵を所有するため、 理論的には、この操作で送信側も検証されることになります。 しかし、公開鍵が実際に送信側のものであるということを、 どのようにすれば受信側で検証できるのかという問題があります。 この問題を解決するために、証明書が使用されます。

鍵および乱数の生成

多くのセキュリティー関連関数は乱数の生成を実行します。 例えばパスワード・ソルトの生成や、初期設定ベクトルの生成などです。 暗号鍵素材の生成も重要な乱数の使用法の一つです。 鍵の生成は、すべてのコンピューター・セキュリティー機能の中でも最も重要なものであると言われています。 乱数の暗号強度が低いと、関数がアタックにさらされることになります。

会計関連の PIN

また、個人識別番号 (PIN) の生成と処理も、暗号操作であると見なされます。

PIN は、 組織によって個人に割り当てられた固有の番号です。PIN は通常、 金融機関によって顧客に割り当てられます。PIN はキーパッドで入力され、 身元を証明するために他の顧客関連データと比較されます。

PIN を 生成するために、顧客の検証データが PIN 鍵によって暗号化されます。 特定の形式にするなどの他の処理も PIN で行われます。

鍵管理

鍵管理とは、暗号鍵を安全に処理および保管することです。 鍵管理には、鍵のストレージと検索、鍵の暗号化と変換、および鍵の配布が含まれます。

鍵ストレージ

システムの鍵ストレージには、以下のものがあります。

  • 暗号化サービス鍵ストア

    鍵を暗号化コプロセッサーに保管することもできます。

  • デジタル証明書マネージャーの証明書ストア
  • CCA 鍵ストア (暗号化コプロセッサーで使用)
  • JCE 鍵ストア

鍵の暗号化および変換

保護されたシステム環境の外に鍵を送信したり、保管する場合は、事前に鍵を暗号化する必要があります。 さらに、システム内では可能なかぎり暗号化形式で鍵を処理し、機密漏れのリスクを軽減する必要があります。 暗号化鍵の管理は、通常、階層型の鍵システムを介して実行されます。
  • 最上部にマスター・キーがあります。マスター鍵は唯一のクリアな鍵値であり、セキュアな方法で保管する必要があります。
  • その他の鍵を暗号化するには、鍵暗号鍵 (KEK) を使用します。通常、KEK は保管された鍵や、別のシステムに送信される鍵を暗号化する場合に使用します。 KEK は通常、マスター鍵を使用して暗号化されます。
  • データ鍵は、ユーザー・データに直接使用される鍵です (暗号化や MAC など)。 データ鍵は KEK またはマスター鍵を使用して暗号化できます。
鍵のさまざまな使用法に合わせて、さまざまな形式の鍵が必要になります。 例えば、通常、他の送信元から受信した鍵は、内部形式に変換されます。 同様に、システムから送信する鍵は、送信する前に標準外部形式に変換されます。 鍵の形式には、ASN.1 BER エンコード形式など標準的なものや、 暗号化コプロセッサーなど暗号サービス・プロバイダーに固有のものがあります。

鍵配布

通常、データ暗号化は対称鍵アルゴリズムを使用して実行されます。 対称鍵は、上記で説明した非対称鍵アルゴリズムを使用して配布されます。 鍵は、エクスポート操作を使用して送信できるようになります。 鍵は、インポート操作を使用してシステムに受信されます。

システム暗号化の概要

暗号サービス・プロバイダー
暗号サービス・プロバイダー (CSP) は、一連の暗号化操作をインプリメントするソフトウェアまたはハードウェアです。 複数の CSP がサポートされています。
  • 4765 暗号化コプロセッサー
  • 4764 暗号化コプロセッサー (出荷されていませんが、 引き続きサポートされます)
  • IBM i LIC
  • Java™ Cryptography Extension
暗号化 API セット
ユーザー・アプリケーションは SSL、VPN、IPSec、LDAP などの IBM i 機能を使用して、 間接的に暗号化サービスを利用できます。 また、次の API を介して暗号化サービスに直接アクセスすることもできます。
  • CCA

    Common Cryptographic Architecture (CCA) API セットは、 暗号化コプロセッサーで暗号操作を実行するために用意されています。

  • IBM i 暗号化サービス

    IBM i 暗号化サービス API セットは、ライセンス内部コード内で暗号化操作を実行するために用意されています。

  • Java 暗号化

    Java Cryptography Extension (JCE) は、Java Software Development Kit の標準拡張機能です。

  • ネットワーク認証サービス

    GSS (Generic Security Services)、Java GSS、および Kerberos API は、認証およびセキュリティー・サービスを提供するネットワーク認証サービスの一部です。 これらのサービスには、セッション・レベルの暗号化機能が含まれています。

  • IBM i SSL および JSSE

    IBM i SSL および JSSE は Secure Sockets Layer プロトコルをサポートします。API はセッション・レベルの暗号化機能を提供します。

  • SQL

    データベース内の情報にアクセスしたり、変更するには、構造化照会言語を使用します。 SQL はデータベース・フィールドの暗号化/暗号化解除をサポートします。

次の表に、各ユーザー・インターフェースで使用される CSP を示します。
表 1. 各ユーザー・インターフェースで使用される CSP
CSP API IBM i LIC JCE 4765、4764
CCA     X
IBM i 暗号化サービス X    
Java 暗号化   X X
ネットワーク認証サービス X X  
IBM i SSL および JSSE X X X
SQL X