問題タブ [password-encryption]
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.
security - 登録時のパスワードはどのように保護されますか?
サイトがパスワードを保存する方法はいくつかあり、その中には他の方法よりもかなり安全なものもあります。ここでは、最も一般的な方法の簡単な概要と、それらがデータのセキュリティにとって何を意味するかを示します。
方法 1: プレーン テキストのパスワード 仕組み: サイトがパスワードを保存する最も簡単な方法は、プレーン テキストです。つまり、彼らのサーバーのどこかに、ユーザー名とパスワードが人間が読める形式で格納されたデータベースが存在することを意味します (つまり、パスワードが testing123 の場合、データベースには testing123 として保存されます)。サイトで資格情報を入力すると、データベースと照合して一致するかどうかが確認されます。これはセキュリティの観点から考えられる最悪の方法であり、評判の良い Web サイトのほとんどはパスワードをプレーン テキストで保存していません。誰かがこのデータベースをハッキングすると、全員のパスワードがすぐに侵害されます。
強力なパスワードは重要ですか? とんでもない。パスワードの長さや強度に関係なく、パスワードがプレーン テキストで保存されていて、サイトがハッキングされた場合、パスワードは誰でも簡単にアクセスでき、作業は必要ありません。たとえば、友人や簡単に推測できる人からパスワードを隠すという点では依然として重要ですが、サイトがハッキングされた場合は何の違いもありません.
方法 2: 基本的なパスワード暗号化 仕組み: プレーン テキストよりもパスワードの保護を強化するために、ほとんどのサイトではパスワードをサーバーに保存する前に暗号化しています。ご存じない方のために説明すると、暗号化は特別なキーを使用してパスワードをランダムな文字列に変換します。ハッカーがこのランダムなテキスト文字列を手に入れたとしても、暗号化解除に使用できるキーも持っていない限り、アカウントにログインすることはできません。
問題は、多くの場合、キーがパスワードとまったく同じサーバーに保存されているため、サーバーがハッキングされた場合、ハッカーはすべてのパスワードを解読するために多くの作業を行う必要がないことです。つまり、この方法は依然として非常に安全ではありません. .
強力なパスワードは重要ですか? いいえ。パスワード データベースはキーで簡単に復号化できるため、ここでも強力なパスワードを使用しても違いはありません。繰り返しますが、これはサイトがハッキングされるという点です。せんさく好きな友人や家族があなたのものを応援している場合、強力なパスワードを使用すると、彼らが推測するのを防ぐことができます.
方法 3: ハッシュ化されたパスワード 仕組み: ハッシュ化は、パスワードを文字と数字の長い文字列に変換して隠しておくという意味で、暗号化に似ています。ただし、暗号化とは異なり、ハッシュは一方通行です。ハッシュがある場合、アルゴリズムを逆方向に実行して元のパスワードを取得することはできません。これは、ハッカーがハッシュを取得し、さまざまなパスワードの組み合わせを試して、どれが機能するかを確認する必要があることを意味します.
ただし、この方法には欠点があります。ハッカーはハッシュをデコードして元のパスワードに戻すことはできませんが、所有しているハッシュと一致するまで、さまざまなパスワードを試すことができます。コンピュータはこれを非常に高速に行うことができ、レインボー テーブルと呼ばれるもの (本質的に何兆もの異なるハッシュとそれに一致するパスワードのリスト) の助けを借りて、ハッシュを調べて、それが既に発見されているかどうかを確認することができます。Google に e38ad214943daad1d64c102faec29de4afe9da3d と入力してみてください。「password1」の SHA-1 ハッシュであることがすぐにわかります。レインボー テーブルのしくみの詳細については、コーディングの第一人者 Jeff Atwood によるこの記事を参照してください。
強力なパスワードは重要ですか? この場合、はい。レインボー テーブルは、ハッシュに対してテスト済みのパスワードで構成されているため、非常に脆弱なパスワードはすぐに解読されてしまいます。ただし、最大の弱点は複雑さではなく、長さです。短くて複雑なパスワード (kj$fsDl# など) よりも、非常に長いパスワード (XKCD の有名な「正しい馬のバッテリー ステープル」など) を使用することをお勧めします。
方法 4: ハッシュ化されたパスワードに塩を少し加えたもの 仕組み: ハッシュのソルト化とは、パスワードをハッシュ化する前に、パスワードの先頭または末尾にランダムな文字列 (「ソルト」と呼ばれる) を追加することを意味します。パスワードごとに異なるソルトを使用し、ソルトが同じサーバーに保存されていても、それぞれが長く、複雑で、一意であるため、レインボー テーブルでソルトされたハッシュを見つけるのが非常に困難になります。LinkedIn はソルト付きハッシュを使用していないことで有名であり、最近のハッキングの後、多くの監視下に置かれました。ソルトを使用していれば、ユーザーはより安全だったでしょう。
上記の記事を読んで、私は次の質問を念頭に置いています
1 .パスワードを持っていなくても、メッセージダイジェストを傍受できます...パスワードさえ必要ありません...私は単に応答攻撃を開始します(つまり、傍受後に認証のためにメッセージダイジェスト自体を送信しますそれ!!)
上記の問題の解決策は、次の方法で解決できます。 a. サーバーがランダムな文字列 (通常はチャレンジとして知られている) をユーザーに生成し、パスワードで暗号化するように要求します ..... b. ユーザーがパスワードを入力し、メッセージ ダイジェストパスワードのランダムな文字列が作成され、このメッセージ ダイジェストによって暗号化されます。この暗号化された文字列はサーバーに送信されます。d.server はまた、ランダムな文字列をユーザーのメッセージ ダイジェストで暗号化し、ユーザーから受信した暗号化された文字列でチェックし、両方が一致する場合、彼は有効なユーザーです..!
2 .私の質問は、ハッカーがデータベースにアクセスできる場合、メッセージダイジェストにアクセスできます/データベースにアクセスできなくても、ユーザーが最初にDBに登録するときに通信リンクを傍受しながらメッセージダイジェストを取得できます.. ....どうすればこれを防ぐことができますか??
mysql - Hibernate でのパスワードの操作 (スタンドアロン アプリケーションの場合)
Java スタンドアロン アプリケーション (Netbeans+Spring+Hibernate+MySQL データベース+Swing) でパスワード フィールドを処理する方法に関するベスト プラクティスを探しています。
1)パスワード列を含むテーブルを作成しました....では、この列はどのデータ型でなければなりませんか?2) パスワードを SALT するためのどの種類のアルゴリズムに従って、私のアプリに実装することをお勧めしますか? 3) パスワードを平文で保存するか、アルゴリズムに従って変換して保存することをお勧めしますか? 4) このすべてのプロセスのサンプル コード
スタンドアロン アプリで Spring を処理しなければならない他の多くの開発者や、この種の質問で Hibernate を使用するタスクを支援できることを願っています。
ご提案いただきありがとうございます。
javascript - ユーザー名と暗号化されたパスワードを RESTful サービスに送信する
私のアプリケーションでは、JavaScript クライアントで Spring MVC を使用しています。今度は、アプリに 4-eyes 検証フォームを追加する必要があります。つまり、2 人目の人間が来て、ユーザー名とパスワードを入力し、何らかの機密データの更新を検証する必要があります。次に、システムはその人物のユーザー名とパスワードをエンタープライズ LDAP と照合してチェックし、成功または失敗を返します。その人物の認証に失敗した場合、システムはユーザーに削除/追加ができないことを通知します。それが成功すると、システムは更新を実行します。
私の質問は、すべてのサービスが RESTful であるため、そのようなソリューションを最も安全な方法で実装するにはどうすればよいでしょうか? JavaScript API を使用してパスワードを暗号化し、ネットワーク経由で送信することは、中間者攻撃が大混乱を引き起こす可能性があるため、絶対に避けるべきだと聞いています。アプリのわずか 1% を表すそのフォームの目的にのみ役立つ HTTPS も使用したくありません。Spring Securityに行くべきですか?もしそうなら、Spring Security Web フォームを JavaScript フレームワーク内に統合するにはどうすればよいですか? どんな考えや経験でも大歓迎です。
ベスト、ジミー
database - ユーザー名のログイン詳細を別のデータベースに正常に移動する方法
3000 ユーザーのサイトを継承しました。Doplphin (Boonex) に基づく新しいサイトのデータベースにこれらのユーザーをすべてインポートしたいと考えています。
データをインポートしようとしました。ユーザー データは正常にインポートされますが、パスワードはインポートされません。
すべてのパスワードは暗号化されています。
古いデータベースでは、どのタイプの暗号化が使用されているかわかりませんが、おそらく MD5 ではないと思います。
これは、古いデータベースに現在保存されているパスワードの 1 つの形式です。
これらのパスワードを新しいデータベースにインポートするときに正しく機能させるにはどうすればよいですか?
別のフレームワーク内で動作している新しいデータベースにパスワードをインポートするために知っておく必要がある方法はありますか?
php - crypt(rounds=Y/2) を 2 回実行することで、PHP crypt(rounds=Y) の結果を取得することは可能ですか?
やりたいことはこんな感じに
$res_25 文字列で遊んでみましたが、まだ欲しい結果が得られません。私は crypt() がそれを使って重要なことをしていると思い、これを行う簡単な方法があるかどうか疑問に思います。
これを次のように使用するつもりです。ユーザーが登録すると、パスワードは 5k ラウンドを使用して暗号化され、結果が DB に格納されます (5k は単なる例です。十分に安全であると仮定しましょう)。ソルトは、レインボー テーブルを使用できないようにするのに役立ちますが、ラウンドはブルート フォースから保護します。DB が盗まれた場合、パスワードを解読することはできず、攻撃者は、ユーザーが同じパスワードを使用できた可能性のある他の場所でこれらのパスワードを使用できなくなります。
私たちのサイト自体には、サインイン フォームに "remember me" 機能があります。使用しない場合は、すべて問題ありません。ユーザーの状態をサーバー セッションに保存しますが、最終的には終了します。ただし、ユーザーが「remember me」を使用したい場合、Cookie を使用して、ユーザーの認証に使用できるデータを保存する必要があります。Cookie に保存するものは何でも - 元のパスワードであろうと md5($res_5a) のようなものであろうと、攻撃者が $res_5a の値を盗み、Cookie 作成の背後にあるアルゴリズムを盗んだ場合、攻撃者はこのデータを使用して Cookie を偽造することができます。それはユーザーを認証します。
私がやりたかったのは、サインイン フォームで $res_25 Cookie を作成することです。そして、ページが読み込まれるたびに、サーバーはさらに 2.5k の反復を追加し、値が DB に保存されている $res_5a と一致するかどうかを確認します。そうすれば、$res_5a が盗まれた場合、攻撃者はユーザーの認証に必要な $res_25 の値を計算できなくなります。
php - パスワードハッシュとは別にパスワードソルトを保存しますか?
パスワードハッシュに正しいアルゴリズムを使用し、パスワードごとに異なるソルトを生成すると仮定します...
パスワードハッシュとは別にソルトを保存することはセキュリティ上のリスクですか?例:データベーステーブルで、パスワードハッシュを1つの列に保存し、パスワードソルトを別の列に保存しますか?
特定のアルゴリズムを使用して、ソルトがパスワードハッシュ自体に埋め込まれる戦略を見ました。後で、ソルトはパスワードハッシュから抽出できます。これはより安全ですか?
c++ - Qt/C++ の暗号的に安全な疑似乱数ジェネレーター (クロスプラットフォーム)
機密データを管理する安全なアプリケーションを開発しているので、何らかの安全なログイン メカニズムが必要です。私は Qt ライブラリ (C++ バージョン) を使用していますが、これまでのところ、ユーザーがアプリケーションからアカウントを作成するときに、この [暗号的に安全な疑似乱数ジェネレーター] を提供してソルトを取得する関数が見つかりません。パスワードをデータベースに保存する方法については認識しており、新しいソルトを作成するときは CSPRNG が必須のようです。Qtでこれを行う方法を見つけようと長い間探していましたが、Qtだけでこれを行う方法はないという結論に達しました。むしろ、少なくともありますかこれを行うためのクロスプラットフォーム、C++ アプローチ? ライブラリを含めても問題ありませんが、LGPL にしたいので、将来、独自の/クローズド ソースのアプリケーションを開発することを選択した場合でも、同じ方法を使用できます。追加情報として、今のところ SQL (MSSQL Express サーバー) を使用する可能性は低いので、SQL タグを追加します。それが役立つ場合は、おそらくQSslSocketも(クライアント/サーバー間の暗号化のために)使用する予定です。これではなく、いくつかの光を当てることができれば、私はとても感謝しています!
php - ソルトを使用したphp暗号化/復号化機能-方法は?
システムにログインし、アカウント情報を編集し、アカウントを削除するための基本的なアプリケーションにphpを使用しています。私はmysqlデータベースを持っています。ソルトを使用してパスワードを暗号化/復号化する必要があります。どうすればいいのですか?データが安全であることを確認する必要があります。
passwords - Jablon または Ford の素数と Kaliski パスワード認証プロトコル?
Jablonプロトコルに関するこの論文でわかるように、特定の大きな素数 ( p,q,r ) を使用します。
これらの数値はどのように保存されていましたか?
android - Base64とAESBase64は同じですか?
Base64
アプリケーションのサーバーにパスワードを送信するためにデコードを使用しました。しかし、サーバー側のサポートでは、特にAESbase64を使用するように提案されました。私はそれについて少しグーグルで調べて、AndroidでAESbase64を使用しないこの理由を見つけました。しかし、通常のbase64(android.util.Base64)で暗号化された文字列を送信した場合、AES base 64を使用して元の文字列に復号化できますか?