Sven Rautenberg: unique_id()

Beitrag lesen

Moin!

Auf einundderselben Maschine? Unwahrscheinlich.

Wie war das mit "unwahrscheinlich" in der Krypographie?

uniqid() behauptet nicht von sich, kryptographisch zu sein. Es erzeugt, ausweislich seines Namens, eine eindeutige ID. Das Mysql-Autoincrement-Feature macht übrigens dasselbe. ;)

Die Unwahrscheinlichkeit des parallelen, gleichzeitigen Erzeugens derselben ID liegt darin begründet, dass dazu absolute Gleichzeitigkeit notwendig wäre, um beispielsweise denselben Code in mehr als einem CPU-Kern zur gleichen Zeit zu starten und in die Berechnung dieselben Eingangsparameter einfließen zu lassen. Das wird allein deshalb schon sehr schwierig, weil beispielsweise Netz-Requests seriell über die Leitung kommen, insofern also nicht gleichzeitig abgearbeitet werden.

Für sichere Tokens wird doch vielerorts eplizit von "Timestamp durch Hashfunktion jagen" abgeraten, wie diese einfach zu erraten sind.

uniqid() macht kein sicheres Token. Es macht einen eindeutigen Bezeichner.

uniqid() ist auch nur um den Faktor 1000 genauer weil es halt mit ms funtkioniert - warum sollten die also signifikant schwieriger zu erraten sein?

Die Frage ist nicht, wie wahrscheinlich das ist sondern ob es für den benötigten Zweck ausreicht.

Der Zweck ist genau der springende Punkt. uniqid() ist brauchbar, wenn man analog zu auto_increment einen eindeutigen Bezeichner braucht, der nicht unratbar sein soll, aber eben einfach eindeutig, und bei dem man keinen globalen Counter implementieren will.

Dass ein geschätztes "unwahrscheinlich" böse ins Auge gehen kann, zeigt ja das Geburtstagsparadoxon sehr eindrucksvoll.

- Sven Rautenberg