Poiché la Garbage Collection non è deterministica, perché non viene utilizzata per la generazione sicura di numeri casuali?


13

Ho capito che / dev / random è una buona fonte di entropia, ed è ciò che viene solitamente usato-- È proprio mentre sto leggendo su GC, almeno in Java, sembra accettato che il demone della garbage collection venga eseguito in modo non deterministico . Se questo è vero, perché non usiamo i tempi della garbage collection come fonte di entropia invece della variabile / dev / random?


7
dai un'occhiata ad alcuni dei documenti per le funzioni rand () nella libreria C standard. In particolare, affermano che mentre ti danno ciò che appare numeri casuali, non possono essere utilizzati per la sicurezza. Il tuo tipico garbage collector probabilmente rientrerebbe nella stessa categoria. Se hai intenzione di usarne uno per sicurezza, devi assicurarti di usare un garbage collector crittograficamente sicuro.
DXM,

15
qualcosa di non deterministico può ancora essere altamente prevedibile
maniaco del cricchetto il

7
In questo caso "non deterministico" è una descrizione scadente. Un garbage collector è un sistema completamente deterministico e se si ha piena conoscenza del suo stato e dello stato del programma che lo utilizza, è possibile prevedere in modo deterministico i risultati.
Gort il robot,

4
@DXM conosci una buona implementazione per un garbage collector crittograficamente sicuro? ;)
AJMansfield,

7
"Chiunque consideri metodi aritmetici per produrre cifre casuali è, ovviamente, in uno stato di peccato". - John von Neumann
Mark Adler,

Risposte:


58

"Non specificato" e "casuale" sono due concetti completamente diversi.

Il funzionamento esatto di un Garbage Collector non viene specificato e dipende dal Garbage Collector (di solito implementato da una sorta di VM, ma non necessariamente).

Pertanto, non hai tempo specificato (cioè deterministico) in cui verranno raccolti i rifiuti.

Tuttavia, una determinata implementazione seguirà alcune regole e vi è un'alta probabilità che due successive esecuzioni dello stesso programma abbiano modelli di raccolta dei rifiuti molto simili.

Pertanto l' entropia effettiva fornita da un garbage collector sarebbe molto bassa (e scoprire quali parti si possono effettivamente usare come entropia sarà complicato).

A titolo di paragone: A HashMapin Java non garantisce alcun ordine di recupero per i suoi membri (fondamentalmente perché garantirlo aggiungerebbe un overhead che non vale la pena pagare, il più delle volte). Tuttavia, per una determinata implementazione e un determinato set di inserimenti / rimozioni puoi sicuramente calcolare l'ordine risultante. Solo perché non esiste alcuna garanzia per un determinato ordine, non significa che l'ordine sia casuale.


20
Penso che sarebbe una buona dichiarazione affermare che se un computer fa qualcosa che in realtà non è deterministico, quel computer si rompe.
Schilcote,

Non deterministico potrebbe anche significare che si basa su uno stato esterno al programma in questione, il che stesso può essere deterministico, ma sarà completamente estraneo al programma stesso e quindi può essere diverso ogni volta che il programma viene eseguito.
asmeurer il

@asmeurer Non credo di aver sentito questi termini in un simile contesto. In realtà, non sono nemmeno sicuro di cosa intendi: ogni programma che accetta input esterni (ovvero i programmi più utili) "si basa su uno stato esterno", ma ciò non lo rende non deterministico.
us2012,

2
@Schilcote: alcune moderne CPU hanno RNG non deterministici (true) implementati nell'hardware. Questi sono veramente non deterministici fino alla fisica di livello quantico.
MSalters il

2
@Schilcote Anche senza le istruzioni RNG specializzate (Intel RDRAND e RDSEED) un computer non è completamente deterministico. Alcuni tempi non sono completamente specificati e possono dipendere da fattori esterni come la temperatura.
Codici InCos

8

In primo luogo, dobbiamo stare attenti a non cadere nella trappola del ragionamento manipolando le semplici parole. Ad esempio, potremmo chiedere, dal momento che un NFA è un "automa finito non deterministico", perché non lo usiamo per ottenere numeri casuali? In tal caso, sarebbe perché non è ciò che significa "non deterministico" in un NFA; infatti, quando simuliamo un NFA, su un dato input, il comportamento della simulazione è perfettamente deterministico.

"Deterministico" è una frase caricata. Per un programmatore o un informatico, un comportamento non deterministico significa semplicemente "determinare il comportamento esatto a cui è complicato pensare" e dipende da troppi fattori, incluso l'input del programma.

Tuttavia, ciò non significa che non sia deterministico per qualcuno motivato ad attaccare un sistema crittografico. A volte i fattori e gli input ambientali possono essere individuati e schemi ripetibili emergono da comportamenti "non deterministici".

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.