Oracle Solaris セキュリティーサービス開発ガイド

付録 F 暗号化プロバイダのパッケージ化と署名

この付録では、Solaris 暗号化プロバイダアプリケーション/モジュールをパッケージ化する方法について説明します。次の項目について説明します。

暗号化プロバイダアプリケーションおよびモジュールのパッケージ化

Solaris オペレーティングシステムでは、アプリケーションソフトウェアは「パッケージ」と呼ばれる単位で配布されます。パッケージとは、ソフトウェア製品の配布とインストールに必要なファイルの集まりです。通常、パッケージは、アプリケーションコードの開発が完了したあとでアプリケーション開発者が設計して作成します。ソフトウェアアプリケーションのパッケージ化の概要については、『アプリケーションパッケージ開発者ガイド』を参照してください。

暗号化プロバイダのパッケージ化には、次の 2 つの要件があります。

米国政府の輸出法への準拠

米国政府は、公開された暗号化インタフェース (「crypto-with-a-hole」とも呼ばれる) の輸出を制限しています。この制限のために、プロバイダのすべてのベンダーは米国政府から輸出の承認を得る必要があります。ベンダーは、輸出法に準拠していることを示すために、Sun Microsystems, Inc. が発行する証明書を要求する必要があります。そして、ベンダーは、プロバイダの電子署名を行い、証明書を添付してソフトウェアを出荷します。

輸出承認プロセスでは、暗号化の強度によってソフトウェアを使用できる国が決まります。米国政府では、アメリカ合衆国で製造される暗号化製品に対して 2 つの輸出カテゴリを定義しています。

プロバイダが非リテール承認を得ている場合は、リテール承認を受けられるようにすることができます。リテール承認を得るには、IPsec などの特定の呼び出し側によるプロバイダの使用を禁止します。Sun では、この場合、制限付きと制限なしの 2 つの証明書を用意します。どちらの証明書を使用するかは、証明書要求プロセス (「プロバイダに署名するための証明書を要求するには」) で指定します。また、特別な起動ファイルを作成および署名し、プロバイダとともに出荷する必要があります。「リテール版の輸出用の起動ファイルを作成するには」を参照してください。

ユーザーレベルのプロバイダアプリケーションのパッケージ化

Sun 以外で、ユーザーレベルの暗号化プロバイダアプリケーションの開発者は、次の処理を実行します。

  1. Sun Microsystems, Inc から証明書を取得します。次に、ライブラリに署名します。「プロバイダへの署名の追加」を参照してください。

  2. 証明書を添付してパッケージを出荷します。証明書は、/etc/crypto/certs ディレクトリに格納する必要があります。

  3. pkcs11conf クラスを pkginfo ファイルの CLASSES 文字列内に追加します。次の行を追加してください。

    CLASS=none pkcs11conf
  4. 入力ファイル pkcs11.conf/etc/crypto ディレクトリに作成します。

    ユーザーレベルのプロバイダの入力ファイル名は、pkcs11.conf です。このファイルは、プロバイダへのパスを示します。pkcs11.conf では、エントリに次の構文を使用します。

    filename
    

    このエントリは、ファイルへの絶対パス (/opt/lib/$ISA/myProviderApp.so など) です。pkgadd を実行すると、このファイルが構成ファイルに追加されます。パス名の $ISA 表現を書き留めておいてください。$ISA は、必要に応じて、32 ビット版または 64 ビット版のアプリケーションを指します。

  5. 次の行をパッケージのプロトタイプファイルに追加します。

    e pkcs11conf etc/crypto/pkcs11conf 0644 root sys

カーネルレベルのプロバイダモジュールのパッケージ化

Sun 以外で、カーネルレベルの暗号化プロバイダモジュールの開発者は、次の処理を実行します。

  1. Sun Microsystems, Inc から証明書を取得します。次に、カーネルソフトウェアモジュールまたはデバイスドライバに署名します。「プロバイダへの署名の追加」を参照してください。

  2. 証明書を添付してパッケージを出荷します。証明書は、/etc/crypto/certs ディレクトリに格納する必要があります。

  3. kcfconf クラスを pkginfo ファイルの CLASSES 文字列内に追加します。次の行を追加してください。

    CLASS=none kcfconf
  4. 入力ファイル kcf.conf/etc/crypto ディレクトリに作成します。このファイルは、ソフトウェアとハードウェアのプラグインをカーネル構成ファイルに追加します。

    • プロバイダが暗号化機構を備えたカーネルソフトウェアモジュールである場合は、エントリに次の構文を使用します。

      provider-name:supportedlist=mech1,mech2,...
      provider-name

      カーネルソフトウェアモジュールのベース名

      mech*

      リスト内の暗号化機構の名前

      次のエントリは、カーネルソフトウェアモジュールの例です。

      des:supportedlist=CKM_DES_CBC,CKM_DES_ECB,CKM_DES_CFB
    • プロバイダが暗号化機構用のデバイスドライバ (アクセラレータカードなど) である場合は、エントリに次の構文を使用します。

      driver_names=devicedriver1,devicedriver2,...
      devicedriver*

      暗号化デバイス用のデバイスドライバの名前

      次のエントリは、デバイスドライバの例です。

      driver_names=dca

プロバイダへの署名の追加

この節では、プロバイダに電子署名を追加して、プロバイダが暗号化フレームワーク内で動作できるようにする方法について説明します。また、プロバイダが正しく署名されたかどうかを確認する方法についても説明します。プロバイダは、 PKCS #11 ライブラリ、アルゴリズムを実装するロード可能なカーネルモジュール、またはハードウェアアクセラレータ用のデバイスドライバのいずれのオブジェクトでもかまいません。

Procedureプロバイダに署名するための証明書を要求するには

一般に、証明書の要求はプロバイダの開発者が行います。しかし、システム管理者がサイトのセキュリティーポリシーの一環として、この要求を処理するように依頼されることもあります。

  1. elfsign request コマンドを使用して、Sun の証明書を要求します。

    このコマンドは、証明書の要求に加えて非公開鍵の生成も行います。


    % elfsign request -k private-keyfile -r certificate-request
    
    private-keyfile

    非公開鍵の場所へのパス。この鍵は、あとでシステム管理者が Solaris 暗号化フレームワーク用にプロバイダに署名するときに必要となります。このディレクトリはセキュリティー保護しておく必要があります。Sun の証明書が保管されているディレクトリとは別のディレクトリを使用してください。

    certificate-request

    証明書要求へのパス

    次の例は、一般的な要求が Sun にどのように送付されるかを示しています。


    % elfsign request \
    -k /securecrypt/private/MyCompany.private.key \
    -r /reqcrypt/MyCompany.certrequest
    
    Enter Company Name / Stock Symbol or some other globally unique identifier.
    This will be the prefix of the Certificate DN:MYCORP
    
    The government of the United States of America restricts the export of 
    "open cryptographic interfaces", also known as "crypto-with-a-hole".
    Due to this restriction, all providers for the Solaris cryptographic
    framework must be signed, regardless of the country of origin.
    
    The terms "retail" and "non-retail" refer to export classifications 
    for products manufactured in the USA.  These terms define the portion of the
    world where the product may be shipped.  Roughly speaking, "retail" is 
    worldwide (minus certain excluded nations) and "non-retail" is domestic 
    only (plus some highly favored nations).  If your provider is subject to
    USA export control, then you must obtain an export approval (classification)
    from the government of the USA before exporting your provider.  It is
    critical that you specify the obtained (or expected, when used during 
    development) classification to the following questions so that your provider
    will be appropriately signed.
    
    Do you have retail export approval for use without restrictions based
    on the caller (for example, IPsec)? [Yes/No] N
    
    If you have non-retail export approval for unrestricted use of your
    provider by callers, are you also planning to receive retail approval
    restricting which export sensitive callers (for example, IPsec) may
    use your provider? [Y/N] Y
    

    非公開鍵は、指定したファイル名 (/etc/crypto/private/MyCompany.private.key ファイルなど) に格納されます。証明書要求も指定したファイル名 (/reqcrypt/MyCompany.certrequest ファイルなど) に格納されます。

  2. 証明書要求を Sun に送付します。

    証明書要求を次の電子メールアドレスに送信します。 solaris-crypto-req@sun.com

    Sun では、証明書要求ファイルから証明書を作成します。作成された証明書のコピーが返送されます。

  3. Sun から受け取った証明書を /etc/crypto/certs ディレクトリに格納します。

    安全のため、非公開鍵と証明書要求は別のディレクトリに格納するようにしてください。

Procedureプロバイダに署名するには

一般に、プロバイダへの署名はプロバイダの開発者が行います。しかし、システム管理者がサイトのセキュリティーポリシーの一環として、開発者のバイナリに署名するように依頼されることもあります。

  1. プロバイダに署名します。elfsign sign コマンド、Sun から受け取った証明書、および Sun の証明書を要求するための非公開鍵を使用します。


    % elfsign sign -k private-keyfile -c Sun-certificate -e provider-object
    
    -k

    Sun に送信された証明書要求の作成に使用された非公開鍵が含まれているファイル。

    -c

    証明書要求によって Sun から発行された証明書へのパス。

    -e

    Solaris 暗号化フレームワーク内で使用するために署名されるプロバイダ (バイナリ) へのパス。

    次の例は、プロバイダに署名する方法を示しています。


    % elfsign sign \
    -k /securecrypt/private/MyCompany.private.key \
    -c /etc/crypto/certs/MyCompany
    -e /path/to/provider.object
    

    elfsign sign を使用すると、指定された場所にあるオブジェクトが変更されるので注意してください。オブジェクトの未署名版が必要な場合は、elfsign sign を適用する前に、オブジェクトを別の場所にコピーする必要があります。

Procedureプロバイダが署名されているかどうかを確認するには

  1. Sun が発行した証明書と署名付きプロバイダへのパスを収集します。

  2. elfsign verify コマンドを使用して、プロバイダが正しく署名されているかどうかを確認します。

    次の例は、証明書がデフォルトディレクトリ /etc/crypto/certs/MyCompany に格納されていると想定した場合の検証を示しています。


    % elfsign verify \
    -e /path/to/MyProvider.so.1
    elfsign: verification of /path/to/MyProvider.so.1 passed

    次の例は、証明書がデフォルト以外のディレクトリに格納されている場合を示しています。


    % elfsign verify \
    -c /path/to/MyCerts  \
    -e /path/to/MyProvider.so.1
    elfsign: verification of /path/to/MyProvider.so.1 passed

    次の例は、制限付きの証明書で署名されたプロバイダの検証を示しています。


    % elfsign verify \
    -e /path/to/MyRestrictedProvider.so.1
    elfsign: verification of /path/to/MyRestrictedProvider.so.1 passed, \
    but restricted.

Procedureリテール版の輸出用の起動ファイルを作成するには

この手順は、国内での使用と制限された国外での使用のために同じプロバイダが出荷される場合に役に立ちます。すべての顧客に対して使用制限付き証明書の鍵を使ってプロバイダに署名します。呼び出し側に基づいた制限のないプロバイダを使用する顧客に対しては、IPsec での使用を許可する特別な起動ファイルを作成して組み込みます。起動ファイルは、プロバイダと同じディレクトリに存在させる必要があります。起動ファイルの命名規則では、ドライバの名前に拡張子 .esa を追加します (例: /kernel/drv/vca.esa)。

  1. プロバイダに署名します。elfsign sign コマンド、Sun から受け取った証明書、および Sun の証明書を要求するための非公開鍵を使用します。


    % elfsign sign -a -k private-keyfile -c Sun-certificate -e provider-object
    
    -a

    署名付きの ELF 署名用起動 (.esa) ファイルを作成します。このオプションは、暗号化プロバイダが非リテール版の輸出の承認とリテール版の輸出の承認の両方を必要とする場合に使用します。リテール版の承認を行うには、IPsec などの輸出の影響を受けやすい呼び出し側を制限します。このオプションは、プロバイダのバイナリが制限付きの証明書であらかじめ署名されているものとします。

    -k

    Sun Microsystems, Inc. に送信された証明書要求の作成に使用された非公開鍵が含まれているファイル。

    -c

    証明書要求によって Sun から発行された証明書へのパス。

    -e

    Solaris 暗号化フレームワーク内で使用するために署名されるプロバイダ (バイナリ) へのパス。

    次の例は、プロバイダに署名する方法を示しています。


    % elfsign sign \
    -a \
    -k /securecrypt/private/MyCompany.private.key \
    -c /etc/crypto/certs/MyCompany
    -e /path/to/provider.object