ECDSA Util
Die ECDSA-Utils werden unter anderem zum Signieren der Freifunk-Firmware Gluon verwendet. Gluons Autoupdater akzeptiert eine neue Firmware-Version nur, wenn sie mindestens mit einer gewissen Anzahl an gültigen Signaturen versehen ist. In diesem Artikel wird die Kompilierung und Installation von ECDSA-Utils unter einem Debian-basierten System behandelt. Eine Installation der Utils und das Signieren ist aber ebenso unter MacOS X möglich.
Installation via Paketmanager
Ab Debian Strech 9 und ab Ubuntu Xenial 16.04 sind die ECDSA-Utils über einen Paketmanager installierbar
sudo apt-get install ecdsautils
Benötigte Pakete zum Kompilieren
Wer die ECDSA-Utils kompilieren muss benötigt ein paar Pakete, welche man über einen Paketmanager installieren kann:
- C-Compiler [cmake]
- Git client [git]
- Kompiler [make]
- [pkg-config]
Unter Debian und auf Debian basierenden Systemen installieren wir diese via:
sudo apt-get install cmake git make pkg-config
Mac OS X bringt von Hause aus keinen Paketmanager mit sich. Jedoch existieren mehrere OpenSource Manager. In dieser Anleitung verwenden wir Homebrew. Zur Installation von Homebrew fügen wir diesen Code in ein Terminal und bestätigen mit Enter:
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Das Script wird euch Schritt für Schritt durch die Installation führen. Gegebenenfalls werdet ihr vom System aufgefordert die Command Line Tools zu installieren. Bestätigt dies und startet das Script von Homebrew erneut. Nach Abschluss der Installation installieren wir die benötigten Pakete mit:
brew install cmake pkg-config
Das Paket 'make' ist unter OS X standardmässig installiert. Das Paket 'git' ist ab OS X 10.9 bereits installiert. Auf älteren Systemen kann es aber ebenfalls über Homebrew nachgeladen werden.
Auf allen Systemen wird des weiteren noch die Bibliothek "libuecc" benötigt. Auch diese müssen wir kompilieren und installieren.
Kompilieren von libuecc
Zuerst einmal klonen wir hierzu das nötige Git-Repository in einen beliebigen Ordner.
git clone http://git.universe-factory.net/libuecc
Nach dem Klonen wechseln wir in das neue Verzeichnis mit:
cd libuecc
unter Linux und führen den folgenden Befehl aus:
cmake ./
Und Kompilieren abschließend mit:
make
Jetzt ist Bibliothek zwar kompiliert, aber noch nicht Installiert. Unter Linux geschieht dies mit:
sudo make install sudo ldconfig
Unter OS X genügt:
sudo make install
Kompilieren und Installieren von ECDSA-Utils
Nun sind alle nötigen Daten vorhanden um mit dem kompilieren zu beginnen. Unter Debian und anderen Linux Systemen klonen wir hierzu das Git-Repository in einen beliebigen Ordner:
git clone https://github.com/freifunk-gluon/ecdsautils.git
Unter OS X führt dieses Paket jedoch zu fatalen Fehlern beim kompilieren. Deswegen klonen wir hier die angepassten ecdsautils-osx:
git clone https://github.com/roikiermedia/ecdsautils-osx.git
Nach dem Klonen wechseln wir in das neue Verzeichnis mit:
cd ecdsautils
unter Linux,
Unter MAC OSX
cd ecdsautil-osx
Wir fahren auf allen Systemen fort mit:
mkdir build cd build/
Und wie bei der Bibliothek oben folgt nun:
cmake ../ make sudo make install sudo ldconfig
Nun wurden die ECDSA-Utils erfolgreich installiert. Die nun zur Verfügung stehenden Programme werden in den folgenden Abschnitten genannt und erklärt.
Programme und Optionen der ECDSA-Utils
Durch die Installation von ECDSA-Utils stehen uns nun folgende Programme zur Verfügung:
- ecdsakeygen
- ecdsasign
- ecdsaverify
Mit diesen Programmen können wir nun ein Schlüsselpaar erstellen, Dateien signieren und die Signaturen prüfen.
ecdsakeygen
Dieses ist der Keygen um ein Schlüsselpaar zu generieren. Folgende Optionen sind möglich:
- -s generiert einen Privat-Key und schreibt ihn nach stdout
- -p generiert einen Public-Key aus dem Privat-Key
- -h Zeigt die Kommandozeilen-Hilfe an
Da der Privat-Key nach stdout geschrieben wird führen wir folgenden Befehl aus, um einen Privat-Key zu generieren:
ecdsakeygen -s > secret
Nun wurde ein Privat-Key generiert und in die Datei "secret" geschrieben.
Nun können wir mit folgendem Befehl unseren Public-Key generieren:
ecdsakeygen -p < secret
Dieses Keypaar sollte sicher und nicht für andere zugänglich gespeichert werden.
ecdsasign
Mit diesem Tool ist es möglich Dateien mit seinem Privat-Key zu signieren um ihr Echtheit zu bestätigen. Dieses Tool kommt unter anderem bei unserer Freifunk-Firmware Gluon zum Einsatz. Die für die Firmware Verantwortlichen signieren die kompilierten Images, damit die automatische Updatefunktion der Router erkennen kann, ob das Update auch sicher ist. Zum signieren einer Datei verwendet man folgenden Befehl:
ecdsasign Dateiname < secret
Die Ausgabe des Befehls ist die Signatur der Datei.
ecdsaverify
normale Verifizierung
Mit diesem Tool kann man signierte Dateien mittels des Public-Keys der Person, welche die Datei signiert hat, verifizieren. Hierzu verwendet man folgenden Befehl:
ecdsaverify -s Signatur -p Public-Key Dateiname
Normalerweise bekommt man als Ausgabe nur eine 1 oder eine 0 zurück. Gibt das Programm eine 0 aus ist die Signatur in Ordnung, gibt es eine 1 aus so stimmt die Signatur nicht mit dem Public-Key überein.
n-aus-m Verifizierung
Es ist auch möglich eine n-aus-m Überprüfung zu machen. Zuerst einmal gibt es die Möglichkeit der 1-aus-m Überprüfung. In diesem Szenario gibt es einen Personenkreis von m Leuten, welche alle ihren eigenen Privat-Key haben und berechtigt sind eine Datei zu signieren. Mit dem folgenden Befehl kann überprüft werden, ob mindestens eine Person die Datei signiert hat.
ecdsaverify -s Signatur1 -s SignaturX -p Public-Key1 -p Public-KeyX Dateiname
mit der Option -n X kann man die Mindestanzahl an gültigen Signaturen einbringen. Für 3 gültige Signaturen zum Beispiel -n 3 und so weiter.
Achtung: Die Entwicklerversion enthält geänderte Tools und eine neue Syntax Sie sollte nicht verwendet werden |
Entwicklerversion des ECDSA-Utils
Mit der Entwicklerversion funktioniert das `sign.sh` Script aus gluon noch nicht. Wenn trotzdem schon die neue Entwicklerversion verwendet werden soll (Branch master), stehen dann folgende Programmbefehle zur Verfügung:
- ecdsautil generate-key
- ecdsautil show-key
- ecdsautil sign
- ecdsautil verify
Mit diesen Programmen können wir nun ein Schlüsselpaar erstellen, Dateien signieren und die Signaturen prüfen.
ecdsautil generate-key
Dieses ist der Keygen um ein Schlüsselpaar zu generieren. Folgende Optionen sind möglich:
- -s generiert einen Privat-Key und schreibt ihn nach stdout
- -p generiert einen Public-Key aus dem Privat-Key
- -h Zeigt die Kommandozeilen-Hilfe an
Da der Privat-Key nach stdout geschrieben wird führen wir folgenden Befehl aus, um einen Privat-Key zu generieren:
ecdsautil generate-key > key.secret
Nun wurde ein Privat-Key generiert und in die Datei "key.secret" geschrieben.
ecdsautil show-key
Nun können wir mit folgendem Befehl unseren Public-Key generieren und in die Datei "key.public" schreiben:
ecdsautil show-key < key.secret > key.public
Dieses Keypaar sollte sicher und nicht für andere zugänglich gespeichert werden.
ecdsautil sign
Mit diesem Tool ist es möglich Dateien mit seinem Privat-Key zu signieren um ihr Echtheit zu bestätigen. Dieses Tool kommt unter anderem bei unserer Freifunk-Firmware Gluon zum Einsatz. Die für die Firmware Verantwortlichen signieren die kompilierten Images, damit die automatische Updatefunktion der Router erkennen kann, ob das Update auch sicher ist. Zum signieren einer Datei verwendet man folgenden Befehl:
ecdsautil sign Dateiname < key.secret
Die Ausgabe des Befehls ist die Signatur der Datei.
ecdsautil verify
normale Verifizierung
Mit diesem Tool kann man signierte Dateien mittels des Public-Keys der Person, welche die Datei signiert hat, verifizieren. Hierzu verwendet man folgenden Befehl:
ecdsautil verify -s Signatur -p Public-Key Dateiname
Normalerweise bekommt man als Ausgabe nur eine 1 oder eine 0 zurück. Gibt das Programm eine 0 aus ist die Signatur in Ordnung, gibt es eine 1 aus so stimmt die Signatur nicht mit dem Public-Key überein.
n-aus-m Verifizierung
Es ist auch möglich eine n-aus-m Überprüfung zu machen. Zuerst einmal gibt es die Möglichkeit der 1-aus-m Überprüfung. In diesem Szenario gibt es einen Personenkreis von m Leuten, welche alle ihren eigenen Privat-Key haben und berechtigt sind eine Datei zu signieren. Mit dem folgenden Befehl kann überprüft werden, ob mindestens eine Person die Datei signiert hat.
ecdsautil verify -s Signatur1 -s SignaturX -p Public-Key1 -p Public-KeyX Dateiname
mit der Option -n X kann man die Mindestanzahl an gültigen Signaturen einbringen. Für 3 gültige Signaturen zum Beispiel -n 3 und so weiter.