2017-12-07 3 views
0

Ist es ein Grund, CouchDB/PouchDBs Revisionsalgorithmus "unter die Haube" zu ändern, um eine Blockchain-Stil-Hashchain zu verwenden, so dass die _rev jedes Dokuments das Ergebnis einer Hash seiner vorherigen Revisionen?Ändern Sie den rev-Algorithmus von PouchDB so, dass ein Blockchain/Hashchain-Muster verwendet wird.

Ein solches Modell würde dazu beitragen, die Integrität von Revisionen zu bewahren; in einem verteilten Netzwerk zum Beispiel könnte es im Wesentlichen die Basis einer unveränderlichen Geschichte für Ihre gesamte db sein.

+0

Etwas im Sinne von secure-scuttlebutt https://github.com/ssbc/secure-scuttlebutt aber implementiert/integriert mit PouchDB API – Derrick

+0

Hier ist ein guter Primer/Refresh auf das Konzept einer Blockchain oder 'Hashchain', die sollte deutlich demonstrieren das neue _rev-Modell, das ich vorschlagen https://www.youtube.com/watch?v=_160oMzblY8 – Derrick

Antwort

1

In der Tat ist die _rev ein deterministischer Hash über das Dokument und alle seine Revisionen, zumindest für CouchDB. Es verwendet auch das vorherige _rev, so dass Sie im Grunde einen deterministischen Hash erhalten, wenn Sie die gleiche Sequenz von Aktualisierungen an einem Dokument vornehmen.

Leider ist es ein MD5-Hash, also ist es nicht wirklich für sicherheitsrelevante Sachen geeignet.

AFAIK, der tatsächliche Wert der _rev wird nie überprüft, nur der Teil vor dem Strich muss numerisch sein. So können Sie ein PouchDB-Plugin schreiben, das die _rev-Generation ändert und auch die Integrität des _rev-Wertes bei jedem Update überprüft.

+0

Awesome toll, das klärt die Dinge. Und 'deterministischer Hash' - ja, vielleicht genauer als 'Hashchain' Dankeschön. Das breitere Ziel ist eine mehr oder weniger Couch/PouchDB API für eine verteilte Blockchain. Also ich schaue, Alternative zu einem Plugin - vielleicht ein "Adapter", um PouchDB API auf etwas wie secure-scuttlebut; Hier ist eine GH-Frage, die ich eröffnet habe und die Idee vorgeschlagen habe. https://github.com/ssbc/secure-scuttlebutt/issues/189 Dennoch macht dominictarr den Punkt, dass es besser ist, die Stärke von beiden zu nutzen (je nach Anwendungsfall den einen oder anderen vorzuziehen)! Also stimme ich ihm dort zu. – Derrick

+1

Beachten Sie, dass dies nur für CouchDB gilt. Für PouchDB ist '_rev' zufällig. Obwohl [es ist Rede] (https://github.com/pouchdb/pouchdb/issues/4642), das zu ändern. – Flimzy

Verwandte Themen