- große Zufallszahlen scheinen für noncen am besten geeignet zu sein, da sie nicht erratbar und vorhersagbar sind.
- die wiederverwendung von zufallszahlen beruht auf wahrscheinlichkeiten
Also Nonces können vorhersagbar sein, aber Random Numbers wie der Name schon mal sagt, nicht. Üblicherweise können Nonces, die zufällig gewählt werden, immer im Klartext übertragen werden. Es geht ja generell um FRESHNESS, damit keine Replay-Angriffe - guter Tipp vom Anonymen Smiley ;) - möglich sind. Wird eine Nonce wiederverwendet, kann das ursprüngliche Paket, in dem diese das erste Mal zum Einsatz kam, nicht unterschieden werden.
Damit man Random Numbers aber verwenden kann, müssen ja beide Seiten die Übersicht behalten, d.h. beide Seiten müssen Blacklists anlegen und evtl. eine neue Nummer suchen, wenn eine schon verwendete generiert wird. Natürlich werden die Blacklists (endlicher Zahlenraum für gespeicherte Nummern mit maximaler Bitzahl) auch ab und zu mal ausgedünnt, wieder ein Verwaltungsschritt mehr.
- sequenznummern erfordern nichtflüchtige Zustände, so dass ein knoten
sicher sein kann, dass es nicht zweimal die gleiche nummer verwendet. auch nach einem absturz muss dies sichergestellt werden.
Genau. Aber die Speichermenge ist dafür eng begrenzt, es reicht, sich die letzte SeqNo für jede Verbindung zu merken. Allerdings reicht speichern nicht aus, beide müssen sich auch einig sein, welche die richtige ist = Synchronizität.
nachteil: die Verwendung von echten zufallszahlen kann sehr teuer werden.
- ungeeignete zufallszahlen können dazu führen, dass ein algorithmus
oder ein protokoll, das eigentlich sicher ist, unsicher wird.
das gilt fast überall und schließt auch Session Keys ein, die ja auch zufällig erzeugt werden sollen oder auch andere Keys
Was in der Aufzählung noch fehlte sind
Zeitstempel und
Challenges. Zeitstempel sind so ähnlich wie Sequenznummern, nur hängt das ganze dann noch komplizierter an den Clock Drifts und die Synchronisierung ist schwieriger, siehe im VSYS-Teil dazu die üblichen Protokolle, worauf man ja auch auf die relevanten Prüfungsfragen schließen kann.
Bei Challenges muss eine syntaktische und semantische Verarbeitung vereinbart werden. Üblicherweise ist das das nicht so trivial wie Nummern erzeugen und austauschen.
Aber immer tauschen wir nur Komplexität an einer Stelle gegen Komplexität an anderer Stelle ein.
Was im sicheren Protokoll wirklich zum Einsatz kommt, hängt ja auch vom Anwendungsszenarium ab. Wenn ich bei Kerberos eh mit Zeiten und Zeitperioden arbeiten und darum eine gemeinsame Zeit brauche, dann kann ich die auch gleich als Nonce verwenden. Wenn ich einen billigen Garagenöffner bauen will, werde ich keinen teuren ClockChip mit RadioEmpfänger für die Abfrage der Atomuhren einbauen …
Beste Grüße
KPK