%2C%20um%20stack_canary%20oder%20stack_top%20zu%20generieren%3F.png)
Es gibt einen Zufallszahlengenerator im Linux-Kernel. Dieser wird normalerweise LRNG (Linux Random Number Generator) genannt. Wir können ihn verwenden, indem wir aufrufen get_random_bytes()
. Aber stack_canary
und stack_top
werden von generiert get_random_int()
. Obwohl der Linux-Kernel einen eigenen guten Zufallszahlengenerator (LRNG) hat, warum generiert der Linux-Kernel ihn von get_random_int()
? Ich denke, es liegt vielleicht an der Effizienz. Ist das richtig?
Antwort1
Holen Sie sich ein zufälliges Wort, das nur für den internen Kernelgebrauch bestimmt ist. Ähnlich wie urandom, aber mit dem Ziel einer minimalen Entropie-Pool-Verringerung. Infolgedessen ist der Zufallswert nicht kryptografisch sicher, aber für einige Verwendungszwecke sind die Kosten der Entropie-Verringerung zu hoch.
Deshalb get_random_int
wird nicht einfach die Ausgabe von übernommen get_random_bytes
. Tatsächlich sind die Argumente hier aus zwei Gründen falsch:
- Die Entropie nimmt nicht wirklich ab. Das ist nur eine Scheinberechnung innerhalb des Kernels.
- Selbst wenn die Entropie abnimmt, wäre das kein Grund, keinen kryptografisch sicheren Pseudozufallszahlengenerator anstelle einer Ad-hoc-Konstruktion zu verwenden. Verwenden Sie einfach eine andere Instanz als die, die die Entropie abnimmt
/dev/random
. Die Leistung könnte ein Grund sein, aber der Unterschied zwischen einem richtigen CSPRNG wie Hash_DRBG/SHA-2 und der Ad-hoc-Konstruktion hier mit MD5 ist winzig.
Antwort2
Linux /dev/random
, /dev/urandom
und get_random_bytes()
sind an denselben internen Entropiepool gebunden. Es ist durchaus möglich, ihn zu leeren, wenn er nur für RNG verwendet wird, und so /dev/random
eine Blockierung und /dev/urandom
Ausgabe mit niedriger Entropie zu verursachen. Dieser Zustand niedriger Entropie schafft Probleme für Krypto.