Angesichts der jüngsten Enthüllungen über die weit verbreitete behördliche Überwachung von Daten, die von Onlinediensteanbietern gespeichert werden, sind Zero-Knowledge-Dienste derzeit im Trend.
Bei einem Zero-Knowledge-Service werden alle Daten verschlüsselt mit einem Schlüssel gespeichert, der nicht auf dem Server gespeichert ist. Die Ver- und Entschlüsselung erfolgt vollständig auf der Clientseite, und der Server sieht weder Klartextdaten noch den Schlüssel. Infolgedessen kann der Dienstanbieter die Daten nicht entschlüsseln und an Dritte weitergeben, selbst wenn dies gewünscht wird.
Ein Beispiel: SpiderOak kann als wissensfreie Version von Dropbox angesehen werden.
Als Programmierer verlassen wir uns in hohem Maße auf einige unserer sensibelsten Daten - unseren Code - und vertrauen auf eine bestimmte Klasse von Onlinedienstanbietern: Codehostinganbieter (wie Bitbucket, Assembla usw.). Ich spreche hier natürlich von privaten Repositories - das Konzept des Null-Wissens ist für öffentliche Repositories nicht sinnvoll.
Meine Fragen sind:
Gibt es technologische Hindernisse für die Schaffung eines wissensfreien Code-Hosting-Dienstes? Gibt es beispielsweise etwas an den Netzwerkprotokollen, die von gängigen Versionskontrollsystemen wie SVN, Mercurial oder Git verwendet werden, das die Implementierung eines Schemas erschwert (oder unmöglich macht), bei dem die zwischen dem Client und dem Server übertragenen Daten verschlüsselt werden einen Schlüssel, den der Server nicht kennt?
Gibt es heute wissensfreie Code-Hosting-Dienste?
quelle
Antworten:
Sie können jede Zeile einzeln verschlüsseln. Wenn Sie es sich leisten können, Ihre Dateinamen und die ungefähre Zeilenlänge sowie die Zeilennummern, bei denen Änderungen auftreten, zu verlieren, können Sie Folgendes verwenden:
https://github.com/ysangkok/line-encryptor
Da jede Zeile separat (aber mit demselben Schlüssel) verschlüsselt wird, betreffen die hochgeladenen Änderungen (wie gewöhnlich) nur die relevanten Zeilen.
Wenn es derzeit nicht bequem genug ist, können Sie zwei Git-Repositorys erstellen, eines mit Klartext und eines mit Chiffretext. Wenn Sie im Klartext-Repository (das lokal ist) ein Commit durchführen, könnte ein Commit-Hook das Diff verwenden und es über den oben genannten Zeilenverschlüsseler ausführen, der es auf das Chiffretext-Repository anwendet. Die Änderungen am Chiffretext-Repository werden festgeschrieben und hochgeladen.
Der obige Zeilenverschlüsseler ist SCM-unabhängig, kann jedoch vereinheitlichte Diff-Dateien (im Klartext) lesen, die Änderungen verschlüsseln und auf den Chiffretext anwenden. Dies macht es auf jedem SCM verwendbar, der ein einheitliches Diff erzeugt (wie Git).
quelle
<IV>,<ciphertext>
.Ich glaube nicht, dass es irgendwelche Hindernisse gibt - bedenken Sie, dass SVN, was zum Speichern an den Server gesendet wird, das Delta zwischen der vorherigen und der aktuellen Version Ihres Codes ist. Sie ändern also 1 Zeile, nur diese Zeile wird an den Server gesendet. Der Server speichert sie dann "blind", ohne die Daten selbst zu überprüfen. Wenn Sie das Delta verschlüsselt und stattdessen gesendet hätten, hätte dies keine Auswirkungen auf den Server. Tatsächlich müssten Sie den Server überhaupt nicht ändern.
Es gibt andere wichtige Elemente, z. B. Metadateneigenschaften, die nicht leicht verschlüsselt werden können (z. B. MIME-Typ), aber andere können verschlüsselt werden, z. B. Kommentare im Verlaufsprotokoll, sofern Sie wissen, dass Sie sie auf dem entschlüsseln müssen Client zu sehen. Ich bin mir nicht sicher, ob die Verzeichnisstruktur sichtbar wäre. Ich denke, dass sie aufgrund der Art und Weise, wie SVN Verzeichnisse speichert, nicht sichtbar wäre, aber ich liege möglicherweise falsch. Dies ist für Sie jedoch möglicherweise nicht wichtig, wenn die Inhalte sicher sind.
Dies würde bedeuten, dass Sie keine Website mit den verschiedenen Funktionen der Codeansicht, keinem serverseitigen Repository-Browser oder Protokoll-Viewer haben könnten. Keine Code-Unterschiede, keine Online-Tools zur Codeüberprüfung.
So etwas gibt es bereits. Bis zu einem gewissen Punkt speichert Mozy Ihre Daten verschlüsselt mit Ihrem privaten Schlüssel (Sie können ihre eigenen verwenden und sie machen Geräusche über "Wenn Sie Ihren eigenen Schlüssel verlieren, leider können wir Ihre Daten für nicht wiederherstellen." Sie ", aber das ist mehr auf den gemeinsamen Benutzer ausgerichtet). Mozy speichert auch einen Verlauf Ihrer Dateien, sodass Sie frühere Versionen abrufen können. Das Problem ist, dass das Hochladen regelmäßig und nicht zum gewünschten Zeitpunkt erfolgt. Ich glaube, dass alte Versionen verworfen werden, wenn der Speicherplatz knapp wird. Aber das Konzept ist da, sie könnten es modifizieren, um eine sichere Quellcodeverwaltung unter Verwendung ihres vorhandenen Systems bereitzustellen.
quelle
Ich hasse es, eine dieser Antworten zu machen: "Das wird Ihre Frage nicht ganz beantworten." Aber ...
Ich kann mir zwei fertige Lösungen vorstellen, die diese Probleme angehen sollten.
Hosten Sie einen privaten Git-Server auf eigene Faust. Stellen Sie diesen Server dann in ein VPN, auf das Sie Ihren Teammitgliedern Zugriff gewähren. Die gesamte Kommunikation zum und vom Server wird verschlüsselt, und Sie können den Server natürlich auch auf Betriebssystemebene verschlüsseln.
BitSync sollte auch den Trick machen. Alles wäre verschlüsselt und in einem riesigen Netzwerk, das überall verfügbar wäre. Könnte tatsächlich eine wirklich gute Anwendung all dieser BitCoin / BitMessage / BitSync-Technologie sein.
Schließlich könnten die Leute unter https://security.stackexchange.com/ noch mehr Einblick haben.
quelle
'git push ./syncedFolderActingAsServer/MyAwesomeProject/src/'
? Sie könnten auch Git-Level-Berechtigungen usw. machen. Jemand sollte dies versuchen!Soweit ich weiß,
git pull
sendet der Server Ihnen eine Paketdatei, die alle gewünschten Objekte enthält, aber derzeit keine enthält. Und umgekehrt fürgit push
.Ich denke, Sie könnten es nicht direkt so machen (weil dies bedeutet, dass der Server die Objekte verstehen muss). Stattdessen können Sie den Server nur mit einer Reihe von verschlüsselten Paketdateien arbeiten lassen.
Dazu
pull
laden Sie alle Pack-Dateien herunter, die seit Ihrem letzten Hinzufügen hinzugefügt wurdenpull
, entschlüsseln sie und wenden sie auf Ihr Git-Repo an. Dazu müssenpush
Sie zunächstpull
den Status des Servers kennen. Wenn keine Konflikte vorliegen, erstellen Sie eine Paketdatei mit Ihren Änderungen, verschlüsseln sie und laden sie hoch.Mit diesem Ansatz würden Sie eine große Anzahl winziger Packdateien erhalten, was ziemlich ineffizient wäre. Um dies zu beheben, können Sie eine Reihe von Paketdateien herunterladen, entschlüsseln, zu einer Paketdatei kombinieren, verschlüsseln und auf den Server hochladen und diese als Ersatz für diese Reihe markieren.
quelle