hack のためのネタ帳, etc,,,

ネタ元:

公式ページ等

memo

昔いた研究室のメアドが pwned とか言われたので、どういう状況なのか確認したいと思った。
password を直接確認するインターフェースもあって、多分クライアントサイドでハッシュ作って投げるくらいの良心はあると思いたいんだけど、
JavaScript 確認するのは面倒だし、web ページに生のパスワード入れるのも流石に気が引けるので、ローカルに拾って来て確認したいところ。

以下に Pwned Passwords list の torrent ファイルが転がってる。 Version 4 ordered by prevalence (2019-01-17) を拾って来てみたところ 7zip 圧縮されてて、展開すると以下のファイルが得られた。
24,303,121,452 bytes 2019-01-15 10:54:30 +0900 pwned-passwords-sha1-ordered-by-count-v4.txt
展開には i7-6700K の PC 上で cygwin の 7z 使って 13 分くらい要した。

フォーマットは以下のようになっている。
SHA1ハッシュ値:度数
なので、ローカルでパスワードは調査出来るがメアドは調査出来ない。

とりあえず、 で作った、getpw.sh を使って以下のようなスクリプトを書いてみた。

ispwned.sh

#!/usr/bin/env bash
[[ -z "$GREP" ]] && type -p ag >/dev/null && GREP=ag
GREP=( ${GREP:-grep --color -i -n} )
HASH="$(getpw.bash | tr -d "\n" | sha1sum | awk '{print $1}')"
"${GREP[@]}" "$@" "$HASH" pwned-passwords-sha1-ordered-by-count-v4.txt
1 ファイル 23 GB とかいう馬鹿みたいにデカいテキストファイルなので、ag こと The Silver Searcher 使っても 15 秒くらい、grep だと 30 秒くらいかかる。

因みに、行数は 551,509,767 行あるんだけど、以下のようにして行数数えるだけでも 1 分 20 秒かかる。grep も ag も早過ぎ。
$ time awk 'END{print FNR}' pwned-passwords-sha1-ordered-by-count-v4.txt
551509767

real    1m20.170s
user    1m14.186s
sys     0m5.156s
これ wc だと全然終わらないので、awk でやってみたんだけど、16分以上かかってしまった。wc 何やっとん?
$ time wc pwned-passwords-sha1-ordered-by-count-v4.txt
  551509767   551509767 24303121452 pwned-passwords-sha1-ordered-by-count-v4.txt

real    16m15.807s
user    15m51.765s
sys     0m12.655s

とりあえず、再頻出の 123456 は検索出来たので、前述の pwned って出た昔所属してた研究室のパスワードをはじめとして思い当たるパスワードを一通り入れてみたが、どれもマッチしなかった。
以下に API による問い合わせの作例があったのだが、openssl の出力をパースし損なってたりとか微妙だったので、実装し直してみた。
実装結果は以下。 二桁 GB のデータベース拾ってくる必要もないし、SHA1 hash の頭 5 文字しか曝さないので秘匿性も高いし、何せよ速いのでこれは良いな。

$ time echo 123456|./haveibeenpwned.sh
D09CA3762AF61E59520943DC26494F8941B:23174662
Oh no - pwned!

real    0m0.308s
user    0m0.108s
sys     0m0.122s
$ time echo 123456alskdjfhg|./haveibeenpwned.sh
Good news - no pwnage found

real    0m0.313s
user    0m0.091s
sys     0m0.169s

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

管理人/副管理人のみ編集できます