Der Lizenzschlüssel ist der eine Teil Ihres Lizenzsystems, den jeder Kunde sieht. Er kopiert ihn aus einer E-Mail, fügt ihn in Ihre App ein, nennt ihn dem Support am Telefon und tippt ihn manchmal von einem Screenshot ab. Ein gutes Lizenzschlüssel-Format macht all das einfach und bleibt trotzdem nicht zu erraten. Ein schlechtes führt zu Tippfehlern und Supportanfragen und im schlimmsten Fall zu Schlüsseln, die jemand anderes selbst erzeugen kann.
Dieser Leitfaden behandelt die Entscheidungen hinter einem Schlüsselformat: wie viel Zufall ein Schlüssel braucht, wie sich Zeichen so gruppieren lassen, dass Menschen sie gut lesen können, welche Zeichen man weglässt, wie feste Präfixe funktionieren und wie Keymask-Profile in qPapel Auth das Format über alle Produkte hinweg einheitlich halten.
Was macht ein gutes Lizenzschlüssel-Format aus?
Ein Lizenzschlüssel-Format hat vier Aufgaben, die in unterschiedliche Richtungen ziehen.
- Nicht zu erraten. Niemand sollte durch Ausprobieren oder das Erkennen eines Musters einen gültigen Schlüssel erzeugen können.
- Lesbar. Kunden sollten den Schlüssel fehlerfrei kopieren, abtippen und vorlesen können.
- Identifizierbar. Sie und Ihr Supportteam sollten auf einen Blick erkennen, zu welchem Produkt oder welcher Edition ein Schlüssel gehört.
- Bedeutungslos. Der Schlüssel darf nichts kodieren, was ein Angreifer nutzen könnte, etwa eine Bestellnummer, ein Datum oder die E-Mail-Adresse eines Kunden.
Der letzte Punkt ist der, an dem viele ältere Verfahren gescheitert sind. Schlüssel, die im Client per Algorithmus geprüft werden und bei denen bestimmte Zeichen einer Formel genügen müssen, lassen sich zu einem Schlüsselgenerator zurückentwickeln. Sobald jemand die Formel extrahiert hat, kann er beliebig viele gültige Schlüssel erzeugen, und keine Sperrliste kann da mithalten. Ein moderner Schlüssel ist schlicht eine zufällige Kennung, und ob er gültig ist, entscheidet ein Abgleich auf dem Server.
Wie viel Entropie braucht ein Lizenzschlüssel?
Entropie misst in Bit, wie unvorhersehbar etwas ist. Bei einem Schlüssel aus zufällig gewählten Zeichen lässt sie sich leicht berechnen: Man multipliziert die Anzahl der Zufallszeichen mit dem binären Logarithmus (log2) der Größe des Zeichensatzes. Ein Zeichensatz mit 32 Zeichen ergibt genau 5 Bit pro Zeichen, 16 Zufallszeichen also 80 Bit.
| Zeichensatz | Bit pro Zeichen | Zeichen für 80 Bit | Zeichen für 128 Bit |
|---|---|---|---|
| Hex (0–9, A–F) | 4 | 20 | 32 |
| Crockford Base32 (32 Zeichen) | 5 | 16 | 26 |
| Großbuchstaben und Ziffern (36) | ≈5,17 | 16 | 25 |
| Groß- und Kleinbuchstaben und Ziffern (62) | ≈5,95 | 14 | 22 |
Wie viel ist genug? Bei online geprüften Schlüsseln liegen rund 80 Bit schon weit jenseits dessen, was Raten erreichen kann. Es gibt 2⁸⁰, also etwa 1,2 × 10²⁴ mögliche Schlüssel. Selbst bei einer Million ausgegebener Schlüssel liegt die Chance, mit einem einzigen zufälligen Versuch einen echten Schlüssel zu treffen, bei etwa eins zu 10¹⁸. Und jeder Versuch ist eine Anfrage, die Ihr Server drosseln und protokollieren kann.
128 Bit sind die komfortable Wahl, wenn Sie Reserven wollen, wenn Schlüssel vielleicht einmal ohne Server geprüft werden sollen oder wenn Sie den Spielraum nutzen möchten, den man auch für kryptografische Token ansetzt. Mit Crockford Base32 kosten sie zehn Zeichen mehr als 80 Bit. Alles dazwischen ist für die meisten Produkte eine solide Wahl. Zwei Regeln sind dabei wichtiger als die genaue Zahl:
- Verwenden Sie einen kryptografisch sicheren Zufallsgenerator.
rand(),System.Randomoder alles, was mit der Uhrzeit initialisiert wird, lässt sich vorhersagen. Nutzen Sie den sicheren Generator Ihrer Plattform, etwaRandomNumberGeneratorin .NET. - Zählen Sie nur den Zufallsteil. Ein fester Präfix, Trennzeichen, eine Prüfziffer oder eine laufende Nummer tragen nichts zur Entropie bei. Rechnen Sie allein mit den Zufallszeichen.
// Illustrative: build a key body from Crockford Base32 with a secure RNG.
using System.Linq;
using System.Security.Cryptography;
static class KeyFormat
{
const string Alphabet = "0123456789ABCDEFGHJKMNPQRSTVWXYZ"; // no I, L, O, U
public static string NewKeyBody(int length = 16, int group = 4)
{
var chars = new char[length];
for (int i = 0; i < length; i++)
chars[i] = Alphabet[RandomNumberGenerator.GetInt32(Alphabet.Length)];
return string.Join("-", Enumerable.Range(0, length / group)
.Select(g => new string(chars, g * group, group)));
}
}
// KeyFormat.NewKeyBody() returns something like "7KQ2-M9XD-4TPR-H6WN" (80 bits)So lassen sich Lizenzschlüssel gut lesen und eintippen
Zeichen in Vierer- oder Fünfergruppen gliedern
Menschen lesen und prüfen kurze Blöcke deutlich zuverlässiger als lange Zeichenketten. Deshalb werden Telefon- und Kartennummern in Blöcke gegliedert, und bei Schlüsseln ist es nicht anders. 7KQ2M9XD4TPRH6WN und 7KQ2-M9XD-4TPR-H6WN enthalten dieselben 80 Bit, doch die zweite Variante lässt sich viel leichter mit einer E-Mail vergleichen oder am Telefon vorlesen.
- Verwenden Sie Gruppen aus vier oder fünf Zeichen, getrennt durch Bindestriche.
- Verwenden Sie nur eine Schreibweise, in der Regel Großbuchstaben, und behandeln Sie Eingaben unabhängig von der Groß- und Kleinschreibung.
- Entfernen Sie Leerzeichen und Bindestriche, bevor Sie prüfen, damit auch ein eingefügter Schlüssel mit versehentlichen Leerzeichen funktioniert.
- Zeigen Sie Schlüssel überall dort in einer Monospace-Schrift an, wo Kunden sie sehen, von der Liefer-E-Mail bis zum Aktivierungsbildschirm Ihrer App.
Auf leicht verwechselbare Zeichen verzichten
Manche Zeichen lassen sich in gängigen Schriften, auf Screenshots mit niedriger Auflösung oder beim Vorlesen leicht verwechseln. Jede Verwechslung bedeutet eine fehlgeschlagene Aktivierung und oft eine Supportanfrage.
| Ähnlich aussehende Zeichen | Übliche Maßnahme |
|---|---|
| 0 und O | O weglassen, bei der Eingabe O als 0 lesen |
| 1, I und l | I und L weglassen, beide als 1 lesen |
| 5 und S, 2 und Z | Wenn Schlüssel von Hand eingegeben werden, je Paar eines weglassen |
| 8 und B | Eines weglassen, wenn Schlüssel oft von Screenshots abgelesen werden |
Crockford Base32 ist ein bewährter Ausgangspunkt: die Ziffern und Großbuchstaben ohne I, L, O und U (das U entfällt, damit keine zufälligen Wörter entstehen). Es bleiben 32 Zeichen, sodass jedes Zeichen weiterhin genau 5 Bit trägt. Jedes zusätzliche Zeichen, das Sie streichen, kostet ein wenig Entropie, die Sie mit einem weiteren Zeichen im Schlüssel zurückgewinnen.
Feste Präfixe: den Schlüssel kennzeichnen, ohne ihn zu schwächen
Ein fester Präfix ist eine kurze, gleichbleibende Kennzeichnung am Anfang jedes Schlüssels, etwa PRO-, TEAM- oder TRIAL-. Er trägt nichts zur Sicherheit bei, hilft aber den Menschen, die täglich mit Schlüsseln arbeiten.
- Der Support erkennt einen Schlüssel sofort. Ein Kunde fügt einen Schlüssel in ein Ticket ein, und Sie kennen Produkt und Edition, bevor Sie irgendetwas nachschlagen.
- Kunden unterscheiden ihre Schlüssel. Wer zwei Ihrer Produkte besitzt oder eine Testversion und eine Vollversion, weiß, welcher Schlüssel wozu gehört.
- Berichte bleiben übersichtlich. Ein Präfix pro Produkt oder Edition macht Schlüssel in Exporten, Logs und Tabellen von Wiederverkäufern leicht erkennbar.
Behandeln Sie den Präfix als öffentlich. Er trägt nichts zur Entropie bei, daher muss der Zufallsteil für sich allein lang genug sein, und der Präfix darf nie etwas entscheiden. Ein Schlüssel, der mit PRO- beginnt, ist ein Pro-Schlüssel, weil der Datensatz auf dem Server es so festlegt, nicht wegen seiner ersten vier Zeichen. Halten Sie persönliche oder fortlaufende Daten grundsätzlich aus Schlüsseln heraus: Eine Bestellnummer oder ein Datum verrät einem Angreifer, wie viele Schlüssel es gibt und wann sie erstellt wurden.
Beispiele für Lizenzschlüssel-Formate im Vergleich
Die meisten Produkte können aus einer kleinen Auswahl bewährter Muster wählen. In der Tabelle steht jedes X für ein zufälliges Zeichen aus Crockford Base32, sofern nicht anders angegeben.
| Format | Zufallsteil | Entropie | Geeignet für |
|---|---|---|---|
XXXX-XXXX-XXXX-XXXX | 16 × Base32 | 80 Bit | Die meiste Desktop-Software |
PRO-XXXXX-XXXXX-XXXXX-XXXXX | 20 × Base32 | 100 Bit | Editionen, die am Präfix zu erkennen sind |
TRIAL-XXXX-XXXX-XXXX-XXXX | 16 × Base32 | 80 Bit | Testschlüssel, die der Support sofort erkennt |
XXXXX-XXXXX-XXXXX-XXXXX-XXXXX | 25 × Base32 | 125 Bit | Klassischer Produktschlüssel mit mehr Reserven |
| 32 Hex-Zeichen ohne Gruppen | 32 × Hex | 128 Bit | Schlüssel, die nur eingefügt werden |
Zwei Muster decken die meisten Fälle ab. Tippen Kunden Schlüssel ein, nehmen Sie vier Gruppen mit je vier Base32-Zeichen, bei Bedarf mit Präfix. Werden Schlüssel nur eingefügt oder zwischen Systemen weitergegeben, ist die Lesbarkeit weniger wichtig, und ein längerer Schlüssel kostet nichts. Testschlüssel verdienen einen eigenen Präfix, denn sie sind die Schlüssel, die der Support am häufigsten sieht. Wie sich Testschlüssel neben bezahlten Laufzeiten einfügen, zeigt der Beitrag Abo-Lizenzierung für Software.
Keymask-Profile in qPapel Auth
Eine Keymask ist die Vorlage, der ein Schlüsselgenerator folgt: welche Stellen zufällig sind, welche Zeichen feststehen und wo die Trennzeichen sitzen. Wird das für jede Charge von Hand eingerichtet, driftet das Format auseinander. Die Schlüssel des einen Produkts bestehen dann aus Vierergruppen, die eines anderen aus Fünfergruppen, und mitten in einer Produkteinführung wird ein Präfix vergessen.
Die benutzerdefinierten Keymask-Profile, die mit den Versionshinweisen zu V6.5 in qPapel Auth hinzugekommen sind, lösen dieses Problem. Sie erstellen eine Keymask einmal und speichern sie als Profil, legen einen festen Präfix fest, der bei jeder Schlüsselerzeugung mit diesem Profil wiederverwendet wird, und wechseln zwischen gespeicherten Profilen, ohne die Keymask jedes Mal neu zu konfigurieren. Neben dem Format lassen sich in qPapel Auth auch Gültigkeitszeiträume und Aktivierungslimits für die erzeugten Schlüssel festlegen.
Fester Präfix
Bei jedem Schlüssel wiederverwendet
Zufällige Positionen
Hier steckt die Entropie
Trennzeichen
Lesbare Gruppen
Gespeichert und wiederverwendbar
Wechseln ohne neue Konfiguration
- 01
Format für jedes Produkt festlegen
Wählen Sie Zeichensatz, Länge und Gruppierung anhand der Tabellen oben. Fügen Sie einen Präfix hinzu, wenn Sie mehrere Produkte, Editionen oder Testschlüssel verkaufen.
- 02
Als Profil speichern
Legen Sie ein benutzerdefiniertes Keymask-Profil mit Ihrem festen Präfix an und benennen Sie es nach dem Produkt oder der Edition, zu der es gehört.
- 03
Schlüssel aus dem Profil erzeugen
Wählen Sie das gespeicherte Profil, wann immer Sie Schlüssel erzeugen, ob für einen Launch, ein Gewinnspiel oder eine manuelle Freischaltung, statt die Keymask jedes Mal neu einzugeben.
- 04
Prüfung auf dem Server belassen
Schlüssel werden auf den Servern von PapelShip geprüft, beim ersten Aktivieren an die Hardware des Käufers gebunden und können jederzeit pausiert oder gesperrt werden, unabhängig von ihrem Format.
Eine Änderung am Profil wirkt sich nur darauf aus, wie neue Schlüssel aussehen. Bereits ausgegebene Schlüssel sind eigene Datensätze auf dem Server. So lässt sich ein Format für eine neue Hauptversion überarbeiten, ohne dass bestehende Kunden etwas tun müssen. Die Auslieferung ist ein eigener Schritt: Bei PapelShip erzeugt eine bezahlte Bestellung ihren Schlüssel und liefert ihn direkt auf dem Bildschirm und per E-Mail aus, wie im Beitrag Softwarelizenzen online verkaufen beschrieben.
Häufige Fehler bei Lizenzschlüssel-Formaten
- Algorithmisch geprüfte Schlüssel im Client. Kann Ihre App offline einen gültigen von einem ungültigen Schlüssel unterscheiden, lässt sich die Regel extrahieren und in einen Schlüsselgenerator verwandeln.
- Den Präfix für Sicherheit halten. Ein Schlüssel mit 24 Zeichen und einem Präfix von 12 Zeichen hat nur 12 Zufallszeichen, und nur die zählen.
- Vorhersehbare Generatoren. Schlüssel aus einem zeitlich initialisierten oder nicht kryptografischen Zufallsgenerator kann jeder nachbilden, der ungefähr weiß, wann sie erstellt wurden.
- Sinnhafte Inhalte. Bestellnummern, Daten oder E-Mail-Adressen in Schlüsseln verraten Geschäftsdaten und machen Schlüssel teilweise vorhersagbar.
- Prüfung mit Beachtung der Groß- und Kleinschreibung. Schlüssel mit gemischter Schreibweise enthalten mehr Entropie pro Zeichen, führen aber zu Tippfehlern. Wenn Sie sie verwenden, verlangen Sie nie, dass Kunden sie eintippen.
- Harmlose Eingaben abweisen. Einen Schlüssel wegen eines Leerzeichens am Ende oder eines fehlenden Bindestrichs abzulehnen, erzeugt Tickets ohne jeden Sicherheitsgewinn.
- Für jede Charge ein anderes Format. Uneinheitliche Formate bremsen den Support aus und machen Fehler wahrscheinlicher. Speichern Sie das Format einmal und verwenden Sie es immer wieder.
Das Format ist nur ein Teil eines sauberen Umgangs mit Schlüsseln. Erzeugung, Auslieferung, Sperren und die Reaktion auf Lecks behandelt der Beitrag Sichere Verwaltung von Lizenzschlüsseln, und wie sich Schlüssel an ein Gerät binden lassen, erklärt Was ist HWID-Locking?. Tarife und den vollen Funktionsumfang der Lizenzierung finden Sie unter qPapel Auth.
Häufig gestellte Fragen
Ein Format festlegen und dann nicht mehr daran denken
Ein gutes Lizenzschlüssel-Format ist eine kleine Entscheidung mit langer Wirkung. Wählen Sie genügend Zufallszeichen aus einem klaren Zeichensatz, gruppieren Sie sie, damit Menschen sie lesen können, ergänzen Sie einen Präfix, wenn er dem Support hilft, und halten Sie alles, worauf es ankommt, auf dem Server. Speichern Sie das Format dann als Profil, damit jeder Schlüssel dieses Produkts denselben Regeln folgt, ohne dass sich jemand daran erinnern muss.
Ist das Format einmal festgelegt, kann Ihre Aufmerksamkeit dorthin wandern, wo sie mehr bewirkt: die Schlüssel in dem Moment ausliefern, in dem die Zahlung bestätigt ist, sie an die Hardware binden und schnell reagieren, wenn einer durchsickert.
qPapel-Security-Team
Lizenzierung und Softwareschutz