目次


PKCS #11に準拠したLinux版 openCryptoki

暗号ハードウェアとユーザー・アプリケーションの連係を可能にするAPI

Comments

openCryptokiとは何か ?

openCryptokiとは、PKCS #11のAPI仕様を実装した製品であって、暗号情報を保管してさまざまな暗号機能を実行する各種装置 (スマート・カード、スマート・ディスク、PCMCIAカードなど) との連係を可能にしています。openCryptokiを使えば、暗号装置のこまごまとした処理からアプリケーションを切り離せるので、アプリケーションの移植性が高まります。さらに、アプリケーションを切り離せるということは、すべての暗号情報を暗号装置の中に限定できるという意味であり、したがってセキュリティーがいっそう強固になります。openCryptoki APIには、各種アプリケーションとあらゆる種類の携帯用暗号装置との間の連係を可能にする標準的なプログラミング・インターフェースが用意されています。

おおまかな構造

openCryptokiは、スロット・マネージャーと、スロット・トークン・ダイナミック・リンク・ライブラリー (STDLL) 対応のAPIとで構成されています。まず、スロット・マネージャーは、デーモンとして実行されるものであり、アプリケーション用に提供するトークン・スロットの数を管理するという機能を持っています。さらに、共有メモリー域を使って、各種アプリケーションとも連係します。トークンを持っている各装置は、それぞれの関連トークンをスロット・マネージャー・データベース内の各スロットに入れます。そのような連係の舞台になるのは共有メモリー域なので、現在の状態に関する情報をアプリケーション間で正しく共有できるようになり、PKCS #11仕様に準拠した運用が確保されるというわけです。

スロット・マネージャー

スロット・マネージャー・デーモン (pkcsslotd) は、システム内のスロットを管理します (スロットを管理するということは、当然トークンを管理するということでもあります)。pkcsslotd に接続できるプロセスの数は決まっているので、共有メモリー内の静的テーブルが使用されます。現在、このテーブルについては、openCryptokiサブシステムを使用するプロセスを1000以下にするという限界値が設定されています。このデーモンは初期化の時点で共有メモリーをセットアップし、その後はガーベッジ・コレクターとして機能します。つまり、アクティブなプロセスだけが登録されているという状態を維持していくわけです。1つのプロセスがスロットに接続してセッションを開始すると、pkcsslotd は、その後に続くプロセスに対して、先ほどのプロセスにオープン中のセッションがあることを通知し、たとえ後続プロセスがそのトークンに対する排他的アクセスを必要とする場合であっても、一部の関数呼び出しを締め出してしまいます。それと同時に、専用の共有メモリー域を常に監視し、トークンに接続しているプロセスが実際に稼働しているかどうかを確認します。接続しているプロセスが異常終了した場合は、pkcsslotd がそのプロセスの "後始末" をして、他のプロセスから使用できるようにスロットを解放します。

メインAPI

STDLLに対応したメインAPIは、/usr/lib/pkcs11/PKCS11_API.so に入っています。このAPIには、PKCS #11のAPI仕様で記述されている機能がすべて組み込まれています。各アプリケーションにスロット管理機能を提供することもできれば、トークン固有のモジュール (STDLL) を読み込むこともできます。このSTDLLは、トークン固有の処理 (暗号処理、セッション管理、オブジェクト管理) を実行するものであり、トークンのタイプに合わせてカスタマイズすることも可能です。さらに、トークンとスロット・マネージャーとの連係を可能にする機能 (初期化ルーチンなど) を持っているので、何らかのアプリケーションがC_Initialize の呼び出しでopenCryptokiサブシステムを初期化すると、このAPIが、システム内の共有メモリーにある構成に存在する各トークンに対応したSTDLL共有オブジェクトを読み込んで、トークン固有の初期化ルーチンを起動することになります。

スロット・トークン・ダイナミック・リンク・ライブラリー (STDLL)

STDLLはメインAPIに対するプラグイン・モジュールであり、メインAPIの機能を補うトークン固有の機能を備えています。何らかの装置をサポートするには、その装置に対応したSTDLLを作成します。各STDLLは、少なくとも1つのトークン固有の初期化機能を提供するものでなければなりません。多数のメカニズムをサポートしたハードウェア・アダプターなど、高性能な装置が対象になる場合は、セッション情報のかなりの部分をその装置に格納できるため、STDLLを大げさなものにする必要はありません。その逆に、シンプルな暗号機能だけを実行する装置の場合は、すべてのオブジェクトをソフトウェアで管理する必要があります。STDLLにはこのいずれにも対応できる柔軟性があるため、あらゆる暗号装置をサポートできるようになっているわけです。

共有メモリー

スロット・マネージャーは、共有メモリー域にスロット・マネージャー・データベースをセットアップします。pkcsslotd に接続できるプロセスの最大数は決まっているので、トークン管理のために用意しなければならなメモリーの量もおのずと決まってきます。このようにトークン管理用のメモリーの割り振りが固定されているということは、アプリケーションの観点からすれば、トークンの現在の状態を示す情報にアクセスしやすいということであり、PKCS #11の仕様に準拠した運用が確保されるということでもあります。

openCryptokiのコンポーネント

ここでは、openCryptokiサブシステムの各種コンポーネントについて説明します。

スロット・マネージャー・デーモン

スロット・マネージャー・デーモンの実行ファイル (/usr/sbin/pkcsslotd) は、/etc/pkcs11/pk_config_data を読み込み、システム内でどんな装置が検出されたかに応じて共有メモリーをセットアップします。このpkcsslotd はその後もデーモンとして稼働を続け、openCryptokiサブシステムを使おうとするすべてのアプリケーションを監視します。そのようなアプリケーションは、まず共有メモリー域に接続して、このAPIの初期化プロセスの一部として登録を行う必要があるため、どうしてもこのデーモンの監視を受けるわけです。/etc/pkcs11/pk_config_data に変更があった場合は、新しい設定ファイルを読み込むために、pkcsslotd をいったん停止してから再開する必要があります。このデーモンを停止するには、kill <pkcsslotd config> コマンドを実行します。ただし、openCryptokiサブシステムを使用しているアプリケーションが存在する場合は、このデーモンを停止することはできません。

PKCS11_API.so

このライブラリーには、メインAPI (/usr/lib/pkcs11/PKCS11_API.so) が入っています。openCryptokiサブシステムによって管理されているPKCS #11準拠のトークンを使用するアプリケーションは、このメインAPIを読み込まなければなりません。というのは、アプリケーションがトークンを使用するには、まずこのAPIを読み込んでから、C_Initialize を呼び出す必要があるからです。これは、PKCS #11の仕様で規定されているとおりです。アプリケーションが読み込み処理を実行するときには、dlopen 機能が使われます。

スロット・トークンDLL (STDLL)

最初の段階では、3つのSTDLLが組み込まれています。この3つのSTDLLは、IBM 4758 PCI Cryptographic Coprocessorの2種類の読み込みファームウェアと、IBM Cryptographic Accelerator (ICA) モデル2058 (またはLeeds Liteカード) をサポートしています。

注: コンパイル・プロセスは、ターゲット・プラットフォームでサポートされているトークンと、必要なサポート・プログラムをすべて作成しようとしますが、一部のヘッダーやライブラリーが欠けている場合は、該当するコンポーネントが作成されなくなります。

IBM 4758 PCI Cryptographic Coprocessorのサポート
IBM 4758 PCI Cryptographic Coprocessor (4758 Coprocessor) は、Federal Information Processing Standards 4 (FIPS4) の改ざん対応パッケージにも含まれているプログラミング可能な暗号コプロセッサーであり、プログラミングが可能な装置として、多種多様な "個性" を持たせることができます。openCryptokiには、2種類の読み込みファームウェア (完全版と簡易版) に対応したSTDLLが用意されています。

完全版の読み込みファームウェアでは、このカードで実行できるPKCS #11の仕様が完全に実装されています。この場合のSTDLLは、PKCS #11に準拠したホスト処理をコマンド・ブロックに変換してからカードに渡します。このケースでは、4758 Coprocessorのセキュリティー機能が完全に装備されることになります。このAPIモジュールから読み込まれる共有オブジェクトは/usr/lib/pkcs11/stdll/PKCS11_4758.so ですが、アプリケーションの観点からすると、その名前を知っておく必要はありません。該当するトークンが設定プロセスで検出され、それに応じてopenCryptokiサブシステムが設定されるからです。この読み込みファームウェアは、4758 CoprocessorのWebサイトから入手できます (参考文献を参照)。

簡易版の読み込みファームウェアは、このカードのセキュリティー機能を一切利用しません。このケースでは、STDLLがかなり複雑なものになり、PKCS #11に準拠したオブジェクト / セッション管理の機能を実現したり、PKCS #11で規定されている複数プロセス / スレッド間の相互運用に対応したりすることが必要です。この場合、APIに読み込まれるファームウェアは/usr/lib/pkcs11/stdll/PKCS11_LW.so ですが、IBMでは限定的にしか提供していません。基本的には、4758 Coprocessorを暗号プロセッサーにするというだけのことです。

IBM Cryptographic Acceleratorモデル2058のサポート
このICA装置は、4758 Coprocessorの簡易版ファームウェア・モードを踏襲してはいますが、オブジェクト / セッション管理の機能がすべて組み込まれており、さまざなまアプリケーションからPKCS #11に準拠した各種メカニズムを利用できるようになっています。そのようなアプリケーションに代わって、APIが/usr/lib/pkcs11/stdll/PKCS11_ICA.so モジュールを読み込みますが、そのモジュールのユニークな特色の1つは、ICAの装置ドライバーが提供する透過的なロード・バランシング機能を利用するという点にあります。openCryptokiサブシステムが実行するのはICA装置に対する1回のオープン操作だけであり、あとは装置ドライバーが、システム内に存在する複数のICA装置の間で作業負荷を分散させます。このように、システム内に複数のICA装置があれば、ある程度のフォールト・トレランスを確保できます。システム内で1つのICA装置しか作動していなくても、各種アプリケーションは機能を続けることができます。ただし、そのような場合にパフォーマンスが低下するのは当然です。

openCryptokiの作業の開始

ここでは、openCryptokiのシステム要件と入手先、さらにはコンパイルやインストールの方法について説明します。

システム要件

openCryptokiを実行するシステムでは、openCryptokiに用意されているトークンのうち、少なくとも1つをサポートする必要があります (4758 Cryptographic Coprocessor、ICAモデル2058、System/390 Linux暗号ハードウェア・サポートのいずれか)。

openCryptokiを実行するためのシステム要件は、次のとおりです。

ハードウェア要件:

  • x86 PCIバス・システム、または
  • System/390 Linux暗号ハードウェア・サポート

ソフトウェア要件:

  • Linuxオペレーティング・システム (最低でもカーネル2.2.16)
  • インストールするトークン用の装置ドライバーと関連サポート・ライブラリー (場合によっては、それらのディストリビューションに含まれている一部のヘッダー・ファイルも必要)

openCryptokiの入手先

openCryptokiプロジェクトは、 developerWorksのOpen sourceゾーンで運営されています。このサイトでは、バグ修正や機能強化のための更新ファイルも用意されています。

openCryptokiのコンパイルとインストール

必要な装置の装置サポート (それにヘッダー・ファイル) がシステム内に存在するのであれば、最上位ディレクトリーでmake を実行するだけで、openCryptokiをインストールできます。buildターゲットを指定すれば、コードだけがコンパイルされます。installターゲットは、その機能を現在のシステムにインストールしようとします。INSROOT 環境変数によって、別のインストール場所を指定することもできます。cleanターゲットを指定すると、ソース・ツリーから作成されたオブジェクト・ファイルやインストール出力ファイルが削除されます。

1つの装置だけのためにopenCryptokiをインストールする場合は、ソース・ツリーの最上位にあるMakefileを修正します。最上位のMakefileは、それぞれのサブディレクトリーにある各コンポーネント専用のMakefileを検出して、すべてのMakefileを読み込んだ上でインストールを実行していくように設定されているからです。とはいえ、一部のコンポーネントだけをインストールする場合は、最上位のMakefileを使わないという手もあります。いずれかのサブディレクトリーでmake -f コマンドを実行すると、そのサブディレクトリーにあるコンポーネントだけがインストールされます。たとえば、Linuxディレクトリーにあるコンポーネントをそのディレクトリーからインストールする場合は、make -f ../Makefile.linux コマンドを使います。

openCryptokiの設定

ここでは、openCryptokiの設定にかかわる各種のコンポーネントとプロセスについて説明します。

設定用のユーティリティー

openCryptokiキットには、次の3種類の設定用のユーティリティーが用意されています。

  • /usr/lib/pkcs11/methods/pkcs11_startup
    設定情報 (/etc/pkcs11/pkcs11_config_data) をインストールするための実行シェル・スクリプトです。
  • /usr/lib/pkcs11/methods/4758_status
    4758 Coprocessorに対して照会を実行し、このカード用に読み込まれているファームウェアが完全版か簡易版かを判別するためのバイナリー実行ファイルです。
  • /usr/lib/pkcs11/methods/pkcs_slot
    設定ファイルを/etc/pkcs11/config_data として書き込むためのシェル・スクリプトです。

スタートアップ操作を単純化するために、/etc/rc.pkcs11 というシェル・スクリプトを作成することをお勧めします。システム設定の準備の項には、このスクリプトのサンプルがあります。

設定ファイルとデータ格納場所

一部のSTDLLでは、トークン情報、個人識別番号 (PIN)、トークン・オブジェクトなどの永久的なデータをローカル・ディスク・スペースに格納する必要があります。簡易版の4758トークンの場合は/etc/pkcs11/4758shallow、ICA装置の場合は/etc/pkcs11/lite がそれぞれの格納場所になります。これらのディレクトリーの中にはTOK_OBJ というサブディレクトリーがあって、このサブディレクトリーにトークン・オブジェクトが入ります。これに対応する各STDLLについては、公開トークン・オブジェクトと私有トークン・オブジェクトがそれぞれ2048個と限定されていますが、/etc に割り振られているディスク・スペースが小さければ、その数にならないうちに限度に達することになります。設定用のスクリプトを実行すると、必要なディレクトリーが自動的に作成され、各ディレクトリーに必要な許可が割り当てられます。

注:FindObject 機能のパフォーマンスは、システム内に存在するオブジェクトの数によって直接影響を受けます。各種アプリケーションについては、そのような検索機能をむやみに実行しないように設定しておく必要があります。

/etc/pkcs11/pk_config_data ファイルには、システム内に現時点で存在しているトークンの設定情報がすべて格納されていますが、openCryptokiサブシステムの実行中には、専用の共有メモリーに実際に活用できる設定情報が読み込まれます。

システム設定の準備

openCryptokiのトークンに対する不正アクセスを防止するために、openCryptokiサブシステムへのアクセス許可は、rootユーザーと "pkcs11" グループのメンバーであるユーザーだけに与えます。システム設定の準備として、次のことを実行してください。

  1. groupadd pkcs11 コマンドを実行して、"pkcs11" グループを作成します。
    注: Red Hat Linuxシステムでは、groupadd コマンドを使えますが、このコマンドに対応していないシステムの場合は、それぞれのマニュアルなどを参照して、グループを追加するためのコマンドを調べてください。
  2. openCryptokiサブシステムを使うことになるユーザーのIDをpkcs11グループに追加します。そのためには、該当するIDを/etc/group ファイルに書き込むか、それぞれのシステムに用意されている管理用のGUIを使います。こうしておかないと、pkcs11グループが所有しているアプリケーションで、setgid pkcs11されたものも実行できるようになってしまいます。設定の検出用スクリプトを実行して、データの格納場所を作成し、適切な所有関係を割り当てるようにします。
  3. システムのブート時にopenCryptokiサブシステムを開始するためのシェル・スクリプトを作成します。
  4. 次のスクリプトをローカル・システムのスタートアップ・スクリプトに追加します。たとえば、Red Hat Linuxを実行しているシステムであれば、そのスクリプトを/etc/rc.pkcs11 として追加し、そのスクリプトに対する呼び出しを/etc/rc.local の中に含めるようにします。
#!/bin/bash
# Sample /etc/rc.pkcs11
# script for starting pkcs#11 at system IPL.
# This should be added to the end of the rc.local script, or
# whatever local startup script for your distribution applies
# Generate the configuration information
/usr/lib/pkcs11/methods/pkcs11_startup
# start the subsystem
/usr/sbin/pkcsslotd
#end of startup script

openCryptokiサブシステムの設定スクリプトはシステムと連係し、システム内に存在する装置を判別してから、それらの装置をスロット設定の中に自動的に組み入れます。それらの装置がそれぞれの固有の命令に基づいてセットアップされていれば、システムのブート時に必ず検出されることになり、その情報がopenCryptokiサブシステムに反映されますが、pkcs11_startup スクリプトで検出されない装置は、もちろんスロット設定の中にも組み込まれません。装置が検出されない状況があるとすれば、基本的には、/etc/rc.pkcs11 スクリプトが呼び出される時点で、その装置のモジュールがまだ読み込まれていなかったということです。

PKCS #11に準拠した設定管理ツール

openCryptokiには、システム内でサポートされているトークンの設定や管理に使えるコマンド行プログラム (/usr/lib/pkcs11/methods/pkcsconf) が用意されています。このプログラムでは、pkcsconf -? コマンドで表示される処理を実行できます。具体的には、トークンの初期化、セキュリティー担当者のPINの初期化と変更、ユーザーのPINの初期化と変更などの処理があります。トークンを指定する必要のある処理の場合は、-c フラグを使ってスロットを指定します。システム内に存在するトークンの一覧を表示するには、-s オプションだけを付けて、具体的なスロット番号は指定しません。たとえば、リスト2 は、pkcsconf コマンドの各オプションを表示してから、システムのスロット情報を表示し、最後にシステムの情報を表示するという一連の作業を示しています。

[root@draeger /root]# /usr/lib/pkcs11/methods/pkcsconf -?
          /usr/lib/pkcs11/methods/pkcsconf: invalid option -- ?
          usage:  /usr/lib/pkcs11/methods/pkcsconf [-itsmMIupP]
		 [-c slotnumber -U userPIN -S SOPin -n newpin]
                  -i display PKCS11 info
                  -t display token info
                  -s display slot info
                  -m display mechanism list
                  -M display shared memory
                  -I initialize token 
                  -u initialize user PIN
                  -p set the user PIN
                  -P set the SO PIN
          Output of the GetSlotInfo call 
          [root@draeger /root]# /usr/lib/pkcs11/methods/pkcsconf -s
          Slot #0 Info
                  Description: Linux 2.4.2 Linux (ICA)
                  Manufacturer: Linux 2.4.2
                  Flags: 0x1
                  Hardware Version: 0.0
                  Firmware Version: 1.1
          An un-initialized ICA token, the information is obtained via the 
		C_GetTokenInfo call
          [root@draeger /root]# /usr/lib/pkcs11/methods/pkcsconf -i
          PKCS#11 Info
                  Version 2.1 
                  Manufacuter: IBM AIX Software PKCS11          
                  Flags: 0x0  
                  Library Description: Meta PKCS11 LIBRARY              
                  Library VersionToken #0 Info:
                  Label: IBM ICA  PKCS #11               
                  Manufacturer: IBM Corp.                   
                  Model: IBM ICA         
                  Serial Number: 123             
                  Flags: 0x45
                  Sessions: -1/-1
                  R/W Sessions: -1/-1
                  PIN Length: 4-8
                  Public Memory: 0xFFFFFFFF/0xFFFFFFFF
                  Private Memory: 0xFFFFFFFF/0xFFFFFFFF
                  Hardware Version: 1.0
                  Firmware Version: 1.0
                  Time: 11:11:17 AM

このプログラムでは、openCryptokiサブシステムの共有メモリー域を表示することもできます。その情報はデバッグのために役立ちます。さらに、トークンに関するシンプルな照会を実行する機能もあるので、トークン情報やメカニズム一覧などを表示できるようにもなっています。

各種アプリケーションからopenCryptokiサブシステムを使用するには、まず次のような初期化ステップを実行しておく必要があります (各ステップ毎にサンプル・コードを載せておきます)。

  1. トークンの初期化: トークンを使用するには、まずトークンを初期化する必要があります。このプロセスで大切なのは、固有のラベルを割り当てるということです。セキュリティー担当者のPINが必要になります (IBM提供のトークンの場合、デフォルトはいずれも87654321)。 注: PINを入力するときには、画面上ではアスタリスクで表示されます。
    リスト.3
    [root@draeger /root]# /usr/lib/pkcs11/methods/pkcsconf -I -c 0
    Enter the SO PIN: 87654321    
    Enter a unique token label: DraegerICA
    [root@draeger /root]# /usr/lib/pkcs11/methods/pkcsconf -t -c 0
    Token #0 Info:
    Label: DraegerICA                      
    Model: IBM ICA         
    Serial Number: 123             
    Flags: 0x45
    Sessions: -1/-1
    R/W Sessions: -1/-1
    PIN Length: 4-8
    Public Memory: 0xFFFFFFFF/0xFFFFFFFF
    Private Memory: 0xFFFFFFFF/0xFFFFFFFF
    Hardware Version: 1.0
    Firmware Version: 1.0
    Time: 11:14:17 AM
  2. セキュリティー担当者のPINの設定: 賢いシステム管理という観点からすれば、セキュリティー担当者は、トークンを初期化した直後に、セキュリティー担当者のPINを変更しておくべきでしょう。そのようにすれば、無許可ユーザーや悪意のある攻撃者が装置を初期化し直したり、格納されているオブジェクト (鍵や証明書など) をすべて削除してしまうといった事態を避けられます。
    リスト.4
    [root@draeger /root]# /usr/lib/pkcs11/methods/pkcsconf -P -c 0
    Enter the SO PIN: 87654321
    Enter the new SO PIN: fredrules
    Re-enter the new SO PIN: fredrules
  3. ユーザーのPINの設定 (セキュリティー担当者が実行する):
    リスト.5
    [root@draeger /root]# /usr/lib/pkcs11/methods/pkcsconf -u -c 0
    Enter the SO PIN: fredrules
    Enter the new user PIN: billybob
    Re-enter the new user PIN: billybob
  4. ユーザーのPINの変更 (ユーザーが実行する):
    リスト6
    [root@draeger /root]# /usr/lib/pkcs11/methods/pkcsconf -p -c 0
    Enter user PIN: billybob
    Enter the new user PIN: 12345678
    Re-enter the new user PIN: 12345678

アプリケーションとopenCryptokiの連係

ここでは、各種アプリケーションからopenCryptokiを利用する方法を説明し、そのようなアプリケーションを作成するためのサンプルを示します。

各種アプリケーションからopenCryptokiを利用する

PKCS #11に準拠したトークンを利用しているアプリケーションはかなりあります。そのようなアプリケーションのほとんどは、トークン専用の共有オブジェクト (DLL) を読み込むように設定しておく必要があります。ところが、openCryptokiを使用すれば、たった1つのモジュール (/usr/lib/pkcs11/PKCS11_API.so) を読み込むだけで、openCryptokiサブシステムで実行中になっているすべてのトークンにアクセスできるようになるわけです。いろいろな種類のトークンがサポートされており、それぞれの種類がそれぞれのプラグイン・モジュールの実装仕様に基づいて、openCryptokiサブシステム内の1つのスロットを使用します。

装置の追加や削除があった場合は、トークン用のPKCS #11準拠スロットが変わる場合もあります。したがって、アプリケーションの観点からすると、トークンの初期化時に割り当てられたラベルでトークンを識別する必要があるわけで、同じスロットにいつも同じトークンがあるという想定は成り立たないということになります。

PKCS #11の仕様にかかわるアプリケーション固有の設定情報については、それぞれのアプリケーションのマニュアルなどを参照してください。

アプリケーションの作成

openCryptokiを使用するアプリケーションを開発するには、まずダイナミック・ライブラリーの呼び出しを使って共有オブジェクトを読み込んでから、C_GetFunctionList を呼び出す必要があります。たとえば、次のルーチンは、まず共有ライブラリーを読み込んでから、その後の呼び出しで使える機能リストを取得します。

リスト.7
CK_FUNCTION_LIST  *funcs;
int do_GetFunctionList( void )
{
   CK_RV            rc;
   CK_RV  (*pfoo)();
   void    *d;
   char    *e;
   char    f[]="/usr/lib/pkcs11/PKCS11_API.so";
   printf("do_GetFunctionList...
");
   d = dlopen(f,RTLD_NOW);
   if ( d == NULL ) {
      return FALSE;
   }
   pfoo = (CK_RV (*)())dlsym(d,"C_GetFunctionList");
   if (pfoo == NULL ) {
      return FALSE;
   }
   rc = pfoo(&funcs);
   if (rc != CKR_OK) {
      show_error(" C_GetFunctionList", rc );
      return FALSE;
   }
   printf("Looks okay...
");
   return TRUE;
}

読み込みが終了した時点で、次にC_Initialize 機能を呼び出します。前のサンプルを使えば、この機能は次の行で呼び出されることになります。

CK_C_INITIALIZE_ARGS cinit_args;
memset(&cinit_args,0x0,sizeof(cinit_args));
funcs->C_Initialize(&cinit_args);

その他のオプションについては、RSA LabsのWebサイトで公開されているPKCS #11の仕様をお調べください (参考文献を参照)。

注: openCryptokiでは、オペレーティング・システムのスレッドが有効になっている必要があります。他のスレッドのルーチンが渡されても無視されるので、引数の初期化構造の中でno-os スレッド引数が設定されていると、C_Initialize の呼び出しは失敗します。

サンプル・プログラム

次のサンプル・プログラムは、システム内で現在使用されているトークンとスロットをすべて出力するためのものです。このサンプル・プログラムをインストールする場合は、サンプル・プログラムの後に次のMakefileを含める必要があります。

サンプル・プログラムの入手先です。

結論

PKCS #11仕様は、暗号ハードウェア装置との連係を一元管理するための事実上の業界標準になっています。そのPKCS #11仕様をオープン・ソース方式で実装したのがopenCryptokiであり、この製品は、IBMのLinux向けの暗号ハードウェアをサポートしています。このサポートによって、Linuxには貴重なセキュリティー機能が搭載されることになり、企業ユーザー向けの市場においても、Linuxの魅力と商品価値がさらに高まるのは間違いありません。


ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Linux
ArticleID=231492
ArticleTitle=PKCS #11に準拠したLinux版 openCryptoki
publish-date=11012001