Das Secret System¶
Der Secret Generator ist ein Werkzeug das die notwendigen Schlüsselpaare erstellt, welche für eine Authentifizierung zwischen Client und Serversystemen notwendig sind.
Grundlagen¶
Warum ein Secret-System?¶
Benutzername und Passwort funktionieren gut, wenn sich Menschen bei einem System anmelden. Doch wenn sich Systeme gegenseitig authentifizieren sollen – also zum Beispiel ein Client bei einem Server –, wird es kompliziert. Es gibt keine echten „Benutzer“, die ein Passwort eingeben. Stattdessen braucht es eine sichere, automatisierbare Methode zur gegenseitigen Identifikation.
Genau hier setzt unser Secret-System an: Es ersetzt Benutzernamen und Passwörter durch technische Schlüssel (Key) und eindeutige Geheimnisse (Secrets). Diese können vom System selbst erzeugt, gespeichert und verwendet werden – ganz ohne menschliches Zutun. Dadurch vermeiden wir typische Fehlerquellen wie schwache Passwörter oder wiederverwendete Zugangsdaten.
Vorteile des Secret-Systems¶
Automatisch generiert: Unsere Secrets sind zufällig und extrem komplex – 128 Zeichen aus einem 87-Zeichen-Alphabet. Das macht sie praktisch unmöglich zu erraten oder zu knacken.
Keine menschlichen Schwächen: Da der Mensch keine Passwörter mehr erstellt, entfallen Risiken wie einfache oder wiederverwendete Passwörter.
Hashing und Salting: Der Server speichert nicht das echte Secret, sondern einen sogenannten gesalzenen Hash. Selbst bei einem Datenleck bleibt das Secret damit sicher.
Brute-Force ist nutzlos: Mit 87^128 möglichen Kombinationen ist ein Durchprobieren technisch ausgeschlossen. Auch vorberechnete Rainbow-Tabellen helfen nicht weiter – dafür sorgt der individuell erzeugte Salt.
Deine Verantwortung¶
Unser Secret-System ist trotz allem kein Wundermittel. Schütze das Secret auf der Clientseite genau so gut wie jedes andere Passwort. Zudem muss die Verbindung zwischen Client und Server verschlüsselt sein, damit das Secret auch unterwegs geheim bleibt.
Fazit¶
Das Secret-System bietet eine deutlich sicherere und robustere Grundlage für die Authentifizierung zwischen Systemen. Es wurde genau dafür entworfen: Verlässlich, automatisierbar und frei von menschlichen Fehlern.
Konfiguration¶
Ein Produkt, das das Secret System unterstützt, besteht in der Regel aus einem Server- und einem Client-Teil. Beide Teile benötigen eine individuelle Konfiguration. Die genauen Namen und die Struktur der Konfiguration sind in der jeweiligen Produkt-Dokumentation zu finden. Die Konfiguration dieser Parameter ähnelt sich jedoch stark, daher erklären wir im Folgenden die übliche Vorgehensweise.
Der Client-Teil¶
Die Konfiguration auf Client-Seite enthält normalerweise die folgenden Werte:
<Module name="Application">
...
<Value name="apiKey">[API Key]</Value>
<Value name="apiSecret">[API Secret]</Value>
...
</Module>
Diese Bezeichnungen können je nach Anwendung variieren, oder sie werden gemeinsam mit anderen Netzwerkoptionen konfiguriert. Du findest jedoch immer einen Wert, der „Key“ im Namen hat, und einen, der „Secret“ enthält.
Der Wert apiKey
(oder ähnlich)¶
Den im Feld Key des Secret Generators angezeigten Text kopierst du in den Wert apiKey
. Dieser Schlüssel muss mit einem „Key“-Eintrag auf der Serverseite übereinstimmen. Stelle also sicher, dass du auch auf der Serverseite einen entsprechenden Eintrag konfiguriert hast.
Der Wert apiSecret
(oder ähnlich)¶
Den Text, den du im Feld Client Secret findest, fügst du in den Wert apiSecret
ein. Achte darauf, diesen Wert nicht mit Server Secret zu verwechseln. Die „Secret“-Texte für Client und Server sind nämlich unterschiedlich.
Wichtig
Da der Wert in apiSecret
oder wie immer er in der jeweiligen Anwendung genannt wird, im Grunde ein Passwort ist, solltest du es auch wie ein solches behandeln und entsprechend schützen. In den meisten unserer Anwendungen kannst du Passwörter „verschlüsseln“. Das verhindert, dass sie versehentlich zugänglich werden, falls jemand Lesezugriff auf die Konfigurationsdatei hat. Wie du dies machst und alle weiteren Details dazu findest du im Abschnitt Kodieren von Passwörtern.
Die Server-Seite¶
Auf der Server-Seite konfigurierst du eine Liste von Schlüsselpaaren. Eine solche Konfiguration könnte wie folgt aussehen:
<List name="secrets">
<ListEntry>
<Value name="label">api-connection</Value>
<Value name="key">[API Key]</Value>
<Value name="secret">[Hashed API Secret]</Value>
<Value name="authorizedNetworks">10.210.7.0/24</Value>
... Weitere anwendungsspezifische Werte ...
</ListEntry>
<ListEntry>
<Value name="label">client-connection</Value>
<Value name="key">[API Key]</Value>
<Value name="secret">[Hashed API Secret]</Value>
<Value name="authorizedNetworks">10.18.67.0/24</Value>
... Weitere anwendungsspezifische Werte ...
</ListEntry>
... weitere Einträge ...
</List>
Der Name der Liste ist in diesem Beispiel secrets
, er kann jedoch je nach Anwendung variieren. Die Werte label
, key
und secret
, sowie der optionale Wert authorizedNetworks
sind in jeder Konfiguration gleich.
Der Wert label
¶
Mit dem Wert label
gibst du der Verbindung einen lesbareren Namen. Dieser Name wird meistens in Logdateien und Fehlermeldungen anstelle des Schlüssels in key
verwendet, da er die Identifizierung einer Verbindung vereinfacht. Abgesehen davon hat er keine Auswirkungen auf die Funktionalität des Servers.
Der Wert key
¶
Mit dem Wert key
definierst du einen eindeutigen Bezeichner für ein Secret. Dabei nutzt du den Text, den du im Feld Key des Secret Generators findest. Dieser Text muss mit dem Schlüssel des Software-Clients übereinstimmen.
Der Wert secret
¶
Das eigentliche Secret konfigurierst du mit dem Wert secret
. Dabei verwendest du den Text, der im Feld Server Secret angezeigt wird. Achte darauf, diesen Wert nicht mit Client Secret zu verwechseln. Die „Secret“-Texte für den Server unterscheiden sich, da sie durch einen Hash geschützt werden.
Der Secret Generator¶
Nachdem du das Secret Generator Werkzeugs startest erscheint das Hauptfenster. Der obere Bereich ist dabei der Eingabebereich, darunter findest du den Ausgabebereich.

Die Elemente im Secret Generator Fenster.¶
A In dem Feld Label gibst du dem Eintrag einen Namen. Dieser wird als
label
der Serverkonfiguration hinzugefügt.B Darunter, im Feld Authorized Networks gibst du die IP-Adressen und Netzwerke ein, welche für den Eintrag zugelassen sind. Trenne dabei mehrere Einträge mit einem Leerzeichen.
Wenn der Eintrag rot wird, ist ein Fehler in den eingegebenen Netzwerkadressen.
C Falls du das Schlüsselpaar für eine Authentifizierung über eine HTTPS/JSON Schnittstelle verwendest, solltest du die Option Limit key characters for HTTP authentication auswählen.
Dabei wird ein anderer Satz von Zeichen verwendet, welcher bei dieser Art von Authentifizierung keine Probleme macht.
D Mit der Option Version wählst du welche Version des Schlüsselpaars generiert werden soll. Verwende hier nur Version 2, ausser du erzeugst ein Schlüsselpaar für eine sehr alte Softwareversion.
E Klickst du auf den Generate New Key-Pair Knopf wird ein neues Schlüsselpaar mit den aktuellen Einstellungen erzeugt. Die dazugehörigen Daten erscheinen in den Feldern unten.
F In diesem Bereich findest du die Werte und eine Konfigurationsschnipsel für die Client-Konfiguration. Es kann sein dass du die Namen der Werte für die Konfiguration anpassen musst, der Generator erzeugt lediglich ein Beispiel mit den am häufigsten verwendeten Werten.
G Darunter findest du die Werte, sowie ein Konfigurationsschnipsel für die Server-Konfiguration. Je nach Anwendung musst du möglicherweise noch weitere Werte zu dem Eintrag hinzufügen. Der Generator erzeugt hier lediglich ein Beispiel mit den Grundwerten.
H Mit dem Knopf Copy to Clipboard kopierst du schnell den Inhalt des Feldes auf der linken Seite in die Zwischenablage.
Das Kommandozeilen Werkzeug¶
Für den Fall du das Erzeugen von Schlüsselpaaren automatisieren möchtest, existiert ein Kommandozeilen Werkzeug. Dieses generiert neue Schlüsselpaare und gibt dir als Resultat XML oder JSON zurück.
Mit --help
bekommst du eine Übersicht aller Optionen:
E:\>SecretGeneratorCommand.exe --help
SecretGeneratorCommand.exe [options]
Options:
--config-dir=... [list]
Add another directory to scan for configuration files.
--config-file=... [list]
Add another configuration file to parse.
--file=..., -o=... [string value]
If you specify this option, the output is written to the given file instead
of the console. An existing file is overwritten.
--format=..., -f=... [string value]
Select the format of the secret output.
--help, -h [boolean value]
Displays help about command line arguments.
--label=..., -l=... [string value]
An optional descriptive label for secret entry. This label is used in the
application for log and error messages.
--limit-for-web, -w [boolean value]
Limit the characters in the generated secrets to a set suitable for web
basic authentication. Use this option if you like to authenticate using a
HTTP/JSON network interface.
--network=..., -n=... [list]
Add an authorized network for the entry. You can specify this option
multiple times to add multiple networks. The value has to be either an IPv4
or IPv6 network with slash/prefix notation. Example: 10.0.0.0/24
--version=..., -v=... [integer value]
Optional the secret version to use. Use this option if you need to create
secrets for old software versions. By default, the latest version is used.
Optionen¶
- --file=<file>, -o=<file>¶
Mit dieser Option wählst du eine Datei in welche die Ausgabe geschrieben wird. Lässt du diese Option weg, wird die Ausgabe in die Konsole geschrieben.
- --format=<format>, -f=<format>¶
Mit dieser Option wählst du das Format der Ausgabe. Mögliche Werte sind hier:
xml
Generiert zwei Blöcke mit XML Daten für die Konfiguration. Die beiden Blöcke werden dabei mit den ZeilenClient:
undServer:
getrennt.json
Generiert einen JSON Dokument, welches alle generierten Werte enthält.
- --label=<label>, -l=<label>¶
Mit dieser Option kannst du den Namen des Eintrags setzen.
- --limit-for-web, -w¶
Mit dieser Option wählst du das alternative Set von Zeichen für die Web kompatible Authentifizierung.
- --network=<network>, -n=<network>¶
Diese Option kannst du mehrmals angeben. Dabei gibst du jedes mal eine erlaubte IP-Adresse oder Netzwerk an.
- --version=<version>, -v=<version>¶
Mit dieser Option wählst du das Format des generierten Schlüsselpaars. Lässt du sie weg, wird automatisch die neuste Version verwendet.
Beispiele¶
Das folgende Beispiel ruft das Werkzeug ohne Optionen auf. Dabei wird ein Schlüsselpaar erzeugt und dieses in einem JSON Block ausgegeben:
E:\>SecretGeneratorCommand.exe
{"clientSecret": "9UOL}ItEs)xIz,;0jpN=8vt#[^u,djkT_JO;GO5kYmLN[JBT6K;sE08uot%EB5B]",
"key": "Y+jEa;QO!$Tvpg%*[q9gf*zxWIhC)Vj.FQ:KQq=NGytofdNFw.bB|5.[6I;GcW2i","serverSecret":"M;m=U5Zr$z}~2H4,Rp)lz-+i-6DUF;ddu1J^PCw$p{DR)%IqjNeYW-)q_jQ1|z*4 WllOZewsPh7Lg9hr3Lql6Yu73SvltqEcv5B6isSEx1v2z0EGMBWZCKEYiCYaETdzOwzZgu5TTQ1B2Up9RjfHnw== V2"}
Im nächsten Beispiel wird die Ausgabe als XML gewählt und ein Netzwerk, sowie ein Name angegeben.
E:\>SecretGeneratorCommand.exe --format=xml --label=Example --network=10.0.0.0/8 --network=192.168.0.0/16
Client:
<Value name="apiKey">/m~Ez_]w5acvr{T0x#G]4L!z6}QCXK#ecE[6:{1Vxw)1^l$|Q!lz=rr15.1#hqw=</Value>
<Value name="apiSecret">~i!Gw6NE//{(X=:q#6lto:B}yO#EWTmvOK6vp2d:|0vJ)qoormfM+2PXIrv*xI~@</Value>
Server:
<ListEntry>
<Value name="label">Example</Value>
<Value name="authorizedNetworks">10.0.0.0/8 192.168.0.0/16</Value>
<Value name="key">/m~Ez_]w5acvr{T0x#G]4L!z6}QCXK#ecE[6:{1Vxw)1^l$|Q!lz=rr15.1#hqw=</Value>
<Value name="secret">_ju89a_fZ8;}ggMd4=TOwbk7*Zu8-xg17GBJmZ8Y?i1X:S=5gSy:jUUBM7z5^70s gbPHbGjFvcx9JML2zf8NX8KDSUaoEfc/4fimIrVaRrquzR1rp6dwlw1W4WWUDI0eq7LAe4m9OwJXb277C5jHQA== V2</Value>
</ListEntry>