目的
Cryptography API: Next Generation (CNG) は 、CryptoAPI の長期的な置き換えです。 CNG は、さまざまなレベルで拡張可能であり、動作に依存しない暗号化を実現するように設計されています。
開発者向け
CNG は、ユーザーがセキュリティで保護された環境で、特にインターネットなどのセキュリティで保護されていないメディアを介してドキュメントやその他のデータを作成および交換できるようにするアプリケーションの開発者が使用することを目的としています。 開発者は、C および C++ プログラミング言語と Windows ベースのプログラミング環境に精通している必要があります。 必須ではありませんが、暗号化またはセキュリティ関連のサブジェクトについて理解することをお勧めします。
CNG 暗号化アルゴリズム プロバイダーまたはキー ストレージ プロバイダーを開発している場合は、Microsoft から Cryptographic Provider Development Kit をダウンロードする必要があります。
実行時の要件
CNG は、Windows Server 2008 および Windows Vista 以降でサポートされています。 特定のプログラミング要素のランタイム要件については、その要素のリファレンス ページの 「要件」 セクションを参照してください。
このセクションでは、次の操作を行います。
次のトピックでは、CNG に関する情報と、それをアプリケーションで使用する方法について説明します。
| トピック | 説明 |
|---|---|
| CNG について | CNG 機能、暗号化プリミティブ、キーストレージ、取得、インポート、エクスポートについて説明します。 |
| CNG を使用した | CNG の暗号化構成機能と一般的な CNG プログラミングを使用する方法について説明します。 |
| CNG リファレンス | CNG プログラミング要素の詳細な説明。 これらのページには、CNG を操作するための API のリファレンス説明が含まれています。 |
CNG を使用する場合
Windows アプリケーションで暗号化操作を直接制御する必要がある場合は、CNG を使用します。 次のガイダンスは、適切な API を選択するのに役立ちます。
| シナリオ | 推奨される API |
|---|---|
| 対称暗号化/復号化 (AES、ChaCha20-Poly1305) | CNG (BCryptEncrypt / BCryptDecrypt) |
| ハッシュ (SHA-256、SHA-384、SHA-512) | CNG (BCryptCreateHash) |
| 非対称操作 (RSA、ECDSA、ML-DSA) | CNG (BCryptSignHash、 BCryptVerifySignature) |
| 保存中のユーザー データの保護 (ユーザーごとまたはマシンごとのスコープ) | DPAPI (よりシンプルで、キー管理は必要ありません) |
| 複数のユーザーまたはマシンからアクセスできるデータの保護 | DPAPI-NG (NCryptProtectSecret) |
| TLS/SSL 接続 | Schannel (内部で CNG を使用) |
| CryptoAPI を既に使用しているレガシ コード | メンテナンスのために CryptoAPI を続行するが、新機能については CNG への移行を計画する |
Warning
回避する一般的な暗号化の落とし穴:
- ECB ブロック暗号モードを使用しないでください。プレーンテキスト パターンがリークします。 ランダム IV で CBC を使用するか、GCM などの認証済みモードを使用します。
- ソース コードで暗号化キーをハードコーディングしないでください。 キー保護には、キー ストレージ プロバイダーまたは DPAPI を使用します。
- 整合性またはセキュリティの目的で MD5 または SHA-1 を使用しないでください。 SHA-256 以上を使用します。
- CNG 関数からのリターン コードを常に検証します。 警告なしに無視される暗号化操作が失敗すると、データが暗号化されずに格納される可能性があります。