タグ付けされた質問 「cryptography」

暗号化は、プログラミングに関連している必要があります。暗号化は、とりわけ、暗号化、ハッシュ、デジタル署名をカバーしています。ソフトウェア開発に直接関係しない暗号化の質問は、crypto.stackexchange.comでよりよく尋ねられます。

11
2つの異なる文字列が同じMD5ハッシュコードを生成できますか?
バイナリアセットごとに、MD5ハッシュを生成します。これは、特定のバイナリアセットがすでにアプリケーションに存在するかどうかを確認するために使用されます。しかし、2つの異なるバイナリアセットが同じMD5ハッシュを生成する可能性があります。では、2つの異なる文字列が同じMD5ハッシュを生成する可能性はありますか?

15
AndroidでのMD5ハッシュ
単純なC#HTTPリスナーと「話す」必要がある単純なAndroidクライアントがあります。POSTリクエストでユーザー名/パスワードを渡すことにより、基本レベルの認証を提供したいと考えています。 MD5ハッシュはC#では些細なことであり、私のニーズに十分なセキュリティを提供しますが、Android側でこれを行う方法を見つけることができないようです。 編集:MD5の弱点について提起された懸念に対処するためだけです-C#サーバーは私のAndroidクライアントのユーザーのPCで実行されます。多くの場合、彼らは自分のLANでwi-fiを使用してサーバーにアクセスしますが、自分のリスクで、インターネットからアクセスすることを選択する場合があります。また、サーバー上のサービスは、私が制御できないサードパーティ製アプリケーションへのMD5のパススルーを使用する必要があります。

16
MD5ハッシュ値を元に戻せないのはなぜですか?
私がいつも疑問に思っている1つの概念は、暗号化ハッシュ関数と値の使用です。これらの関数は一意であり、事実上リバースすることは不可能であるハッシュ値を生成できることを理解していますが、これは私がいつも疑問に思っていたことです: 私のサーバー上にある場合、PHPで以下を生成します。 md5("stackoverflow.com") = "d0cc85b26f2ceb8714b978e07def4f6e" MD5関数を介して同じ文字列を実行すると、PHPインストールで同じ結果が得られます。ある開始値から、ある値を生成するためにプロセスが使用されています。 これは、何が起こっているのかを分解してハッシュ値を逆にする方法があることを意味しませんか? 結果の文字列をたどることが不可能になるこれらの関数については何ですか?


9
パスワードハッシュのランダムでないソルト
更新:私は最近この質問から、以下の全体の議論で私(そして他の人もそうだったと確信しています)は少し混乱していることを学びました:私がレインボーテーブルと呼んでいるものは実際にはハッシュテーブルと呼ばれます。レインボーテーブルは、より複雑な生き物であり、実際にはヘルマンハッシュチェーンのバリアントです。解答は同じであると私は信じていますが(解読には至らないため)、一部の議論は少し歪んでいる可能性があります。 質問:「レインボーテーブルとは何ですか。どのように使用されますか?」 通常、Rainbow Tableの攻撃から保護するなど、ハッシュ関数(パスワードなど)と共に使用するために、暗号として強力なランダム値をソルトとして使用することを常にお勧めします。 しかし、実際にはソルトがランダムであることは暗号的に必要ですか?これに関して、一意の値(userIdなどのユーザーごとに一意)で十分でしょうか?実際には、単一のRainbow Tableを使用してシステムのすべて(またはほとんど)のパスワードをクラックする ことはできません... しかし、エントロピーの欠如は、ハッシュ関数の暗号強度を本当に弱めるのでしょうか? ソルトを使用する理由、それを保護する方法(保護する必要はない)、単一の定数ハッシュを使用する(しない)、または使用するハッシュ関数の種類については尋ねていません。 塩がエントロピーを必要とするかどうかだけです。 これまでの回答に感謝しますが、私が(少し)あまり慣れていない領域に焦点を当てたいと思います。主に暗号解読への影響-誰かが暗号数学PoVから何らかの入力を持っている場合、私は最も感謝します。 また、考慮されていなかった追加のベクトルがある場合、それも素晴らしい入力です(複数のシステムでの@Dave Sherohmanポイントを参照)。 それ以上に、理論、アイデア、またはベストプラクティスがある場合は、証明、攻撃シナリオ、または経験的証拠のいずれかでこれをバックアップしてください。または、許容できるトレードオフについての有効な考慮事項...私はこのテーマのベストプラクティス(大文字のBの大文字P)に精通しています。これが実際に提供する価値を証明したいと思います。 編集:ここでいくつかの本当に良い答えがありますが、@ Daveが言うように、それは一般的なユーザー名のレインボーテーブルに帰着します...そしてあまり一般的ではない名前も考えられます。ただし、ユーザー名がグローバルに一意である場合はどうなりますか?必ずしも私のシステムで一意である必要はありませんが、ユーザーごとに-たとえば、電子メールアドレス。 (@Daveが強調しているように、saltは秘密にされていないため)シングルユーザー用のRTを作成するインセンティブはなく、これはクラスタリングを妨げます。唯一の問題は、別のサイトで同じメールアドレスとパスワードを使用している可能性があることです。 それで、それは暗号解読に帰着します-エントロピーは必要ですか、それとも不要ですか?(私の現在の考えでは、暗号解読の観点からは必要ではありませんが、他の実際的な理由からです。)

13
System.Security.Cryptography.RandomNumberGeneratorの代わりにC#クラスSystem.Randomを使用するのはなぜですか?
System.Security.Cryptography.RandomNumberGenerator(またはRandomNumberGeneratorは抽象的であるため、そのサブクラス)の暗号的に安全な乱数ジェネレーターを常に使用するのではなく、System.Randomの「標準」乱数ジェネレーターを使用するのはなぜですか? ネイトローソンは彼のGoogleTechTalkプレゼンテーションで私たちに語っています " 13:11分の CryptoStrikesBack」で、Python、Java、C#の「標準」乱数ジェネレーターを使用せず、代わりに暗号的に安全なバージョンを使用するます。 2つのバージョンの乱数ジェネレーターの違いを知っています(質問101337を参照))。 しかし、安全な乱数ジェネレーターを常に使用するとは限らない理由は何ですか?System.Randomを使用する理由 おそらくパフォーマンス?
87 c#  .net  cryptography  random 


2
安全な暗号化キーのstd :: arrayにカスタムアロケーターを使用できますか?
私std::arrayは完全にスタックに割り当てられていることを知っていますが、この質問は2つのことを必要とするセキュリティの懸念によって動機付けられています: のデータはstd::array破棄時にゼロ化またはランダム化されます のデータはロックstd::arrayされるため、クラッシュやスワップメモリ​​のいずれでもディスクに移動することはありません 通常、でstd::vectorの解決策は、これらのことを行うカスタムアロケータを作成することです。ただし、の場合std::array、これを行う方法がわからないため、この質問についてもわかりません。 私ができる最善のことはこれです: template <typename T, std::size_t Size> struct SecureArray : public std::array<T, Size> { static_assert(std::is_pod<T>::value, "Only POD types allowed") static_assert(sizeof(T) == 1, "Only 1-byte types allowed") virtual ~SecureArray() { std::vector<uint8_t> d = RandomBytes(Size); // generates Size random bytes std::memcpy(this->data(), d.data(), Size); } } ただし、これには明らかにメモリロックが欠けstd::arrayてstd::arrayおり、そもそも使用することで得られるパフォーマンススキームが複雑になります。 より良い解決策はありますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.