Verschlüsselung in Git mittels git-encrypt

Es gibt unterschiedlichste Gründe warum man gerne Teile eines Repositories oder sogar das ganze Repository verschlüsseln möchte. Sei es das Ablegen von Passwörtern für Datenbanken, privater Schlüssel oder Tokens. Neben der Möglichkeit sämtliche Secrets und Credentials abseits des Git zu verwalten, gibt es die Möglichkeit die entsprechenden Dateien verschlüsselt als Teil des Repositories abzulegen.

Um diesen Vorgang als Teil des Workflows zu etablieren, bietet sich das Tool git-encrypt an. Es bietet die Möglichkeit einer Verschlüsselung einzelner Dateien oder ganzer Ordner innerhalb des Repositories. Die Konfiguration orientiert sich dabei an durch .gitignore bekannten Mustern und wird jeweils bei commit oder checkout durchgeführt. Das Tool existiert sowohl für Linux als auch für MacOS und experimentell für Windows .

Um ein Repository zu verschlüsseln, muss die für das Tool nötige Struktur angelegt werden. Hierzu geht man in den Ordner des Repositories und führt den Befehl

git-encrypt init

aus. Der Befehl legt einen Ordner .git-crypt an, welcher neben einem Ordner für die öffentlichen Schlüssel ebenfalls eine .gitattribute enthält. Diese .gitattribute enthält Anweisungen für die Behandlung der Schlüsseldateien und sollte nicht modifiziert werden. Um git-encrypt mitzuteilen welche Dateien oder Ordner verschlüsselt werden sollen, legt ihr auf der obersten Ebene eures Repositories ebenfalls eine .gitattribute an. Wollt ihr bspw. einen Ordner encrypted verschlüsseln, sieht diese Datei folgendermaßen aus:

encrypted/**/* filter=git-crypt diff=git-crypt
# Making sure that .gitattributes is never encrypted. DON'T TOUCH THAT LINE AND ONE BELOW
.gitattributes !filter !diff

Wichtig ist hierbei die letzte Zeile, welche sicherstellt, dass eure .gitattributes nicht verschlüsselt wird. Nachdem festgelegt wurde welche Daten verschlüsselt werden sollen, muss nun ebenfalls definiert werden welche Nutzer die Daten entschlüsseln dürfen. Hierzu habt ihr entweder die Möglichkeit einen PGP-Schlüssel des Nutzers anzugeben:

git-crypt add-gpg-user <KEY_ID | FINGERPRINT |EMAIL >

oder einen symmetrischen Schlüssel zu erzeugen, welchen ihr mit den restlichen Nutzern austauschen könnt (Nicht empfehlenswert!).

git-crypt export-key /pfad/zum/schlüssel

Als nächsten Schritt müsst ihr nun die gewünschten Daten stagen. In diesem Fall alle Daten:

git add .

Nun solltet ihr mit dem Befehl

git-crypt status -e

alle Daten angezeigt bekommen, welche ihr verschlüsseln wollt. Der Befehl

git-crypt status -u

sollte euch die Daten anzeigen, welche ausgeschlossen sind. Im Regelfall sollten hier die Schlüssel sowie die .gitattributes auftauchen. Bei Aufruf des Befehls

git commit

werden nun alle gewünschten Daten verschlüsselt committet. Die Ordnerstruktur bleibt dabei erhalten. Man kann diese also auch in der Weboberfläche nachvollziehen. Möchte man die Daten wieder entschlüsseln, ist das über den Befehl

git-crypt unlock

möglich. Hierzu ein kleiner Hinweis: Während meiner Tests ist das Problem aufgetreten, dass die maximale Anzahl der Parameter in der Kommandozeile unter MacOS zu gering war. MacOS setzt diesen Wert anscheinend sehr niedrig und bietet auch keine Möglichkeit diesen zu ändern. Bei großen Repositories kann das ein Problem sein. Unter Linux liegt dieser Wert deutlich höher und sollte daher keine Probleme bereiten. In jedem Fall vorher überprüfen, ob es hier zu Problemen kommen kann.

 

no responses for Verschlüsselung in Git mittels git-encrypt

    Schreibe einen Kommentar

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