it-swarm.com.de

Wie werden Softwarelizenzschlüssel generiert?

License Keys sind der Defacto-Standard als Anti-Piraterie-Maßnahme. Um ehrlich zu sein, erscheint mir dies als (in) Security Through Obscurity , 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 Primitiv (falls vorhanden) verwenden sie? Ist es eine Nachrichtenübersicht? Wenn ja, welche Daten würden sie Hashing sein? Welche Methoden setzen Entwickler ein, um Crackern den Bau eigener Schlüsselgeneratoren zu erschweren? Wie werden Schlüsselgeneratoren hergestellt?

348
rook

Bei alten CD-Schlüsseln ging es nur darum, einen Algorithmus zu entwickeln, für den CD-Schlüssel (bei denen es sich um beliebige Zeichenfolgen handeln kann) einfach 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 durch zufälliges Erraten von CD-Schlüsseln einen gültigen Schlüssel erhalten.

Falsche Vorgehensweise:

Starcraft und Half-Life verwendeten beide dieselbe Prüfsumme, wobei die 13. Stelle verifiziert die ersten 12 Stellen. Somit können Sie für die ersten 12 Stellen alles eingeben und die 13. erraten (es gibt nur 10 Möglichkeiten), was zum berüchtigten 1234-56789-1234

Der Algorithmus zur Überprüfung ist öffentlich und sieht ungefähr so ​​aus:

x = 3;
for(int i = 0; i < 12; i++)
{
    x += (2 * x) ^ digit[i];
}
lastDigit = x % 10;

RICHTIGE ART UND WEISE, ES ZU TUN

Windows XP nimmt eine ganze Reihe von Informationen auf, verschlüsselt sie und bringt die Buchstaben-/Zahlenkodierung auf einem Aufkleber an. Dies ermöglichte es MS, sowohl Ihren Schlüssel als auch den Produkttyp (Home, Professional usw.) gleichzeitig zu verifizieren. Darüber hinaus ist eine Online-Aktivierung erforderlich.
Der vollständige Algorithmus ist ziemlich komplex, aber in der in Deutschland veröffentlichten Veröffentlichung this (complete legal!) Gut dargestellt.

Egal was Sie tun, es sei denn, Sie bieten einen Onlinedienst an (wie World of Warcraft ), jeder Kopierschutz ist nur ein Stillstand : Wenn es sich um ein wertvolles Spiel handelt, wird leider jemand den CD-Key-Algorithmus und alle anderen urheberrechtlichen Schutzmaßnahmen brechen (oder zumindest umgehen) .

[~ # ~] real [~ # ~] RICHTIGE ART UND WEISE, ES ZU TUN:

Bei Online-Diensten 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. einen WoW-Account haben). Der CD-Key-Algorithmus für World of Warcraft - zum Beispiel beim Kauf von Spielkarten - sieht wahrscheinlich so aus:

  1. Generieren Sie eine sehr große kryptografisch sichere Zufallszahl.
  2. Speichern Sie es in unserer Datenbank und drucken Sie es auf die Karte.

    Wenn jemand eine Spielkartennummer eingibt, prüfen Sie, ob diese in der Datenbank vorhanden ist, und ordnen Sie diese Nummer dem aktuellen Benutzer zu, damit sie nie wieder verwendet werden kann.

Für Onlinedienste gibt es keinen Grund , das obige Schema nicht zu verwenden. Alles andere kann zu Problemen führen .

Als ich diese Antwort ursprünglich schrieb, ging ich davon aus, dass die Frage die Offline-Validierung von Lizenzschlüsseln betraf. 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 ausgeführt werden).

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 fiel mir auf, dass ein Weg, dies zu tun, darin besteht, ein mathematische Funktion zu verwenden, das einen Graphen zeichnet

Die geplottete Linie kann (wenn Sie eine ausreichend feine Frequenz verwenden) Tausende von eindeutigen Punkten enthalten. Sie können also Schlüssel generieren, indem Sie zufällige Punkte in diesem Diagramm auswählen und die Werte auf irgendeine Weise codieren

enter image description here

Als Beispiel zeichnen wir diesen Graphen, wählen vier Punkte aus und codieren ihn als "0, -500; 100, -300; 200, -100; 100.600".

Wir werden den String mit einem bekannten und festen Schlüssel verschlüsseln (schrecklich schwach, aber es hat einen Zweck) und dann die resultierenden Bytes durch Base32 konvertieren, um den endgültigen Schlüssel zu generieren

Die Anwendung kann diesen Vorgang dann umkehren (base32 auf reelle Zahl, entschlüsseln, entschlüsseln der Punkte) und dann überprüfen, ob sich jeder dieser Punkte in unserem geheimen Diagramm befindet.

Es ist eine relativ kleine Menge an Code, die es ermöglichen würde, eine große Anzahl eindeutiger und gültiger Schlüssel zu generieren

Es ist jedoch sehr viel Sicherheit durch Dunkelheit. Jeder, der sich die Zeit nimmt, um den Code zu zerlegen, könnte die Grafikfunktion und die Verschlüsselungsschlüssel finden und dann einen Schlüsselgenerator verspotten, aber es ist wahrscheinlich recht nützlich, um die Piraterie zu verlangsamen.

54
PaulG

Lesen Sie diesen Artikel über Partial Key Verification , der die folgenden Anforderungen abdeckt:

  • Lizenzschlüssel müssen einfach genug sein, um eingegeben werden zu können.

  • Bei Rückbuchungen oder Einkäufen mit gestohlenen Kreditkarten müssen wir in der Lage sein, einen Lizenzschlüssel zu sperren (zu widerrufen).

  • Kein "Telefonieren nach Hause" zum Testen der Tasten. Obwohl diese Praxis immer weiter verbreitet wird, schätze ich sie als Benutzer immer noch nicht und werde meine Benutzer daher nicht bitten, sie in Kauf zu nehmen.

  • Es sollte einem Cracker nicht möglich sein, unsere freigegebene Anwendung zu zerlegen und daraus einen funktionierenden „Schlüssel“ 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 auf einer früheren Version basierender falscher Schlüssel bei einer späteren Version unserer Software nicht mehr funktioniert.

  • Wichtig: Es sollte einem legitimen Benutzer nicht möglich sein, versehentlich einen ungültigen Schlüssel einzugeben, der anscheinend funktioniert, in einer zukünftigen Version jedoch aufgrund eines Tippfehlers fehlschlägt.

31
The Surrican

Ich habe noch keine Erfahrung damit, wie Leute CD-Keys generieren, aber (vorausgesetzt, Sie möchten nicht den Weg der Online-Aktivierung beschreiten), hier sind einige Möglichkeiten, wie man einen Key erstellen kann:

  • Erfordern Sie, dass die Zahl durch (etwa) 17 teilbar ist. Es ist ganz einfach zu erraten, ob Sie Zugriff auf viele Schlüssel haben, die meisten potenziellen Zeichenfolgen jedoch ungültig sind. Ähnliches würde erfordern, dass die Prüfsumme des Schlüssels mit einem bekannten Wert übereinstimmt.

  • Erfordern, 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 heruntergerechnet wird. Besser, aber das Programm enthält immer noch alle Informationen, die erforderlich sind, um Schlüssel zu generieren und zu validieren.

  • 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 nun über genügend Informationen, um den Schlüssel zu verifizieren, ohne Schlüssel generieren zu können.

Diese sind immer noch alle angreifbar: Das Programm ist immer noch vorhanden und kann gepatcht werden, um die Überprüfung zu umgehen. Cleverer könnte sein, einen Teil des Programms mit dem bekannten Wert aus 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 besteht jedoch weiterhin die Gefahr, dass nach der Entschlüsselung eine Kopie erstellt wird und von einer Person eine legitime Kopie erstellt wird, mit der alle anderen Benutzer auf die Software zugreifen können.

21
Andrew Aylett

CD-Keys sind keine wirkliche 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.

Sie werden heutzutage hauptsächlich für die Multiplayer-Komponente verwendet, bei der ein Server den CD-Key überprüfen kann. Für das ist es unwichtig, wie sicher es generiert wurde, da es sich auf "Nachschlagen, was auch immer übergeben wird, und prüfen, ob es bereits von einem anderen Benutzer verwendet wird" beschränkt.

Davon abgesehen möchten Sie möglicherweise einen Algorithmus verwenden, um zwei Ziele zu erreichen:

  • Haben Sie eine Art Prüfsumme. Auf diese Weise kann Ihr Installer die Meldung "Der Schlüssel scheint nicht gültig zu sein" nur zur Erkennung von Tippfehlern anzeigen (Das Hinzufügen einer solchen Überprüfung im Installer bedeutet, dass das Schreiben eines Schlüsselgenerators trivial ist, da der Hacker über den gesamten Code verfügt, den er benötigt überprüfen und sich ausschließlich auf die serverseitige Validierung verlassen Deaktiviert diese Überprüfung auf das Risiko, Ihre legalen Kunden zu ärgern, die nicht verstehen, warum der Server ihren CD-Schlüssel nicht akzeptiert, da sie den Tippfehler nicht kennen.
  • Arbeiten Sie mit einer begrenzten Anzahl von Zeichen. Versuchen Sie, einen CD-Schlüssel einzugeben und raten Sie: "Ist dies eine 8 oder ein B? Eine 1 oder ein I? Ein Q oder ein O oder eine 0?" - Indem Sie eine Untergruppe nicht-mehrdeutiger Zeichen/Ziffern verwenden, beseitigen Sie diese Verwirrung.

Abgesehen davon möchten Sie immer noch eine große Verbreitung 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 noch in einer Schachtel in einem Ladenregal befindet) und einen legitimen Kunden überlistet, der diese Schachtel gerade kauft .

17
Michael Stum

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

Dann verschlüsseln Sie dies mit Ihrem privaten Schlüssel, um Ihren CD-Schlüssel zu erhalten, der ungefähr wie folgt 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, dessen festen Signaturanteil Sie dann überprüfen.

Auf diese Weise wird verhindert, dass jemand den CD-Schlüssel für das Nonce 0002 errät, da er nicht über den privaten Schlüssel verfügt.

Der einzige große Nachteil ist, dass Ihre CD-Schlüssel bei Verwendung von privaten/öffentlichen Schlüsseln mit einer Größe von 1024 Bit recht lang sind. Sie müssen auch eine Nonce lange genug auswählen, damit Sie nicht eine unbedeutende Menge an Informationen verschlüsseln.

Die gute Seite ist, dass diese Methode ohne "Aktivierung" funktioniert und Sie Dinge wie eine E-Mail-Adresse oder den Namen des Lizenznehmers als Nonce verwenden können.

10
userx

Das Schlüsselsystem muss mehrere Eigenschaften haben:

  • nur sehr wenige Schlüssel müssen gültig sein
  • gültige Schlüssel dürfen trotz allem, was der Benutzer hat, nicht ableitbar sein.
  • ein gültiger Schlüssel auf einem System ist kein gültiger Schlüssel auf einem anderen.
  • andere

Eine Lösung, die Ihnen diese geben sollte, wäre, ein Public Key Signing Schema zu verwenden. Beginnen Sie mit einem "System-Hash" (z. B. holen Sie sich die Macs auf allen sortierten NICs und die CPU-ID-Informationen sowie einige andere Informationen), verknüpfen Sie alles miteinander und nehmen Sie eine MD5 des Ergebnisses (das möchten Sie wirklich nicht Handhabung persönlich identifizierbare Informationen wenn Sie nicht müssen)) hängen Sie die Seriennummer der CD an und lehnen Sie das Booten ab, 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 gewählter Klartext und/oder gewählter Chiffretext Angriffe ausführt. Dies kann verringert werden, indem die angegebene Seriennummer überprüft und die Bearbeitung von Anfragen von ungültigen sowie die Bearbeitung von mehr als einer bestimmten Anzahl von Anfragen von einer bestimmten Seriennummer in einem Intervall verweigert wird (z. B. 2 pro Jahr).

Ich möchte auf einige Dinge hinweisen: Erstens kann ein erfahrener und entschlossener Angreifer jegliche Sicherheit in den Teilen umgehen, auf die er uneingeschränkten Zugriff hat (, dh alles auf der CD), das Beste, was Sie in diesem Zusammenhang tun können, ist, es schwieriger zu machen, einen illegitimen Zugang zu erhalten, als einen legitimen Zugang zu erhalten. Zweitens bin ich kein Experte, daher könnte dieses vorgeschlagene System schwerwiegende Mängel aufweisen.

9
BCS

Es gibt auch DRM-Verhalten, 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 herkömmliche CD-Key-Methode wird verwendet. Anschließend wird die Support-Line von Adobe aufgerufen. Der CD-Schlüssel wird dem Adobe-Mitarbeiter ausgehändigt und er gibt eine Aktivierungsnummer zurück, die vom Benutzer verwendet werden kann.

Dies ist jedoch, obwohl es in Stufen unterteilt ist, den gleichen Crackmethoden ausgesetzt, 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 es wurden Generatoren erstellt, die beide Schlüssel enthalten.

Diese Methode ist jedoch weiterhin eine Möglichkeit für Benutzer ohne Internetverbindung, das Produkt zu überprüfen. In Zukunft ist leicht einzusehen, wie diese Methoden entfallen würden, wenn der Internetzugang allgegenwärtig wird.

1
Sean

Alle Kopierschutzalgorithmen auf der CD beeinträchtigen ehrliche Benutzer, bieten jedoch keinen Schutz vor Produktpiraterie.

Der "Pirat" muss nur Zugang zu einer legitimen CD und ihrem Zugangscode haben, er kann dann n Kopien anfertigen und diese verteilen.

Es spielt keine Rolle, wie kryptografisch sicher Sie den Code erstellen, Sie müssen diese mit der CD im Klartext bereitstellen, oder ein legitimer Benutzer kann die Software nicht aktivieren.

Bei den meisten sicheren Schemata muss der Benutzer dem Softwarelieferanten einige Details der Maschine mitteilen, auf der die Software ausgeführt wird (CPU-Seriennummern, Mac-Adressen, IP-Adresse usw.), oder er muss online auf die Software zugreifen, um sie auf der Website des Lieferanten zu registrieren als Gegenleistung erhalten Sie einen Aktivierungs-Token. Die erste Option erfordert viel manuelle Administration und lohnt sich nur für sehr hochwertige Software. Die zweite Option kann gefälscht werden und ist absolut ärgerlich, wenn Sie nur über eingeschränkten Netzwerkzugriff verfügen oder sich hinter einer Firewall befinden.

Im Großen und Ganzen ist es viel einfacher, eine Vertrauensbeziehung zu Ihren Kunden aufzubauen!

1
James Anderson