6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

簡単・安全にパスワード流出を確認する方法を作った話

Last updated at Posted at 2019-06-28

#Qiita初投稿!!
初めてのqiita投稿、今まで読むだけだった私が記事を書いてみた。

#概要
Have I Been Pwned?でパスワードを送信せずにパスワード流出を確認できるスクリプトを書いてみた。

#作ったものと動機
以前から巷で有名なパスワードの漏洩を入力のみで確認できるサイト( https://haveibeenpwned.com/ )は存在が、パスワードをWeb上で入力し、送信するのには抵抗があった人も多いのではないだろうか?

そんなときにこんな記事を目にした。
Have I Been Pwned?でパスワードを入力せずに漏洩を調べる方法 | マイナビニュース
https://news.mynavi.jp/article/20190625-848118/

この記事によると、送信するのはパスワードではなく、パスワードをハッシュ化したハッシュ値の先頭5文字を送信する。
送信後、先頭5文字分に該当するハッシュ値のリストが取得できるため、ローカルにて先頭5文字以降のハッシュ値が含まれているか確認し、あれば流出していると言うことになる。

この方法であれば、自分が使用しているパスワードが外部に送信されることなく、安全に確認することができる。
しかし、記事に書かれていた方法ではLinuxコマンドを知っており、使えるような人でないと調べることができずもっと簡単に使えるようなソフトウェアがあれば、と言うことで作ってみた。

#作ってみた

PasswordCheck.ps1
$pw =(Read-Host パスワードを入力してください -AsSecureString)
$encpw = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pw)
$decpw  = [System.Runtime.InteropServices.Marshal]::PtrToStringBSTR($encpw)
$str1 = (([string]::concat(([security.cryptography.SHA1]::create().computehash([text.encoding]::ascii.getbytes($decpw))|%{ $_.tostring("x2")}))).ToUpper().Substring(0, 5))
$str2 = (([string]::concat(([security.cryptography.SHA1]::create().computehash([text.encoding]::ascii.getbytes($decpw))|%{ $_.tostring("x2")}))).ToUpper().Substring(6, 34))
[System.Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 -bor [Net.SecurityProtocolType]::Tls11
$api = (curl https://api.pwnedpasswords.com/range/$str1)
if($api | select-string -CaseSensitive $str2 ){
	echo "`r`n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!`r`n            流出しています。`r`n   直ちにパスワードを変更してください`r`n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!`r`n"
}else{
	echo "`r`n流出していません`r`n"
}

echo "終了するには何かキーを押してください . . ."
$host.UI.RawUI.ReadKey()
Start.bat
powershell -ExecutionPolicy RemoteSigned .\PasswordCheck.ps1

使い方
Start.batを起動し、調べたいパスワードを入力してEnterを押すと流出しているかどうか分かります。

実行例
pw.gif

#参考
Have I Been Pwned?
Validating Leaked Passwords with k-Anonymity
Have I Been Pwned?でパスワードを入力せずに漏洩を調べる方法 | マイナビニュース
Windows OS 上で文字列の SHA256 ハッシュ値を求める方法

6
4
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
6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?