ECDSA Util

Aus wiki.freifunk.net
Wechseln zu: Navigation, Suche

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.

Benötigte Pakete

Da wir die ECDSA-Utils kompilieren müssen benötigen wir 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/tcatm/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.