問題タブ [cng]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - CNG: BCrypt* と NCrypt* ファミリーの関数をいつ使用するか
Microsoft CNG API (Cryptography API: Next Generation) には、同じことを行うように見える関数のセットが 2 つあります。
次の関数はBCrypt
、鍵のインポート/エクスポート、暗号化/復号化、署名/検証、および Diffe-Helman 鍵交換から始まり、実行します。
しかし、で始まる同じ関数のセットが存在しNCrypt
ます:
これら 2 つの関数セットの違いは何ですか? また、それぞれをいつ使用する必要がありますか?
c# - パスフレーズから秘密 CngKey(ECDH_P384) を作成する
コンテキスト: VS 2015 winforms、Windows 7、SecurityDriven Inferno ライブラリを使用。
電子メールの添付ファイルとして送信される暗号化されたファイルを生成するオフライン アプリをコーディングしています (したがって、クライアント サーバー コンテキストでは使用されません)。ファイルは最初に Inferno(ETM_Transform) で暗号化され、次に (場合によってはパスワードをリセットするために) 別のファイルと共に送信され、DHM キー交換が処理されます。
各ユーザーの公開鍵は、アプリによって作成および永続化されるデータテーブルに保存されるため、鍵交換プロセス中にすばやくアクセスできます。ただし、秘密鍵については、ユーザー (私を含む) がパス フレーズから秘密鍵を再作成することを好むため、鍵を隠す必要がなくなり、セキュリティと移植性が向上します。そのため、保存された公開鍵とハッシュ化されたパス フレーズから鍵を作成する必要があります。
これは健全なアプローチですか、それともこの特定のコンテキストにより適したアプローチがあるのでしょうか?
「要求された操作はサポートされていません」という例外をスローする非常に短いコード例を次に示します。データをキーにインポートするにはどうすればよいですか?
winapi - CNG キーの DACL でのアクセス マスクのマッピング
(注: IMO の質問は主に WinAPI と DACL に関するものであり、CNG に関するものではないので、読み進めてください!)
私は現在、Microsoft の Cryptographic Provider Development Kit のサンプル CNG キー ストレージ プロバイダーを、キーが単一のファイルに格納されないように変更しようとしています。ただし、秘密鍵に割り当てることができるセキュリティ記述子に問題があります。
Windows Server 管理コンソールの証明書スナップインでは、証明書の秘密キーを管理できます。つまり、キーの所有者、DACL、および SACL を変更できます。これにより、セキュリティ記述子をパラメータとして NCryptSetProperty 呼び出しが行われます。DACL の場合、スナップインは「フル コントロール」または「読み取り」の許可/拒否のみを許可するため、ACE のアクセス マスクに GENERIC_ALL または GENERIC_READ ビットが設定されます。
私が学んだように、これらの汎用ビットはアプリケーション固有の権利にマップする必要があります。そうしないと、AccessCheck は機能しません。しかし、私は本当にこれを手作業で行う必要がありますか???
CreatePrivateObjectSecurity+SetPrivateObjectSecurity は常に機能するとは限りません。これは、CreatePrivateObjectSecurity が入力セキュリティ記述子の所有者とグループについて非常にうるさいためです。さらに、マッピングが適用されると、アクセス マスクのジェネリック ビットがクリアされるため、スナップインで誤った設定が表示されます (前述したように、スナップインは現在のアクセス許可を表示するときに GA ビットと GR ビットのみを考慮します)。
ここにいくつかのピースが欠けているようです...
windows - NCRYPT_KEY_HANDLE が指す証明書の構造
証明書を介して Windows にログオンするための資格情報プロバイダーとキー ストレージ プロバイダーを作成しました。この点のドキュメントは非常に曖昧であるため、Microsoft のさまざまなサンプルを使用して動作させました。
私はもうすぐそこにいると思いますが、ログオンは予期しない動作をします。ときどき kerberos サーバー (証明書について不平を言う) に到達することもあれば、情報なしで 0x80090029 でプロセスが失敗することもあれば、Windows がクラッシュすることもあります。これらのクラッシュはすべてアクセス違反またはヌル ポインターと関係があり、たまたまさまざまな場所 (kerberos.dll、Windows.UI.Logon.dll、...) で発生するため、私のキー構造と関係があると思います。指定された NCRYT_KEY_HANDLE を OpenKey 実装でポイントします。
CNG-Kit の KeyStorageProviderSample に例がありますが、%AppData% に保存されている RSA キーに依存しています。安全なハードウェアに保存されているため、利用可能な秘密鍵はありません。別のデバイスから読み取って次のコードを介してインポートする公開部分(つまり、公開証明書)だけがあります。
キー構造は次のように初期化されます。
どこかに、さまざまなメモリ エラーの原因となる間違いがあるはずです。しかし、私はWindowsプログラミングとc/c++にまったく慣れていないので、ポイントを見つけることができず、WindowsがNCRYTP_KEY_HANDLEに期待するデータ構造に関するドキュメントを見つけることができません。この構造について詳しく知っている人はいますか?
c++ - CNG の AES-CBC 暗号化出力がオンライン ツールと一致しない
私はCNGが初めてです。msdn サイトの基本プログラムで遊んでいます。入力プレーン文字列を変更し、aes cbc 暗号化出力を提供する他の Web サイトを使用して出力をテストしました。残念ながら前半しかマッチせず、後半はマッチしていません。間違いがどこにあるかを誰かが指摘してくれたら素晴らしいだろう。
msdn の元のコードはこちらです。
これが私のコードから生成された出力です(以下)。入力プレーン文字列を変更することを除けば、コードに違いはないことに注意してください。
これは、オンライン Web サイト ( http://aes.online-domain-tools.com/およびanothersite )
からの出力です。
前半は「B0 C4 29 18」で終了…その後後半は不一致。
ここにコードスニペットがあります
c# - RSA CngKey をインポートして MicrosoftSoftwareKeyStorageProvider に保存する
別のマシンにインポートしたい、エクスポートした RSAParameters 秘密鍵があります。新しいキーをローカル マシンまたはユーザー コンテナーに保存できますが、既存のキーをインポートしようとして行き詰まります。
以下のコードは新しいキー ペアを生成します。コンテナに直接新しいキーを生成できることはわかっていますが、単一のキーを生成し、その同じキーをいくつかの異なるコンピューターにインポートできるようにしたいと考えています。
RSAParameters または XML の文字列 (いずれか 1 つ) を取得して、それをローカル ユーザー (またはマシン) コンテナーにインポートするにはどうすればよいですか?
CngKey.Import() は byte[] を取り、有望に見えますが、CngKey.Import() が必要とする byte[] を作成する方法を見つけることができませんでした。
それは byte[] を取得しますが、使用する CngKeyBlobFormat に関係なく、例外が発生します。私は立ち往生しています。
アップデート
を使用して byte[] を取得する方法を見つけました
そして、このコードはバイト[]をインポートできるようにする必要があるようです
...しかし、サイコロはありません。どの CngKeyBlobFormat を試しても問題ありません。すべて例外が発生し、ローカルのキー ストレージ プロバイダーにキーをインポートできません。
これを機能させるには、どのような設定とパラメーターの魔法の組み合わせが必要ですか?