TIL#10[Django]暗号化と認証


パスワードをまだ保存している場合は、
  • DBがハッカーによって攻撃された場合、パスワードはそのまま暴露されます.
  • ユーザーのパスワードが暗号化されておらず、公開的に保存されている場合、サーバ内部のユーザまたは開発者が悪意を持って使用する可能性があるため、
  • を暗号化する必要がある.
    なぜユーザーのパスワードを暗号化しますか?
  • DBがハッカーに攻撃されても、ユーザーのパスワードは暗号化され、ユーザーが悪意を持って使用できない時間を創造します.
  • 内部者もパスワード
  • を知らない
    いちほうこうハッシュかんすう
    一方向ハッシュ関数は、元のメッセージを変換することによって暗号化メッセージを生成する
    元のメッセージを知っている場合は、暗号化前に元のメッセージを知ることができますが、暗号化されたメッセージから元のメッセージを取得することはできません. 一方向 と呼ぶ.
    単一方向ハッシュ関数の弱点
    ハッシュの処理速度が非常に速いため、これを利用して複数文字のハッシュ値を事前に取得するRainbow Table攻撃を受けやすい.さらに、ほとんどのユーザーのパスワードが同じか似ているため、1人のユーザーのパスワードはより脆弱です.
    一方向ハッシュ関数の不足を補う方法
  • KeyStretching-KEY STRETCHING暗号化されたパスワードが解読されるまでに時間がかかり、それまでパスワード変更によるハッカー攻撃を最小限に抑えることができます.
  • セキュリティ・ストレージ:ハッシュ・パスワードにランダム値を追加してハッシュする方法
    ハッシュメソッド
  • 仮想環境ON
  • インストール
  • bcrypt
  • bcryptモジュールマウントImport bcrypt
  • ハッシュ文字列符号化
  • 	a = '1234'
    	a = a.encode('utf-8')
    5.パスワードハッシュ
    	hashed_pw = bcrypt.hashpw(a, bcrypt.gensalt() )
    ハッシュする変数を宣言し、bcryptを宣言します.hashpwハッシュを生成する関数に符号化パラメータaとsalt値のbcryptを追加する.gensalt()を追加すると、salt値を追加するハッシュパスワードが生成されます.
    	b'$2b$12$vYMsKVGrXez8pi3s8HDA5enSwInC/RB7Q0q8ubm2dwV7opATGu5P.'
    DBに保存するときは復号して保存する必要があります!
    ハッシュパスワードの比較方法
    	a='1234'		#사용자가 입력한 패드워드
        				#hased_pw는 DB에 저장된 암호화된 패스워드
                        
    	bcrypt.checkpw(a.encode('utf-8'), hashed_pw)
        
        	해쉬된 비밀번호가 일치하면 True
        	일치하지 않다면 False가 출력된다
    データベースから確認を取り出すときは、確認をエンコードする必要があります!
    ユーザーパスワードの保存方法
  • ユーザIDとパスワード生成パスワード符号化
  • ユーザパスワード暗号化後、復号化後はDBに保存する(符号化状態で保存するとバイト状態を示すハッシュ文字列前bに保存し、文字列としてDBに保存するが、使用時は既存入力のパスワードとは異なり注意!)
  • ユーザーログイン->IDとパスワードの入力
  • ユーザが生成したパスワードを符号化し、暗号化してデータベースに格納したユーザパスワードと比較する.