ネタ元:
- srad / 2019-01-20: どこかで流出した電子メールアドレスとパスワードの組み合わせ27億行近くを含むデータ、古いものが大半
昔いた研究室のメアドが pwned とか言われたので、どういう状況なのか確認したいと思った。
password を直接確認するインターフェースもあって、多分クライアントサイドでハッシュ作って投げるくらいの良心はあると思いたいんだけど、
JavaScript 確認するのは面倒だし、web ページに生のパスワード入れるのも流石に気が引けるので、ローカルに拾って来て確認したいところ。
以下に Pwned Passwords list の torrent ファイルが転がってる。
フォーマットは以下のようになっている。
とりあえず、 で作った、getpw.sh を使って以下のようなスクリプトを書いてみた。
1 ファイル 23 GB とかいう馬鹿みたいにデカいテキストファイルなので、ag こと The Silver Searcher 使っても 15 秒くらい、grep だと 30 秒くらいかかる。
因みに、行数は 551,509,767 行あるんだけど、以下のようにして行数数えるだけでも 1 分 20 秒かかる。grep も ag も早過ぎ。
とりあえず、再頻出の 123456 は検索出来たので、前述の pwned って出た昔所属してた研究室のパスワードをはじめとして思い当たるパスワードを一通り入れてみたが、どれもマッチしなかった。
password を直接確認するインターフェースもあって、多分クライアントサイドでハッシュ作って投げるくらいの良心はあると思いたいんだけど、
JavaScript 確認するのは面倒だし、web ページに生のパスワード入れるのも流石に気が引けるので、ローカルに拾って来て確認したいところ。
以下に Pwned Passwords list の torrent ファイルが転がってる。
- Have I Been Pwned? / Paswords
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 を使って以下のようなスクリプトを書いてみた。
#!/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
因みに、行数は 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 の出力をパースし損なってたりとか微妙だったので、実装し直してみた。
実装結果は以下。
実装結果は以下。
- Gist / kou1okada / haveibeenpwned.sh
$ 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
タグ
コメントをかく