Was ist der Unterschied zwischen Verschlüsselung und Signierung bei asymmetrischer Verschlüsselung?

297

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?

mmcdole
quelle

Antworten:

441

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 er wirklich Ihnen gehört.

Ich möchte 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

Dies ist eine Signatur , die mit Ihrem privaten Schlüssel erfolgt.

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.

Wenn Sie es nur 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 speichern.

Wenn Sie jedoch möchten, dass die Benutzer 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 / zu lesen.

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

Quassnoi
quelle
7
Wenn Sie sagen, dass der private Schlüssel zum Schreiben der Signatur der Nachricht verwendet wird, sagen Sie technisch gesehen, dass der Hash der Nachricht mit meinem privaten Schlüssel verschlüsselt wird?
Andy Ibanez
4
@AndyIbanez: Was verschlüsselt ist (der Digest ), kann auch einen Zeitstempel und etwas zufälliges Salz enthalten, aber ja, das ist der Kern davon.
Quassnoi
7
@Quassnoi Wenn wir "Mit dem privaten Schlüssel signieren" sagen, bedeutet dies nicht "verschlüsseln", sondern "entschlüsseln". Das Signieren der Nachricht entspricht ungefähr dem Entschlüsseln mit dem privaten Schlüssel und dem Verschlüsseln mit dem öffentlichen Schlüssel im Empfänger. Auf diese Weise wird der Hash derselbe und kann verglichen werden.
Johnny Willer
5
@JohnnyWiller: Wie unten erwähnt, ist der mathematische Kern für Verschlüsselungs- und Entschlüsselungsfunktionen gleich. Sie sind keine getrennten Funktionen, sie sind die gleiche Funktion f(key, message), so dassf(private, f(public, message)) === f(public, f(private, message)) === message
Quassnoi
2
@Honey nein ist es nicht. Das Generieren des Schlüsselpaars ist kostenlos. Die Kosten sind damit verbunden, dass die anderen glauben, dass die Unterschrift wirklich Ihnen gehört. Dazu haben Sie Ihren öffentlichen Schlüssel selbst, den Sie zuvor kostenlos erstellt haben, von einer Behörde signiert, die Ihnen möglicherweise Geld dafür in Rechnung stellt oder nicht.
Quassnoi
143

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:

  • 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.
schlank
quelle
8
@headcode gilt nur für asymmetrische Schlüssel. Symmetrische Schlüssel kommen nicht paarweise vor.
schlank
3
Tatsächlich gilt dies nur für RSA-Schlüssel. Mit ECDSA-Schlüsseln können Sie beispielsweise den öffentlichen Schlüssel trivial aus dem privaten Schlüssel generieren, und der private Schlüssel ist ein Skalar, während der öffentliche Schlüssel eine Koordinate ist.
David Schwartz
5
Wie können Sie Nachrichten mit PUBLIC-Schlüsseln entschlüsseln? Werden Nachrichten nicht nur mit privaten Schlüsseln entschlüsselt?
Daremkd
3
5 Quellen, die dieser Antwort widersprechen 1 , 2 , 3 , 4 , 5
immer,
6
Es ist nicht willkürlich, welche Sie öffentlich und privat nennen. Sie können den öffentlichen Schlüssel aus dem privaten Schlüssel generieren, aber Sie können den privaten Schlüssel nicht aus dem öffentlichen Schlüssel generieren. Ist das nicht ein großer Unterschied?
Greg Schmit
23

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

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

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.

  • 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 A, wenn A eine Nachricht an B senden möchte, den öffentlichen Schlüssel von B verwenden muss (der für jedermann öffentlich verfügbar ist) und hier weder der öffentliche noch der private Schlüssel von A ins Bild kommt.

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?

  • Alice signiert die Nachricht mit ihrem privaten Schlüssel und sendet sie weiter. (In der Praxis wird ein Hash der Nachricht signiert, z. B. SHA-256 oder SHA-512.)
  • Bob empfängt es und überprüft es mit Alices öffentlichem Schlüssel. Da Alices öffentlicher Schlüssel die Nachricht erfolgreich überprüft hat, kann Bob daraus schließen, dass die Nachricht von Alice signiert wurde.
Siva Prakash
quelle
1
Wenn Sie die Nachricht signieren, signieren Sie dann die eigentliche Nachricht selbst oder die verschlüsselte Nachricht?
FrostyStraw
21

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.

Johnno Nolan
quelle
16

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!).

Doug Currie
quelle
Bei der normalen asymmetrischen Verschlüsselung erfolgt die Verschlüsselung mit dem öffentlichen Schlüssel des Empfängers und nicht mit Ihrem privaten Schlüssel.
mmcdole
Speziell über RSA Haben Sie vermissen , dass diese Frage war , wo die Verwendung der Schlüssel wird umgekehrt , und wo es nicht den privaten Schlüssel gefährden.
David Schwartz
8

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.

Michael Borgwardt
quelle
1
Verschlüsseln Webbrowser bei Verwendung von SSL keine beliebigen Daten?
Ian Warburton
2
@ IanWarburton: Dafür verwenden sie aber keine asymmetrische Verschlüsselung. Die eigentlichen Datenübertragungen verwenden eine symmetrische Verschlüsselung mit einem zufällig generierten Sitzungsschlüssel.
Michael Borgwardt
1
@ IanWarburton: Nein, da keiner von beiden von einem Angreifer ausgewählt wird. Die Gefahr besteht darin, etwas zu verschlüsseln oder zu signieren, das direkt von einem Angreifer bereitgestellt wird, da dies sehr bewusst dazu dienen kann, Informationen über Ihren privaten Schlüssel preiszugeben oder sogar Signaturen zu erstellen, die für etwas gültig erscheinen, das Sie nicht signieren wollten. Eine detaillierte Aufschlüsselung der Funktionsweise des letzteren Falls für RSA finden Sie hier: crypto.stackexchange.com/questions/35644/…
Michael Borgwardt
2
@IanWarburton: Aus diesem Grund erfordert RSA ein Auffüllen, sodass Sie niemals nur eine ausgewählte Nachricht verschlüsseln: en.wikipedia.org/wiki/… - aber es sind wirklich die Vorgänge, bei denen der private Schlüssel (wie das Signieren) beteiligt ist, die besonders anfällig für ausgewählte Eingaben sind.
Michael Borgwardt
1
@ IanWarburton Ich bin kein Kryptographie-Experte, aber soweit ich weiß, sollte das keine Probleme verursachen.
Michael Borgwardt
8

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.

rjamestaylor
quelle
Wenn die Nachricht von meinem öffentlichen Schlüssel entschlüsselt wird, hätte nur ich sie senden können. (Vorausgesetzt, mein privater Schlüssel ist nicht gefährdet)
Dojo
5

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.

Maarten Bodewes
quelle
"In der Vergangenheit wurde die RSA-Signaturgenerierung oft als" Verschlüsselung mit dem privaten Schlüssel "angesehen. Die oben beschriebenen Vorgänge sind jedoch sehr unterschiedlich, und die späteren Standards versuchen verzweifelt, Verschlüsselung und Signaturgenerierung zu trennen." - Das ist mir nicht klar. Entweder KeyPair kann pk oder sk sein, und was das andere verschlüsselt, kann entschlüsselt werden. Wenn wir uns darin einig sind, wie können wir dann argumentieren, dass Signieren und Verschlüsseln in irgendeiner sinnvollen Weise unterschiedlich sind? Sowohl verschlüsseln als auch können nur mit dem anderen Schlüssel entschlüsselt werden. Ich habe Verweise auf Signaturfunktionen gesehen. Ist das verwandt?
Morgan
Der einzige Unterschied, den ich bei der Signaturfunktion kenne, ist das Hashing der Nachricht vor der Verschlüsselung.
Morgan
4

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)

devio
quelle
2

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.

Gerbrand
quelle
Können Sie meinen Anwendungsfall kommentieren? Ich möchte einen privaten Schlüssel zum Verschlüsseln und einen öffentlichen Schlüssel zum Entschlüsseln verwenden.
mmcdole
1
Es ist nicht wahr, dass jede asymmetrische Verschlüsselung auf Primzahlen basiert, es ist nur das bekannteste Beispiel (RSA); Es gibt andere Methoden wie die Kryptographie mit elliptischen Kurven.
Michael Borgwardt
"Die Nachricht wird verschlüsselt und dann mit dem öffentlichen Schlüssel des Empfängers verschlüsselt." Dieser Satz macht einfach keinen Sinn oder bedarf zumindest einer weiteren Erklärung. "verschlüsselt dann verschlüsselt" ???
Maarten Bodewes
Du hast Trent vergessen! :)
Dojo
1

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

  1. Kein Drittanbieter kann einen Lizenzschlüssel für die Dekompilierung der App erstellen
  2. Der Inhalt des Softwareschlüssels muss nicht sicher sein
  3. Der Softwareschlüssel ist nicht für Menschen lesbar

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

oden
quelle