2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Hashcatの基礎知識

Last updated at Posted at 2026-01-15

この記事で学べること

  • 辞書攻撃:単語リストを使った高速な攻撃
  • マスク攻撃:パターンを指定した総当たり攻撃

Hashcatとは

Hashcatとは、パスワードのハッシュ値から元のパスワードを復元(クラック)するためのオープンソースツールです。主に、パスワードの強度検証の際に使用されます。

環境

  • Kali Linux 2025
  • hashcat --version v7.1.2

パスワードとハッシュ値の関係性

ハッシュ値とは、ある値をハッシュ関数を通した時の出力のことです。
ハッシュ関数には以下の特徴があります。

  • 同じ入力なら同じ出力が得られる
  • 出力から入力逆引きが不可能
  • 入力が少しでも異なると、まったく違う出力になる

例えば、
Japanという単語のMD5におけるハッシュ値は53a577bb3bc587b0c28ab808390f1c9b

しかし、
japanになると、578ed5a4eecf5a15803abdc49f6152d6

このような性質を利用して、多くのシステムではパスワードをハッシュ値として保存しています。そのため、パスワードが漏洩しても、パスワードを直接知ることはできません。

Hashcatがパスワード復元できる理由

Hashcatは、すべてのパスワードの復元をできるツールではありません。
このツールは、考えられるパスワード候補を片っ端からハッシュ化し、保存されているハッシュ値と一致するものを探すからです。

つまり、
単語や数字の連番など、予想しやすいパスワードは復元される可能性は非常に高いです。言い換えれば、元のパスワードを予想することが困難なほど、復元される可能性は低くなります。

フォーマット

コマンドの構成は、

hashcat [オプション][ハッシュ値ファイル][ワードリストファイル]

オプション

  • ハッシュタイプ (-m 数字) 
    ハッシュタイプとは、ハッシュ値を生成する際のルールです。
    • -m 0 (MD5)
    • -m 500 (md5crypt)
    • -m 1400 (SHA2-256)
    • -m 1800 (sha512crypt)
      など他にも多くタイプが存在します。興味がある方は以下を参考にしてください。

今回はmd5cryptを使用します。

MD5md5cryptは別物です。簡単にいうと、md5cryptはMD5をより強固にしたものです。

  • 攻撃モード (-a 数字)
    攻撃モードとは、ハッシュ値を復元するための方法です。
    • -a 0(辞書攻撃)
    • -a 1(組み合わせ)
    • -a 3(マスク攻撃)
    • -a 6(辞書の単語 + マスクパターン)
    • -a 7(マスクパターン + 辞書の単語)

今回は辞書攻撃マスク攻撃を使用します。

辞書攻撃

テストファイルをGitHub上に公開しているので、必要な場合はダウンロードしてください。

辞書攻撃は、用意したワードリスト(辞書)を使用して、ハッシュ値を復元する攻撃です。

テストファイルを使用した実践

hashcat -m 500 -a 0 prefectures-md5 wordlist/500_passwords.txt
  • -m 500 (md5crypt)
  • -a 0(辞書攻撃)
  • prefectures-md5 (48個のハッシュ値ファイル)
  • wordlist/500_passwords.txt(500単語のワードリスト)

このコマンドを実行後、出力結果の一部にこのように書いてあるはずです。

結果

Approaching final keyspace - workload adjusted.           

$1$nicXOrQE$Adof2X8ef78atWB6mSG590:japan  

これだけで、1つ目のハッシュ値を復元することに成功しました!

このコマンドを簡単に解説すると、500単語のリストを順番にハッシュ化し、ターゲットのハッシュ値と比較しています。結果、japanという単語のハッシュ値が一致したため復元できました。

復元したハッシュ値が表示されない場合があります。その場合は、以下のコマンドを実行しましょう。

hashcat -m 500 --show prefectures-md5         
$1$nicXOrQE$Adof2X8ef78atWB6mSG590:japan

このように、単語を予測したリストを用意して、復元する方法が辞書攻撃です。

今回は48個中1個のみクラックできました。辞書攻撃はリストにある単語しか見つけられないため、より多くのパスワードを復元するには大きな辞書使う必要があります。

では、残りのハッシュ値も復元しましょう!

hashcat -m 500 -a 0 prefectures-md5 wordlist/prefectures.txt

実行後、すべてのハッシュ値がクラックできたはずです!
48個のハッシュ値は、英字で日本と47都道府県を表していました🇯🇵

マスク攻撃

マスク攻撃は、指定したパターンで文字列を総当たりする攻撃です。

マスク攻撃の記号

  • ?l 小文字 (a-z) 26通り
  • ?u 大文字 (A-Z) 26通り
  • ?d 数字 (0-9) 10通り
  • ?s 記号 33通り
  • ?a 上記すべて 95通り

テストファイルを使用した実践

mask-md5には2つのハッシュ値が保存されています。
パスワードは、1文字目は大文字、2文字目は小文字、3文字目は数字、4文字目は記号で構成されています。
つまり使用する記号列は、?u?l?d?s

hashcat -m 500 -a 3 mask-md5 ?u?l?d?s
  • -m 500 (md5crypt)
  • -a 3(マスク攻撃)
  • mask-md5 (2個のハッシュ値ファイル)
  • ?u?l?d?s(パスワードの構成文字列)

結果

$1$vlnVyE.E$NI6vUhgHWCURY0PEfI9.3/:Do2+                   
$1$uI9bYDk9$YzIAviJrjLqB.GFh1G.Av/:It6!

2つのハッシュ値はDo2+It6!を表していました!

マスク攻撃は総当たりのため、パスワードが長い、または?aを使用するば、より時間がかかります。
今回の ?u?l?d?s は 26×26×10×33 = 223,080通りなので短時間で終わりますが、
?a?a?a?aだと8,000万通り以上になり、より時間がかかります。

以上、辞書攻撃とマスク攻撃についての解説でした。

他の攻撃モードは、この2つを応用したものです。例えば -a 6(ハイブリッド攻撃)では、名前のリストとマスク ?d?d?d?d を組み合わせて「taro0123」のようなパスワードをクラックできます。興味がある方は調べてみてください。

補足

辞書攻撃でより多くのパスワードをクラックしたい場合は、rockyou.txtを使用しましょう。これは数千万件の実際に漏洩したパスワードを含むリストで、セキュリティテストによく使われます。(テストファイルにダウンロード済み)

参照

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?