2

これが安全な認証方法になるかどうか疑問に思いました。

theInput = raw_input("Enter password: ")
theHashed = hashlib.sha512(theInput).hexdigest()
if theHashed == "35211b890b19afebfabc3451f04d150f1423bcb54ff7d62095677d7af7560fcvb56c112e879288836cb506853516c5dbd1d779cfaedf4a2f6f6a303600c0c589":
    print "Correct!"

そうでない場合、それをより安全にするために何ができますか?

4

4 に答える 4

4

たぶん、誰かがあなたのコードを読んだり変更したりできない限り。

これが1台のコンピューターでローカルに実行されるプログラムであり、通常のユーザーが変更できないようにファイルがインストールされていて、キーロガーがインストールされていないことがわかっている場合は、問題ない可能性があります。

ユーザーがこのファイルを読み取ることができる場合でも、ユーザーはコピーを作成し、そのコピーを変更して認証ステップを削除することができます。

プログラムのセキュリティは、ハッシュアルゴリズムの単なる選択を超えた、複雑で深いトピックです。

于 2012-01-06T03:53:21.777 に答える
2

グレッグ・ヒューギルの最初のポイントは強調する価値があります。私のノートブックでは、システムhashlib.pyが世界中に公開されていることを発見しました。したがって、上記の認証を破ることは簡単です。

localhost-2:coding $ cat hashcrack.py 
class always_equal(object):
    def __eq__(self, other):
        return True

class sha512(object):
    def __init__(self, password):
        pass
    def hexdigest(self):
        return always_equal()
localhost-2:coding $ cat hashcrack.py >> /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/hashlib.py
localhost-2:coding $ cat notsosecure.py 
import hashlib
theInput = raw_input("Enter password: ")
theHashed = hashlib.sha512(theInput).hexdigest()
if theHashed == "35211b890b19afebfabc3451f04d150f1423bcb54ff7d62095677d7af7560fcvb56c112e879288836cb506853516c5dbd1d779cfaedf4a2f6f6a303600c0c589":
    print "Correct!"
localhost-2:coding $ python notsosecure.py 
Enter password: pwned
Correct!

考えてみると、新しいsha512クラスを作成する必要はなく、古いクラスでhexdigestをモンキーパッチするだけで済みました。

とにかく、主要なセキュリティハザードであるのはハッシュのビット数ではないという点まで+1します。

于 2012-01-06T04:58:37.077 に答える
2

raw_input()の代わりにを使用import getpassします。theInput = getpass.getpass("Enter password: ")

于 2012-01-06T05:43:49.510 に答える
1

一般的なパスワード認証については、PBKDF2やscryptなどのKDFについてもっと考える必要があります。また、新しい暗号化ライブラリも確認する必要があります。

https://cryptography.io/en/latest/

于 2014-01-09T20:33:28.507 に答える