Aktivierungsschlüssel von der Seriennummer generieren

8

Ich habe Geräte mit eindeutiger Seriennummer (Stringinkremierung) zB: AS1002 und AS1003.

Ich muss einen Algorithmus finden, um einen eindeutigen Aktivierungsschlüssel für jede Seriennummer zu erzeugen.

Was wäre der beste Ansatz dafür?

Danke!

(Dies muss offline erfolgen)

    
David 22.09.2011, 15:31
quelle

5 Antworten

2

Sie müssen hier zwei Dinge beachten:
- Was immer Sie generieren, muss leicht eingegeben werden können, so dass einige seltsame Hashes eliminiert werden, die Zeichen ergeben, die schwer zu tippen sind, obwohl dies überwunden werden kann, sollten Sie darüber nachdenken - Die Operation, wie Sie angegeben haben, muss online erfolgen

Erstens wird es keine Möglichkeit geben, mit absoluter Sicherheit zu sagen, dass jemand Ihre Schlüsselgenerierungsroutine nicht entziffern kann, egal wie sehr Sie versuchen, sie zu verschleiern. Führen Sie einfach eine Suchanfrage für "Crack for Xyz software" durch.

Dies war ein langer Kampf, der niemals enden wird, daher der Schritt, Software als Dienste zu liefern, d. h. online, wo der Produzent mehr Kontrolle über seinen Inhalt hat und einen Benutzer explizit autorisieren und authentifizieren kann. In Ihrem Fall möchten Sie dies offline machen. In Ihrem Szenario wird also jemand Ihr Gerät an ein System anhängen, und die begleitende Software, mit der Sie diese Routine schreiben möchten, prüft die Seriennummer der Benutzereingabe des Geräts.

Basierend auf der Antwort von @ sll, angesichts der Offline-Art Ihrer Anfrage. Ihr bestes wäre es leider, einen Satz zufälliger Codes zu generieren und diese beim Aufruf des Benutzers zu validieren.

Hier ist eine Methode , die von einer anderen SO-Antwort geliehen wurde. Ich habe auch Ziffern hinzugefügt

%Vor%

Es kann also sein, dass Sie für jede Ihrer Geräte eine einzige Option erstellen, um sie irgendwo zu speichern, weil Sie offline denken.

Diese Routine erzeugt Strings wie diese, wenn sie zum Erstellen einer 10-stelligen Zeichenkette verwendet wird, was einigermaßen zufällig ist.

3477KXFBDQ
ROT6GRA39O
40HTLJPFCL
5M2F44M5CH
CAVAO780NR
8XBQ44WNUA
IA02WEWOCM
EG11L4OGFO
LP2UOGKKLA
H0JB0BA4NJ
KT8AN18KFA

    
kd7 22.09.2011 16:12
quelle
1

Bei weitem die sicherste Art und Weise, dies zu tun, ist eine zentralisierte Datenbank von (Seriennummer, Aktivierungsschlüssel) Paaren zu haben und den Benutzer über das Internet zu aktivieren, damit Sie den Schlüssel lokal (auf dem Server) überprüfen können. p>

In dieser Implementierung kann der Aktivierungsschlüssel völlig zufällig sein, da er nicht von der Seriennummer abhängen muss.

    
Blindy 22.09.2011 15:40
quelle
1

Sie wollen, dass es leicht zu überprüfen ist und schwer "rückwärts" gehen kann. Sie werden eine Menge Vorschläge für die Verwendung von Hash-Funktionen sehen, diese Funktionen sind leicht in eine Richtung zu gehen, aber schwer rückwärts zu gehen. Zuvor , formulierte ich dass "es leicht ist, eine Kuh in einen Hamburger zu verwandeln, aber einen Hamburger in eine Kuh zu verwandeln". In diesem Fall sollte ein Gerät seine eigene Seriennummer kennen und in der Lage sein, einige geheime Daten (normalerweise "Salz" genannt) an die Seriennummer "anzufügen" (oder anzuhängen) und sie dann zu hashen oder zu verschlüsseln.

Wenn Sie reversible Verschlüsselung verwenden, möchten Sie den Seriennummern eine Art " Prüfziffer " hinzufügen Wenn jemand Ihr Verschlüsselungsschema herausfindet, gibt es eine weitere Ebene, auf der sie herausfinden können.

Ein Beispiel für eine Funktion, die leicht "rückwärts gehen" kann, war eine, die ich mit gelöst habe Excel beim Versuch, Hausaufgaben zu vermeiden .

Und wahrscheinlich möchten Sie Ihren Kunden die Arbeit erleichtern, indem Sie das Kodieren weniger wahrscheinlich durcheinander bringen, wenn die Aktivierungscodes handgeschrieben sind (z. B. wenn Sie es aus der E-Mail schreiben, dann zu dem Gerät gehen und punchen) die Buchstaben / Ziffern in). In vielen Schriftarten sind I und 1 und 0 und O ähnlich genug, dass viele Kodierungen, wie die VIN Ihres Autos, nicht die Buchstaben i und o verwenden (und ich erinnere mich an ältere Schreibmaschinen) Es fehlte ein Schlüssel für die Ziffer 1 , da von Ihnen erwartet wurde, Kleinbuchstaben L zu verwenden. In solchen Fällen können Y , 4 und 7 in Abhängigkeit von einer Handschrift gleich aussehen. Also, kenne dein Publikum und was sind ihre Grenzen?

    
Tangurena 22.09.2011 16:27
quelle
0

Wie geht es: Erfinden Sie ein Passwort, das dem Benutzer nicht angezeigt wird. Dann verketten Sie dieses Passwort mit der Seriennummer und hash die Kombination.

Alles, was Sie tun, kann von einem Hacker, der genug gewidmet ist, gebrochen werden. Die Frage ist nicht, "Kann ich absolut unzerbrechliche Sicherheit schaffen?" aber "Kann ich Sicherheit schaffen, die gut genug ist, um sich vor unerfahrenen Hackern zu schützen und es nicht die Mühe wert für die geschickten Hacker zu machen?" Wenn Sie vernünftigerweise erwarten, 10 Millionen Kopien Ihres Produkts zu verkaufen, werden Sie ein großes Ziel sein und es kann viele Hacker geben, die versuchen werden, es zu brechen. Wenn Sie erwarten, ein paar hundert oder vielleicht ein paar tausend Kopien zu verkaufen, nicht so sehr.

    
Jay 22.09.2011 16:29
quelle
0

Wenn Ihr Gerät über einen gesicherten Speicher verfügt, der nicht durch Anschließen eines Programmiergeräts oder eines anderen Geräts gelesen werden kann, können Sie einen Schlüsselcode speichern und dann einen beliebigen Hashalgorithmus wie MD5 oder SHA-1/2 verwenden, um Hash zu generieren.

%Vor%

Und Paare von SERIALNUMBER + KEYCODE sollten in der lokalen DB gespeichert werden.

Auf diese Weise: ( offline )

  • Der Kunde ruft Sie an und fragt nach dem Aktivierungscode
  • Sie fragen nach einer SERIALNUMBER eines bestimmten Geräts
  • Dann suchen Sie nach einem KEYCODE durch eine gegebene SERIALNUMBER in Ihrer lokalen Datenbank und generieren Aktivierungscode (selbst wenn MD5 verwendet wird, wird dies sicher sein, solange KEYCODE privat in Ihrer DB gespeichert ist)
  • Der Client gibt den Aktivierungscode in das Gerät ein, Gerät, das Hash erzeugen kann durch eigene SERIALNUMBER und KEYCODE und vergleichen Sie dann mit Aktivierungscode, der vom Benutzer
  • eingegeben wird

Dies kann vereinfacht werden, indem der Aktivierungscode selbst gespeichert wird, wenn das Gerät über einen gesicherten Speicher verfügt (wie bei SmartCards). Auf diese Weise können Sie nur eine eigene Datenbank von SerialCode - ActivationCode-Paaren behalten.

    
sll 22.09.2011 15:37
quelle

Tags und Links