Ist es eine verschlüsselte version control system?
Ich bin auf der Suche für eine verschlüsselte version control system . Grundsätzlich würde ich gerne
-
Haben alle Dateien verschlüsselt lokal, bevor Sie an den server. Der server sollte nie erhalten Sie eine Datei oder Daten unverschlüsselt.
-
Jede andere Funktion sollte funktionieren ziemlich die gleiche Weise, wie SVN oder CVS von heute.
Kann jemand empfehlen, so etwas wie das? Ich habe viel durchsucht aber ich kann nichts finden.
- Nur double-ROT13 alles, bevor Sie push-to-das zentrale repo.
- was ist der Punkt? irgendwann kommt dein "code" wird ausgeführt, und wenn Ihr code hat zu laufen, dann kann es zerlegt werden, und Umgekehrt entwickelt.... Wie Ihr sagt, werde ich Schloss meine Tür zurück, aber lassen Sie meine Haustür weit offen...
- Der Punkt der Sicherheit ist nicht, ob es geschlagen werden kann oder nicht - weil Sie es immer können - es ist, wie lange und wie viel Ressourcen wird es dauern, Sie zu schlagen. Fügen Sie die Sicherheit zu erhöhen, diese Faktoren und damit setzen Sie Angreifer oder geben Sie sich genug Zeit, um mit Ihnen umzugehen, wenn Sie passieren.
- weil ich will, zu speichern, persönliche, vertrauliche Informationen, die nicht auf source-code: Vielleicht Dokumente.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie die Daten verschlüsseln-Leitung (ssl/ssh) statt, und sichern Sie den Zugriff auf den server. Die Verschlüsselung der Daten zwingen würde, SVN, im wesentlichen behandeln, alles als eine binäre Datei. Es kann nicht jede diff, also kann es nicht speichern deltas. Diese Niederlagen der Zweck der ein delta-basierten Ansatz.
Ihr repository bekommen würde riesige, sehr schnell. Wenn Sie eine Datei hochladen, die ist 100 Kb groß und dann ändern 1 byte und checkin wieder tun, dass 8-mal (10 umdrehungen Gesamt), das repository wäre die Speicherung von 10 * 100 Kb statt 100 Kb + 9 kleine deltas (nennen wir es 101kb).
Update: @TheRook erklärt, dass es möglich ist, das zu tun-deltas mit verschlüsselten repository. So kann es möglich sein, dies zu tun. Aber meine anfängliche Beratung steht: es ist nicht der Mühe Wert, und du bist besser dran mit der Verschlüsselung der ssl - /ssh-pipe und der Sicherung der server. d.h. "best practices".
Ist es möglich, erstellen Sie eine version control system der cipher-text. Es wäre ideal, um einen stream-cipher wie RC4-drop1024 oder AES-OFB-Modus. Solange der gleiche Schlüssel+iv verwendet wird, für jede revision. Dies bedeutet, dass die gleichen PRNG stream generiert wird, jedes mal, und dann XOR-verknüpft mit dem code. Sollten einzelne byte anders ist, dann haben Sie eine Nichtübereinstimmung und der cipher text seiner selbst verschmolzen werden normalerweise.
Einer Blockchiffre im ECB-Modus kann auch verwendet werden, wo die kleinste Fehlanpassung wäre 1 block in der Größe, es wäre also ideal, um kleine Blöcke. CBC-Modus auf der anderen Seite kann, erzeugt sehr unterschiedliche cipher-text für jede revision und ist somit unerwünscht.
Ich erkennen, dass dies nicht sehr sicher ist, OFB und ECB-Modus sollte normalerweise nicht verwendet werden, da Sie schwächer sind als die CBC-Modus. Die Opfer, die von der IV ist auch unerwünscht. Weiter mehr es ist nicht klar, was Angriff ist, verteidigt zu werden gegen. Wo, wie, mit so etwas wie SVN+HTTPS ist sehr verbreitet und auch sicher. Mein Beitrag ist lediglich festzustellen, dass es möglich ist, dies zu tun, effizient.
Warum nicht richten Sie das Repository (subversion, mercurial, was auch immer) auf ein verschlüsseltes Dateisystem und verwenden Sie nur ssh zu verbinden?
Verwenden rsyncrypto zum verschlüsseln von Dateien von Ihrem Klartext-Verzeichnis auf das verschlüsselte Verzeichnis, und entschlüsseln Sie Dateien von Ihrem verschlüsselten Verzeichnis und Ihre Klartext-Verzeichnis, mit den Tasten, die Sie halten vor Ort.
Verwenden Sie Ihre Lieblings-version-control-system (oder jeder anderen version control system-svn, git, mercurial, was auch immer) zu synchronisieren zwischen Ihrem verschlüsselten Verzeichnis und dem remote-host.
Den rsyncrypto Umsetzung können Sie jetzt herunterladen von Sourceforge nicht nur mit änderungen in bytes, sondern auch Insertionen und Deletionen.
Es implementiert einen Ansatz sehr ähnlich zu dem Ansatz, dass "Der Turm" erwähnt.
Single-byte-Einfügungen, Löschungen und änderungen in einem plaintext-Datei, die in der Regel verursachen rsyncrypto um ein paar K von völlig unterschiedlichen verschlüsselten text an der entsprechenden Stelle in die verschlüsselte version der Datei.
Chris Thornton weist darauf hin, dass die ssh ist eine gute Lösung; rsyncrypto ist noch eine ganz andere Lösung. Der Nachteil ist:
SVN verfügen über eine integrierte Unterstützung für die übertragung von Daten sicher. Falls Sie svnserve verwenden, dann können Sie auf den sicheren Zugriff über ssh. Alternativ können Sie für den Zugriff durch den apache-server über https. Dies ist ausführlich in der svn Dokumentation.
Könnte man eine Tahoe-LAFS raster, um Ihre Dateien speichern. Da Tahoe ist konzipiert als ein verteiltes Dateisystem, nicht eine Versionierung, würden Sie wahrscheinlich benötigen, um ein anderes versioning Schema am Anfang der Datei system.
Edit: Hier ist ein Prototyp-Erweiterung zur Nutzung von Tahoe-LAFS als backend-storage für Mercurial.
Was konkret wollen Sie guard gegen?
Subversion ssh oder https für die repo-Zugang. Verwenden ein verschlüsseltes Dateisystem auf den clients.
Haben Sie einen Blick auf GIT. Es unterstützt verschiedene Haken, könnte die Arbeit zu tun. Sehen Sie, git-verschlüsseln/entschlüsseln remote-repository-Dateien beim push/pull.
Haben Sie daran gedacht, mit Doppelzüngigkeit? Es ist wie rdiff-backup (delta-Backup), aber verschlüsselt? Nicht wirklich Versionskontrolle - aber vielleicht wollen Sie all die coolen diff Kram, wollen aber nicht arbeiten, mit niemandem sonst.
Oder einfach push/pull von einem lokalen Truecrypt-Archiv und rsync an einen Fernen Ort.
rsync.net hat eine schöne Beschreibung der beiden - http://www.rsync.net/resources/howto/duplicity.html
http://www.rsync.net/products/encrypted.html
- anscheinend Truecrypt-Container noch rsync gut.
Variante A
Verwenden Sie ein verteiltes VCS und transport von änderungen direkt zwischen verschiedenen clients über verschlüsselte verbindungen. In diesem Szenario ist keine angreifbare zentrale server.
Beispielsweise mit mercurial können Sie den internen web-server und verbinden die clients über VPN. Oder bündeln Sie die change sets und verteilen Sie Sie mit einer verschlüsselten E-mails.
Variante B
Exportieren Sie können eine verschlüsselte partition der Festplatte über das Netzwerk und montieren Sie es auf der client-Seite, und führen Sie den VCS auf der client-Seite. Aber dieser Ansatz hat eine Menge von Problemen, wie:
Möglicherweise gibt es auch andere Probleme mit Variante B, also vergessen Sie Variante B.
Variante C
Wie @Commodore Jaeger schrieb, die Verwendung eines VCS auf der Oberseite des Verschlüsselungs-aware network file system wie AFS.
Ähnlich wie einige der Kommentare oben, ein sinnvoller workaround ist, zu verschlüsseln&zip das gesamte repository lokal und synchronisieren Sie es mit der remote-box. E. g. bei der Verwendung von git, das ganze repository gespeichert ist, im Verzeichnis".git' innerhalb des Projekts dir.
Diese kann getan werden, mit einem einfachen shell-Zeile Skript komfortabler.
pro: können Sie verwenden, was ist Verschlüsselung entsprechende so gut wie jedes VCS unterstützt die lokalen repositories.
Nachteile: fehlt offensichtlich einige VCS-Funktionen, wenn mehrere Personen hochladen möchten, die Ihre code-Basis (die merge-situation) - obwohl, vielleicht, könnte dies behoben werden, indem die Vermeidung von überschreiben der Ferne und verschmelzen lokal (die stellt das sperren, das ist, wo der Albtraum beginnt)
Trotzdem, diese Lösung ist ein hack, nicht eine richtige Lösung.
Source safe speichert Daten in Verschlüsselten Dateien. Warten Sie, ich nehme das zurück. Sie sind verschleiert. Und es gibt keine andere Sicherheit, als ein anderer vor der Tür der Verschleierung.
C ' Mon, es ist Montag.
Basiert auf meinem Verständnis kann dies nicht getan werden, weil im SVN und anderen versioning-Systemen, muss der server Zugriff auf den Klartext, um zu erfüllen die Versionsverwaltung.