問題タブ [rngcryptoserviceprovider]
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# - ブリッジ ハンドを生成するために RNGCryptoServiceProvider をどのように使用できますか?
ブリッジのゲームは、4 人のプレイヤーにランダムに配布される 52 枚の異なるトランプでプレイされ、各プレイヤーは最終的に 13 枚のカードを持ちます。いわゆる「ディール」です。おおよそ2^96以下のブリッジでお値引き可能です。このドキュメントでは、ランダム取引を生成するプログラムの要件を次のように説明しています。
- ソフトウェアは、可能なすべてのブリッジ取引を生成できる必要があります。これは、手動取引でも可能であるためです。
- ソフトウェアは、ボード番号、前のハンド、またはその他の状況に影響されることなく、同じ確率ですべての取引を生成する必要があります。
- セッションで他のすべての取引を見た後でさえ、取引を予測することは不可能であるべきです。
このドキュメントでは、疑似乱数シーケンスの最初の要素を確認することで、使用されるシードを計算できるようになり、ハッカーがその後の取引を予測できるようになるため、疑似乱数ジェネレーターを使用して取引を生成することはできないと述べています。
さらに、ほとんどの疑似乱数ジェネレーターは 32 ビットのシードを使用するため、これらのジェネレーターは、必要な 2^96 ではなく、せいぜい 2^32 の異なるブリッジ ディールを生成できることになり、いわゆる誕生日のパラドックスに従って、 2^32 取引の平方根の後に同じ取引が行われる可能性があります。
ブリッジ ディール生成アプリケーションの要件を説明するドキュメントの著者は、ランダム ディールを生成するために世界中で使用されているプログラムを作成しました。このプログラムは、人間がキーボードでランダムに入力することを使用して 96 ビット シードを生成します。14 年間、このアプローチに欠陥はありませんでした。
必要なシードを生成するために人間の入力を使用する必要がないルーチンを書きたいと思います。
が来るRNGCryptoServiceProvider
。以下のコードを使用してこれを使用し、最初は 1 から 52 の範囲で、次に 1 から 51 の範囲で、1 枚のカードが残るまで乱数を生成しました。
得られたディールのテスト 私は、このコードが同じ確率で可能なあらゆるディールを生み出すことができ、4 人のプレーヤーの 1 人となるカードの確率が 0.25 に等しいことを確信しています。
しかし、RNGCryptoServiceProvider で使用されるシードの強度が不明なため、次のことを考えています。
- このコードは、2^96 の異なる取引を生成することができるか、適応することができます。
- このコードの次の取引は予測できません。
EDIT この質問で前述した乱数を取得する方法には欠陥がありました。これは、このコードが 2^96 の異なる Bridge 取引を生成できるかどうかという主な質問から気をそらします。乱数ジェネレーターを、Stephen Taub と Shawn Farkas が MSDN マガジンで公開したものに置き換えました。
この Web サイトから取得した、1 ~ 52、1 ~ 51、最大 1 ~ 2 の範囲の暗号的に安全な乱数を生成するために使用されるコード
c# - 範囲内のランダム ThreadStatic 番号
スレッド静的シードを使用して、数値の範囲から乱数を生成するにはどうすればよいですか?
複数の方法から範囲内の乱数を作成する必要があります。問題は同じ古い重複です。
素敵なランダム ジェネレーターがある MSDN ブログを見つけましたが、2 つの値 (通常は 0 ~ 100) の間の範囲が必要です。
http://blogs.msdn.com/b/pfxteam/archive/2009/02/19/9434171.aspx
ループするとき、範囲を渡したい
ここで何十もの投稿を読みましたが、範囲の例が見つかりませんでした.
数値を生成するバイトの方法は素晴らしくきれいに見えますが、範囲に対して機能させることはできません。Ints または double を渡して乗算する必要がありますか? または、開始範囲と終了範囲を持つ Next のオーバーロードで、そのバッファー値をどのように使用できますか?
c# - Window Phone 8.1 の RNGProvider の場所
Windows Phone 8.1 用の SDK (Nuget Package) を開発しています。RNGCryptoServiceProviderを使用する Windows Phone 8 のバージョンを既に持っています。しかし、Windows Phone 8.1 向けの開発中に、このクラスがSystem.Security.Cryptography (現在はWindows.Security.Cryptography ) で利用できなくなっていることがわかりました。
このクラスが今どこにあるか知っている人はいますか?まったく存在しない場合、どうすれば同様のサービスを受けることができますか?
ありがとう。
c# - Directory Services AccountManagement とパスワード ハッシュを使用してユーザーを認証する方法
上記のコード スニペットで正しいパスワードを渡すと、認証は正常に機能しますが、パスワードを持っていないが、パスワード ハッシュが提供されているとします。本当のパスワード文字列?
このクラスhttps://msdn.microsoft.com/en-us/library/system.security.cryptography.rngcryptoserviceprovider.aspxを使用してパスワード ハッシュが作成されたと仮定します。
または、上記が不可能な場合、ADから返されたパスワードハッシュと提供されたハッシュを比較して一致するかどうかを確認できるように、少なくとも特定のアカウントのパスワードハッシュを取得することは可能ですか?
c# - C# RNGCryptoServiceProvider GetBytes(大きなバイト配列) と GetBytes(1 バイト) のループ
次のセキュリティに違いがあるかどうか疑問に思っていました。
ケース A:
ケース B:
MSDNの例に触発されたので、疑問に思っていました。これは基本的に、限られた値でモジュロを使用することの不公平な分布のために、受信したバイトが公平であったかどうかをチェックします。(私はランダム文字列ジェネレーターを構築していましたが、アルファベットの初期の文字に不公平な分布の利点を与えたくありません)
したがって、基本的に私の質問は、「GetBytes」をループして N バイトを取得するか (ケース b)、「GetBytes」を直接使用して N バイトを取得するか (ケース a) で、セキュリティに違いがあるかどうかです。
お時間をいただきありがとうございます
cryptography - URL/クエリ文字列で RNGCryptoServiceProvider が生成した文字列を使用する方法
注: この投稿で言及されている問題は既に解決しています。多くのグーグルを行った後、私は正しい解決策を見つけることができませんでした。今、私は答えを知っています。この投稿は、同じ問題を解決しようとする他の開発者の時間を節約できると思いました。
問題:
暗号化ランダム文字列を生成し、それを URL の一部としてユーザーに送信したいと考えていました。Base64 文字列を使用すると、エラーが発生する可能性があります。
要求フィルタリング モジュールは、二重のエスケープ シーケンスを含む要求を拒否するように構成されています
そうしないと、ルートが見つかりません。
そのため、Base64 文字列のエスケープ文字をハック/回避して検索/置換するか、このソリューションを使用してください。
これは私の元のコードがどのように見えるかです。
解決策は UrlTokenEncode です。ランダム バイトを URL エンコード トークンに変換する新しいメソッドを追加しました。
c# - RNGCryptoServiceProvider 正規化された値の分布
using ブロック内で C# RNGCryptoServiceProvider を使用しています
その後、結果値は間隔 [0:15] に正規化されるため、モジュロ バイアスが出力に影響を与えることはありません。
正規化は次のように行われます。
ここで、maxRandomValue は 15 です。
ただし、最初のテストから、出力は均一ではないようです。2916 個の数値を生成しました。これが値の分布です。
ご覧のとおり: 6 --> 生成された数値の 5.49% 14 --> 生成された数値の 7.17%
私が恐れているのは、生成した数がほんのわずかで、ボリュームが大きくなると分布が均一になるのではないかということです。または、using 内の RNGCryptoServiceProvider が期待どおりに機能していません。
何か考えはありますか?