第263章 ファイル暗号化の基礎


重要なファイルは暗号化して送るのが安全です。ファイルを暗号化する 方法はいろいろ考えられていますが、ここではマイクロソフトの Crypto APIについてごく初歩的な使い方を解説します。 本格的に利用するには、専門書等を参照してください。



まず、最初にデフォルトの暗号化サービスプロバイダ(CSP)をインストールする 必要があります(IE3.0以降がインストールされていればよい)。 そのほかにデフォルトのCSPとキーの組を作る必要があります。(後の章)

この章では、暗号化に必要な関数についての解説をします。

BOOL WINAPI CryptAcquireContext( HCRYPTPROV *phProv, // out LPCTSTR pszContainer, // in LPCTSTR pszProvider, // in DWORD dwProvType, // in DWORD dwFlags // in );

CSPの、キーコンテナのハンドルを取得します。

phProvは、プロバイダのハンドルのアドレスです。

pszContainerは、コンテナの名前です。NULLを指定するとデフォルトの コンテナ名が使われます。

pszProviderは、プロバイダの名前です。NULLを指定するとデフォルトの プロバイダが使われます。

dwProvTypeは、プロバイダのタイプです。PROV_RSA_FULL, PROV_RSA_SIGなど を指定します。

dwFlagsは、通常は0を指定してください。

成功したらTRUE, 失敗したらFALSEを返します。

BOOL WINAPI CryptReleaseContext( HCRYPTPROV hProv, // in DWORD dwFlags // in );

キーコンテナやCSPのハンドルを解放します。

hProvは、CSPのハンドルです。

dwFlagsは予約済みで0を指定してください。

BOOL WINAPI CryptGetUserKey( HCRYPTPROV hProv, // in DWORD dwKeySpec, // in HCRYPTKEY *phUserKey // out );

ユーザーキーペアのハンドルを取得します。

hProvは、CSPのハンドルを指定します

dwKeySpecは、取得するキーの種類を指定します。

AT_KEYEXCHANGEは、Exchangeキーペア
AT_SIGNATUREは、署名キーペア

phUserKey取得するキーハンドルのアドレス。

BOOL WINAPI CryptDestroyKey( HCRYPTKEY hKey // in );

キーハンドルを解放します。

BOOL WINAPI CryptGenKey( HCRYPTPROV hProv, // in ALG_ID Algid, // in DWORD dwFlags, // in HCRYPTKEY *phKey // out );

ランダムキーを生成します。

hProvは、CSPのハンドルです。

Algidは、キーを生成するためのアルゴリズムの識別子です。
マイクロソフトのプロバイダを利用しているならCALG_RC2または、 CALG_RC4です。

dwFlagsは、キー生成のタイプの識別子です。
CRYPT_EXPORTABLEを指定するとキーはCSPからkey blobへ転送することが できます。(通常はこれを指定する)

phKeyは、新しく生成されたキーハンドルのアドレス。

BOOL WINAPI CryptExportKey( HCRYPTKEY hKey, // in HCRYPTKEY hExpKey, // in DWORD dwBlobType, // in DWORD dwFlags, // in BYTE *pbData, // out DWORD *pcbDataLen // in/out );

CSPからキーをエクスポートします。

hKeyは、エクスポートされるキーのハンドルです。

hExpKeyは、目的ユーザーが持っているキーのハンドルです。

dwBlobTypeは、エクスポートされるkey blobのタイプです。
SIMPLEBLOBはセッションキーの転送に使います。
PUBLICKEYBLOBはパブリックキーの転送に使います。
PRIVATEKEYBLOBは、パブリック、プライベートキーのペアの転送に使います。

dwFlagsは、予約されています。0を指定してください。

pbDataは、key blobを受け取るバッファへのポインタです。これをNULL にするとキーのサイズを取得できます。

pcbDataLenは、pbDataが指しているバッファのサイズ。関数が戻ってきたときはバッファに 蓄えられているサイズ。

BOOL WINAPI CryptEncrypt( HCRYPTKEY hKey, // in HCRYPTHASH hHash, // in BOOL Final, // in DWORD dwFlags, // in BYTE *pbData, // in/out DWORD *pcbData, // in/out DWORD cbBuffer // in );

データを暗号化します。

hKeyは、暗号化のためのキーハンドルです。CryptGenKeyまたは、 CryptImportKeyで取得します。

hHashは、ハッシュオブジェクトのハンドルです。ハッシュを使わないときは0を指定します。

Finalは、暗号化における最後のセッションかどうかを指定します。最後のブロックであるときは TRUEを指定します。

dwFlagsは、予約済みで0を指定してください。

pbDataは、暗号化されるデータを持っているバッファです。暗号化が完了したら暗号化データが 同じバッファに蓄えられます。

pcbDataは、データの大きさへのアドレスです。この関数が呼ばれる前は呼び出し側で暗号化される データのバイト数をセットします。関数が返ってくると暗号化されたデータのサイズが含まれます。

cbBufferは、pbDataバッファのバイト数です。

これらの関数を使ってデータを暗号化します。暗号化されたデータを復号するには、あと少し関数が 必要ですが後の章で解説します。


[SDK第3部 Index] [総合Index] [Previous Chapter] [Next Chapter]

Update 02/Apr/2000 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。