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

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

14
暗号で素数が重要なのはなぜですか?
常に暗号解読者ではない私を襲う1つのこと:なぜ素数を使用することがそれほど重要なのですか?それらが暗号化でそれほど特別なのはなぜですか? 誰もが持っていますシンプルな短い説明を?(私は多くの入門書があり、Applied Cryptographyが聖書であることを知っていますが、言ったように:私は自分の暗号アルゴリズムを実装するつもりはありません、そして私が見つけたものは私の脳を爆発させました-10ページの数式ではありませんお願いします :)) すべての回答をありがとう。実際のコンセプトを最も明確にしたものを受け入れました。

8
パスワードをソルトする:ベストプラクティス?
私はいつも好奇心旺盛でした...ハッシュのためにパスワードをソルトするときにどちらが良いですか:プレフィックス、またはポストフィックス?どうして?それとも、塩漬けであれば問題ありませんか? 説明するには:データベースに保存するためにパスワードをハッシュする前に、パスワードをソルトする必要があることを(願わくば)わかっているはずです[ 編集:最近Jeff Atwoodで起こったことなどを避けることができます]。通常、これはソルトをパスワードと連結してから、ハッシュアルゴリズムに渡すことによって行われます。しかし、例は異なります...一部の例は、パスワードの前にソルトを付加します。一部の例では、パスワードの後にソルトを追加しています。塩を真ん中に入れようとする人も見ました。 それで、どちらがより良い方法で、なぜですか?ハッシュの衝突の可能性を減らす方法はありますか?私のグーグルは、そのテーマに関してまともな分析をしていません。 編集:すばらしい回答者の皆さん!一つだけ答えてすみませんでした。:)

7
SHA-1はパスワードの保存に対して安全ですか?
結論: SHA-1は、プリイメージ攻撃に対して何よりも安全ですが、計算は簡単です。つまり、ブルートフォース攻撃や辞書攻撃を実装する方が簡単です。(SHA-256などの後継者についても同じことが言えます。)状況によっては、(bcryptなどの)計算コストが高くなるように設計されたハッシュ関数の方が適している場合があります。 「SHA-1が壊れている」という発言を頻繁に投げかける人もいるので、それが何を意味するのかを理解しようとしています。SHA-1パスワードハッシュのデータベースがあり、攻撃者が最先端のSHA-1破壊アルゴリズムと100,000台のマシンを備えたボットネットにアクセスするとします。(10万台の家庭用コンピューターを制御できるということは、1秒あたり約10 ^ 15の操作ができることを意味します。) 一人のユーザーのパスワードを見つけますか? 与えられたユーザーのパスワードを見つけますか? すべてのユーザーのパスワードを調べますか? ユーザーの1人としてログインする方法を見つけますか? 特定のユーザーとしてログインする方法を見つけますか? パスワードがソルトされている場合、どのように変化しますか?ソルティングの方法(プレフィックス、ポストフィックス、その両方、またはxor-ingのようなより複雑なもの)は重要ですか? これは、ググリングした後の私の現在の理解です。誤解した場合は正解してください。 ソルトがない場合、レインボー攻撃はすべてのパスワード(非常に長いパスワードを除く)をすぐに見つけます。 十分に長いランダムソルトがある場合、パスワードを見つける最も効果的な方法は、ブルートフォースまたは辞書攻撃です。衝突攻撃やプリイメージ攻撃は実際のパスワードを見つけるのに役立ちません。そのため、SHA-1に対する暗号攻撃はここでは役に立ちません。どのアルゴリズムを使用するかは問題ではありません。MD5またはMD4を使用することもでき、パスワードも同じように安全です(SHA-1ハッシュの計算が遅いため、わずかな違いがあります)。 「同じくらい安全」であるかどうかを評価するために、1回のsha1の実行に1000の操作が必要で、パスワードに大文字、小文字、数字(つまり、60文字)が含まれていると仮定します。つまり、攻撃者は1 日に 10 15 * 60 * 60 * 24/1000〜= 10 17個の潜在的なパスワードをテストできるということです。ブルートフォース攻撃の場合、これはすべてのパスワードを3時間で最大9文字、1週間で最大10文字、1年で最大11文字までテストすることを意味します。(1文字追加するごとに60倍かかります。)辞書攻撃ははるかに速く(1台のコンピューターを使用している攻撃者でも数時間で攻撃を阻止できます)、弱いパスワードしか見つかりません。 ユーザーとしてログインするために、攻撃者は正確なパスワードを見つける必要はありません。同じハッシュになる文字列を見つけるだけで十分です。これは最初のプリイメージ攻撃と呼ばれます。私の知る限り、SHA-1に対するプリイメージ攻撃はありません。(ブルートフォース攻撃は2 160回の操作が必要です。つまり、理論上の攻撃者がそれを阻止するには10〜30年必要です。理論的な可能性の限界は約2 60回の操作で、攻撃には数年かかります。)プリイメージ攻撃があります。影響がごくわずかなSHA-1の削減バージョンに対して(80ではなく44ステップを使用する削減SHA-1の場合、攻撃時間は2 160オペレーションから2 157に減少)。SHA-1に対する衝突攻撃がありますが、理論的な可能性の範囲内です(私が見つけた最善の方法は、時間を2 80から2 52に減らします)が、ソルトがなくても、パスワードハッシュに対しては役に立ちません。 つまり、SHA-1でパスワードを保存することは完全に安全に思えます。私は何か見落としてますか? 更新: Marceloは、2 106操作での2番目のプリイメージ攻撃について言及している記事を指摘しました。(編集:として、トーマスは説明して、この攻撃は現実のシナリオには適用されません仮想的な構造です。)私はまだかかわらず、鍵導出関数としてSHA-1を使用するためにどのようにこの呪文の危険性が表示されません。衝突攻撃または2番目のプリイメージ攻撃が最終的に1番目のプリイメージ攻撃に変わる可能性があると考えるのに、一般的に十分な理由はありますか?
148 cryptography  hash  sha1 

9
XORがハッシュを結合するデフォルトの方法であるのはなぜですか?
2つのハッシュがH(A)ありH(B)、それらを結合したいとします。私は、2つのハッシュを組み合わせるための良い方法はXORそれらにあることを読んだ、例えばXOR( H(A), H(B) )。 私が見つけた最良の説明は、これらのハッシュ関数ガイドラインについてここで簡単に触れられています: ほぼランダムな分布で2つの数値をXORすると、ほぼランダムな分布*を持つ別の数値になりますが、これは2つの値に依存します。 ... *組み合わせる2つの数値の各ビットで、2つのビットが等しい場合は0が出力され、それ以外の場合は1が出力されます。つまり、組み合わせの50%では1が出力されます。したがって、2つの入力ビットがそれぞれ約50〜50の確率で0または1になる可能性がある場合、出力ビットも同様です。 XORが(ORやANDなどではなく)ハッシュ関数を組み合わせるためのデフォルトの演算である必要がある理由の直観や数学について説明できますか?

21
SSLハンドシェイクで「DHキーペアを生成できませんでした」という例外が発生するのはなぜですか?
一部のIRCサーバー(他のサーバーではない-おそらくサーバーの優先暗号化方式によるもの)とSSL接続を行うと、次の例外が発生します。 Caused by: java.lang.RuntimeException: Could not generate DH keypair at com.sun.net.ssl.internal.ssl.DHCrypt.<init>(DHCrypt.java:106) at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverKeyExchange(ClientHandshaker.java:556) at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:183) at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:593) at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:529) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:893) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1138) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1165) ... 3 more 最終的な原因: Caused by: java.security.InvalidAlgorithmParameterException: Prime size must be multiple of 64, and can only range from 512 to 1024 (inclusive) at com.sun.crypto.provider.DHKeyPairGenerator.initialize(DashoA13*..) …

9
どの暗号ハッシュ関数を選択すればよいですか?
.NETフレームワークには、6つの異なるハッシュアルゴリズムが付属しています。 MD5:16バイト(ハッシュにかかる時間500MB:1462ミリ秒) SHA-1:20バイト(1644ミリ秒) SHA256:32バイト(5618ミリ秒) SHA3​​84:48バイト(3839ミリ秒) SHA512:64バイト(3820ミリ秒) RIPEMD:20バイト(7066 ms) これらの機能はそれぞれ異なる方法で実行されます。MD5が最も速く、RIPEMDが最も遅い。 MD5には、組み込みのGuidタイプに適合するという利点があります。そして、それはタイプ3 UUIDの基礎です。SHA-1ハッシュはタイプ5 UUIDの基礎です。これにより、識別に非常に使いやすくなります。 ただし、MD5は衝突攻撃に対して脆弱です。SHA-1も脆弱ですが、程度は低くなります。 どのハッシュアルゴリズムをどの条件で使用すればよいですか? 私が答えを見て本当に興味がある特定の質問は次のとおりです。 MD5は信頼されないのですか?悪意のない意図でMD5アルゴリズムを使用し、第三者が悪意のある意図を持たない通常の状況では、すべての衝突が予想されます(2つの任意のバイト[]が同じハッシュを生成することを意味します) RIPEMDはSHA1よりどのくらい優れていますか?(より良い場合)計算が5倍遅くなりますが、ハッシュサイズはSHA1と同じです。 ファイル名(または他の短い文字列)をハッシュするときに、悪意のない衝突が発生する確率はどれくらいですか?(例:同じMD5ハッシュを持つ2つのランダムなファイル名)(MD5 / SHA1 / SHA2xxを使用)一般に、悪意のない衝突の確率はどれくらいですか? これは私が使用したベンチマークです: static void TimeAction(string description, int iterations, Action func) { var watch = new Stopwatch(); watch.Start(); for (int i = 0; i < iterations; i++) { func(); } …


10
構成ファイルのパスワードを暗号化しますか?[閉まっている]
閉まっている。この質問はスタックオーバーフローのガイドラインを満たしていません。現在、回答を受け付けていません。 この質問を改善してみませんか?Stack Overflowのトピックとなるように質問を更新します。 2年前休業。 この質問を改善する 構成ファイルからサーバー情報を読み取るプログラムがあり、その構成でパスワードを暗号化して、自分のプログラムで読み取って復号化したいと考えています。 要件: ファイルに保存される平文パスワードを暗号化する プログラムからファイルから読み込まれた暗号化されたパスワードを解読する これを行う方法についての推奨事項はありますか?私は自分のアルゴリズムを書くことを考えていましたが、それはひどく危険だと思います。

15
パディングは無効で削除できませんか?
私のプログラムに関してこの例外が何を意味するかをオンラインで調べましたが、解決策やそれが私の特定のプログラムで発生している理由を見つけることができません。Rijndaelアルゴリズムを使用してXmlDocumentを暗号化および復号化するために私のmsdnに提供されている例を使用しています。暗号化は正常に機能しますが、復号化しようとすると、次の例外が発生します。 パディングは無効であり、削除できません この問題を解決するために何ができるか誰にも教えてもらえますか?以下のコードは、キーとその他のデータを取得する場所です。cryptoModeがfalseの場合は、decryptメソッドが呼び出され、例外が発生します。 public void Cryptography(XmlDocument doc, bool cryptographyMode) { RijndaelManaged key = null; try { // Create a new Rijndael key. key = new RijndaelManaged(); const string passwordBytes = "Password1234"; //password here byte[] saltBytes = Encoding.UTF8.GetBytes("SaltBytes"); Rfc2898DeriveBytes p = new Rfc2898DeriveBytes(passwordBytes, saltBytes); // sizes are devided by 8 because …
125 c#  cryptography 

10
C#でのAES暗号化の使用
ロックされています。質問はトピックから外れていますが、歴史的に重要であるため、この質問とその回答はロックされています。現在、新しい回答や相互作用を受け入れていません。 AES 128ビット暗号化を使用したきれいな例を見つけられないようです。 誰かがサンプルコードを持っていますか?

5
MD5ハッシュの計算は、SHAファミリー関数よりもCPUに負荷がかかりませんか?
MD5ハッシュの計算は、「標準」のラップトップx86ハードウェアのSHA-1またはSHA-2よりもCPU負荷が少ないですか?特定のチップに固有ではなく、一般的な情報に興味があります。 更新: 私の場合、ファイルのハッシュを計算することに興味があります。ファイルサイズが重要な場合は、300Kと仮定します。
115 hash  cryptography  md5  sha1  sha2 

4
最終ブロックが適切にパディングされていない場合
パスワードベースの暗号化アルゴリズムを実装しようとしていますが、次の例外が発生します。 javax.crypto.BadPaddingException:最終ブロックが適切に埋め込まれていない場合 何が問題でしょうか? これが私のコードです: public class PasswordCrypter { private Key key; public PasswordCrypter(String password) { try{ KeyGenerator generator; generator = KeyGenerator.getInstance("DES"); SecureRandom sec = new SecureRandom(password.getBytes()); generator.init(sec); key = generator.generateKey(); } catch (Exception e) { e.printStackTrace(); } } public byte[] encrypt(byte[] array) throws CrypterException { try{ Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); …

6
PHPでデータを暗号化/復号化する方法は?
私は現在学生で、PHPを勉強しています。PHPで単純なデータの暗号化/復号化を試みています。私はいくつかのオンライン調査を行いましたが、それらのいくつかはかなり混乱していました(少なくとも私にとって)。 これが私がやろうとしていることです: これらのフィールド(UserID、Fname、Lname、Email、Password)で構成されるテーブルがあります。 私が欲しいのは、すべてのフィールドを暗号化してからsha256復号化することです(暗号化アルゴリズムでない場合でも、暗号化/復号化に使用できますか) 私が学びたいもう1つのことはhash(sha256)、良い「塩」と組み合わせた一方向を作成する方法です。(基本的に、暗号化/復号化、hash(sha256)+salt) サー/奥様の単純な実装が欲しいだけです。あなたの答えは非常に役に立ち、非常に感謝されます。ありがとう++

8
SSL証明書に使用するRSAキーの長さはどのくらいですか?
私はCSRを作成している最中ですが、RSA鍵に最適な長さは間違いありません。 もちろん、384はおそらく弱すぎ、16384はおそらく遅すぎます。 証明書の有効期間に応じて、使用する必要があるキーの長さにコンセンサスはありますか? 編集:ほとんどの人と同様に、私は自分の鍵を適度に強くしたいと思っています。NSAが2019年に私の鍵を破る可能性があることは心配していません。通常のビジネス(eコマースサイトなど)を計画している場合のベストプラクティスを知りたいだけです。

8
MD5は128ビットですが、なぜ32文字なのですか?
md5に関するドキュメントをいくつか読んだところ、128ビットと書かれていましたが、なぜ32文字なのですか?文字を計算できません。 1バイトは8ビットです 1文字が1バイトの場合 それなら128ビットは128/8 = 16バイトですよね? 編集: SHA-1は160ビットを生成しますが、文字数はいくつですか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.