2012-01-06 7 views
2

これは認証の安全な方法になる場合、私は思っていた。そうでない場合PythonのSHA512セキュリティ

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

、私はそれをより安全にするために何ができますか?

答えて

4

あなたのコードを誰かが読んだり修正したりできない場合は、

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

このファイルをに読み取っても、コピーを作成してコピーを修正して認証手順を削除することができます。

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

2

Greg Hewgillの最初のポイントは強調する価値があります。私はちょっと驚いたことに、私のノートブックでは、システム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! 

は、そういえば、私も私は単に古いものでhexdigestをmonkeypatchedている可能性が、新しいSHA512クラスを作成する必要はありませんでした。とにかく

、代わりにraw_inputのそれが支配的なセキュリティ上の危険性は、あなたのハッシュ内のビット数ではないことをポイントに+1。..

+0

+1:あなたはまた、新たな暗号ライブラリをチェックアウトする必要があります –

2

使用import getpass、その後theInput = getpass.getpass("Enter password: ")()。

関連する問題