Signiervorgang

Kryptographische Signaturen, die öffentliche/private Schlüssel verwenden, sind zentrale Bestandteile, wie F-Droid eine sichere App-Auslieferung bereitstellt. Signierschlüssel sind notwendig, um deine eigenen Veröffentlichungen mit den F-Droid-Werkzeugen zu erstellen. Speicherort, Sicherheits- und Sicherungsstatus deiner Schlüsseldateien sollten sorgfältig bedacht werden. Die Schlüssel müssen für die gesamte Lebensdauer eines F-Droid-Repos oder einer Android-App sicher bleiben. Der Signierschlüssel ist das Hauptmerkmal für die Identität einer Android-App und eines F-Droid-Repos, somit müssen diese Schlüssel zuverlässig, geschützt und gut gesichert aufbewahrt werden! Berücksichtige dabei auch, dass Googles Hinweise zum Schutz der privaten Schlüssel nur die Minimalmaßnahmen darstellen, die ergriffen werden sollten, um die Schlüssel abzusichern.

Es gibt zwei Arten des Signierens, die im Betrieb eines Repositorys eine Rolle spielen:

  • das Signieren des Repo-Registers selbst
  • der standardmäßige Android-APK-Signiervorgang

Repo-Registersignatur

Bei Einrichtung des Repositorys, sollte einer der ersten Schritte die Erzeugung eines Signierschlüssels für das Repository-Register sein. Dabei wird auch ein Schlüsselspeicher erstellt, d. h. die Datei, die die Signierschlüssel enthält.

fdroid init wird automatisch einen neuen Signierschlüssel für ein F-Droid-Repo erstellen. Es ist möglich, genau wie bei der Erstellung von Android-Signierschlüsseln, Schlüssel mit einem Befehl wie dem folgenden manuell zu erstellen:

keytool -genkey -v -keystore my.keystore -alias repokey \
  -keyalg RSA -keysize 2048 -validity 10000

Im o. g., ersetze my.keystore durch den Namen der Schlüsselspeicherdatei, die erstellt werden soll, und „repokey“ durch den Namen, über den der Repo-Registerschlüssel identifiziert wird. Du wirst dazu aufgefordert werden, ein Passwort für den Schlüsselspeicher UND ein Passwort für den Schlüssel festzulegen. Diese sollten nicht identisch sein. Dazwischen wirst du nach einigen identifizierenden Angaben gefragt, die in das Zertifikat aufgenommen werden.

Die beiden eingegebenen Passwörter werden in die Datei config.yml übernommen, und zwar als keystorepass bzw. keypass. Der Pfad zur Schlüsselspeicherdatei wird in keystore festgelegt, und der von dir für den Schlüssel gewählte Alias wird ebenfalls in diese Datei übernommen und heißt repo_keyalias.

APK-Signatur

Die F-Droid-Tools können automatisch APK-Signierschlüssel für jede von ihnen verwaltete Anwendung erzeugen und verwalten. Wenn die Repo-Index-Signierung konfiguriert ist, muss nur noch das Feld keydname in config.yml so gesetzt werden, dass es die gleichen identifizierenden Details enthält, die du zuvor eingegeben hast. Aus diesen Angaben wird für jede erstellte Anwendung ein neuer Schlüssel generiert. Wenn ein bestimmter Schlüssel für eine bestimmte Anwendung benötigt wird, kann dieses System durch die Konfigurationseinstellungen keyaliases überschrieben werden.

Um fdroid publish einzurichten, führe diese Schritte auf demselben Rechner aus, auf dem du APKs kopierst und fdroid update ausführst. Zuerst, setze keydname in config.yml, es sollte ungefähr so aussehen:

keydname = "CN=beispiel.de, O=Beispiel GmbH, C=DE"

Erstelle ein Verzeichnis namens unsigned/ neben den Verzeichnissen metadata/ und repo/, und führe diese Befehle aus, um das APK mit einem neuen Namen basierend auf Application ID und Version Code zu verschieben:

$ cd /pfad/zum/repobasedir
 $ touch metadata/de.beispiel.app.yml
 $ mkdir unsigned
 $ cp /pfad/zum/app-release-unsigned.apk unsigned/de.beispiel.app_1234.apk
 $ fdroid publish --verbose
 $ fdroid update --verbose
 $ fdroid deploy --verbose

Paketsignatur

Alle Pakete, die mit F-Droid-Tools erstellt und/oder verteilt werden, können auch von PGP mit GnuPG signiert werden, von APKs bis hin zu Mediendateien. Dieser Prozess wird mit fdroid gpgsign ausgeführt. Füge gpghome und gpgkey zu deiner config.yml hinzu, um sie zu konfigurieren, weitere Informationen findest du in examples/config.yml.

Hardware-Sicherheitsmodule

Hardware-Sicherheitsmodule (Hardware Security Modules, HSMs) sind speziell für die sichere Speicherung und Verwendung von kryptographischen Schlüsseln entwickelte Hardwarekomponenten. Sie bieten Nur-schreib-Speicher, sodass ein privater Schlüssel nur auf das HSM geschrieben und nie ausgelesen werden kann. fdroidserver unterstützt die Verwendung von HSMs für die Repo-Signierung von Schlüsseln.

Informationen zur Konfiguration eines F-Droid-Repos für die Verwendung eines HSM findest du in den Abschnitten „Smartcard“ von examples/config.yml, insbesondere keystore und smartcardoptions. Höchstwahrscheinlich muss OpenSC als PKCS11-Provider für Java eingerichtet werden. hsmwiz ist eine einfachere Art, mit Smart Card HSMs wie das Nitrokey HSM zu arbeiten. Sowohl OpenSC als auch hsmwiz stehen in Debian zur Verfügung.

Ausführlichere Informationen findest du unter: