Implementierung für Produktschlüssel [closed]

Lesezeit: 7 Minuten

Benutzer-Avatar
Sebastian

Ich implementiere eine kleine Anwendung in C, die ich später als Shareware zu einem vernünftigen Preis verkaufen möchte. Es beginnt mit einer 30-tägigen Testversion, bei der ich mir bereits ziemlich sicher bin, wie ich es umsetzen werde.

Das Problem, das ich habe, ist jedoch, dass ich nicht ganz sicher bin, wie ich die Produktschlüsselüberprüfung implementieren soll. Was ich meine ist, dass der Kunde sich auf meiner Webseite anmelden kann (nachdem er das Produkt eine Weile ausprobiert hat), für das Produkt bezahlt und einen Produktschlüssel in Form von aaaaa-bbbbb-ccccc-ddddd-eeeee per e -mail (oder vielleicht verfügbar über sein Profil auf meiner Website). Bisher kein Problem. Er/Sie wirft den Schlüssel dann in die entsprechenden Schlüsselfelder in meiner App und Boom Die App ist registriert.

Nach dem, was ich bisher sammeln konnte, empfehlen die Leute dafür entweder AES oder RSA. Um ehrlich zu sein, habe ich im College eine andere Richtung eingeschlagen (nicht Kryptographie) und den einen Kryptographiekurs, den ich belegt habe, ist einige Zeit her. Aber soweit ich mich erinnere, ist AES ein symmetrischer Verschlüsselungsalgorithmus, was bedeuten würde, dass ich nur einen Schlüssel zum Ver- und Entschlüsseln hätte, richtig? Wie könnte ich dann Tausende von Produktschlüsseln generieren und sie trotzdem in meiner App validieren (die übrigens keinen Internetzugang erfordert … also keine Rückfrage bei einem Server)?

Also denke ich, dass RSA der richtige Weg wäre? Aber erzeugt RSA nicht ziemlich lange Schlüssel (mindestens länger als die erforderlichen 25 Zeichen von oben)?

In einem anderen Thread habe ich gelesen, dass einige Produkte nicht einmal Verschlüsselung für die Generierung/Verifizierung des Produktschlüssels verwenden, sondern stattdessen nur einige Überprüfungen verwenden, wie “addieren Sie das 2. und das 17. Zeichen und das sollte x ergeben”.

Was ist der schnellste, einfachste und sicherste Weg hierher? 🙂 Codebeispiele wären Zucker!

Grüße,

Sebastian

PS: Ach…und erzähl mir bitte nicht, wie mein Schlüssel irgendwann geknackt werden kann und wird…..das weiß ich, deswegen will ich mich auch nicht lange damit aufhalten dieses Thema, machen es aber auch dem Gelegenheitscracker nicht zu leicht.

Benutzer-Avatar
P Papa

Symmetrische Algorithmen sind dahingehend eingeschränkt, dass jeder unerfahrene Cracker mit einem Disassembler Ihren Schlüssel (oder den Algorithmus, der zu seiner Generierung verwendet wird) finden und einen “Keygen” erstellen kann.

Aus diesem Grund ist asymmetrische Kryptologie der richtige Weg. Die Grundvoraussetzung ist ungefähr so:

  • Wenn der Benutzer eine Lizenz von Ihnen kauft, erfassen Sie bestimmte identifizierende Details über den Benutzer und/oder seine Umgebung (normalerweise ist dies nur ein vollständiger Name; manchmal auch ein Unternehmen).
  • Sie erstellen aus diesen Informationen einen 128-Bit-MD5-Hash.
  • Mit einem 128-Bit Elliptische Kurve crypto, verschlüsseln Sie diesen Hash mit der Privatgelände Schlüssel auf dem Server.
  • Der 128-Bit-Verschlüsselungstext kann dem Benutzer als 25-stellige Zeichenfolge dargestellt werden, die aus Buchstaben und Ziffern besteht (plus trennende Bindestriche zur besseren Lesbarkeit). Beachten Sie, dass 26 Buchstaben + 10 Ziffern = 36 diskrete Werte sind und dass 36^25 > 2^128.
  • Der Benutzer gibt diesen Produktschlüssel in Ihren Registrierungsdialog ein. Die Client-Software wandelt sie zurück in eine 128-Bit-Zahl (16 Bytes), entschlüsselt diese mit dem öffentlichen Schlüssel Ihrer EC-Krypto und vergleicht das Ergebnis mit einem MD5-Hash der persönlichen Daten des Benutzers, der mit dem übereinstimmen muss, was für die Registrierung verwendet wurde .

Das ist natürlich nur die Grundidee. Weitere Details und Quellcode finden Sie unter Produktschlüssel basierend auf Elliptic Curve Cryptography.

  • Ich sehe hier eine kostenlose Implementierung von ECC: codeproject.com/KB/security/Elliptic_Curves.aspx. Wie gut das ist, habe ich nicht überprüft. Ein wenig Graben würde sicherlich andere hervorbringen. Hier ist einer, der ziemlich billig ist: ellipter.com.

    – P Papa

    16. März 2009 um 17:07 Uhr

  • So wie ein Benutzer einen symmetrischen Schlüssel mit einem Disassembler finden kann, kann er Ihre Binärdatei patchen, um den öffentlichen Schlüssel zu ersetzen, der zur Überprüfung der Lizenzinformationen verwendet wird (durch einen aus einem Schlüsselpaar, das er selbst generiert hat). Verwenden Sie, was am einfachsten ist, denn wenn jemand Ihren Kopierschutz brechen will, wird er es tun. Und man möchte nicht zu viel Aufwand darin investiert haben.

    – Ericsson

    20. Dezember 2009 um 6:00 Uhr

  • @erickson: Ich stimme zu, dass ein entschlossener Cracker einen Patch erstellen wird, wenn er kein Keygen erstellen kann, und dass kein Kopierschutz sicher ist. Es gibt jedoch unterschiedliche Risikograde. Cracks gibt es in drei grundlegenden Geschmacksrichtungen: Serials, Keygens und Patches/gepatchte Binärdateien. Benutzer bevorzugen bei weitem die erste, da sie keinen Code herunterladen müssen. Keygens sind ziemlich einfach auf Viren zu scannen, und Patches sind am gruseligsten. Patches funktionieren auch am wenigsten nach einem kleinen Update der Software. Wenn Ihre App einen Patch benötigt, ist dies die beste technische Sicherheit, die Sie erhalten werden.

    – P Papa

    20. Dezember 2009 um 15:09 Uhr

  • Ja, ich stimme zu. Das ist ein guter Punkt: Ein Patch (erstellt von jemandem, der vermutlich bestenfalls ein Dieb ist) ist (oder sollte) für Benutzer sehr beängstigend sein.

    – Ericsson

    23. Dezember 2009 um 5:11 Uhr

  • Beachten Sie, dass 128-Bit-EC-Krypto nur (ungefähr) 64 Bit Sicherheit hat, im Allgemeinen hat 2n-Bit-EC-Krypto nur (ungefähr) n Sicherheitsbits. Auch “mit privatem Schlüssel verschlüsseln” dann “mit öffentlichem Schlüssel entschlüsseln” ist wirklich “mit privatem Schlüssel signieren” und “mit öffentlichem Schlüssel verifizieren”

    – Präsident James K. Polk

    2. Januar um 23:09 Uhr


Das Leben ist einfacher, wenn Sie einfach eine Lösung kaufen.

http://www.kagi.com/kagisolutions/index.php

Mit Kagi können Sie Zahlungen einziehen und sie helfen Ihnen bei der Verwaltung der Schlüssel.

  • nein, tut mir leid, keine Option. Der geschätzte Preis der App beträgt 4,99 € und die Gebühren von Kagi sind zu hoch für ein Produkt in dieser Preisklasse.

    – Sebastian

    14. März 2009 um 16:09 Uhr

  • Das Lustigste daran ist, dass Kagi nicht mehr existiert.

    – dimiguel

    7. Juni 2017 um 5:41 Uhr

Ein Typ hat darüber gebloggt, wie er mit der Frage der Registrierungsnummern umgegangen ist. Einer seiner Blogeinträge ist Generieren eindeutiger Registrierungsnummern.

Ja, RSA und AES sind zwei sehr unterschiedliche Dinge:

  • RSA ist eine Public-Key-Kryptographie, die einen öffentlichen Schlüssel und einen privaten Schlüssel umfasst und ziemlich langsam ist. Die primäre Verwendung besteht darin, einen sicheren Austausch eines Sitzungsschlüssels zur symmetrischen Verschlüsselung einzurichten.
  • AES ist eine symmetrische Verschlüsselung, die schnell und sicher ist.

Da Ihre App nicht über öffentliche Kanäle kommuniziert und die Verwendung von Kryptografie auf die Produktaktivierung/-registrierung beschränkt ist, sollten Sie sich für eine symmetrische Verschlüsselung entscheiden. Die Vorteile von Verschlüsselungen mit öffentlichen Schlüsseln liegen in der Schlüsselverwaltung, die Sie auf Ihrer Website oder per E-Mail verwalten.

Beachten Sie, dass Sie nicht für jeden Kunden denselben Schlüssel verteilen müssen. Sie könnten einen Hash von einigen der Registrierungsinformationen generieren und mit etwas anderem (vielleicht einem festen Sitzungsschlüssel) XOR-verknüpfen. Senden Sie das an den Kunden, und das Programm könnte denselben Hash generieren, und XOR wird den von Ihnen gesendeten Schlüssel verwenden, um den ursprünglichen festen Schlüssel zu erzeugen.

Der Umgang mit Kryptografie sollte nicht auf die leichte Schulter genommen werden. Wie Sie bereits erwähnt haben, erwarten Sie, dass dies geknackt wird. Wenn Sie Ihre eigenen tun, wird dies mit ziemlicher Sicherheit passieren. Sie können immer noch Ihre eigene Implementierung verwenden, um “ehrliche Menschen ehrlich zu halten”, aber machen Sie sich klar, dass Sie damit nicht weit kommen. Wenn Sie etwas Stärkeres benötigen, sollten Sie eine Lösung kaufen, nachdem Sie die Lösungen gründlich recherchiert haben.

Sie können dies überprüfen Code-Projekt Artikel. Es beschreibt eine Implementierung eines Softwareschlüssels basierend auf der MAC-Adresse der Maschine, auf der die Software ausgeführt wird. Die Methode ist nicht ideal, wie der Autor selbst zugibt, und sie unterscheidet sich ein wenig von dem, was Sie suchen, aber vielleicht kann sie Ihnen helfen.

1322980cookie-checkImplementierung für Produktschlüssel [closed]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy