[PATCH] Add command 'check' to check passwords against HIBP
Jacob MacDonald
jaccarmac at gmail.com
Thu Jan 17 23:55:14 CET 2019
Haven't tried this patch but was looking to solve the same problem when I
saw the blog post yesterday. There are a couple extensions out there that
also implement this functionality. The first is able to check all passwords
in the store and thus is what I ended up using.
[1] https://github.com/jamesridgway/pass-pwned
[2] https://github.com/alzeih/pass-pwned
On Thu, Jan 17, 2019 at 4:49 PM Pass Word <passwordstore at 89vx.net> wrote:
> Someone asked on irc today for an option to check passwords against the
> Have I Been Pwned website to see if they are already compromised. It is
> probably extremely rare for a password generated with pass to already be
> on there but whatever, it is still somewhat useful to check other
> passwords you might have stored in pass.
>
> Only the first 5 chars of the sha1 hash of each password is sent to the
> site (k-anonymity).
>
> Requires wget.
>
> $ pass check
> /Users/me/.password-store/deleteme.gpg contains a password found on HIBP.
>
>
>
>
> diff --git a/man/pass.1 b/man/pass.1
> index 01a3fbe..c20482b 100644
> --- a/man/pass.1
> +++ b/man/pass.1
> @@ -89,6 +89,13 @@ for matching. \fIGREPOPTIONS\fP are passed to
> .BR grep (1)
> as-is. (Note: the \fIGREP_OPTIONS\fP environment variable functions as
> well.)
> .TP
> +\fBcheck\fP
> +Searches inside each decrypted password file for passwords found on the
> +\fBHave I Been Pwned\fP
> +(http://pwnedpasswords.com)
> +website. Only the first five characters of the SHA1 sum of each password
> +are submitted.
> +.TP
> \fBfind\fP \fIpass-names\fP...
> List names of passwords inside the tree that match \fIpass-names\fP by
> using the
> .BR tree (1)
> @@ -287,6 +294,11 @@ Generate new password and copy it to the clipboard
> .br
> Copied Email/jasondonenfeld.com to clipboard. Will clear in 45 seconds.
> .TP
> +Check for compromised passwords
> +.B zx2c4 at laptop ~ $ pass check
> +.br
> +/Users/me/.password-store/deleteme.gpg contains a password found on HIBP
> +.TP
> Remove password from store
> .B zx2c4 at laptop ~ $ pass remove Business/cheese-whiz-factory
> .br
> diff --git a/src/password-store.sh b/src/password-store.sh
> index d89d455..af3b649 100755
> --- a/src/password-store.sh
> +++ b/src/password-store.sh
> @@ -270,6 +270,8 @@ cmd_usage() {
> If put on the clipboard, it will be cleared in $CLIP_TIME
> seconds.
> $PROGRAM grep [GREPOPTIONS] search-string
> Search for password files containing search-string when
> decrypted.
> + $PROGRAM check
> + Search for password files containing passwords found on
> Have I Been Pwned.
> $PROGRAM insert [--echo,-e | --multiline,-m] [--force,-f]
> pass-name
> Insert new password. Optionally, echo the password back to
> the console
> during entry. Or, optionally, the entry may be multiline.
> Prompt before
> @@ -398,6 +400,22 @@ cmd_find() {
> tree -C -l --noreport -P "${terms%|*}" --prune --matchdirs
> --ignore-case "$PREFIX" | tail -n +2 | sed -E 's/\.gpg(\x1B\[[0-9]+m)?(
> ->|$)/\1\2/g'
> }
>
> +cmd_check() {
> + local password passfile sha1 prefix rest
> + while read -r -d "" passfile; do
> + password="$($GPG -d "${GPG_OPTS[@]}" "$passfile" | head -1)"
> + [[ $? -ne 0 ]] && continue
> + sha1=$(echo -n "$password" | $GPG --print-md sha1 | sed "s/ //g")
> + prefix=$(echo "${sha1:0:5}")
> + rest=$(echo "${sha1:5}")
> + set +o pipefail
> + if wget -q -O- https://api.pwnedpasswords.com/range/"$prefix" |
> grep -qi "$rest"
> + then
> + echo "$passfile" contains a password found on HIBP.
> + fi
> + done < <(find -L "$PREFIX" -path '*/.git' -prune -o -iname '*.gpg'
> -print0)
> +}
> +
> cmd_grep() {
> [[ $# -lt 1 ]] && die "Usage: $PROGRAM $COMMAND [GREPOPTIONS]
> search-string"
> local passfile grepresults
> @@ -690,6 +708,7 @@ case "$1" in
> show|ls|list) shift; cmd_show "$@" ;;
> find|search) shift; cmd_find "$@" ;;
> grep) shift; cmd_grep "$@" ;;
> + check) shift; cmd_check "$@" ;;
> insert|add) shift; cmd_insert "$@" ;;
> edit) shift; cmd_edit "$@" ;;
> generate) shift; cmd_generate "$@" ;;
> _______________________________________________
> Password-Store mailing list
> Password-Store at lists.zx2c4.com
> https://lists.zx2c4.com/mailman/listinfo/password-store
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.zx2c4.com/pipermail/password-store/attachments/20190117/73028907/attachment.html>
More information about the Password-Store
mailing list