補足.CrypotoAPI
このページでは、Crypto APIの解説をするにあたって必要な補足事項を説明しています。「Windows CryptoAPI による暗号化と電子署名の方法」の目次からご利用ください。
AES共通鍵による暗号化のサンプルは、以下を参照してください。
AES共通鍵による暗号化のサンプルは、以下を参照してください。
- 従来のCryptoAPI(Windows C++)を使った、 1.14 ブロック暗号化アルゴリズムによる簡単な暗号化
- 新しいCNG API(Windows C++)を使った、 1. 共通鍵(AES)による簡単な暗号化
- Javaでの JavaによるAES暗号化の解説
補足.1 CSPについて
CryptoAPIでCSP(Cryptographic Service Provider)は、重要な位置にあります。CSPは、暗号化エンジンですが、Crypto APIを使ったほとんどの作業の中で、まずこれを指定しなければなりません。この暗号化エンジンは、WindowsOSにあらかじめインストールされているものの他に、サードベンダーによってインストールされたものもあります。CSPのバックエンドの仕様は公開されていますので、サードベンダーが提供するハードウェアまたはソフトウェアに依存した暗号化エンジンを追加することができます。
ここでは、WindowsOSにあらかじめインストールされているCSPの種類とその機能について説明します。
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_SCAHNNEL | DH | DSS | DES 3-DES | MD5 SHA-1 |
PROV_DSS | - | DSS | - | MD5 SHA-1 |
PROV_DSS_DH | DH | DSS | CYLINK_MEK | MD5 SHA-1 |
PROV_FORTEZZA | KEA | DSS | Skipjack | SHA-1 |
PROV_MSEXCHANGE | RSA | RSA | CAST | MD5 |
PROV_RSA_AES | RSA | RSA | RC2 RC4 AES | MD5 SHA-1 |
PROV_RSA_FULL | RSA | RSA | RC2 RC4 | MD5 SHA-1 |
PROV_RSA_SCHANNEL | RSA | RSA | RC4 DES 3-DES | MD5 SHA-1 |
PROV_RSA_SIG | - | RSA | - | MD5 SHA-1 |
PROV_SSL | RSA | RSA |
それぞれのアルゴリズムは、以下のとおりです。
名 | アルゴリズム |
---|---|
RSA | RSA社のアルゴリズムを示します |
RC2 | RC2 ブロック アルゴリズム |
RC4 | RC4 ストリーム アルゴリズム |
AES | Advanced Encryption Standard アルゴリズム |
DES | Data Encryption Standard |
DSS | Dogital Signature Standard |
DH | Diffie-Helman 公開鍵アルゴリズム |
CYLINK_MEK | 40-bit アルゴリズム |
KEA | Key Exchange アルゴリズム |
Shipjack | National Security Agency (NSA) 80-bit アルゴリズム |
CAST | 64-bit アルゴリズム |
MD5 | MD5 ハッシュ計算アルゴリズム |
SHA-1 | SHA-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に替えて以下のコードを使います。同様な画面が表示され、電子証明書を容易に選択できます。
そこで、弊社では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; }
ご質問・ご要望
ご質問やご要望は、こちらからお送りください。