Causa di Unix Epoch time underteger intero? [chiuso]

1

Impostando l'ora su iDevice a 64 bit a gennaio 1, 1970 (tempo Unix Epoch 0) e riavviandolo, l'iDevice diventa in mattoni a causa di un underflow intero. La mia domanda riguarda quale operazione provoca effettivamente lo schianto:

Metodo 1: Hai chiamato qualcuno al momento Epoch 1455403324, questo numero è stato salvato per i calcoli del timestamp per vedere quanto tempo fa hai fatto la chiamata. Ora modifichi l'ora in 1/1/1970. Sono passati 5 minuti e il tuo Epoch time è ora 300 ma un calcolo del timestamp per l'ultima chiamata è in esecuzione e l'equazione è 300 (ora corrente) - 1455403324 (l'ultima volta che hai chiamato) che è un valore negativo, causando l'intero underflow (assumendo il numero intero di timestamp è senza segno, il che non avrebbe senso se non fosse perché, proprio come l'assunto con il valore dell'ora attuale, come è possibile che qualcuno abbia chiamato un altro x minuti in futuro?)?

Metodo 2: Come affermato in precedenza da qualcuno, "In alcuni fusi orari, impostando la data al 1 ° gennaio 1970, l'orologio interno verrà impostato su un numero inferiore a zero, poiché l'ora viene memorizzata in GMT (come il numero di secondi dalla mezzanotte in tale data) e quindi l'offset viene applicato prima della visualizzazione ", scritto da link . "In altri fusi orari, l'impostazione dell'orologio si tradurrà in un valore temporale positivo. La migliore ipotesi è che questo viene attivato dal fatto che il valore temporale è inferiore a zero."

Sono entrambi validi o uno o l'altro?

    
posta Vikaton 14.02.2016 - 02:42
fonte

2 risposte

1

Quasi sicuro che non sia dovuto a un overflow di interi, ma a una firma basata sul tempo che viene utilizzata nei meccanismi di sicurezza di iOS, come il SEP.

    
risposta data 14.02.2016 - 05:29
fonte
1

Questa non è la causa del problema. iOS funziona con qualcosa chiamato codesigning. Apple scrive e compila il loro codice, quindi firma crittograficamente per dimostrarne l'autenticità. Questo è fatto con certificati. I certificati hanno solitamente due valori di data.

  • Quello che tipicamente inciampa quando si usa Internet è la data di fine . Se il tuo tempo è scaduto, il certificato non è più valido e qualsiasi cosa tu stia tentando di verificare non verificherà.
  • L'altro è la data iniziale che indica al computer quando il certificato inizia il suo periodo di validità.

L'iPhone e la sua versione attuale di iOS non erano presenti nel 1970. Quando si avvia il dispositivo, esegue un controllo di integrità del sistema, utilizzando tali certificati. Se si imposta la data di sistema a un punto nel tempo prima della data di inizio del certificato con cui è stato firmato il sistema, semplicemente non può passare il controllo.

Vedi questo scambio di twitter: link

@JZdziarski: One thing people don’t realize is iOS/OS X have to have a valid time in order for code sign certificates to be valid.
@Ghostlyrics: @JZdziarski I don't see how this is an issue given that it does NTP (or similar) by default?
@JZdziarski: @Ghostlyrics because if Apple's own certificates aren't valid, ntp can't run.

    
risposta data 14.02.2016 - 12:33
fonte

Leggi altre domande sui tag