暗号認証API

アプリケーションプログラムが暗号認証機能を実装する場合,一般的には暗号認証機能を提供するライブラリ関数を利用する.このライブラリ関数のインタフェースとしては,次のような点の条件を持ったものが望ましいといえる.

アプリケーションプログラムから暗号認証機能を呼び出すインタフェース(暗号認証API)の標準化の動きは幾つか存在する. これまで提案されている暗号認証APIの代表的なもの以下に示す.

GSS-API CryptoAPI CNG
PKCS#11 CDSA(CSSM) Java Security API

GSS-API

GSS-API(Generic Security Service API)は,通信を前提としたアプリケーションプログラムに対してセキュリティ機能を付加する標準的なインターフェイスを提供しようとするものである.このインタフェイスは,セキュリティ機能のメカニズムや実装の詳細をアプリケーションプログラムから隠蔽する目的で使用される.

IETF(Internet Engineering Task Force)の次のドキュメントに仕様が提案されており,Open Groupでも採用されている.

GSS-APIは,ネットワークに分散したアプリケーション間の通信の保護を目的としたもので,通信を伴わないプログラムでのセキュリティ機能は指向していない.GSS-APIの適用領域は次のようなものである.

GSS-APIは次の4つに分類され,認証,完全性,秘密性用に37個のAPIが定義されている.

クライアントとサーバによって用いられるGSS-APIの例を示す.

(Client GSS-API) (Client) (Server) (Server GSS-API)
GSS_Init_sec_context()
output_token ----> GSS_Accept_sec_context() input_token
GSS_Init_sec_context() <---- output_token
input_msg GSS_Seal()
output_msg ----> GSS_Unseal() input_msg
output_msg
GSS_Delete_sec_context()
input_token GSS_Process_context_token() <---- output_token

CryptoAPI

CryptoAPI (Microsoft Cryptographic API) は,Win32環境下における暗号認証用のAPIとして,Mcrosoftにより規定されたものである.CryptoAPIを用いるアプリケーションは,その実装の詳細を知ることなく暗号認証機能を利用することができる.

Cryptgraphic Service Provider(CSP)は,暗号認証APIに対応した具体的な暗号認証アルゴリズムの実装を提供するプロバイダである.

CSPでは次の3つの設計ルールが適用されている.

各プロバイダは,名前と提供する機能を表わすタイプを持つ. 次のタイプがあらかじめ定義されている.

CryptoAPI
Provider Type Key Exchange Signature Eccryption Hashing
PROV_RSA_FULL RSA RSA RC2, RC4 MD5, SHA
PROV_RSA_SIG N/A RSA N/A MD5, SHA
PROV_DSS N/A DSS N/A SHA
PROV_FORTEZZA KEA DSS Skipjack SHA
PROV_MS_EXCHANGE RSA RSA CAST MD5
PROV_SSL RSA RSA varies varies

Microsoft Base Cryptographic ProviderがWindowsのOSに含まれてMicrosoft より提供されている. これには,PROV_RSA_FULLプロバイダタイプが実装されている.すなわち,鍵交換と署名用に512ビットのRSA暗号が,データの暗号化に40ビットのRC2およびRC4暗号が実装されている.また,メッセージダイジェストアルゴリズムとしてMD2,MD4,SHAが実装されている.

新しいプロバイダおよびデフォルトプロバイダの登録は,CSPファイルを規定されたディレクトリに格納することと,CryptoAPI用のシステムレジストリを更新することにより行なわれる.どのプロバイダを使うかは,CryptAcquireContext関数により指定することができる.この関数はアプリケーションがCryptoAPIを使うとき最初に呼び出す必要がある関数である.

CNG (Cryptography API: Next Generation)

Cryptography API: Next Generation (CNG) は,CryptoAPI の更改版と言えるもので,新しいアルゴリズムの追加や多くの拡張がなされている.CNG は,Windows Server 2008 と Windows Vista からサポートされている.CNG を実装したマイクロソフト製プロバイダは Bcrypt.dll である.CryptoAPI 1.0 でサポートされている暗号アルゴリズムは,CNG でもサポートされる.

暗号の基本操作を行う CNG API の代表的な使い方は,次のようになる.

  1. アルゴリズムプロバイダ (CSP) をオープンする.
  2. アルゴリズムの特性(パラメータ)を設定する.
  3. 鍵を生成またはインポートする.
  4. 暗号操作を実行する.
  5. アルゴリズムプロバイダをクローズする.

PKCS#11

暗号機能を持つデバイスのためのAPIとしてRSAにより定義されたものである (Cryptokiと呼ばれる).この仕様には,鍵管理,暗号処理,ディジタル署名,一般処理用に58のAPIが定義されている.

スマートカード(ICカード)やPCカード(PCMCIAカード)のような可搬型のコンピュータデバイスは秘密鍵の保管やセキュリティ機能を実行する装置として最適である.Cryptokiはこのような暗号認証機能を持ったデバイスとアプリケーションとのインタフェースとして設計された.

Cryptokiは,デバイスの詳細を抽象化し,暗号認証機能を持つデバイスの共通モデルをアプリケーションに提供するものである.また,アプリケーションが一度に複数のデバイスを扱うようにできるインタフェースを提供している.

CDSA(CSSM)

共通データセキュリティアーキテクチャ (CDSA: Common Data Security Architecture) は,Intelが提唱し,Open Group ( http://www.opengroup.org/security/cdsa.htm) によって技術標準として採用されたオープンソースのセキュリティアーキテクチャである.
CDSAは,以下で構成される4層の水平アーキテクチャを定義している.

CDSAの核となるのはCSSM(Common Security Services Manager)であり,CSSM APIと呼ばれる暗号認証機能のアプリケーションインターフェイスを実装するモ ジュール群である.
CSSMの機能は次のサービスマネージャ(SM)から構成される.

CSSM APIを用いた鍵ペア生成時の呼出しシーケンス例を以下に示す.

    CSSM_Init
    CSSM_ModuleLoad
    CSSM_ModuleAttach
    CSSM_CreateKeyGenContext
    CSSM_GenerateKeyPair
    CSSM_ModuleDetach
    CSSM_ModuleUnload
    CSSM_Terminate

以下の表に,上記3つの暗号認証APIの機能別に分類した比較を示す. なお,暗号認証機能に関するCSSM APIはPKCS#11をベースに規定されているため,機能的にはPKCS#11と同等である.

表 暗号認証API
 機能分類  CryptoAPI GSS-API PKCS#11
 状態管理  CryptAcquireContext GSS_Init_sec C_Initialize
CryptReleaseContext GSS_Accept_sec_context C_GetInfo
GSS_Delete_sec_context C_GetSlotList
GSS_Process_context_token C_GetSlotInfo
GSS_Context_time C_GetTokenInfo
GSS_Inquire_context C_GetMechanismList
GSS_Wrap_size_limit C_GetMechanismInfo
GSS_Export_sec_context C_InitToken
GSS_Import_sec_context C_OpenSession
C_CloseSession
C_CloseAllSessions
C_GetSessionInfo
C_CreateObject
C_CopyObject
C_DestroyObject
C_GetObjectSize
C_GetAttributeValue
C_SetAttributeValue
C_FindObjectsInit
C_FindObjects
認証 Cert*** GSS_Acquire_cred C_InitPIN
(26 Functions) GS_Release_cred C_SetPIN
GSS_Inquire_cred C_Login
GSS_Add_cred C_Logout
GSS_Inquire_cred_by_mech
暗号化・復号 CryptEncrypt GSS_Wrap C_EncryptInit
CryptDecrypt GSS_Unwrap C_Encrypt
CryptEncryptMessage C_EncryptUpdate
CryptDecryptMessage C_EncryptFinal
CryptSignAndEncryptMessage C_DecryptInit
CryptDecryptAndVerifyMessageSignature C_Decrypt
C_DecryptUpdate
C_DecryptFinal
ダイジェスト CryptCreateHash C_DigestInit
CryptDestroyHash C_Digest
CryptGetHashParam C_DigestUpdate
CryptHashData C_DigestFinal
CryptHashSessionKey
CryptSetHashParam
ディジタル署名 CryptSignHash GSS_GetMIC C_SignInit
CryptVerifySIgnature GSS_VerifyMIC C_Sign
C_SignUpdate
C_SignFinal
C_SignRecoverInit
C_SignRecover
C_Verify\_Init
C_Verify
C_VerifyUpdate
C_VerifyFinal
C_VerifyRecoverInit
C_VerifyRecover
鍵生成 CryptDeriveKey C_GenerateKey
CryptDestroyKey C_GenerateKeyPair
CryptExportKey C_WrapKey
CryptGenKey C_UnwrapKey
CryptGetKeyParam C_DeriveKey
CryptGetUserKey
CryptImportKey
CryptSetKeyParam
乱数生成 CryptGenRandom C_SeedRandom
C_GenerateRandom
その他 CryptEncodeObject GSS_Display_status, etc C_getFunctionStatus
CryptDecodeObject (19 Functions) C_CancelFunction

Java Security API

Java Security API は,Javaにおける暗号認証機能を実現するAPIであり,Sun Microsytems から仕様が公開され,Java におけるデファクトスタンダードとなっている. この API は,基本となる API の枠組を抽象クラスとして与えるもので,具体的な暗号認証アルゴリズムに対応した実装はソフトウェアベンダが任意に組み込むことができる (Providerクラスとして組み込む).Sun Microsystens の提供する JDK にもデフォルトの実装として,ハッシュ関数やディジタル署名などの暗号認証機能が組み込まれている.

詳細は, Java Security API を参照のこと.

inserted by FC2 system