IL - Bcrypt & JWT
Bcrypt
Bcryptを理解するには,まずハッシュ関数を理解する必要がある.
ハッシュ関数は、任意の長さのデータを固定長のデータにマッピングする関数であり、もともとはデータを迅速に検索するための関数であった.
ハッシュ関数には、ハッシュの結果値が元の値(元のデータ)から抽出できない(一方向ハッシュ関数)という特徴がある.
encryptとは異なりハッシュは単一リダイレクトであるため,鍵の有無にかかわらず復号後の値を復号し,元の値を知ることができず,ハッシュ関数により復号後の値を要約(digest-元の値を知ることができないためdigestと呼ぶ)に消化する.
このようにデジェストはぐるぐる囲まれていて、元の値段が分からないので安全に見えますが、事実はそうではありません.Rainbowテーブルが存在するからこそ、Rainbowテーブルはハッシュ関数で生成できる値を大量に格納したテーブルであり、brootforce攻撃によってユーザのパスワードを見つけたり、要約を平文として解釈したりするために存在する.これらのハッシュされた情報は、これらのレインボーテーブルを介して簡単に透過される可能性が高いため、代替案を探さなければなりません.
Rainbowテーブルなど(計算の発展によるBrook Forceの速度増加などを含む)に対抗するために,SaltingとKey-stretchingを用いることができる.
Salting
saltingはその名の通り塩を打つことであり,ハッシュ関数に元のデータを入れる前に任意の文字列(データ)を追加してハッシュすることを意味する.
たとえば、パスワードが「asdfasdf」の場合、任意の文字列(「asdfaswfoinw 3 vjljdil」)をsalt値で貼り付けて「asdfasdfasdfasdfasdfaswfoinw 3 vjljdil」としてsush関数に入れます.これにより,手帳を用いて元のデータを検索しても,重要なデータ(元のデータ)とは何か,saltとは何かを知ることができないため,より安全である.また、saltは任意の文字列を使用するため、Rainbowテーブルには対応する要約(saltを追加してハッシュする要約)がない確率が高いため、元のデータを推定する時間が長くなる.
Key-Stretching
これはSaltingとHash暗号化の欠点を補うために作成されたものであり,単純なHash関数(Hash関数)によって繰り返し行われる.例えば、Aという名前のデータを復号してBという名前の要約を得た場合、再びBを復号してCという名前の要約を保存する.もちろん,開発者自身のみが繰返し回数を知っているのが最良であるが,攻撃者がハッシュ関数を迂回した回数を知っていても,最終要約の原文値を知るためにかかる時間が長くなり,かなり困難になる.
Salting & Key-Stretching
私たちのパスワードをより安全に保存するためには、上記の方法をよく利用しなければなりません.最善の方法はSaltingとKey-stretchingを繰り返し使用することです.保存と復号化後、パスワードを安全に暗号化しながら、保存と復号化を繰り返すことができます.
もちろん,この方法は無条件で安全ではなく,計算の進展(GPU演算速度の向上)などに伴い,再び旧時代の暗号化方式ほど安全ではない可能性がある.
Hash関数のセキュリティを向上させるために、いくつかの簡単な方法を使用してHash関数のセキュリティを向上させ、それらを使用してパスワードを簡単に暗号化しました.これがBcryptです.
Bcryptは任意のSaltを自動的に生成し,キーを押すことでパスワードを暗号化し,ハッシュ関数,キー,キーの正確な原理を知らなくても暗号化を用いることができる.
Bcrypt example
ではBcryptを使いましょう
まずインストールします.
pip install bcrypt
簡単に設定できます.test.pyのPythonファイルを開いてテスト
import bcrpyt
password = '1234'
encoded_password = password.encode('utf-8')
print(encoded_password) # b'1234'
hashed_password = bcrypt.hashpw(encoded_password, bcrypt.gensalt())
print(hashed_password) # b'~~~~~' salt가 랜덤값이라 값은 다 다를것이다.
に示すように、コードを作成して実行すると、ハッシュ(暗号化)パスワードが表示されます.ここでbcryptgensalt()は、bcryptがランダムに生成したsalt値、bcryptである.gensalt()を印刷すると、他の値が生成され続けることがわかります.その関数ではなくsalt値を入力すると、salt値として保存できますが、これは固定値なので推奨されません.
こんな簡単なbcryptハッシュ暗号化はhashpw(平紋,bcrypt.gensalt()を使用して行うことができる.ただし、Bcryptには、入力値として72バイトの文字を使用する必要があるという制限があります.
JWT
(なに?JMTかな?)
JWTはJSON Web Tokenであり、通常、クライアントとサーバ、サービスとサービスとの間で通信を行う際に認証を行うために使用される.URLでも使えるように作られたURL-Safeは、主にRequestのHeaderに含まれています.
こうぞう
JWTはdot(.)3つの部分からなり、それぞれヘッダ、ペイロード、およびフラグと呼ばれる.誰もが自分の必要な情報を持っています.内容は以下の通りです.
「
Claimには次のものがあります.
トークン情報を表すデータ型が決定されたターゲットを登録します.
Public Claim(カスタムClaimは情報公開用、URI形式は衝突防止用).
≪プライベート・ターゲット|Private Targets|emdw≫(カスタム・ターゲットを使用してサーバとクライアントの間に指定した情報を格納します)
3種類あります.
JWTの利用
JWTは、主にログイン状態を通知する役割を果たしており、ページを移動するたびにログインできないため、ログインを行うクライアントはトークンを持ってページを移動し、必要なデータを要求するとともに、JWTトークンを承認(認可)に一斉に送信するプロセスである.JWTを交換するプロセスは次のとおりです.
Reference
この問題について(IL - Bcrypt & JWT), 我々は、より多くの情報をここで見つけました https://velog.io/@eslerkang/TIL-Bcrypt-JWTテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol