2011-01-03 18 views
1

Seriennummer Format:Ich bin brainstorming für ein Seriennummernschema. Mache ich es falsch?

  • 24 Oktetts von 24 hex Zeichen plus Bindestriche für bessere Lesbarkeit
  • vertreten z.B. D429-A7C5-9C15-8516-D15D-3A1C

    • 0-15: {E-Mail-Master-Hash +}
    • 16-19: {id}
    • 20-23: {Zeitstempel}

email + Master-Hash-Algorithmus:

  • erzeugen md5 Hash von Benutzer-E-Mail (32 Byte)
  • 012.351.
  • erzeugen md5 Hash nicht offenbarter Hauptschlüssel
  • xor diese beiden Hashes
  • ungerade Bytes entfernen, die Größe zu reduzieren 16
  • z.B. D429A7C59C158516D15D3A1CB00488ED -> D2AC9181D531B08E

ID:

  • zunächst 0x00000000, dann mit jeder Lizenz erhöht verkauft

Zeitstempel:

  • Zeitstempel erzeugt wird, wenn Lizenz erworben wird

Validierung:

  • , um ein Produkt zu registrieren, muß Benutzer eingeben 1) E-Mail-Adresse, und 2) die Seriennummer
  • erzeugt email + Master-Hash und prüfen, ob es übereinstimmt 0-15 von seriellen
  • extrahieren Zeitstempel von seriellen und stellen sie sicher, dass es < aktuellen Zeitstempel und> = Datum wird zuerst Lizenz
+0

Warum verwenden Sie MD5? –

+0

Problem behoben. Entschuldigung, ich bin neu hier. – zobdos

Antwort

2

ich bin kein Experte auf diesem verkauft, aber es gibt ein paar Dinge, die mit diesem Ansatz problematisch sein könnten:

  1. Die Verwendung von MD5 scheint keine gute Idee zu sein. MD5 hat bekannte Sicherheitsschwächen und jemand, der genug Zeit zur Verfügung hat, könnte leicht mit einer Art Hash-Kollision konfrontiert werden. Je nachdem, wie Sie die Seriennummer verwenden, könnte jemand leicht eine Seriennummer fälschen, die aussieht, als würde sie mit einer anderen Seriennummer übereinstimmen. Etwas aus der SHA-Familie könnte dies verhindern.
  2. Ihre XOR der Benutzer E-Mail-Hash mit einem Hauptschlüssel ist nicht besonders sicher - ich könnte den Hash des Hauptschlüssels leicht durch XORing der Seriennummer mit einem Hash-Wert meiner eigenen E-Mail.
  3. Das Löschen jedes ungeraden Bytes aus einem sicheren Hash bricht die Garantie, dass der Hash sicher ist. Insbesondere erfordert jede Hash-Funktion mit einer guten Sicherheitsgarantie normalerweise, dass alle Bytes in dem resultierenden Hash in der Ausgabe vorhanden sind. Als ein Beispiel könnte ich trivialerweise eine sichere Hash-Funktion aus irgendeiner existierenden sicheren Hash-Funktion konstruieren, indem ich die Ausgabe dieses ersten Hash nehme, zwischen allen alten Bytes Nullen einschiebe und dann das Ergebnis ausgäbe. Es ist sicher, denn wenn Sie eine der Sicherheitseigenschaften meines neuen Hashes durchbrechen könnten, würde das dem Brechen der Sicherheitseigenschaften des ursprünglichen Hashes gleichkommen. Wenn Sie jedoch alle geradzahligen Bytes aus dem neuen Hash löschen, erhalten Sie nur Nullen, was überhaupt nicht sicher ist.
  4. Sind vier Bytes genug für die ID? Das gibt dir nur 2^32 verschiedene IDs.
1

Einige Punkte zu templatetypedef's hinzufügen antworten:

  1. Wenn Sie Hashes für die E-Mail und Ihre Master-Schlüssel, Hash der Verkettung beider kombinieren müssen. Noch besser, Hash-E-Mail + Schlüssel + ID für sogar "bessere" Sicherheit, falls jemand zwei oder mehr Lizenzen kauft und das Muster sieht.

  2. Verwenden Sie eine Hash-Funktion, die Ihnen nur 16 Bytes gibt. Wenn Sie MD5 verwenden müssen, ist jede Kürzung gleichermaßen schlecht, also nehmen Sie einfach die ersten 16 Bytes.

  3. Ihre ID wird niemals bei der Validierung verwendet.

  4. Sie sind nicht vor Schlüsselfreigabe geschützt (z. B. Warez-Sites).

Eine Seriennummer schützt Sie vor sehr wenigen Angriffen. Es ist wahrscheinlich nicht Ihre Zeit und Mühe wert.