Zum Inhalt

PGP-Graphen: sig2dot-Automation

sig2dot ist ein sehr schönes Programm, um sein Web-of-Trust visuell darzustellen. Dieses dürfte sich bei vielen recht kontinuierlich ändern. Um einfach neue Graphen zu erstellen, gibt es die Möglichkeit den ganzen Vorgang zu automatisieren. Dieser soll hier anhand eines Shell-Skriptes für die Bash vorgestellt werden.

Vorraussetzungen:

  • sig2dot
  • graphviz (optional, für grafische Ausgabe)
  • GnuPG
  • einen Bildbetrachter (ebenfalls optional)

Unter Ubuntu ist die Installation denkbar einfach:

sudo aptitude install graphviz sig2dot gnupg eog

Nun erstellt man sich einen Ordner, in dem das Script ausgeführt werden soll. Ich habe einen Ordner ~/Documents/gpg/. Dort erstellt man sich ein Script, zum Beispiel create_graph.sh. In dieses fügt man folgendes ein:
#!/bin/bash
#
# Copyleft (ↄ) Benjamin M.;
# NO WRONGS RESERVED; KEEP THEM IF YOU FIND THEM!
#
# ----------------------------------------------------------------------------
# "THE BEER-WARE LICENSE" (Revision 42):
# Benjamin M. schrieb diese Datei. Solange Sie diesen Vermerk nicht entfernen,
# können Sie mit der Datei machen, was Sie möchten. Wenn wir uns eines Tages treffen
# und Sie denken, die Datei ist es wert, können Sie mir daför ein Bier ausgeben.
# ----------------------------------------------------------------------------

#***************
#** VARIABLEN **
#***************
# Select the Filetype of the output
# NOTE: Springgraph only supports PNG.
FT="svg"
#PATH to PROGRAMMES
# Comment out or add a line to use more graphviz-tools
GRAPH_BINS="\
/usr/bin/neato
/usr/bin/circo
/usr/bin/dot
/usr/bin/fdp
/usr/bin/twopi\
"
# /usr/bin/springgraph

#****************
#** KONSTANTEN **
#****************
# ONLY EDIT IF YOU KNOW WHAT YOU DO
keys="./keys.lst"
outdir="./graphs/"
keyring="keys/tmp_keyring.gpg"
trustdb="keys/tmp_trusts.tdb"
dotfile="mygraph.dot"
# We do NOT want to override our keyring -> set a different one and ignore
# our default one in ~/.gnupg.
# Also, let's not mess up with our trustDB and use another one in the meantime
options=" --no-default-keyring --keyring $keyring --trustdb-name $trustdb "

#***************
#** M A I N **
#***************
# delete old keyring
if [ -f $keyring ]; then
rm $keyring
fi

# delete old keys
rm keys/*.asc

# now freshen up keys
while read line; do
this_key=$(echo $line | cut -f 1 -d\ )
echo "Current Key: $this_key"
person_name=$(gpg --with-colons --list-keys $this_key | \
grep -e "^pub" | \
cut -f 10 -d: )
person_name=$(echo $person_name | cut -f 1 -d\<)
person_name=$(echo $person_name | cut -f 1 -d\()
person_name=$(echo $person_name | sed -e 's/\ $//g' -e 's/\ /_/g')
echo "Person: $person_name"
gpg --export --armor "$this_key" > "keys/${this_key}_${person_name}.pub.asc"
done < $keys

#create new keyring
gpg $options --import keys/*.asc

# create dot-file
gpg $options --list-sigs | sig2dot > "$dotfile"

# ratio?
if [ -n "$1" ]; then
sed "s/splines=true/splines=true\nratio=${1}/g" -i ${dotfile}
fi
for grapher in $GRAPH_BINS; do
# Schema will be: graphs/lug_shg.dot.neato.svg etc.
filename="${outdir}${dotfile}.$(basename ${grapher}).${FT}"
$grapher -T${FT} $dotfile > $filename
done;
exit 0;

Nicht vergessen: Das Script ausführbar machen (chmod +x create_graph.sh). Dann erstellt man einen Unterordner „keys“, einen Unterordner „graphs“ und das allerwichtigste: eine Datei keys.lst.

In die Datei keys.lst sollte pro Zeile einen Fingerprint enthalten, dabei genügen die letzten acht Stellen. Alles ab dem 1. Leerzeichen wird als Kommentar angesehen. Zeilenkommentare sind derzeit noch nicht möglich.

Jetzt kann das Script ausgeführt werden, in dem man ./create_graph.sh in sein Terminal tippt. Man sollte dann im Ordner „graphs“ fünf verschiedene Graphen finden, die zwar alle den gleichen Inhalt haben, bei dem die Knoten aber mit unterschiedlichen Algorithmen platziert wurden. Bei mir lieferte neato meistens die besten Ergebnisse.

Viel Spaß!

Hier noch ein Beispiel:

Beispielgraph von sig2dot

Published inHow Tos

Schreibe den ersten Kommentar

    Schreibe einen Kommentar

    Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.