0

私のプログラムでは、特定のユーザーのみがプログラムに入ることができるようにするだけでなく、ユーザーに応じてプログラムの機能を変えることができるように、単純なログイン プロンプトを用意しています。私がやりたいことは、ユーザーのログイン情報 (ユーザー名、パスワードなど) をオンライン データベースを介さずに安全に保存することです。テキスト ファイルを使用してこの情報を保存するのは非常に悪い考えであることはわかっています。このログイン情報の配列をプログラム内で内部的に作成するよりも簡単な方法があると確信しています。これを行う方法の提案をいくつか教えていただけますか?

4

2 に答える 2

3

ハッシュは必要なものです。ハッシュ作成関数をコードに貼り付けます。MD5関数はすべての主要なプラットフォームでオンラインで利用できます。次に、ハッシュのペアを構成ファイルに保存します。ファイルが編集できないように、パスワードとアドミッタンス オプションを別のハッシュに組み合わせる巧妙な方法を考案してください。このようにして、アカウント構成を配布することができ、些細な暗号化ミスを犯さなければ、思い通りに機能します。構成ファイル行の例 (明確にするためにハッシュを 6 文字に切り詰めています):

1a2b3c print;search;evaluate 4d5e6f

ここで、1a2b3c は として取得されMD5(username.Text+verysecret)、動詞はアカウントの権利であり、4d5e6f は次のように取得されますMD5(line[1]+verysecret+password.Text)。ここで、line[1] は動詞が格納されている構成行の分割結果であり、残りはユーザーのパスワードです。

動詞によってパスワードが自動的にソルト化される方法と、パスワード ハッシュが無効になるため動詞が編集できないように保護されていることに注意してください。verysecret 定数は、実行可能コードに隠されているもので、誰もがハッシュを計算してプログラムのロックを解除するのを防ぎます。

ハッシュは、非対称暗号または鍵ペアではありません。とにかく、やる気のある攻撃者はあなたのプログラムをクラックして保護を完全にバイパスすることができるので、それ以上のことをしても無駄です.

非対称スキームを安価に見つけられるが十分に狡猾な場合は、その MD5 関数でいくつかの初期化定数を変更できます。これにより、特に偽のアカウント ファイルの作成に対して、コードのクラッキングが難しくなります。

編集:認証するとき、if(hashfromconfig == computedhash)...スクリプトキディだけが文字列比較関数にフックする方法を知っているわけではありません。代わりに書いてくださいif(MD5(hashfromconfig) == MD5(computedhash))......その後、文字列比較は以前と同じように機能しますが、偽造しようとしているファイルに入る貴重なキーハッシュが表示されないだけです。理想的には、MD5 関数の複数のバージョンをコード全体に分散させ、異なる名前を付けます。if(foo(hashfromconfig) == bar(computedhash))...素敵な効果のために使用してください。

于 2013-04-03T17:11:33.773 に答える
0

「オンライン データベースを介さずに」――クライアントサイドということですか?

このシナリオでは、「安全に保存」と「クライアント側」は相互に排他的な用語です。

ある種のオンライン (サーバー側) ソースに触れずにデータを安全に保存する方法は絶対にありません。サーバー側のソースに触れている場合は、DB である可能性もあります。

于 2013-04-03T16:50:58.797 に答える