it-swarm.com.de

Was ist der Unterschied zwischen dem Verschlüsseln und Signieren bei asymmetrischer Verschlüsselung?

Was ist der Unterschied zwischen dem Verschlüsseln einiger Daten und dem Signieren einiger Daten (mit RSA)?

Vertauscht es einfach die Rolle der öffentlich-privaten Schlüssel?

Zum Beispiel möchte ich meinen privaten Schlüssel verwenden, um Nachrichten zu generieren, sodass 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 generieren kann. Ich möchte meinen öffentlichen Schlüssel in meine Software aufnehmen, um die Signatur des Schlüssels zu entschlüsseln/lesen. Es ist mir egal, wer die Daten im Schlüssel lesen kann, es ist mir nur wichtig, dass ich der einzige überprüfbare Benutzer bin, der sie erzeugen kann.

Ist das Signieren in diesem Szenario hilfreich?

239
mmcdole

Beim Verschlüsseln verwenden Sie ihren öffentlichen Schlüssel, um eine Nachricht zu schreiben, und sie verwenden ihren privaten Schlüssel, um sie zu lesen.

Beim Signieren verwenden Sie Ihren privaten Schlüssel, um die Signatur der Nachricht zu schreiben, und sie verwenden Ihren öffentlichen Schlüssel, um zu überprüfen, ob sie wirklich Ihnen gehört.

Ich möchte meinen privaten Schlüssel zum Generieren von Nachrichten verwenden, damit nur ich möglicherweise 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

Dies ist eine Signatur , die mit Ihrem privaten Schlüssel durchgeführt wird.

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 generieren kann.

Wenn Sie es nur für sich selbst wissen müssen, müssen Sie sich nicht mit Schlüsseln herumschlagen, um dies zu tun. Sie können einfach zufällige Daten generieren und in einer Datenbank aufbewahren.

Aber wenn Sie möchten, dass die Leute wissen, dass die Schlüssel wirklich Ihnen gehören, müssen Sie zufällige Daten generieren, eine Datenbank darin aufbewahren UND diese mit Ihrem Schlüssel signieren.

Ich möchte meinen öffentlichen Schlüssel in meine Software aufnehmen, um die Signatur des Schlüssels zu entschlüsseln/lesen.

Sie müssen wahrscheinlich ein Zertifikat für Ihren öffentlichen Schlüssel von einem kommerziellen Anbieter wie Verisign oder Thawte erwerben, damit die Leute überprüfen können, ob niemand Ihre Software gefälscht und Ihren öffentlichen Schlüssel durch ihren ersetzt hat.

364
Quassnoi

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.

Daher ist es 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 dem 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. Dazu reicht es aus, die Nachricht mit dem privaten Schlüssel des Absenders zu verschlüsseln und die verschlüsselte Version neben der Klartextversion einzufügen. Um den Absender zu überprüfen, entschlüsseln Sie die verschlüsselte Version und stellen Sie sicher, dass 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 Chiffretexts über den entsprechenden privaten Schlüssel verfügt.

Dies bedeutet jedoch, dass Sie die Größe Ihrer Übertragung verdoppeln müssen - Klartext und Chiffretext (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:

  • Um eine Signatur zu generieren, erstellen Sie einen Hash aus dem Klartext, verschlüsseln Sie ihn mit Ihrem privaten Schlüssel und fügen Sie ihn neben den Klartext ein.
  • Um eine Signatur zu überprüfen, erstellen Sie einen Hash aus dem Klartext, entschlüsseln Sie die Signatur mit dem öffentlichen Schlüssel des Absenders und überprüfen Sie, ob beide Hashes identisch sind.
108
slim

Stellen Sie sich das Signieren von Daten so vor, als gäbe es einen eigenen Wachsstempel, den sonst niemand hat. Es wird getan, um Integrität und Nicht-Ablehnung 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.

19
Johnno Nolan

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.

Bei der Verschlüsselung werden die Daten mit dem öffentlichen Schlüssel des Empfängers verschlüsselt. 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!).

15
Doug Currie

Es gibt zwei unterschiedliche, aber eng miteinander verbundene Probleme beim Aufbau einer sicheren Kommunikation

  1. Verschlüsseln Sie Daten, damit nur befugte Personen sie entschlüsseln und lesen können.
  2. Überprüfen Sie die Identität/Authentifizierung des Absenders.

Diese beiden Probleme können elegant mithilfe der Kryptografie mit öffentlichen Schlüsseln gelöst werden.

I. Ver- und Entschlüsselung von Daten

Alice möchte eine Nachricht an Bob senden, die niemand lesen kann.

  • Alice verschlüsselt die Nachricht mit Bobs öffentlichem Schlüssel und sendet sie weiter.
  • Bob empfängt die Nachricht und entschlüsselt sie mit seinem privaten Schlüssel.

Beachten Sie, dass, wenn A eine Nachricht an B senden möchte, A den öffentlichen Schlüssel von B (der für jedermann öffentlich verfügbar ist) verwenden muss und hier weder der öffentliche noch der private Schlüssel von A ins Bild kommt.

Wenn Sie mir 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 wieder eine Nachricht an Bob 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), hijacke ich die gesamte Unterhaltung zwischen ihnen.

Kann Bob auf irgendeine Weise bestätigen, dass die empfangenen Nachrichten tatsächlich von Alice gesendet wurden?

  • Alice signiert die Nachricht mit ihrem privaten Schlüssel und sendet sie weiter. (In der Praxis ist signiert ein Hash der Nachricht, beispielsweise SHA-256 oder SHA-512.)
  • Bob empfängt es und überprüft es mit Alices öffentlichem Schlüssel. Nachdem Alices öffentlicher Schlüssel die Nachricht erfolgreich überprüft hat, kann Bob daraus schließen, dass die Nachricht von Alice signiert wurde.
13
Siva Prakash

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üsseln bedeutet, dass nur Personen mit dem entsprechenden privaten Schlüssel es lesen können. Ohne Unterschrift kann jedoch nicht garantiert werden, dass Sie sich hinter dem verschlüsselten Objekt befinden.

8
rjamestaylor

Sie beschreiben genau, wie und warum das Signieren in der Kryptografie mit öffentlichen Schlüsseln verwendet wird. Beachten Sie, dass das Signieren (oder Verschlüsseln) von willkürlichen Nachrichten anderer sehr gefährlich ist - dies ermöglicht Angriffe auf die Algorithmen, die Ihre Schlüssel gefährden könnten.

6

In Ihrem Szenario verschlüsseln Sie nicht im Sinne einer asymmetrischen Verschlüsselung. Ich würde es lieber "codieren" nennen.

Also verschlüsseln Sie Ihre Daten 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)

3
devio

Was ist der Unterschied zwischen dem Verschlüsseln einiger Daten und dem Signieren einiger Daten (mit RSA)?

Die Verschlüsselung bewahrt die Vertraulichkeit der Nachricht ("einige Daten"), während das Signieren eine Nicht-Zurückweisung ermöglicht: d. H. Nur die Entität, die sie signiert hat, könnte sie signiert haben. Es gibt auch funktionelle Unterschiede; weiter lesen.

Vertauscht es einfach die Rolle der öffentlich-privaten Schlüssel?

Absolut nicht. Die Verwendung der gleichen privaten Schlüssel zum Signieren und Entschlüsseln (oder auch der gleichen öffentlichen Schlüssel zum Verifizieren und Verschlüsseln) ist verpönt, wie Sie sollten nicht zu mischen Zwecke. Dies ist weniger ein mathematisches Problem (RSA sollte immer noch sicher sein), sondern ein Problem mit Schlüsselverwaltung, wobei z. Der Signaturschlüssel sollte eine kürzere Lebensdauer haben und mehr Schutz bieten, 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 zur Verschlüsselung verwenden. Üblicherweise wird sign-then-encrypt verwendet, andernfalls könnte ein Gegner die Signatur durch seine eigene ersetzen. Ebenso sollten Sie zur Entschlüsselung den privaten Schlüssel des Empfängers und zur Verifikation den öffentlichen Schlüssel trusted des Absenders verwenden.

Außerdem sollten Sie verstehen, dass bei der Signaturerstellung keine "Verschlüsselung mit dem privaten Schlüssel" verwendet wird. Obwohl alle RSA-Operationen auf modularer Exponentiation basieren, unterscheidet sich das Auffüllschema für die Signaturerzeugung grundlegend. Darüber hinaus hat der öffentliche Schlüssel in allen praktischen Anwendungen von RSA völlig andere Eigenschaften als der private RSA-Schlüssel.

Zum Beispiel möchte ich meinen privaten Schlüssel verwenden, um Nachrichten zu generieren, sodass möglicherweise nur ich der Absender sein kann.

Dies ist eine Eigenschaft, die durch Unterzeichnung nicht verworfen werden kann.

Ich möchte, dass mein öffentlicher Schlüssel zum Lesen der Nachrichten verwendet wird, und es ist mir egal, wer sie liest.

Der öffentliche Schlüssel sollte als allen bekannt angesehen werden. Wenn Sie möchten, dass alle die Nachrichten lesen, verschlüsseln Sie sie einfach nicht.

Das Signieren hat im Allgemeinen keinen Einfluss auf den Inhalt der Nachricht. Die Nachricht wird als von Signaturen getrennt betrachtet. Offiziell sind solche Signaturen als "Signaturen mit Anhang" bekannt, wobei der Anhang die Nachricht ist. Es ist ein seltsamer Name, da die Nachricht wichtiger ist als die Signatur darüber, aber ja. Nur wenige Signaturen bieten eine (teilweise) Nachrichtenwiederherstellung an. 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 ist die Nachricht möglicherweise nicht sichtbar und kann in diesem Fall nicht direkt verwendet werden.

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 generieren kann.

Verschlüsselung wird verwendet, um Vertraulichkeit zu erreichen. In der Vergangenheit wurde die Erzeugung von RSA-Signaturen oft als "Verschlüsselung mit dem privaten Schlüssel" angesehen. Die Operationen unterscheiden sich jedoch erheblich, wie oben erläutert, und die späteren Standards versuchen verzweifelt, Verschlüsselung und Signaturerzeugung voneinander zu trennen.

Ich möchte meinen öffentlichen Schlüssel in meine Software aufnehmen, um die Signatur des Schlüssels zu entschlüsseln/lesen. Es ist mir egal, wer die Daten im Schlüssel lesen kann, es ist mir nur wichtig, dass ich der einzige überprüfbare Benutzer bin, der sie generieren kann.

Ja, dies wird als Aufbauen von Vertrauen im öffentlichen Schlüssel bezeichnet. Der Schutz Ihres Programmcodes unterscheidet sich jedoch stark vom Schutz von Nachrichten. Sie können Code signieren aber dann brauchen Sie etwas, um die Signatur zu überprüfen außerhalb Ihres Codes. Es gibt Betriebssysteme, die dies anbieten.

Es gibt zum Beispiel Microsoft Authenticode. Anwendungsspeicher wie der iStore und Android App Store verwenden möglicherweise keine Codesignatur, bieten jedoch die Gewissheit, dass Ihre Anwendung nicht geklont oder zumindest nicht innerhalb des Speichers geklont wurde Immerhin die Lösung.

Es ist viel schwieriger, zu verhindern, dass Ihr Code geklont/geändert wird überhaupt, und Sie wären auf DRM-Gebiet, wenn Sie so vorgehen.

Ist das Signieren in diesem Szenario hilfreich?

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 ganz von der Umgebung ab, in der Sie den Code ausführen möchten.

2
Maarten Bodewes

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 verschlüsselt und dann mit dem öffentlichen Schlüssel des Empfängers verschlüsselt.

Durch das Signieren teilen Sie dem Empfänger mit, dass Sie die Nachricht erstellt haben und sie sich während der Übertragung nicht geändert hat. Das Signieren von Nachrichten erfolgt mit Ihrem eigenen privaten Schlüssel.

Was den verwendeten Algorithmus anbelangt, so handelt es sich um Primzahlen. Ich würde eine Suche auf Google durchführen, um eine bessere Erklärung zu erhalten.

2
Gerbrand

Bei Beantwortung dieser Frage in dem Inhalt, den die Fragesteller beabsichtigten, um die Lösung für die Softwarelizenzierung zu verwenden, lauten die Anforderungen:

  1. Kein Drittanbieter kann durch Dekompilieren der App einen Lizenzschlüssel erstellen
  2. Der Inhalt des Softwareschlüssels muss nicht sicher sein
  3. Der Softwareschlüssel ist nicht lesbar

Eine digitale Signatur behebt dieses Problem, da die Rohdaten, aus denen der Schlüssel besteht, mit einem privaten Schlüssel signiert werden können, der nicht für den Menschen lesbar ist, sondern bei einer Rückentwicklung decodiert 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 für Ihr Produkt zu entfernen. Also, wenn sie jede veröffentlichte Version hacken müssen. Sie möchten jedoch wirklich 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 den Zweck erfüllt. http://pynacl.readthedocs.org/en/latest/signing/

und natürlich NaCl-Projekt zu C-Beispielen

1
oden