Home

CNGを使ったプログラムの開発

Windowsでは、暗号化や電子署名をするAPIとして従来のCryptoAPIから Crypto Next Genaration(CNG) APIに移行するようです。 myuTokenでは、このCrypto Next Genaration(CNG)を使って、ICカードにアクセスするプログラムを開発することも可能です。

ICカードから証明書を取り出す

Microsoft Base Smart Card Crypto ProviderのICカードから証明書を取り出すためのC++サンプルソース


HCRYPTPROV hProv;
HCRYPTKEY hKey;
PCERT_CONTEXT pCertContext;

if(!CryptAcquireContext(&hProv,NULL,MS_SCARD_PROV,PROV_RSA_FULL,0)) {
    AfxMessageBox("CryptAcquireContext()");
    return;
}

BYTE  pbData[4096];
DWORD cbData = sizeof(pbData);
DWORD dwKeySpec = AT_KEYEXCHANGE;
if(!CryptGetUserKey(hProv,dwKeySpec,&hKey)) {
    dwKeySpec = AT_SIGNATURE;
    if(!CryptGetUserKey(hProv,dwKeySpec,&hKey)) {
        AfxMessageBox("CryptGetUserKey() FAIL");
        return;
    }
}
if(!CryptGetKeyParam(hKey,KP_CERTIFICATE,pbData,&cbData,0)) {
    AfxMessageBox("CryptGetKeyParam() FAIL");
    return;
}

pCertContext = (PCERT_CONTEXT)CertCreateCertificateContext(
    X509_ASN_ENCODING,pbData,cbData);
if(pCertContext == NULL) {
    AfxMessageBox("CertCreateCertificateContext() FAIL");
    return;
}
CryptReleaseContext(hProv,0);

myuTokenでは、ICカード挿入すると自動的に証明書をOSの証明書ストアにコピーするので 通常、アプリケーションがICカードから直接、この方法で証明書を取り出す必要はありません。 取り出した証明書を使って署名などを実行するためには、証明書にCSPのプロバイダ名と コンテナ名をセットする必要が あります。