ubuntuアカウントのパスワードの問い合わせ
アカウント情報を表示する
cat /etc/passwd
上の図に示すように、各行のフォーマットは(例としてルートを取る)であり、各情報は次のように:
区切られています。
root:x : 0 :0 : root : /root : /bin/bash
root
アカウント名を示します
x
パスワードを示します。これは、ユーザーの情報を説明するために
0:0
UIDおよびGID をプレーンテキストで表すことができず
root:/root
、ホームディレクトリが/ rootでマークされていることを意味します
/bin/bash
ユーザーがシェルコマンドを実行すると、/ bin / bashになります。
パスワードを表示
当然のことながら、上記のパスワードはクリアテキストでは表示されませんが、情報を確認すると、パスワードが含まれていることがわかり、/etc/shadow
このファイルを開くにはroot権限が必要です。ssozh
このユーザーのパスワードを確認するとします。
su root
cat /etc/shadow | grep ssozh
結果は次のとおりです。
ssozh:$6$pESj8oMO$F4CIfS3/G9TE5aQ34Ifvcq74wZQhiBc9AqGuxTUPfUyEJ6M1e/ZwIcmWjkbPvrmxt3xod4Z4XRo2lYNxgip4x/:18363:0:99999:7:::
上記のパスワードはどのように表示されますか?各情報は、以下:
によっても区切られています。
ssozh
:ユーザー名
$6$pESj8oMO$F4CIfS3/G9TE5aQ34Ifvcq74wZQhiBc9AqGuxTUPfUyEJ6M1e/ZwIcmWjkbPvrmxt3xod4Z4XRo2lYNxgip4x/
:暗号化されたパスワード
18363
:最後にパスワードを変更してからの日数(1970年1月1
0
日以降):パスワードを変更できるようになるまでの
99999
日数:パスワードを変更する必要がある
7
までの日数:パスワードの有効期限が切れるまでの日数
- 次の数は、パスワードの有効期限が切れてからの日数、ユーザーアカウントが無効になる日、ユーザーが無効になる日付(1970年1月1日からの日数)、および将来の使用のために予約されているフィールドを示します
まず、MD5コードを順番に取得する方法を見てみましょう。
- ハッシュ値の前半はソルト値です(2つの$記号を使用して分離します)。
$6$pESj8oMO$
- 後半はソルト値+パスワードハッシュ値
検証。額面価格$6$pESj8oMO$
はわかっていますが、パスワードは123456
次のとおりです。
import crypt
if __name__ == '__main__':
print(crypt.crypt('123456','$6$pESj8oMO$'))
明らかに正しい。
塩の値はいくらですか?
初期パスワードはデータベースに直接保存されます:
mysql> select * from User;
+----------+----------+
| UserName | PassWord |
+----------+----------+
| lichao | 123 |
| akasuna | 456 |
+----------+----------+
このような平文ストレージは、情報を漏らすのが非常に簡単です。データベースが漏洩すると、すべてのユーザー名とパスワードが漏洩し、非常に深刻な結果を招きます。「600万ユーザーのパスワード漏洩のCSDN詳細説明」をご覧ください。
プレーンテキストストレージの欠点を回避するために、人々はストレージ後にmd5コード(SHA1)ハッシュを使用し始めました。今回はデータベースは次のとおりです。
mysql> select * from User;
+----------+----------------------------------+
| UserName | PwdHash |
+----------+----------------------------------+
| lichao | 202cb962ac59075b964b07152d234b70 |
| akasuna | 250cf8b51c773f3f8dc8b4be867a9a02 |
+----------+----------------------------------+
このハッシュ方式はもともと非常に優れているように設計されていましたが、一部の人々は一般的に使用されるパスワードを収集し、それらに対してMD5またはSHA1を実行してから、非常に大きなデータディクショナリ(rainbow table)を作成し、その後、データベースをリークしましたのパスワードが比較されます。残念ながら、元のパスワードがこのデータディクショナリに含まれていれば、元のパスワードと一致するまでに時間がかかりません。このデータディクショナリは簡単に収集でき、CSDNから漏えいした600wのパスワードは優れたオリジナル資料です。
ユーザーパスワードが単純すぎてソルト値が表示されるという事実に対処するために、データストレージフォームは次のようになります。
mysql> select * from User;
+----------+----------------------------+----------------------------------+
| UserName | Salt | PwdHash |
+----------+----------------------------+----------------------------------+
| lichao | 1ck12b13k1jmjxrg1h0129h2lj | 6c22ef52be70e11b6f3bcf0f672c96ce |
| akasuna | 1h029kh2lj11jmjxrg13k1c12b | 7128f587d88d6686974d6ef57c193628 |
+----------+----------------------------+----------------------------------+
ソルトには任意の文字、数字、または文字と数字の組み合わせを使用できますが、ランダムに生成する必要があります。各ユーザーのソルトは異なります。ユーザーが登録すると、データベースに保存されているパスワードは平文のパスワードではなく、単純でもありません平文パスワードをハッシュしますが、MD5(平文パスワード+ソルト)、つまり次のことを意味します。
MD5('123' + '1ck12b13k1jmjxrg1h0129h2lj') = '6c22ef52be70e11b6f3bcf0f672c96ce'
MD5('456' + '1h029kh2lj11jmjxrg13k1c12b') = '7128f587d88d6686974d6ef57c193628'
ユーザーがログインすると、同じアルゴリズムが認証に使用されます。
Saltの追加により、データベースがリークされても、Saltの追加後にパスワードがハッシュされるため、悪意のあるユーザーのデータディクショナリを直接照合することができなくなり、プレーンテキストのパスワードが解読される可能性が大幅に減少します。
リファレンス:https : //blog.csdn.net/sinat_30440627/article/details/53487076
MD5は、ダイジェストアルゴリズムに「復号化」がないことを主張しています。いわゆる復号化はブルートフォースクラッキングです。ブルートフォースクラッキングには多くの方法があります。ルックアップテーブルは最も高速ですが、事前にレインボーテーブルを準備する必要があります。あなたのように、ソルト値が固定されており、暗号化された文字の数が少ない場合。結果のレインボーテーブルはそれほど大きくありません。または、hashcatなどのツールを使用して、辞書やマスクなどを実行します。速度も非常に高速です。今日のGPUは、クラックされたパスワードをすばやく公開できます。
-
ハッシュアルゴリズムには「復号化」などはありません。それはすべてルックアップテーブルの爆発です。ブルートフォースクラッキングの難易度を上げるためだけに塩を追加しても、暗号化方式は本質的に変わりません。パスワード自体が複雑な複数桁のパスワードである場合。塩はほとんど違いがないことを知っていますか?
-
さらに、「塩の値」と「パスワード」を分離する方法はありません。塩の値を前面の中央または背面に配置できます。たとえば、上記のubuntuシステムでは、salt値は、
$ $
ギャップで区切られて、パスワードの前に直接ロードされます。実際、MD5以降のデータからソルト値を知ることができます。さらに、分離できる場合、7桁のabcdefgパスワードを7つの別個のabcdefg 1桁のパスワードに分離して解読できると思いますか?
Java Security ShiroパスワードのMD5ソルト値暗号化
https://blog.csdn.net/changudeng1992/article/details/81914534