bcrypt暗号化アルゴリズム
前言
私は社内で「インターフェース管理システム」(DRIM)を作りました.このシステムのユーザー認証は会社の既存のコード管理プラットフォームgitlabと一致する必要があります.DRIMがgitlabのデータベースを直接読んで認証する方法を採用しているので、gitlabがパスワードを暗号化する方法を知る必要があります.
プロセス
1.データベースの検索
このプロセスは簡単で、すぐにusersテーブルが見つかりました.encrypted_が入っています.passwordは、パスワードが暗号化された文字列を示す列です.
2.暗号化アルゴリズムを探す
密文の文字列は見つかったが、taは一般的なsha 1/md 5の流れではないので、gitlabhq@github狂ったように探して、コードを探して、userのようなものを見つけることができることを妄想しています.login($username,$userpaswd)の関数は実現されるが,1時間も収穫がない.
その後googleは1つのホームページに行ってdeviseがどんな暗号化アルゴリズムを使うかを言って、deviseは私はソースコードの中で何度も見たことがあって、しかもそれはきっと認証と関係があるに違いありません.さらにdeviseを見てみると、taはRoRのユーザー認証コンポーネントであり、RoRアプリケーションに統合されやすく、ユーザー認証をかなり完璧+簡単に解決することができます(システムごとに、ユーザー認証の流れは基本的に同じで、これもdeviseが独立したコンポーネントとしての意味です).
deviseコンポーネントは、暗号化アルゴリズムとしてbcryptをデフォルトで使用し、sha 512、md 5という簡単な要約アルゴリズムもサポートします.gitlabは、デフォルトのbcryptをパスワードとする暗号化アルゴリズムを使用します.
bcryptアルゴリズムについて
これまで使ったことがなかったのでgoogleを続けたところ、RoRで使われていることが多く(deviseコンポーネントのおかげ)、他のタイプの開発フレームワークでは多くないようで、googleの結果は少ないことがわかりました.まず大体taの使用を理解しました: saltとcostの2つの値によって暗号化プロセスを遅らせ、taの暗号化時間(100 ms級)はmd 5(約1 ms程度)をはるかに上回った. cost値もよく理解していませんが、私はしばらくtaを反復回数と見なしています.RoRのdeviseコンポーネントのデフォルトのcostは10ですが、実際には12が推奨されています. bcryptは一方向であり、saltとcostの処理を経て、rainbow攻撃による解読の確率を大幅に低下させ、同時に解読の難易度も大幅に向上させた. bcrypt暗号化後の文字列形は、$2 a$10$asdjflkaydgigadfahgl.asdfaoygoqhgasldhf、$は分割子であり、意味がない.2 aはbcrypt暗号化バージョン番号である.10はcostの値です.その後の上位22位はsalt値である.それから文字列はパスワードの暗号文です.
bcryptのpythonライブラリ
私はRoRを使わなくて(だから半日deviseを探したのは何ですか)、普段pythonを使うことが多くて、DRIMシステムもpythonが開発したのです.だからpythonでbcryptを使って資料を探しました.
pythonのこのパッケージはbcryptと呼ばれ、インストール方法:pip install bcrypt;
demoコードは次のとおりです.
このアルゴリズムは良くて、もっと安全で、性能に対する要求が特に高くない场合に使うことができて、后で私はよくtaを使うつもりです!^^;
私は社内で「インターフェース管理システム」(DRIM)を作りました.このシステムのユーザー認証は会社の既存のコード管理プラットフォームgitlabと一致する必要があります.DRIMがgitlabのデータベースを直接読んで認証する方法を採用しているので、gitlabがパスワードを暗号化する方法を知る必要があります.
プロセス
1.データベースの検索
このプロセスは簡単で、すぐにusersテーブルが見つかりました.encrypted_が入っています.passwordは、パスワードが暗号化された文字列を示す列です.
2.暗号化アルゴリズムを探す
密文の文字列は見つかったが、taは一般的なsha 1/md 5の流れではないので、gitlabhq@github狂ったように探して、コードを探して、userのようなものを見つけることができることを妄想しています.login($username,$userpaswd)の関数は実現されるが,1時間も収穫がない.
その後googleは1つのホームページに行ってdeviseがどんな暗号化アルゴリズムを使うかを言って、deviseは私はソースコードの中で何度も見たことがあって、しかもそれはきっと認証と関係があるに違いありません.さらにdeviseを見てみると、taはRoRのユーザー認証コンポーネントであり、RoRアプリケーションに統合されやすく、ユーザー認証をかなり完璧+簡単に解決することができます(システムごとに、ユーザー認証の流れは基本的に同じで、これもdeviseが独立したコンポーネントとしての意味です).
deviseコンポーネントは、暗号化アルゴリズムとしてbcryptをデフォルトで使用し、sha 512、md 5という簡単な要約アルゴリズムもサポートします.gitlabは、デフォルトのbcryptをパスワードとする暗号化アルゴリズムを使用します.
bcryptアルゴリズムについて
これまで使ったことがなかったのでgoogleを続けたところ、RoRで使われていることが多く(deviseコンポーネントのおかげ)、他のタイプの開発フレームワークでは多くないようで、googleの結果は少ないことがわかりました.まず大体taの使用を理解しました:
bcryptのpythonライブラリ
私はRoRを使わなくて(だから半日deviseを探したのは何ですか)、普段pythonを使うことが多くて、DRIMシステムもpythonが開発したのです.だからpythonでbcryptを使って資料を探しました.
pythonのこのパッケージはbcryptと呼ばれ、インストール方法:pip install bcrypt;
demoコードは次のとおりです.
import bcrypt
password = b"yourpassword"
# password 10 , hashed, :$2a$10$aoiufioadsifuaisodfuiaosdifasdf
hashed = bcrypt.hashpw(password, bcrypt.gensalt(10))
# password , bcrypt.hashpw() salt,bcrypt 、cost 22 salt, hash
if bcrypt.hashpw(password, hashed) == hashed:
print("It Matches!")
else:
print("It Does not Match :(")
このアルゴリズムは良くて、もっと安全で、性能に対する要求が特に高くない场合に使うことができて、后で私はよくtaを使うつもりです!^^;