私の現在のプロジェクトの1つでは、私はシングルユーザー認証システムを利用しています。同じWindowsアカウントで複数のユーザーがこの作業を行う予定がないため、私は「シングルユーザー」と言います(これは単に私が探しているものではないからです)。文字列暗号化の問題
ユーザーがアプリケーションを起動すると、認証画面が表示されます。この認証画面は、画像(すなわち、画像内の3つの特定の点をクリックする)、ユーザ名(標準編集ボックス)、および画像選択肢(使用する画像を選択できるドロップダウンメニュー)を使用する。イメージの選択、ユーザー名、およびイメージ上でクリックしたポイントは、パスワードを設定するときにユーザーが指定したものとすべて一致する必要があります。
すべて3の結果は、次いでSoap.EncdDecd.EncodeString
方式で符号化された文字列に結合されています。これはSHA-512を使用してハッシュされます。最後に、DESを使用して暗号化されています。この値は、パスワードを設定したときに作成された値と比較されます。一致すると、アクセス権が与えられます。そうでない場合、アクセスは拒否されます。私は、SHA512の値をアプリケーションの他のポイントで使用する予定です(メインアプリケーション内のさまざまなモジュールで自分自身を認証するための「マスターパスワード」など)。一例では
は、最初の文字列の長さは29文字であり、SOAPエンコードされた文字列は、約40文字であり、SHA-512の文字列は、128文字であり、DES値は344個の文字です。私は大規模な文字列で作業していないので、実際には本当に速いです。 SOAPはセキュリティの手段としてではなく、非常に基本的な難読化として使用されていました。
私の懸念は、最初の部分(プレーンストリングとSOAP)が弱点になる可能性があることです。基本的な文字列は、単に入力してアクセス権を与えることはできませんが、アプリケーションにアクセスする可能性のあるユーザー名と画像の選択とともに「画像のクリック座標」を与えます。 SOAP文字列は簡単に解読できます。ストレートメモリからリッピングされた値を試してみて、避けるために、認証のこの最初の部分を強化するための最良の方法だろう何
?私は、潜在的な悪用者や攻撃者がこのような方法で値を読み取ることについても気にする必要がありますか?直接この同じトピックに関連する追加の質問として
。ユーザーは、初期設定時に作成したパスワードのハッシュを格納するための最良の方法だろう何
?
私はまだ、よりエレガントな何かを思いついていないので、私はTIniFile.SectionExists
メソッドで現在実行しています。これは私の知識が欠けている1つの領域です。私はセッションの間にパスワード "ハッシュ"を格納する必要があります(メモリストリームを使用することはオプションではありません)が、セキュリティは十分であることを確認する必要があります。
エンコード、ハッシング、暗号化が実際には十分であるかどうかは、私が心配すべきかどうかという点では本当に重要です。私が開発した画像パスワードシステムは、すでに伝統的なものを停止するための素晴らしい基盤です"あなたのテキストベースのパスワードは今私があなたのシステムにいることを知っています"攻撃ですが、メモリから。 SHA-512を使用し
あなたのユーザーはあなたを嫌い、あなたのプログラムはまだハッキングされます。両方の世界の最悪。 –