25/06/2014

One True Password

Un peu silencieux ces temps-ci il faut bien l'avouer, avant tout parce que j'ai largement de quoi m'occuper au boulot, mais ça ne m'a quand même pas empêché d'écrire un petit biscuit moelleux de code simple mais efficace à la faveur d'un train pas trop bondé. Il s'agit de fonctions et alias pour bash qui implémentent un système de stockage de texte chiffré afin de pouvoir y déposer des informations confidentielles comme (absolument au hasard) les nombreux mots de passe générés pour des services en ligne. En bref et en gros il s'agit d'un 1Password ultra basique, qui a le mérite de tenir en quelques lignes de Bash et ne dépendre de rien qui soit propriétaire.

Le code et sa documentation sont disponibles sous licence MIT sur GitHub et pour les curieux/impatients ça tient en ceci :

#!/bin/bash

# One True Password - Basic encrypted password storage and retrieval
#
# These bash functions allow a quick and easy way to store and retrieve
# passwords from a safe encrypted storage, making it a basic 1Password.
#
# 2014 Jean-Karim Bockstael <jkb@jkbockstael.be>

# Encrypted password storage file
ONETRUEPASSWORD_STORE=~/.onetruepassword_store.enc

# Encrypt function, can be used either as a filter or a command
# $ cat cleartext_file | encrypt > encrypted_file
# $ encrypt cleartext_file > encrypted_file
# $ encrypt cleartext_file encrypted_file
encrypt () {
    if [ $# -eq 0 ] ; then
        openssl des3 -salt
    elif [ $# -eq 1 ] ; then
        openssl des3 -salt -in "$1"
    else
        openssl des3 -salt -in "$1" -out "$2"
    fi
}

# Decrypt function, can be used either as a filter or a command
# $ cat encrypted_file | decrypt | vim -
# $ decrypt encrypted_file > cleartext_file
# $ decrypt encrypted_file cleartext_file
decrypt () {
    if [ $# -eq 0 ] ; then
        openssl des3 -salt -d
    elif [ $# -eq 1 ] ; then
        openssl des3 -salt -d -in "$1"
    else
        openssl des3 -salt -d -in "$1" -out "$2"
    fi
}

# One True Password - lookup, search for a term in the encrypted storage
# $ onetruepassword-look search_term
onetruepassword-look () {
    if [ $# -eq 0 ] ; then
        echo "1TP: provide a lookup term"
    else
        decrypt ${ONETRUEPASSWORD_STORE} | grep -i --color=auto $1
    fi
}

# One True Password - edit, edit the encrypted storage
# $ onetruepassword-edit
onetruepassword-edit () {
    TEMP=$(mktemp -t otp)
    decrypt ${ONETRUEPASSWORD_STORE} ${TEMP} \
    && ${EDITOR} ${TEMP} \
    && clear \
    && encrypt ${TEMP} ${ONETRUEPASSWORD_STORE} \
    && rm ${TEMP}
}

# Lazyness is a virtue
alias otpl="onetruepassword-look"
alias otpe="onetruepassword-edit"

À l'usage c'est simple aussi, on utilise otpe pour ouvrir le fichier chiffré dans son éditeur favori (celui qu'on a indiqué dans la variable d'environnement $EDITOR quoi), et otpl pour afficher les lignes de ce fichier qui correspondent à un mot-clé :

$ otpe
$ otpl mot_cle

Évidemment comme la sortie se fait en clair dans le terminal il ne faut pas croire que ça va protéger des regards indiscrets par-dessus l'épaule, mais c'est quand même nettement plus sûr que de noter ses accès sur un post-it.


Tags:

1password | code (bash) | mit | outil


Attaque des clones (13/02/2015)FOSDEM 2014 (05/02/2014)