Zeit-basierte Verschlüsselung-Algorithmus?
Habe ich schon eine Idee in meinem Kopf, aber ich habe keine Ahnung, was die magischen Worte sind für die Verwendung in Google - ich bin der Hoffnung, um die Idee zu beschreiben, die hier und vielleicht wird jemand wissen, was ich Suche.
Stellen Sie sich vor Sie haben eine Datenbank. Unmengen von Daten. Es ist verschlüsselt. Was ich Suche ist eine Verschlüsselung, wobei zu entschlüsseln, wird eine variable N muss an einem bestimmten Zeitpunkt den Wert M (die von einer Dritten Partei, wie ein hardware-token) oder es konnte nicht entschlüsselt.
So vorstellen, AES - nun, AES ist nur eine einzige Taste. Wenn Sie den Schlüssel haben, sind Sie in. Nun Stell dir vor, die AES so verändert, dass der Algorithmus selbst benötigt eine zusätzliche Tatsache, über die Schlüssel - diese extra datum von einer externen Quelle, und wo das datum variiert im Laufe der Zeit.
Ist diese vorhanden? hat es einen Namen?
- Ähnlich wie ein RSA-Schlüssel funktioniert, vielleicht? Wo der "Aktuelles Passwort" - änderungen im Laufe der Zeit mit einer rate, die bekannt, um die server und den autorisierten client? In Sicherheit-sprechen, etwas, das Sie suchen, ist "zwei-Faktor-Sicherheit." Es gibt, meines Wissens nach, drei wichtigsten Sicherheits-Faktoren. Etwas, das Sie kennen (ein Passwort), etwas, das Sie besitzen (eine access-Karte, RSA-Schlüsselanhänger fob, etc.), etwas, das Sie sind (Fingerabdruck, retina-scan, etc.). Jeder zusätzliche Faktor, fügt deutlich mehr Sicherheit als nur die Verdoppelung einer der Faktoren. (Passwort + RSA-Schlüssel ist besser als 2 Passwörter, zum Beispiel.)
- Es ist wie es ist, außer mehr so - es ist eigentlich, wie die Daten verschlüsselt sind, nicht nur für die Authentifizierung. Bedenken Sie, dass meine situation genau Umgekehrt ist. Eher, als der agent mich zu Kontaktieren und mir benötigen, zu authentifizieren, die der agent (RSA), in meinem Fall dem Auftragnehmer (Datenbank) hält alles, was von Wert, aber es ist verschlüsselt; ich möchte sicherstellen, dass der agent nur Zugriff auf die Daten mit meinem Einverständnis, z.B. so, dass wenn der agent unterlaufen, er immer noch keinen Zugriff auf die Daten ohne meine Erlaubnis. Normal-AES-Verschlüsselung ist nicht nützlich für das, weil der agent schon wissen, der Schlüssel.
- crypto.stackexchange.com/questions/3064/... und crypto.stackexchange.com/questions/606/...
- lols, es ist ein Kryptographie-stackexchange - danke, Code. Ich habe nur die links Lesen, Sie sind nicht wirklich das, was ich im Auge habe, obwohl interessant. Ich denke, meine wichtigste Frage ist, können die decrypt-Algorithmus erfordern eine Tatsache, die im Laufe der Zeit ändert - fast wie die Mehrparteien-Verschlüsselung.
- Ich weiß nicht, die Antwort. Können Sie etwas wie dieses von identity-based encryption (IBE). In diesem Fall ist die Identität mit der Zeit, wie "bob_129210" aber natürlich ist mehr zu es dann. Und Sie können so etwas von one-time-password (OTP) Schemas, wo das Passwort bei der Zeit t ist die hash-pre-image des Passworts zum Zeitpunkt t-1.
- Ich denke, es wird als eine Vertrauenswürdige Dritte Partei, die Ihnen nur der symmetrische Schlüssel mit einem bestimmten time-slot 🙂 Sie sind dann, angeblich, um es wegzuwerfen (da Sie bereits Zugriff auf die DB, können Sie auch entschlüsseln und speichern Sie es irgendwo). Alles andere erfordert zusätzliche Parteien würde ich denken (aber die Welt ist komisch).
- richtig, aber denken Sie daran - wir müssen sagen, ein petabyte Daten verschlüsselt abgelegt werden. Wir können nicht erneut verschlüsseln. Ein OTP-Schlüssel ist nützlich, wenn die verschlüsselten Daten entschlüsselt, die durch viele Tasten, aber in dem angegebenen Schlüssel ist gültig nur für einen kurzen definierten Zeitraum.
- Ich glaube nicht, dass der encryption key ändern kann, auf eine statische Datei. Julian Assange gelernt, dass die harte Weise. Aber wenn die tatsächlichen Zugriffe auf eine Datenbank über eine Schnittstelle, die du kontrollierst, können Sie dann ändern Sie den Verschlüsselungsschlüssel jedes mal, wenn Sie wollen.
- Ich hoffe, du verzeihst mir, dass ich lief ein Kopfgeld auf deine Frage. 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist einfach zu tun mit der Hilfe von einer vertrauenswürdigen Dritten Partei. Ja, ich weiß, Sie wahrscheinlich wollen eine Lösung, die nicht wirklich braucht, aber Geduld mit mir — wir kommen, oder zumindest in der Nähe, dass.
Sowieso, wenn Sie einen geeigneten vertrauenswürdigen Dritten Partei, dies ist einfach: nach der Verschlüsselung der Datei mit AES, senden Sie einfach Ihre AES-key zu der Dritten Partei, Fragen Sie Sie, um verschlüsseln Sie es mit Ihrem eigenen Schlüssel, schicken das Ergebnis zurück an Sie, und veröffentlichen Ihren Schlüssel an irgendeinem bestimmten Zeitpunkt in der Zukunft. An diesem Punkt (aber nicht früher), wer hat die verschlüsselten AES-Schlüssel kann nun entschlüsseln und verwenden Sie es, um die Datei zu entschlüsseln.
Natürlich, der Dritte kann brauchen die eine Menge von Schlüssel-Verschlüsselungs-Schlüssel, um veröffentlicht werden zu einem anderen Zeitpunkt. Eher als das speichern Sie Sie alle auf einem Datenträger oder sowas, ein einfacher Weg ist für Sie zu erzeugen, um die einzelnen key-encryption-Schlüssel aus einem geheimen master-Schlüssel und dem gewünschten release-Zeit, z.B. durch die Anwendung geeigneter key-derivation-Funktion zu Ihnen. So, eine deutliche und (scheinbar) unabhängige Schlüssel generiert werden kann, für jede gewünschte release-Datum oder Zeit.
In einigen Fällen, diese Lösung könnte tatsächlich praktisch sein kann. Zum Beispiel das "trusted third party" könnte ein tamper-resistant hardware-Sicherheits-Modul mit einer eingebauten Echtzeit-Uhr und eine sichere externe Schnittstelle, die es erlaubt Schlüssel verschlüsselt werden, für eine release-Datum, aber entschlüsselt werden, nur für Termine, die vergangen sind.
Jedoch, wenn die Vertrauenswürdige Dritte Partei ist eine remote-Einheit bietet einen weltweiten service senden jeweils AES-Schlüssel, um Sie für die Verschlüsselung kann unpraktisch sein, nicht zu erwähnen, ein potenzielles Sicherheitsrisiko. In diesem Fall public-key-Kryptographie eine Lösung anbieten können: statt mit symmetrische Verschlüsselung zum verschlüsseln der Datei-Verschlüsselung-Schlüssel (was erfordern würde, die Sie entweder zu wissen, die Datei-Verschlüsselung-Schlüssel oder die Freigabe der key-encryption key), der Vertrauenswürdige Dritte Partei kann stattdessen generieren Sie ein public/private key paar für jeden release-Datum und veröffentlichen die öffentliche Hälfte des Schlüsselpaars sofort, sich aber weigern, offenzulegen, die private Hälfte, bis die angegebene release-Datum. Jemand anderes hält die öffentliche Schlüssel-kann verschlüsseln Sie Ihre eigenen Schlüssel mit, aber niemand kann entschlüsseln, bis der zugehörige private Schlüssel offenbart wurde.
(Andere partielle Lösung wäre die Verwendung secret-sharing aufteilen der AES-Schlüssel in die Aktien-und schicken nur einen Anteil an den Dritten, der für die Verschlüsselung. Wie die public-key-Lösung, die oben beschrieben, dies würde vermeiden, dass die Offenlegung der AES-key zu der Dritten Partei, aber im Gegensatz zu der public-key-Lösung, wäre es immer noch erfordern eine zwei-Wege-Kommunikation zwischen der encryptor und der vertrauenswürdigen Dritten Partei.)
Das offensichtliche problem mit den beiden oben genannten Lösungen ist, dass Sie (und alle anderen beteiligten) tun müssen darauf Vertrauen, dass der Dritte die Generierung der Schlüssel: wenn die Dritte Partei unehrlich ist, oder durch einen Angreifer gefährdet wurde, können Sie leicht offenlegen der privaten Schlüssel vor der Zeit.
Ist, gibt es jedoch eine clevere Methode veröffentlicht im Jahr 2006 von Michael Rabin und Christopher Thorpe (und erwähnt in diese Antwort auf crypto.SE von einem der Autoren), das erhält zumindest teilweise um das problem. Der trick ist, verteilen Sie die Schlüssel-Generierung unter einem Netzwerk von mehrere mehr oder weniger vertrauenswürdigen Dritten in der Weise, dass, auch wenn eine begrenzte Anzahl der Parteien sind unehrlich oder gefährdet ist, wird keiner von Ihnen lernen können, den privaten Schlüssel aus, bis eine ausreichende Mehrheit der Parteien einig, dass es in der Tat Zeit, Sie zu lösen.
Rabin & Thorpe-Protokoll schützt auch gegen eine Vielzahl von anderen möglichen Angriffe von kompromittierten Parteien, wie versucht zu verhindern, dass die Preisgabe von privaten Schlüsseln in der angegebenen Zeit oder zu bewirken, dass der erzeugte private oder public keys nicht übereinstimmen. Ich behaupte nicht, zu verstehen, deren Protokoll voll und ganz, aber angesichts der Tatsache, dass es basiert auf einer Kombination von bestehenden und auch Studien kryptographische Techniken, sehe ich keinen Grund, warum sollte es nicht gerecht sein, erklärte Sicherheits-Spezifikationen.
Natürlich die große Schwierigkeit hier ist, dass für die Sicherheits-Spezifikationen, um tatsächlich zu etwas nützlich, Sie tun müssen ein verteiltes Netzwerk von key-Generatoren sind groß genug, dass kein einzelner Angreifer kann plausibel Kompromiss eine ausreichende Mehrheit von Ihnen. Die Etablierung und Pflege einer solchen Netzwerks keine triviale übung.
Ja, die Art von encrpytion, die Sie suchen, existiert. Es heißt timed-release-Verschlüsselung, oder abgekürzt TRE. Hier ist eine Abhandlung darüber: http://cs.brown.edu/~foteini/papers/MathTRE.pdf
Folgende ist ein Auszug aus dem abstract der genannten Papier:
Es gibt heutzutage verschiedene e-business-Anwendungen, wie sealedbid-Auktionen und elektronische Abstimmungen erfordern zeitverzögerte Entschlüsselung der verschlüsselten Daten. Die Literatur bietet mindestens drei Hauptkategorien von Protokollen, für solche timed-release-Verschlüsselung (TRE).
Sie verlassen sich entweder auf zwingt den Empfänger der Nachricht zu lösen einige Zeit in Anspruch nehmen, nicht paralellizable problem, bevor Sie in der Lage, zu entschlüsseln oder auf der Nutzung einer vertrauenswürdigen Entität, die verantwortlich für die Bereitstellung einer information, die notwendig ist für die Entschlüsselung.
Ich persönlich mag einen anderen Namen, die "time capsule "Kryptographie", vermutlich geprägt in crypto.stackoverflow.com: Time Capsule Kryptographie?.
Eine schnelle Antwort ist Nein: der Schlüssel zum entschlüsseln der Daten verwendet nicht in der Zeit ändern, es sei denn, Sie entschlüsseln und erneut zu verschlüsseln, alle die Datenbank in regelmäßigen Abständen (ich vermute, dass es nicht möglich ist).
Die Lösung von @Ilmari Karonen ist der einzige, den das machbar, aber es braucht eine Vertrauenswürdige Dritte Partei, darüber hinaus erhalten die master-AES-Schlüssel ist wiederverwendbar in die Zukunft: Sie können nicht mit "one time pads" mit dieser Lösung.
Wenn Sie möchten, dass Ihre token, um Zeit-basierte, die Sie verwenden können TOTP-Algorithmus
TOTP kann Ihnen helfen, generieren einen Wert für die variable N (token) in einer bestimmten Zeit M. Damit der Dienst, der den Zugriff anfordert, um Ihre Datenbank befestigen Sie ein token, das generiert wurde, mit TOTP. Bei der Validierung der token beim access-provider Ende, Sie werden überprüfen, ob das token enthält den richtigen Wert anhand der aktuellen Uhrzeit. Sie müssen über einen Freigegebenen Schlüssel an beiden enden zu generieren gleichen TOTP.
Den Vorteil von TOTP ist, dass der Wert ändert sich mit der Zeit und ein token kann nicht wiederverwendet werden.
Implementierte ich eine ähnliche Sache für zwei-Faktor-Authentifizierung.
"One time Password" - so könnte Ihr google-Worte.
Ich glaube was du suchst ist die sogenannte Public-Key-Verschlüsselung oder Public-Key-Verschlüsselung.
Ein weiteres gutes Wort für google ist "asymmetrische key encryption scheme".
Google, und ich bin mir ziemlich sicher, dass Sie finden, was Sie suchen.
Weitere Informationen Wikipedia-Artikel
Ist ein Beispiel HIERFÜR : Diffie–Hellman-key-exchange
Bearbeiten (setzen die Dinge in Perspektive)
Der zweite Schlüssel kann bestimmt werden, indem ein Algorithmus verwendet, die eine bestimmte Zeit (zum Beispiel beim einfügen von Daten zu generieren, die zweite Taste, die gespeichert werden können in einer anderen Lage.
Als die anderen Jungs darauf hingewiesen, One Time Password kann eine gute Lösung für das Szenario, das Sie vorgeschlagen.
Gibt es eine OTP implementiert in C#, dass Sie vielleicht werfen Sie einen Blick https://code.google.com/p/otpnet/.