問題タブ [nonce]
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.
python - Pythonでナンスを生成するための標準的な方法は何ですか?
PythonでOAuthリクエストのナンスを作成するためのベストプラクティスを誰かが共有できますか?
php - CSRFトークンとノンスの混乱-それらは同じですか?
私が開発している現在のアプリケーションをより安全にするために、CSRFトークンとNonceについて読んでいます。
私の質問は、CSRFトークンとNonceは同じものですか?私がこれまでに収集できたものから、これらの方法は両方とも同じ目標を達成するための異なる技術を持っているということですか、それとも私は何かを誤解していますか?
それらが異なる場合は、サンプルコードを提供するか、PHPアプリでノンスを実装する方法について詳しく知ることができるいくつかのリンクを教えていただけませんか。
ありがとう!
security - MITM 攻撃で IV (ノンス) を安全に導出する
ほとんどの暗号では、適切なノンスが非常に重要であることを理解しています。私は AES-GCM を使用しており、256 ビットの AES キーで 96 ビットの nonce を使用しています。セキュリティで保護されていないチャネルを介して nonce をネゴシエートする方法について、ここで以前にいくつか質問しました。
私は ECDH を使用して共有シークレットを導出し、X9.63 標準メソッドを使用してキーイング マテリアルを導出する予定です。キーをネゴシエートするときに、ソルトの末尾にランダムに生成された 96 ビットを追加するだけでよいことはわかっています。次に、XOR のように (これはピア ツー ピア システムです) 何らかの方法で 2 つを組み合わせて、ランダムで適切なナンスを持つことができます。
もちろん、これは ARP なりすましなどの MITM 攻撃を阻止するものではありません。公開鍵自体は、公開鍵がアプリケーションとともに配布される中央サーバーによって認証されます。したがって、GCM を使用しているため、証明書を改ざんすることはできません。ただし、ナンスはもちろん認定されていないため、キーを同一に保ちながら、IVを予測可能なものまたは静的なもの(またはすべてゼロなど)に置き換えると、ピアをMITMする可能性があります。これにより、選択された(既知の?)平文攻撃。
紛らわしい場合に備えて、私が話していることのシナリオを次に示します。Alice (A) と Bob (B) はどちらも、適切なランダムな 96 ビット nonce マテリアル (Am と Bm) を生成し、x.509 証明書に追加します。説明のために、小さな数字 Am=1234 と Bm=4321 を使用します。MITMed でない場合、それぞれが Am⊕Bm = 5171 を計算します。これが nonce として使用されます。イブは、IVを倒すためにそれらをMITMすることにしました。彼女は、彼らが一定の IV「6666」で終わることを確認します。A が Am "1234" を B に送信すると、Eve ARP は Bm を偽装し、これを "2795" に置き換えます。BがBm「4321」をAに送ると、Eveはこれを「7896」に置き換えます。1234⊕7896 == 4312⊕2795 == 6666.
ここに私の考え/考えがあります:
nonce マテリアルに署名鍵 (ECDSA) で署名する: この時点で、GCM 自体以外のものを認証する機能はありません (つまり、ECDSA キーを使用したり管理したりしていません)。Suite B アルゴリズムに厳密に固執したいと思います。GCM(AEADの「AD」部分-関連データによる認証済み暗号化)でプレーンテキストを認証できることは知っていますが、もちろん、まだIVを確立していません...したがって、これでIV素材を認証することはできません。私?とにかく暗号化する必要がないため、GCMとの対称キーのみを使用してこれを認証できるように思われます(ECDHを介してすでに確立しています)ので、秘密はありません-プレーンテキストとGCM MACだけです-- しかし、BC で IV なしで AEADBlockCipher を初期化する方法がわかりません。「だます」のはばかげているでしょうか?最初にすべてゼロの IV、正しい鍵で暗号を初期化してから、ナンスを「関連付けられたデータ」(暗号化されていない) として処理し、(MAC を追加するために) バッファをファイナライズし、これをピアに送信してから、本物のIVと同じ鍵で暗号化?あるいは、ECDSA を使用してノンスに署名できると確信しています (おそらく、必要に応じて ECDH 公開鍵と共に)。ただし、それには、サーバーによっても認証されている ECDSA 公開鍵を配布する必要があり、複雑さが増します。むしろ避けてください(したがって、私の最初の署名のアイデア)
同じ IV/キー コンボの繰り返し使用を記録して禁止する: IV で重要なことは、指定されたキーで一度しか使用されないことです。したがって、誰かが上記の MITM 攻撃を繰り返し行って IV を人為的なものに置き換えると、このアイデアは単に接続を認識して閉じるだけです。未使用の IV を導出する有効な代替ペアでそれを置き換えた場合、攻撃者は何の利点も得られません (そうですか?)。私の設計の ECDH ペアの秘密鍵は、実際にはディスクにヒットしないため、プログラムの呼び出しの間にすべての新しい対称鍵が作成されるため、このキー + IV ペアのセットを簡単にメモリに保持できるため、このアプローチが本当に気に入っています:- )
ECDHの秘密素材を「マスク」として使用し、秘密のIVを作成: 確立された ECDH シークレット マテリアルを取得します (まだ X9.63 キー ジェネレーター (BC の ECDHKEKGenerator) に渡されていません)。マテリアル自体の最初の 96 ビットや、マテリアルの SHA-1 ダイジェストの最初の 96 ビットなど、何らかの方法でそれ (Km) から 96 ビットを取得します。Alice と Bob は、ランダムな 96 ビット nonce マテリアル (Am と Bm) を生成します。A と B はそれぞれ Am⊕Km と Bm⊕Km を計算し、その値を相手に送信します。A が Bm⊕Km を持ち、B が Am⊕Km を持っている場合、A は Km⊕(Bm⊕Km) を実行して Bm を取得し、B は Km⊕(Am⊕Km) を実行して Am を取得します。次に、A と B の両方が Am⊕Bm を実行し、最終的に IV を取得します。イブはKmを知らないので、正確に操作できないので、改ざんされた場合、AとBのIVが異なりますよね?これにより、最初のメッセージが交換されたときに GCM が改ざんを検出するため、害はありません。このアプローチの何が問題なのですか?
長い質問で申し訳ありませんが、自分のプロトコルを実装しないように言わないでください。CS の学生として実装の詳細を学ぶためにこれを行っているためです。それらを無視する方法ではありません。
sip - SIPプロキシ認証の失敗
Asteriskサーバーに接続して発信を試みるSIPユーザーエージェントアプリケーションを開発しています。JAINSIPAPIのNIST実装を使用しています。
アプリケーションがそれ自体を登録すると、401(Unauthorized)応答がWWW-Authenticateヘッダーでアプリケーションにチャレンジします。アプリケーションは、Authorizationヘッダーを次のREGISTERリクエストに挿入します。今回、Asteriskは200(OK)応答を返します-登録は成功します。
アプリケーションがINVITE要求を送信すると、Asteriskは407(プロキシ認証が必要)応答で応答します。今回の応答には、Proxy-Authenticateヘッダーが含まれています。私のアプリケーションは再びINVITEを送信しますが、今回はAuthorizationヘッダーを使用して、Asteriskが同じ407(プロキシ認証が必要)応答で応答します。
送信されるSIPメッセージは次のとおりです(「>>」は送信メッセージを示し、「<<」は受信メッセージを示します)。
>>
<<
<<
>>
<<
<<
>>
>>
<<
>>
>>
<<
Authorizationヘッダーは、どちらの場合もまったく同じ方法で作成されます(実行される同じコード)。「digestURI」にリクエストのリクエストURIを使用しています。Authorizationヘッダーの代わりにProxy-Authorizationヘッダーを使用しようとしましたが、結果は同じです。
誰かが私が間違っていることを見ることができますか?前もって感謝します。
c# - nonce トークンを生成して CSRF を防止しますか?
私はこの記事を読んでいて、トークンと同じ値を保持するセッションとともに、ajax関数で変数として送信されるナンストークンを作成してCSRFを防ぐことについて説明しました。常に多くのアクティブなユーザーがいる大規模な Web サイトでセッションを使用するのは本当に好きではないので、これは良い考えですか?
asp.net-mvc - ASP.NET MVC 2.0 でノンス キーを使用してリプレイ攻撃または複数のポストバックを防ぐ方法
MVC 2.0 でナンス キーを使用してリプレイ アタックまたは複数のポストバックを防止する方法
このための低レベルの実装ソリューションを探しています。完全なものである必要はありませんが、アクション フィルターでこの目的のためにノンス キーを使用した例は歓迎されます。
アイデアは、複数のボタンを押すか、キーを押して、ユーザーによる複数のフォーム送信を停止することです。私はすでにこれに対する JavaScript ソリューションを持っていますが、現在、一般的なサーバー側のオプションを探しています。
私の質問は、ここで提供されるソリューションに基づいています: ASP.NET MVC でフォームの複数のポストバックを停止するために使用できる方法は何ですか?
security - zend形式のノンス
nonceを zend 形式で使用する方法が存在するかどうかは誰にもわかりません。
注: nonce フィールドは、フォームのコンテンツが現在のサイトの場所からのものであり、他の場所からのものではないことを検証するために使用されます。ノンスは絶対的な保護を提供するわけではありませんが、ほとんどのケースから保護する必要があります。フォームで nonce フィールドを使用することは非常に重要です。
前もって感謝します
validation - モデルバインディングを使用してHTTPリクエストの署名トークンとナンスを検証できますか?
ASP.NET MVCを使用してエンドポイントを設定しています。このエンドポイントに対して、データ(基本的にはAPI)を操作および取得するための要求を行うことができます。2本足のOAuthモデルを使用して、秘密鍵と署名方法、およびハイジャックを防ぐためのナンステーブルを使用してリクエストが署名されていることを検証しています。
モデルバインディングはASP.NETMVCで非常に便利なので、リクエストを消費するためにそれを利用しますが、署名の検証とナンス/タイムスタンプの処理をモデルバインダーに直接組み込むことができるかどうか疑問に思います。これは可能ですか?そうすれば、作成したさまざまなアクションの実装を再利用できます。
php - 本当にノンスを使う必要がありますか?
私は現在、iOSデバイス用のアプリを開発しています。このアプリはワードプレスのブログからデータをダウンロードしますが、最初にノンストークンを取得します。これはテスト済みであり、数秒でデータを準備できるモバイルデバイスであることを考えると、約2〜3秒かかることが示されています。これに加えて、データもダウンロードする必要があり、さらに4〜5秒かかります。
データフェッチ方法では、いくつかのセキュリティ対策が講じられます。たとえば、Webサーバーとデバイスの両方で一致する必要がある秘密の文字列(もちろん暗号化されている)、ある種の単純なUDID検証+ヘッダーとuseragent-tests。これで十分ですか、それとも本当にナンスが必要ですか?機密データが渡されるわけではありません。渡される場合は、もちろんさらに暗号化します。
本当にノンスを使う必要がありますか?
ありがとうございました。
http - HTTP認証、要求をすばやく連続して受信
HTTPリクエストは、各リクエストのwhileプロトコルの再実行を回避するために、すばやく連続して受信される場合があります。サーバーnonceは、複数のリクエストに対してクライアントによって再利用される場合があります(nonceがクライアントリクエストが有効なウィンドウを決定するためのタイムスタンプ)。 。
この方法を使用することの長所と短所は何ですか?