補足.CrypotoAPI

このページでは、Crypto APIの解説をするにあたって必要な補足事項を説明しています。「Windows CryptoAPI による暗号化と電子署名の方法」の目次からご利用ください。

AES共通鍵による暗号化のサンプルは、以下を参照してください。

補足.1 CSPについて

 CryptoAPIでCSP(Cryptographic Service Provider)は、重要な位置にあります。CSPは、暗号化エンジンですが、Crypto APIを使ったほとんどの作業の中で、まずこれを指定しなければなりません。この暗号化エンジンは、WindowsOSにあらかじめインストールされているものの他に、サードベンダーによってインストールされたものもあります。CSPのバックエンドの仕様は公開されていますので、サードベンダーが提供するハードウェアまたはソフトウェアに依存した暗号化エンジンを追加することができます。
 ここでは、WindowsOSにあらかじめインストールされているCSPの種類とその機能について説明します。

WindowsOSでは、以下のCSPが既定で利用できます。
定義名称
MS_DEF_DH_SHANNEL_PROV"Microsoft DH Schannel Cryptographic Proviver"
MS_DEF_DSS_DH_PROV"Microsoft Base DSS and Diff-Helman Cryptographic Provider"
MS_DEF_DSS_PROV"Microsoft Base DSS Cryptographic Provider"
MS_DEF_PROV"Microsoft Base Crptogaphic Provider"
MS_DEF_RSA_SCHANNEL_PROV"Microsoft RSA Scahnnel Cryptographic Provider"
MS_DEF_RSA_SIG_PROV"Microsoft RSA Signature Cryptographic Provider"
MS_ENH_DSS_DH_PROV"Microsoft Enhansed DSS and Diff-Helman Cryptographic Provider"
MS_ENH_RSA_AES_PROV"Microsoft Enhansed RSA and AES Cryptographic Provider"
MS_ENHANCED_PROV"Microsoft Enhansed Cryptographic Provider v1.0"
MS_SCARD_PROV"Microsoft Base Smart Card Crypto Provider"
MS_STRONG_PROV"Microsoft Strong Cryptographic Provider"

利用できるプロバイダータイプとその機能は、以下のとおりです。
CSPのタイプ鍵交換電子署名暗号化ハッシュ計算
PROV_DH_SCAHNNELDHDSSDES
3-DES
MD5
SHA-1
PROV_DSS-DSS-MD5
SHA-1
PROV_DSS_DHDHDSSCYLINK_MEKMD5
SHA-1
PROV_FORTEZZAKEADSSSkipjackSHA-1
PROV_MSEXCHANGERSARSACASTMD5
PROV_RSA_AESRSARSARC2
RC4
AES
MD5
SHA-1
PROV_RSA_FULLRSARSARC2
RC4
MD5
SHA-1
PROV_RSA_SCHANNELRSARSARC4
DES
3-DES
MD5
SHA-1
PROV_RSA_SIG-RSA-MD5
SHA-1
PROV_SSLRSARSA

それぞれのアルゴリズムは、以下のとおりです。
アルゴリズム
RSARSA社のアルゴリズムを示します
RC2RC2 ブロック アルゴリズム
RC4RC4 ストリーム アルゴリズム
AESAdvanced Encryption Standard アルゴリズム
DESData Encryption Standard
DSSDogital Signature Standard
DHDiffie-Helman 公開鍵アルゴリズム
CYLINK_MEK40-bit アルゴリズム
KEAKey Exchange アルゴリズム
ShipjackNational Security Agency (NSA) 80-bit アルゴリズム
CAST64-bit アルゴリズム
MD5MD5 ハッシュ計算アルゴリズム
SHA-1SHA-1 ハッシュ計算アルゴリズム

補足.3 バイナリーデータを簡単に表示させる方法

 CryptoAPIは、バイナリーデータを16進表示のASCIIデータに容易に変換する関数が用意されています。本解説においては、この関数を利用してバイナリーデータを解説します。
以下にその関数の利用例を示します。
char    pbbuf[] = {"This is a test data."};
DWORD   cbbuf = sizeof(pbbuf);
char    pstr[1000];
DWORD   cstr = 1000;

CryptBinaryToString((BYTE*)pbbuf, cbbuf, CRYPT_STRING_HEXASCIIADDR,
                        pstr, &cstr);
printf("Data =\n%s\n", pstr);
結果は、以下のとおりです。
Data =
0000    54 68 69 73 20 69 73 20  61 20 74 65 73 74 20 64   This is a test d
0010    61 74 61 2e 00                                     ata..

第3引数には、以下のフラグを指定できます。必要に応じたフラグを指定してください。

CRYPT_STRING_BASE64HEADER
CRYPT_STRING_BASE64
CRYPT_STRING_BINARY
CRYPT_STRING_BASE64REQUESTHEADER
CRYPT_STRING_HEX
CRYPT_STRING_HEXASCII
CRYPT_STRING_BASE64X509CRLHEADER
CRYPT_STRING_HEXADDR
CRYPT_STRING_HEXASCIIADDR

この関数を利用する際は、CryptoAPIのヘッダとライブラリを必ず指定してください。

補足.4 Window98などで電子証明書選択ダイアログを使う

 電子証明書を証明書ストアから選択するには、ダイアログボックスを使って希望の電子証明書を選択するのが直感的でわかりやすいものです。しかしながら、その関数はWindowsVista、WindowsXPまたは、Windows2003Server (一部Windows2000)のみのサポートとなっています。
そこで、弊社ではWindows98以上で利用可能な電子証明書選択用のダイアログを作成し無償でご利用いただけるようにしました。使用許諾契約書を確認した後にダウンロードしてください。

ダウンロードしたファイルを解凍後に、DLLおよびLibを開発環境にあった適当なフォルダーにコピーしてください。なお、このDLLはMFCを利用していますので、このDLLが必要な場合は、2.5.3電子証明書を選択するにあるサンプルアプリケーションをご参照ください。

使用方法:2.5.3などにある、CryptUIDlgSelectCertificateFromStoreに替えて以下のコードを使います。同様な画面が表示され、電子証明書を容易に選択できます。
//      電子証明書の取り出し
PCCERT_CONTEXT  pcCert;
/** ここからコメントアウト ***
pcCert = CryptUIDlgSelectCertificateFromStore(
                hStore,
                NULL,
                NULL,
                NULL,
                0,
                0,
                NULL);
/** ここまで ***/
// 新しい関数
pcCert = DlgSelectCertificate(hStore);
if(!pcCert)
{
       CertCloseStore(hStore, 0);
       CryptReleaseContext(hProv, 0);
       return 1;
}

 ご質問・ご要望

 ご質問やご要望は、こちらからお送りください。

PDF-Tools
PDFおよびPDF/Aを作成・編集などができるライブラリ
128ビットの暗号化や電子署名に対応
http:
//www.trustss.co.jp/pdf/
補足.CryptoAPI
補足.1 CSPについて
補足.3 バイナリーデータを簡単に表示させる方法
補足.4 電子証明書選択ダイアログを使う
株 トラスト・ソフトウェア・システム
暗号化・電子署名・タイムスタンプ ライブラリ作成します。
お問い合わせください。
会員用ログイン
ID:
パスワード:
ログインすると、一般公開していないページを閲覧できます。