暗号化→一方向
1.一方向ハッシュ関数
ユーザパスワードを暗号化する場合、通常は一方向ハッシュ関数が使用されます.
名前から,一方向ハッシュ関数は復号できない暗号化アルゴリズムであることがわかる.
すなわち,ユーザのパスワードをデータベースに格納した場合,復号化の目的では格納されない.
元のパスワード値が全く分からないようにするためです.
test password
hash256
一方向ハッシュ関数を使用すると0b47c68b1.....094e
の値が得られます.단방향성
と呼ばれる.1.1 Pythonで実現
import hashlib
m = hashlib.sha256() # sha256 알고리즘 선택
m.update(b"test password") # 바이트 값 입력
m.hexdigest() # 암호화된 값을 hex(16진수) 값으로 읽어 들인다.
0b47c68b1.....094e
2.ハッカー...セキュリティ
ハッシュ関数
ハッシュ関数はもともとパスワードを格納するために設計されたものではなく,短時間でデータを検索するために設計されたものであるため,速度が速い.
dict、set資料構造でハッシュを使用します.
従って,ハッシュ関数は本来,処理速度を最大化するように設計されている.
脆弱性セキュリティ
一方向ハッシュ関数は、虹攻撃と呼ばれるハッカーメソッドによって侵入される可能性もあります.
これらのハッカーの脆弱性を保護するために、通常は2つの補足ポイントが使用されます.
1. salting
2. key stretching
2.1 salting
ハッシュ値を計算する方法は、実際のパスワードのほかにランダムなデータを追加することもできます.
本来パスワードにランダム値を付けてハッシュするので、ハッカーに侵入されてもハッカーは実際に
どの部分が実際のパスワード値で、どの部分がランダム値なのか分かりません.
したがって、
rainbow attack
のようにハッシュ値を事前に計算することができ、ハッカー攻撃を無効にすることができる.2.2 key stretching
従来の一方向ハッシュアルゴリズムの実行速度が速すぎるという欠点を補うために、
一方向ハッシュ値を計算した後、再びハッシュ値をハッシュし、その値を複数回繰り返す方法は
키 스트레칭(key stretching)
である.すなわち、ハッシュ関数を複数回適用してハッシュ値を計算する.一般的なデバイスは、毎秒50億個以上のハッシュ関数を実行することができる.
キーストレッチを適用すると,同じ装置では毎秒5回程度しか行えない.GPUを使っても数百~数千回しか運転できません.
これは50億回に比べて非常に少ない回数だ.コンピュータのパフォーマンスが向上するにつれて、ハッシュを繰り返し実行する回数を追加し続けることができます.
補うことができる長所がある.
3. bcrypt
saltingとkeystretchingを実現するハッシュ関数で最も広く用いられているのはbcryptである.
bcryptは,最初からパスワードを一方向に暗号化するために作成されたハッシュ関数である.
従って、認証エンドポイントを実現する際には、bcryptアルゴリズムが一般的に用いられる.
3.1インストール
pip install bcrypt
3.2使用
import bcrypt
bcrypt.hashpw(b"secrete password", bcrypt.gensalt()) # hashpw("비번", "salt값")
bcrypt.hashpw(b"secrete password", bcrypt.gensalt()).hex() # 16진수로 값을 본다.
Reference
この問題について(暗号化→一方向), 我々は、より多くの情報をここで見つけました https://velog.io/@94incheon/암호화-단방향テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol