Lizenzschlüssel sind der Defacto-Standard als Maßnahme gegen Piraterie. Um ehrlich zu sein, erscheint mir dies als (in) Sicherheit durch Dunkelheit , obwohl ich wirklich keine Ahnung habe, wie Lizenzschlüssel generiert werden. Was ist ein gutes (sicheres) Beispiel für die Generierung von Lizenzschlüsseln? Welches kryptografische Grundelement (falls vorhanden) verwenden sie? Ist es ein Message Digest? Wenn ja, welche Daten würden sie hashen? Welche Methoden setzen Entwickler ein, um es Crackern zu erschweren, ihre eigenen Schlüsselgeneratoren zu bauen? Wie werden Schlüsselgeneratoren hergestellt?
361
Antworten:
Bei CD-Schlüsseln der alten Schule ging es nur darum, einen Algorithmus zu entwickeln, für den CD-Schlüssel (bei denen es sich um eine beliebige Zeichenfolge handeln kann) leicht zu generieren und zu überprüfen sind, aber das Verhältnis von gültigen CD-Schlüsseln zu ungültigen CDs -keys ist so klein, dass es unwahrscheinlich ist, dass Sie nach dem Zufallsprinzip CD-Keys erhalten.
Falsche Vorgehensweise:
Starcraft und Half-Life verwendeten beide dieselbe Prüfsumme, wobei die 13. Ziffer die ersten 12 bestätigte. Sie konnten also alles für die ersten 12 Ziffern eingeben und die 13. (es gibt nur 10 Möglichkeiten) erraten, was zur berüchtigten führte
1234-56789-1234
Der Algorithmus zur Überprüfung ist öffentlich und sieht ungefähr so aus:
RICHTIGER WEG, ES ZU TUN
Windows XP nimmt eine ganze Reihe von Informationen auf, verschlüsselt sie und bringt die Buchstaben- / Zahlencodierung auf einem Aufkleber an. Auf diese Weise konnte MS gleichzeitig Ihren Schlüssel überprüfen und den Produkttyp (Home, Professional usw.) abrufen. Darüber hinaus ist eine Online-Aktivierung erforderlich.
Der vollständige Algorithmus ist ziemlich komplex, wird aber in diesem (völlig legalen!) Artikel, der in Deutschland veröffentlicht wurde, gut umrissen .
Unabhängig davon, was Sie tun, ist jede Art von Kopierschutz nur ein Stillstand , es sei denn, Sie bieten einen Onlinedienst (wie World of Warcraft ) an. Wenn es sich um ein Spiel handelt, das einen Wert hat, wird leider jemand kaputt gehen (oder zumindest umgehen) ) den CD-Key-Algorithmus und alle anderen Urheberrechtsschutzbestimmungen.
REAL richtige Weg , es zu tun:
Für Online-Dienste ist das Leben etwas einfacher, da Sie sich selbst mit der Binärdatei bei ihren Servern authentifizieren müssen, um sie nutzen zu können (z. B. über ein WoW-Konto). Der CD-Key-Algorithmus für World of Warcraft, der beispielsweise beim Kauf von Spielzeitkarten verwendet wird, sieht wahrscheinlich ungefähr so aus:
Für Online-Dienste gibt es keinen Grund , das oben genannte Schema nicht zu verwenden. Die Verwendung anderer Elemente kann zu Problemen führen .
quelle
1234-56789-1234
Starcraft-Schlüssel Bescheid , aber ich erinnere mich, dass es nur etwa fünf Minuten dauerte, um den Verifizierer "brutal zu erzwingen", indem ich auf die Tastatur drückte und es erneut versuchte.Als ich diese Antwort ursprünglich schrieb, wurde davon ausgegangen, dass es sich um eine Offline-Validierung von Lizenzschlüsseln handelte. Die meisten anderen Antworten beziehen sich auf die Online-Überprüfung, die wesentlich einfacher zu handhaben ist (der größte Teil der Logik kann serverseitig erfolgen).
Bei der Offline-Überprüfung ist es am schwierigsten sicherzustellen, dass Sie eine große Anzahl eindeutiger Lizenzschlüssel generieren und dennoch einen starken Algorithmus beibehalten können, der nicht leicht kompromittiert werden kann (z. B. eine einfache Prüfziffer).
Ich bin nicht sehr gut mit Mathematik vertraut, aber es ist mir aufgefallen, dass eine Möglichkeit, dies zu tun, darin besteht, eine mathematische Funktion zu verwenden , die einen Graphen darstellt
Die gezeichnete Linie kann (wenn Sie eine ausreichend feine Frequenz verwenden) Tausende eindeutiger Punkte haben, sodass Sie Schlüssel generieren können, indem Sie zufällige Punkte in diesem Diagramm auswählen und die Werte auf irgendeine Weise codieren
Als Beispiel zeichnen wir dieses Diagramm, wählen vier Punkte aus und codieren in eine Zeichenfolge als "0, -500; 100, -300; 200, -100; 100.600".
Wir verschlüsseln die Zeichenfolge mit einem bekannten und festen Schlüssel (schrecklich schwach, aber er erfüllt einen Zweck) und konvertieren dann die resultierenden Bytes über Base32 , um den endgültigen Schlüssel zu generieren
Die Anwendung kann diesen Vorgang dann umkehren (base32 auf reelle Zahl umstellen, entschlüsseln, die Punkte entschlüsseln) und dann überprüfen, ob sich jeder dieser Punkte in unserem geheimen Diagramm befindet.
Es ist eine relativ kleine Menge an Code, mit der eine große Anzahl eindeutiger und gültiger Schlüssel generiert werden kann
Es ist jedoch sehr viel Sicherheit durch Dunkelheit. Jeder, der sich die Zeit nimmt, um den Code zu zerlegen, kann die Grafikfunktion und die Verschlüsselungsschlüssel finden und dann einen Schlüsselgenerator nachahmen, aber dies ist wahrscheinlich sehr nützlich, um die gelegentliche Piraterie zu verlangsamen.
quelle
Lesen Sie diesen Artikel zur teilweisen Schlüsselüberprüfung, der die folgenden Anforderungen abdeckt:
Lizenzschlüssel müssen einfach einzugeben sein.
Bei Rückbuchungen oder Einkäufen mit gestohlenen Kreditkarten müssen wir in der Lage sein, einen Lizenzschlüssel auf die schwarze Liste zu setzen (zu widerrufen).
Kein "Telefonieren nach Hause" zum Testen von Schlüsseln. Obwohl diese Praxis immer häufiger wird, schätze ich sie als Benutzer immer noch nicht und werde meine Benutzer nicht bitten, sich damit abzufinden.
Es sollte einem Cracker nicht möglich sein, unsere freigegebene Anwendung zu zerlegen und daraus einen funktionierenden „Keygen“ zu erstellen. Dies bedeutet, dass unsere Anwendung einen Schlüssel zur Überprüfung nicht vollständig testet. Nur ein Teil des Schlüssels soll getestet werden. Außerdem sollte jede Version der Anwendung einen anderen Teil des Schlüssels testen, damit ein falscher Schlüssel, der auf einer früheren Version basiert, bei einer späteren Version unserer Software nicht funktioniert.
Wichtig: Es sollte einem legitimen Benutzer nicht möglich sein, versehentlich einen ungültigen Schlüssel einzugeben, der anscheinend funktioniert, bei einer zukünftigen Version jedoch aufgrund eines Tippfehlers fehlschlägt.
quelle
Ich habe keine Erfahrung damit, was die Leute tatsächlich tun, um CD-Keys zu generieren, aber (vorausgesetzt, Sie möchten nicht den Weg der Online-Aktivierung beschreiten) hier sind einige Möglichkeiten, wie man einen Schlüssel erstellen kann:
Erfordern, dass die Zahl durch (sagen wir) 17 teilbar ist. Es ist trivial zu erraten, ob Sie Zugriff auf viele Schlüssel haben, aber die Mehrheit der potenziellen Zeichenfolgen ungültig ist. Ähnlich wäre es, wenn die Prüfsumme des Schlüssels mit einem bekannten Wert übereinstimmt.
Es ist erforderlich, dass die erste Hälfte des Schlüssels, wenn sie mit einem bekannten Wert verknüpft ist, auf die zweite Hälfte des Schlüssels heruntergefahren wird. Besser, aber das Programm enthält immer noch alle Informationen, die zum Generieren und Validieren von Schlüsseln erforderlich sind.
Generieren Sie Schlüssel, indem Sie (mit einem privaten Schlüssel) einen bekannten Wert + nonce verschlüsseln. Dies kann überprüft werden, indem mit dem entsprechenden öffentlichen Schlüssel entschlüsselt und der bekannte Wert überprüft wird. Das Programm verfügt jetzt über genügend Informationen, um den Schlüssel zu überprüfen, ohne Schlüssel generieren zu können.
Diese sind immer noch alle für Angriffe offen: Das Programm ist noch vorhanden und kann gepatcht werden, um die Prüfung zu umgehen. Cleverer könnte es sein, einen Teil des Programms mit dem bekannten Wert meiner dritten Methode zu verschlüsseln, anstatt den Wert im Programm zu speichern. Auf diese Weise müssten Sie eine Kopie des Schlüssels finden, bevor Sie das Programm entschlüsseln können. Es ist jedoch weiterhin anfällig, nach dem Entschlüsseln kopiert zu werden und eine Person ihre legitime Kopie entnehmen zu lassen, damit alle anderen auf die Software zugreifen können.
quelle
CD-Keys sind keine große Sicherheit für nicht vernetzte Inhalte, daher müssen sie technisch nicht sicher generiert werden. Wenn Sie auf .net sind, können Sie fast mit Guid.NewGuid () gehen.
Ihre Hauptanwendung ist heutzutage die Multiplayer-Komponente, bei der ein Server den CD-Key überprüfen kann. Aus diesem Grund ist es unwichtig, wie sicher es generiert wurde, da es sich um "Nachschlagen, was auch immer übergeben wird, und prüfen Sie, ob es bereits von jemand anderem verwendet wird" handelt.
Abgesehen davon möchten Sie vielleicht einen Algorithmus verwenden, um zwei Ziele zu erreichen:
Davon abgesehen möchten Sie immer noch eine große Verteilung und eine gewisse Zufälligkeit, um zu vermeiden, dass ein Pirat einfach einen gültigen Schlüssel errät (der in Ihrer Datenbank gültig ist, sich aber immer noch in einer Schachtel in einem Ladenregal befindet) und einen legitimen Kunden überlistet, der diese Schachtel zufällig kauft .
quelle
Wenn Sie sich nicht besonders mit der Länge des Schlüssels befassen, ist die Verwendung der Verschlüsselung mit öffentlichen und privaten Schlüsseln eine ziemlich bewährte Methode.
Im Wesentlichen haben eine Art Nonce und eine feste Signatur.
Zum Beispiel: 0001-123456789
Wobei 0001 Ihre Nonce und 123456789 Ihre feste Signatur ist.
Verschlüsseln Sie dies dann mit Ihrem privaten Schlüssel, um Ihren CD-Schlüssel zu erhalten, der ungefähr so lautet: ABCDEF9876543210
Verteilen Sie dann den öffentlichen Schlüssel mit Ihrer Anwendung. Mit dem öffentlichen Schlüssel kann der CD-Schlüssel "ABCDEF9876543210" entschlüsselt werden, von dem Sie dann den festen Signaturteil überprüfen.
Dies verhindert dann, dass jemand errät, was der CD-Schlüssel für das Nonce 0002 ist, da er nicht über den privaten Schlüssel verfügt.
Der einzige große Nachteil ist, dass Ihre CD-Keys bei Verwendung von privaten / öffentlichen Schlüsseln mit einer Größe von 1024 Bit ziemlich lang sind. Sie müssen auch eine Nonce lange genug auswählen, damit Sie keine triviale Menge an Informationen verschlüsseln.
Die gute Seite ist, dass diese Methode ohne "Aktivierung" funktioniert und Sie Dinge wie eine E-Mail-Adresse oder einen Lizenznehmernamen als Nonce verwenden können.
quelle
Das Schlüsselsystem muss mehrere Eigenschaften haben:
Eine Lösung, die Ihnen diese bieten sollte, wäre die Verwendung eines Signaturschemas für öffentliche Schlüssel . Beginnen Sie mit einem "System-Hash" Umgang mit personenbezogenen Daten, wenn Sie nicht)) die Seriennummer der CD anhängen und den Start verweigern müssen, es sei denn, ein Registrierungsschlüssel (oder eine Datendatei) hat eine gültige Signatur für den Blob. Der Benutzer aktiviert das Programm, indem er den Blob an Sie sendet und Sie die Signatur zurücksenden.
Mögliche Probleme sind, dass Sie anbieten, praktisch alles zu signieren, sodass Sie davon ausgehen müssen, dass jemand einen ausgewählten Klartext- und / oder einen ausgewählten Chiffretext- Angriff ausführt . Dies kann gemindert werden, indem die angegebene Seriennummer überprüft und die Bearbeitung ungültiger Anfragen sowie die Bearbeitung von mehr als einer bestimmten Anzahl von Anfragen aus einem bestimmten S / N in einem Intervall (z. B. 2 pro Jahr) verweigert wird.
Ich möchte auf einige Dinge hinweisen: Erstens kann ein erfahrener und entschlossener Angreifer alle Sicherheitsvorkehrungen in den Teilen umgehen, auf die er uneingeschränkten Zugriff hat ( dh auf alles auf der CD). Das Beste, was Sie in diesem Zusammenhang tun können, ist Machen Sie es schwieriger, einen illegitimen Zugang zu erhalten, als einen legitimen Zugang. Zweitens bin ich kein Experte, daher könnte dieses vorgeschlagene Schema schwerwiegende Mängel aufweisen.
quelle
Es gibt auch DRM-Verhaltensweisen, die mehrere Schritte in den Prozess einbeziehen. Eines der bekanntesten Beispiele ist eine der Methoden von Adobe zur Überprüfung einer Installation der Creative Suite. Die hier beschriebene traditionelle CD-Key-Methode wird verwendet. Anschließend wird die Support-Linie von Adobe aufgerufen. Der CD-Schlüssel wird dem Adobe-Vertreter übergeben und er gibt eine Aktivierungsnummer zurück, die vom Benutzer verwendet werden soll.
Trotz der Aufteilung in Stufen fällt dies jedoch den gleichen Crackmethoden zum Opfer, die für den normalen Prozess verwendet wurden. Der Prozess zum Erstellen eines Aktivierungsschlüssels, der mit dem ursprünglichen CD-Schlüssel verglichen wird, wurde schnell erkannt, und Generatoren, die beide Schlüssel enthalten, wurden erstellt.
Diese Methode ist jedoch weiterhin eine Möglichkeit für Benutzer ohne Internetverbindung, das Produkt zu überprüfen. In Zukunft ist leicht zu erkennen, wie diese Methoden beseitigt werden, wenn der Internetzugang allgegenwärtig wird.
quelle
Alle Nur-CD-Kopierschutzalgorithmen stören ehrliche Benutzer und bieten keinerlei Schutz vor Piraterie.
Der "Pirat" muss nur Zugriff auf eine legitime CD und deren Zugangscode haben, er kann dann n Kopien erstellen und diese verteilen.
Es spielt keine Rolle, wie kryptografisch sicher Sie den Code erstellen. Sie müssen die CD im Klartext bereitstellen, da ein legitimer Benutzer die Software nicht aktivieren kann.
Bei den meisten sicheren Schemata stellt der Benutzer dem Softwarelieferanten entweder einige Details des Computers zur Verfügung, auf dem die Software ausgeführt wird (CPU-Seriennummern, Mac-Adressen, IP-Adresse usw.), oder er benötigt einen Online-Zugriff, um die Software auf der Website des Lieferanten und zu registrieren im Gegenzug erhalten Sie einen Aktivierungs-Token. Die erste Option erfordert viel manuelle Verwaltung und lohnt sich nur für sehr hochwertige Software. Die zweite Option kann gefälscht werden und ist absolut ärgerlich, wenn Sie nur eingeschränkten Netzwerkzugriff haben oder hinter einer Firewall stecken.
Im Großen und Ganzen ist es viel einfacher, eine Vertrauensbeziehung zu Ihren Kunden aufzubauen!
quelle
Sie können die Secure Licensing API von ( https://www.nuget.org/packages/SystemSoulLicense/ ) sehr einfach in Ihren Softwareprojekten verwenden und implementieren (Sie müssen die Desktop-Anwendung herunterladen, um eine sichere Lizenz von https zu erstellen : / /www.systemsoulsoftwares.com/ ) 1. Erstellt eine eindeutige UID für Client-Software basierend auf Systemhardware (CPU, Motherboard, Festplatte) (UID fungiert als privater Schlüssel für dieses eindeutige System). 2. Ermöglicht das einfache Senden einer verschlüsselten Lizenzzeichenfolge an das Client-System. Überprüft die Lizenzzeichenfolge und funktioniert nur auf diesem bestimmten System 3. Mit dieser Methode können Softwareentwickler oder Unternehmen mehr Informationen über Software- / Entwickler- / Distributorendienste / -funktionen / -client 4 speichern. Sie ermöglicht das Sperren und Entsperren der Client-Softwarefunktionen, wodurch Zeit für Entwickler gespart wird Erstellen einer weiteren Version für dieselbe Software mit sich ändernden Funktionen 5. Die Testversion wird auch für eine beliebige Anzahl von Tagen berücksichtigt. 6. Sie sichert die Lizenzzeitleiste, indem DateTime online während der Registrierung überprüft wird. 7. Alle Hardwareinformationen werden für Entwickler freigeschaltet. 8.Es verfügt über alle vorgefertigten und benutzerdefinierten Funktionen, auf die Entwickler bei jedem Lizenzierungsprozess zugreifen können, um komplexeren sicheren Code zu erstellen
quelle