Was ist der Unterschied zwischen dem Verschlüsseln einiger Daten und dem Signieren einiger Daten (mit RSA)?
Kehrt es einfach die Rolle der öffentlich-privaten Schlüssel um?
Zum Beispiel möchte ich meinen privaten Schlüssel verwenden, um Nachrichten zu generieren, damit möglicherweise nur ich der Absender sein kann. Ich möchte, dass mein öffentlicher Schlüssel zum Lesen der Nachrichten verwendet wird, und es ist mir egal, wer sie liest. Ich möchte bestimmte Informationen verschlüsseln und als Produktschlüssel für meine Software verwenden können. Es ist mir nur wichtig, dass ich der einzige bin, der diese erzeugen kann. Ich möchte meinen öffentlichen Schlüssel in meine Software aufnehmen, um die Signatur des Schlüssels zu entschlüsseln / zu lesen. Es ist mir egal, wer die Daten im Schlüssel lesen kann, es ist mir nur wichtig, dass ich der einzige überprüfbare bin, der sie generieren kann.
Ist das Signieren in diesem Szenario hilfreich?
quelle
f(key, message)
, so dassf(private, f(public, message)) === f(public, f(private, message)) === message
Wenn Sie in RSA-Krypto ein Schlüsselpaar generieren, ist es völlig willkürlich, welchen Sie als öffentlichen Schlüssel und welchen als privaten Schlüssel auswählen. Wenn Sie mit einem verschlüsseln, können Sie mit dem anderen entschlüsseln - es funktioniert in beide Richtungen.
Es ist also ziemlich einfach zu sehen, wie Sie eine Nachricht mit dem öffentlichen Schlüssel des Empfängers verschlüsseln können , damit der Empfänger sie mit seinem privaten Schlüssel entschlüsseln kann .
Eine Signatur ist ein Beweis dafür, dass der Unterzeichner über den privaten Schlüssel verfügt, der mit einem öffentlichen Schlüssel übereinstimmt. Zu diesem Zweck würde es ausreichen, die Nachricht mit dem privaten Schlüssel des Absenders zu verschlüsseln und die verschlüsselte Version neben der Klartextversion einzuschließen. Um den Absender zu überprüfen, entschlüsseln Sie die verschlüsselte Version und überprüfen Sie, ob sie mit dem Klartext übereinstimmt.
Dies bedeutet natürlich, dass Ihre Nachricht nicht geheim ist. Jeder kann es entschlüsseln, da der öffentliche Schlüssel bekannt ist. Dabei haben sie jedoch bewiesen, dass der Ersteller des Chiffretextes über den entsprechenden privaten Schlüssel verfügt.
Dies bedeutet jedoch, dass Sie die Größe Ihrer Übertragung verdoppeln müssen - Klartext und Chiffretext zusammen (vorausgesetzt, Sie möchten, dass Personen, die nicht an der Überprüfung der Signatur interessiert sind, die Nachricht lesen). Stattdessen wird normalerweise eine Signatur erstellt, indem ein Hash des Klartextes erstellt wird. Es ist wichtig, dass keine gefälschten Hashes erstellt werden können, daher werden kryptografische Hash-Algorithmen wie SHA-2 verwendet.
So:
quelle
Es gibt zwei unterschiedliche, aber eng miteinander verbundene Probleme beim Aufbau einer sicheren Kommunikation
Beide Probleme können mithilfe der Kryptografie mit öffentlichen Schlüsseln elegant gelöst werden.
I. Ver- und Entschlüsselung von Daten
Alice möchte eine Nachricht an Bob senden, die niemand lesen kann.
Wenn Sie mir also eine Nachricht senden möchten, sollten Sie meinen öffentlichen Schlüssel kennen und verwenden, den ich Ihnen zur Verfügung stelle. Nur ich kann die Nachricht entschlüsseln, da ich der einzige bin, der Zugriff auf den entsprechenden privaten Schlüssel hat.
II. Überprüfen Sie die Identität des Absenders (Authentifizierung)
Alice möchte Bob erneut eine Nachricht senden. Das Problem der Verschlüsselung der Daten wird mit der obigen Methode gelöst.
Aber was ist, wenn ich zwischen Alice und Bob sitze, mich Bob als 'Alice' vorstelle und meine eigene Nachricht an Bob sende, anstatt die von Alice gesendete weiterzuleiten? Obwohl ich die von Alice gesendete Originalnachricht nicht entschlüsseln und lesen kann (für die Zugriff auf Bobs privaten Schlüssel erforderlich ist), entführe ich die gesamte Konversation zwischen ihnen.
Gibt es eine Möglichkeit, wie Bob bestätigen kann, dass die Nachrichten, die er empfängt, tatsächlich von Alice gesendet werden?
quelle
Ja, denken Sie daran, Daten zu signieren, indem Sie ihnen Ihren eigenen Wachsstempel geben, den sonst niemand hat. Es wird getan, um Integrität und Nicht-Zurückweisung zu erreichen . Die Verschlüsselung ist so, dass niemand sonst die Daten sehen kann. Dies geschieht, um Vertraulichkeit zu erreichen . Siehe Wikipedia http://en.wikipedia.org/wiki/Information_security#Key_concepts
Eine Signatur ist ein Hash Ihrer Nachricht, der mit Ihrem privaten Schlüssel signiert wurde.
quelle
Beim Signieren wird ein "Hash" mit Ihrem privaten Schlüssel erstellt, der mit Ihrem öffentlichen Schlüssel überprüft werden kann. Der Text wird im Klartext gesendet.
Beim Verschlüsseln wird der öffentliche Schlüssel des Empfängers zum Verschlüsseln der Daten verwendet. Die Dekodierung erfolgt mit ihrem privaten Schlüssel.
Die Verwendung von Schlüsseln wird also nicht rückgängig gemacht (sonst wäre Ihr privater Schlüssel nicht mehr privat!).
quelle
Sie beschreiben genau, wie und warum das Signieren in der Kryptografie mit öffentlichen Schlüsseln verwendet wird. Beachten Sie, dass es sehr gefährlich ist, von anderen bereitgestellte beliebige Nachrichten zu signieren (oder zu verschlüsseln). Dies ermöglicht Angriffe auf die Algorithmen, die Ihre Schlüssel gefährden könnten.
quelle
Das Signieren zeigt an, dass Sie wirklich die Quelle oder der Beleg für das signierte Objekt sind. Jeder kann das Objekt jedoch lesen.
Verschlüsselung bedeutet, dass nur diejenigen mit dem entsprechenden privaten Schlüssel ihn lesen können. Ohne Signatur gibt es jedoch keine Garantie dafür, dass Sie sich hinter dem verschlüsselten Objekt befinden.
quelle
Durch die Verschlüsselung wird die Vertraulichkeit der Nachricht ("einige Daten") gewahrt, während beim Signieren keine Ablehnung erfolgt: Das heißt, nur die Entität, die sie signiert hat, hätte sie signieren können. Es gibt auch funktionale Unterschiede; weiter lesen.
Absolut nicht. Die Verwendung derselben privaten Schlüssel zum Signieren und Entschlüsseln (oder ebenfalls derselben öffentlichen Schlüssel zur Überprüfung und Verschlüsselung ) ist verpönt, da Sie keine Zwecke mischen sollten. Dies ist weniger ein mathematisches Problem (RSA sollte immer noch sicher sein), sondern ein Problem bei der Schlüsselverwaltung , bei dem z. B. der Signaturschlüssel eine kürzere Lebensdauer haben und mehr Schutz enthalten sollte, bevor er verwendet wird.
Für dieselbe Nachricht sollten Sie den privaten Schlüssel des Absenders zum Signieren und den vertrauenswürdigen öffentlichen Schlüssel des Empfängers zum Verschlüsseln verwenden. In der Regel wird Sign-Then-Encrypt verwendet, andernfalls könnte ein Gegner die Signatur durch seine eigene ersetzen. Ebenso sollten Sie den privaten Schlüssel des Empfängers zur Entschlüsselung und den vertrauenswürdigen verwenden öffentlichen Schlüssel des Absenders zur Überprüfung verwenden.
Darüber hinaus sollten Sie verstehen, dass die Signaturgenerierung keine "Verschlüsselung mit dem privaten Schlüssel" verwendet. Obwohl alle RSA-Operationen auf modularer Exponentiation basieren, ist das Auffüllschema für die Signaturerzeugung völlig anders. Darüber hinaus hat der öffentliche Schlüssel in allen praktischen Anwendungen von RSA völlig andere Eigenschaften als der private RSA-Schlüssel.
Dies ist eine Nicht-Zurückweisungseigenschaft, die durch Unterzeichnung erreicht werden kann.
Der öffentliche Schlüssel sollte allen bekannt sein. Wenn Sie möchten, dass jeder die Nachrichten liest, verschlüsseln Sie sie einfach nicht.
Das Signieren hat im Allgemeinen keinen Einfluss auf den Inhalt der Nachricht. Die Nachricht wird als von den Signaturen getrennt betrachtet. Offiziell werden solche Unterschriften als "Unterschriften mit Anhang" bezeichnet, wobei der Anhang die Nachricht ist. Es ist ein etwas seltsamer Name, da die Nachricht als wichtiger angesehen wird als die Signatur darüber, aber ja. Nur wenige Signaturen bieten eine (teilweise) Nachrichtenwiederherstellung. Sie werden nicht mehr viel verwendet und gelten allgemein als veraltet.
Beachten Sie, dass Signaturprotokolle wie CMS möglicherweise ein Containerformat bereitstellen , das sowohl die Nachricht als auch die Signatur enthält. In diesem Fall müssen Sie zuerst die - noch unverschlüsselte - Nachricht aus dem Container holen, ähnlich wie beim Entpacken einer Datei aus einem einfachen ZIP-Archiv. Daher kann die Nachricht nicht sichtbar sein und in diesem Fall nicht direkt verwendet werden.
Die Verschlüsselung wird verwendet, um Vertraulichkeit zu erreichen. In der Vergangenheit wurde die Generierung von RSA-Signaturen häufig als "Verschlüsselung mit dem privaten Schlüssel" angesehen. Die Operationen sind jedoch ganz anders, wie oben erläutert, und die späteren Standards versuchen verzweifelt, Verschlüsselung und Signaturerzeugung zu trennen.
Ja, dies wird als Vertrauensbildung in den öffentlichen Schlüssel bezeichnet. Der Schutz Ihres Programmcodes unterscheidet sich jedoch stark vom Schutz von Nachrichten. Sie können ausführen Code - Signing , aber dann würden Sie brauchen etwas , um die Signatur zu überprüfen außerhalb des Codes . Es gibt Betriebssysteme, die dies anbieten.
Es gibt zum Beispiel Microsoft Authenticode. Anwendungsspeicher wie der iStore und der Android App Store verwenden möglicherweise die Codesignatur oder nicht, bieten jedoch die Gewissheit, dass Ihre Anwendung nicht oder zumindest nicht im Store geklont wird. Kryptographie ist schließlich nicht immer die Lösung.
Halten Sie Ihren Code vor einer geklonten / geändert überhaupt ist viel schwieriger, und Sie würden fest in DRM Gebiet sein , wenn Sie diesen Weg zu gehen.
Ja absolut. Es kann sicherlich hilfreich sein, sicherzustellen, dass die Nachrichten nur von Ihnen signiert wurden, wenn Vertrauen in den öffentlichen Schlüssel besteht. Ob dies für die Authentifizierung Ihres Anwendungscodes / integrierten öffentlichen Schlüssels hilfreich sein kann, hängt vollständig von der Umgebung ab, in der Sie den Code ausführen möchten.
quelle
In Ihrem Szenario verschlüsseln Sie nicht im Sinne einer asymmetrischen Verschlüsselung. Ich würde es lieber "codieren" nennen.
Sie codieren Ihre Daten also in eine binäre Darstellung und signieren dann mit Ihrem privaten Schlüssel. Wenn Sie die Signatur nicht über Ihren öffentlichen Schlüssel überprüfen können, wissen Sie, dass die signierten Daten nicht mit Ihrem privaten Schlüssel generiert werden. ("Überprüfung" bedeutet, dass die nicht signierten Daten nicht aussagekräftig sind)
quelle
Funktionell verwenden Sie die Verschlüsselung mit öffentlichen / privaten Schlüsseln, um sicherzustellen, dass nur der Empfänger Ihre Nachricht lesen kann. Die Nachricht wird mit dem öffentlichen Schlüssel des Empfängers verschlüsselt und entschlüsselt mit dem privaten Schlüssel des Empfängers .
Mit der Signatur können Sie dem Empfänger mitteilen, dass Sie die Nachricht erstellt haben und sie sich während der Übertragung nicht geändert hat. Das Signieren der Nachricht erfolgt mit Ihrem eigenen privaten Schlüssel. Der Empfänger kann Ihren öffentlichen Schlüssel verwenden, um zu überprüfen, ob die Nachricht nicht manipuliert wurde.
Was den verwendeten Algorithmus betrifft: Dies beinhaltet eine Einwegfunktion, siehe zum Beispiel Wikipedia . Einer der ersten derartigen Algorithmen verwendet große Primzahlen, aber seitdem wurden mehr Einwegfunktionen erfunden.
Suchen Sie nach "Bob", "Alice" und "Mallory", um Einführungsartikel im Internet zu finden.
quelle
Bei der Beantwortung dieser Frage in dem Inhalt, den die Fragesteller beabsichtigten, die Lösung für die Softwarelizenzierung zu verwenden, gelten folgende Anforderungen:
Eine digitale Signatur löst dieses Problem, da die Rohdaten, aus denen der Schlüssel besteht, mit einem privaten Schlüssel signiert werden können, wodurch er nicht für den Menschen lesbar ist, sondern bei einem Reverse Engineering dekodiert werden kann. Der private Schlüssel ist jedoch sicher, was bedeutet, dass niemand Lizenzen für Ihre Software erstellen kann (worum es geht).
Denken Sie daran, dass Sie einen Fachmann nicht daran hindern können, die Software-Sperren Ihres Produkts zu entfernen. Also, wenn sie jede Version hacken müssen, die veröffentlicht wird. Sie möchten jedoch nicht, dass sie neue Schlüssel für Ihr Produkt generieren können, die für alle Versionen freigegeben werden können.
Python Die PyNaCl-Dokumentation enthält ein Beispiel für 'Digitale Signatur', das dem Zweck entspricht. http://pynacl.readthedocs.org/en/latest/signing/
und natürlich NaCl-Projekt zu C-Beispielen
quelle