Was ist der Unterschied zwischen dem Verschlüsseln einiger Daten und dem Signieren einiger Daten (mit RSA)?
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.
Kehrt es einfach die Rolle der öffentlich-privaten Schlüssel um?
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.
Zum Beispiel möchte ich meinen privaten Schlüssel verwenden, um Nachrichten zu generieren, damit möglicherweise nur ich der Absender sein kann.
Dies ist eine Nicht-Zurückweisungseigenschaft, die durch Unterzeichnung erreicht 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 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.
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.
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.
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.
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.
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 vollständig von der Umgebung ab, in der Sie den Code ausführen möchten.