問題タブ [message-digest]
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# - c# 高速ハッシュ計算
ハッシュ計算のパフォーマンスを向上させるために、ネイティブ MD5 または SHA1 ライブラリへの ac# ラッパーを探しています。
以前、SharpZipLib を zlib に切り替えたところ、パフォーマンスが 2 倍以上向上しました。(OK、OS とハードウェアに応じて適切な zlib.so または zlib.dll を使用するように注意する必要がありますが、それは報われます)。
MD5 や SHA1 にとって価値があるでしょうか、それとも .NET と Mono の両方が既にネイティブ実装に依存しているのでしょうか?
(編集済み) また: MD5CryptoServiceProvider に固執しなければならない場合、ファイルの読み取り中にファイルのハッシュを計算する方法はありますか? つまり、バイトをチャンクで送信しますが、それでもハッシュ全体を計算しますか?
md5 - ファイル ダイジェストの検証
「n」個のファイルがあり、それぞれにCRC32、MD5、およびSHA1ダイジェストがあるとします
現在、これらの「n」個のファイルは、実際には単一の大きなファイルの分割ファイル/アーカイブです。
これらの小さなファイルが再結合/結合されて大きなファイルになると、この大きなファイルのダイジェストも計算できます。
私の質問は、これらの小さなファイルのダイジェストの組み合わせが大きなファイルのダイジェストと等しいかどうかを確認する方法はありますか?
たとえば、ダイジェストが 0xDE、0xAD、0xBE、0xEF の 4 つの部分に分割されたファイルがあるとします。
参加後、大きなファイルにはダイジェスト 0xC0 があるとします。
join(0xDE, 0xAD, 0xBE, 0xEF) == 0xC0 であることを確認する方法はありますか?
security - 壊れたハッシュ関数を使用しても安全なのはいつですか?
SHA-256のような安全なハッシュ関数を使用するのは簡単であり、セキュリティのためにMD5を使い続けることは無謀な振る舞いです。ただし、ハッシュ関数の脆弱性にはいくつかの複雑さがあり、私はもっと理解したいと思います。
MD4とMD5で衝突が発生しました。NISTによると、MD5は安全なハッシュ関数ではありません。衝突を生成するのに必要な操作は239回のみであり、パスワードには使用しないでください。ただし、SHA-1は同様の衝突攻撃に対して脆弱であり、2 69の操作で衝突が検出されるのに対し、ブルートフォースは280です。誰もSHA-1衝突を生成しておらず、NISTは依然としてSHA-1を安全なメッセージダイジェスト機能としてリストしています。
では、壊れたハッシュ関数を使用しても安全なのはいつですか?関数が壊れていても、「十分な大きさ」である可能性があります。Schneierによれば、衝突攻撃に対して脆弱なハッシュ関数は、 HMACとして引き続き使用できます。これは、HMACのセキュリティが秘密鍵に依存しており、この鍵を取得するまで衝突を見つけることができないためだと思います。HMACで使用されるキーを取得すると、そのキーはすでに壊れているため、重要なポイントになります。HMACのセキュリティを損なうハッシュ関数の脆弱性は何ですか?
このプロパティをもう少し詳しく見てみましょう。パスワードにソルトが付加されている場合、パスワードにMD4のような非常に弱いメッセージダイジェストを使用するのは安全になりますか?MD4およびMD5攻撃はプレフィックス攻撃であり、ソルトが付加されている場合、攻撃者はメッセージのプレフィックスを制御できないことに注意してください。ソルトが本当に秘密であり、攻撃者に知られていない場合、それがパスワードに追加されているかどうかは重要ですか?メッセージ全体が取得されるまで、攻撃者は衝突を生成できないと想定しても安全ですか?
脆弱性を導入することなく、壊れたハッシュ関数をセキュリティコンテキストで使用できる他のケースを知っていますか?
(それは素晴らしいので、裏付けとなる証拠を投稿してください!)
java - Java で文字列の一意の番号を作成する
1,000 万を超える文字列をファイルに読み書きする必要があります。また、ファイル内での重複は望ましくありません。文字列は読み取られるとすぐにファイルにフラッシュされるため、メモリに保持していません。
ハッシュコードの衝突により、重複として文字列を見逃す可能性があるため、ハッシュコードを使用できません。グーグルで見つけた他の2つのアプローチ:
1. MD5 のようなメッセージ ダイジェスト アルゴリズムを使用しますが、計算と保存にコストがかかりすぎる可能性があります。
2. チェックサム アルゴリズムを使用します。[これが文字列の一意のキーを生成するかどうかはわかりません-誰か確認してください]
利用可能な他のアプローチはありますか?ありがとう。
java - MessageDigest シードを設定するには?
MessageDigest クラスは、SHA-1 アルゴリズムを (他の多くのアルゴリズムの中でも) 実装します。SHA-1 アルゴリズムでは、異なる「シード」または初期ダイジェストを使用できます。SHA-1 疑似コードを参照
アルゴリズムは変数またはシードを初期化します。
ただし、オンライン Java マニュアルで説明されているように、MessageDigest クラスには、これらの初期変数を設定するための API がありません。実際、初期変数の値は示されていません。
SHA-1 アルゴリズムの初期シードを設定するにはどうすればよいですか?
Java での SHA-1 の例、USING AN INITIAL SEEDはどこにありますか? (例が代替の初期シードを
使用しない限り、SHA-1 実装を探しています。)MessageDigest
security - メッセージ ダイジェスト、メッセージ認証コード、および HMAC の違いは何ですか?
メッセージ ダイジェストについての私の理解では、これは暗号化されたデータと共に送信される一部のデータの暗号化されたハッシュであるため、データが改ざんされていないことを確認できます。これと、メッセージ認証コード (MAC) およびハッシュ MAC (HMAC) の違いは何ですか?
cryptography - 衝突攻撃、メッセージダイジェスト、および考えられる解決策
私はメッセージダイジェストの分野でいくつかの予備調査を行ってきました。具体的には、 Postscriptの例やX.509証明書の複製など、MD5やSHA-1などの暗号化ハッシュ関数の衝突攻撃。
ポストスクリプト攻撃の場合に私が知ることができることから、特定のデータが生成され、ポストスクリプトファイルのヘッダー内に埋め込まれ(レンダリング中に無視されます)、md5の内部状態が変更された文言のような状態になりましたドキュメントの最終的なMD値は、元のポストスクリプトファイルと同等になります。X.509も同様のアプローチを採用しており、証明書のコメント/空白セクション内にデータが挿入されています。
さて、ここに私の質問があります、そして私はこの質問をしている人を見つけることができないようです:
消費されているデータのみの長さが、MD計算の最後のブロックとして追加されないのはなぜですか?
X.509の場合-MDの一部として空白とコメントが考慮されるのはなぜですか?
提案された衝突攻撃を解決するには、次のいずれかのような単純なプロセスでは不十分です。
- MD(M + | M |)= xyz
- MD(M + | M | + | M | * magicseed_0 + ... + | M | * magicseed_n)= xyz
どこ :
- M:メッセージです
- | M | :メッセージのサイズ
- MD:メッセージダイジェスト関数です(例:md5、sha、whirlpoolなど)
- xyz:は、メッセージMと|M|の実際のメッセージダイジェスト値のペアです。<M、| M |>
- magicseed_ {i}:サイズが追加される前の内部状態に基づいてシードで生成されたランダムな値のセットです。
これまでのところ、このような衝突攻撃はすべて、元のメッセージにデータを追加することに依存しているため、この手法は機能するはずです。
つまり、次のような衝突メッセージの生成に伴う難易度。
- 同じMDを生成するだけではありません
- しかし、理解可能/解析可能/準拠している
- また、元のメッセージと同じサイズですが、
ほぼ不可能ではないにしても、非常に困難です。このアプローチについて議論されたことはありますか?論文などへのリンクがあればいいのですが。
さらなる質問:Uからランダムに選択されたハッシュ関数Hの共通の長さのメッセージの衝突の下限は何ですか?ここで、Uはユニバーサルハッシュ関数のセットですか?
1 / N(Nは2 ^(| M |))ですか、それとも大きいですか?それが大きい場合は、特定のHの同じMD値にマップされる長さNのメッセージが複数あることを意味します。
その場合、これらの他のメッセージを見つけることはどれほど実用的ですか?ブルートフォースはO(2 ^ N)になりますが、ブルートフォースよりも時間計算量が少ない方法はありますか?
delphi - Delphi でプレーンテキスト + 秘密鍵から sha1 メッセージ ダイジェストを取得する
Sha1 メッセージ ダイジェストを作成したいのですが、プライベート キーをプレーン テキストと共に入力として使用する必要があります。
これまでに見つけたものはすべて、秘密鍵を使用しないか、入力として多くの証明書を取得するだけです。
java - ハッシュ用にJavaに実装されたhexToStringメソッドはありますか?
文字列をハッシュする小さなメソッドで作業しています。情報を探していると、ここで MessageDigest がこのタスクの作成に役立つことがわかりました。
しかし今、私は質問があります。Java で文字列をハッシュする手順は常に同じようです。
- MessageDigester を作成し、使用するアルゴリズムを指定します。
- ハッシュする文字列で MessageDigester を更新します
- 次に、MessageDigester.digest を呼び出すと、byte[] が取得されます。
ハッシュの最もよく使用される関数の 1 つがこのハッシュの文字列バージョンを取得することである場合、なぜ (私が参照した質問やその他の質問で) convToHex メソッドを実装する必要があるのでしょうか?
MessageDigester によって返されたバイト [] と文字列の間でこの解析を行うことができる Java メソッドはありますか?? 存在する場合、どこにありますか?? そうでない場合、なぜ独自の方法を作成する必要があるのですか?
ありがとう。
jsp - MessageDigestオブジェクトを登録からログインに渡す必要がありますか?
わかりました、私は少し混乱しています。MessageDigestを使用してパスワードをMD5ハッシュとしてデータベースに保存し、ユーザーがログインしようとしたときにハッシュを引き出してユーザーのパスワードを確認しようとしています。
したがって、ユーザーがregister.jspで登録するとき、私はこのコードを使用して、パスワード(コードでは「password」と呼ばれる文字列)をハッシュ(「hashtext」と呼ばれる)に変換します。
次に、ユーザーがログインしようとしたときに入力したパスワードを確認する方法を管理する必要があります。別のページlogin.jspがあります。ここでは、入力したパスワードに対して上記とまったく同じコードを実行し、データベースから取得したハッシュに対して結果を確認します。
ただし、これは機能しません。これは、新しいMessageDigestオブジェクトが作成されたため(MessageDigest.getInstance( "MD5");)、アルゴリズムの動作が異なるためだと思います。
login.jspでregister.jspと同じMessageDigestオブジェクトが使用されていることを確認する必要がありますか?