Esiste un processore in grado di decodificare i dati crittografati e le istruzioni della macchina?

6

Esiste un processore in grado di decodificare i dati crittografati e le istruzioni della macchina e quindi eseguire le istruzioni sui dati e quindi crittografare i risultati?

    
posta PHPst 13.10.2012 - 13:00
fonte

4 risposte

6

Ci sono parecchi processori che supportano la memoria crittografata. Tali processori decifrano in modo trasparente ogni volta che leggono dalla memoria (codice o dati) e crittografano prima di scrivere nuovamente in memoria.

Questo è stato supportato per molti anni nei processori utilizzati nelle smart card e token USB. Ad esempio, in base a riassunto del prodotto Infine, SLE78 di Infineon supporta la "crittografia completa di CPU, memoria, bus e cache". Questo processore è oggetto di Qual è lo stato dell'arte di crittografia omomorfica? .

Negli ultimi anni il supporto per la crittografia RAM è stato aggiunto ai processori utilizzati nei dispositivi di elettronica di consumo come console di gioco e set top box. Un buon esempio di questo è XBOX 360, in cui la crittografia della RAM è stata una sfida significativa per gli hacker come descritto in questa presentazione classica di Felix Domke e Michael Steil (video) .

Per minimizzare l'impatto sulle prestazioni del processore, l'algoritmo di decrittografia della RAM probabilmente non sarà un potente codice a blocchi come AES ma un cifrario streaming sincrono .

Tale tecnologia di crittografia della memoria è destinata a difendersi da un utente malintenzionato che non controlla la CPU ma può accedere direttamente alla memoria fisica, ad esempio sondando il bus che collega la CPU alla memoria fisica.

    
risposta data 13.10.2012 - 22:12
fonte
4

Questa è un'area di ricerca attiva (ad esempio, vedi questo ). In realtà è un problema piuttosto difficile, perché il modello di sicurezza presuppone che l'attaccante sia il sistema host, che può osservare ogni singolo accesso alla memoria. È difficile non perdere informazioni in queste condizioni ...

Ad esempio , immagina una CPU che calcola una firma RSA. Durante il corso dell'algoritmo, la CPU valuterà alcune istruzioni, alcune delle quali sono salti condizionali, e la CPU lavora con una pipeline con qualche previsione del ramo : per rendere le cose un po 'più veloci, la CPU prova per indovinare se un determinato ramo condizionale sarà preso o superato, in base a quello che è successo nelle ultime volte in cui è stato rilevato questo salto. Quando la CPU indovina, l'esecuzione si blocca per alcuni cicli: la CPU deve dimenticare il suo attuale pipelining e riempire la sua pipeline con le istruzioni effettive.

Ora, immaginiamo un attaccante abbastanza limitato che possa solo osservare se i salti sono previsti correttamente o meno. Questo non è molto potere; nel caso della tua CPU criptata, l'attaccante può imparare molto di più. Ma almeno , dal momento che sia l'opcode che i dati provengono dalla memoria, osservando i recuperi e le scritture di memoria (in particolare gli indirizzi di destinazione e il tempo di accesso con precisione del ciclo) diranno all'attaccante cosa succede con la previsione delle diramazioni.

Si scopre che tali informazioni sono sufficienti per ripristinare la chiave RSA . Questo è un risultato piuttosto strong e spaventoso, perché l'analisi della predizione delle filiali può essere eseguita su CPU moderne con hyper-threading da un processo non privilegiato in esecuzione sullo stesso processore (quindi questo significa che nel Cloud, i tuoi vicini, ovvero gli altri clienti dello stesso Cloud, sono pericolosi ...). Il modello che intendi, in cui l'architettura host è ostile, rende più semplice ( molto più facile) per l'avversario.

I fatti concreti non hanno mai impedito l'esecuzione degli affari. Pertanto, esistono microcontrollori che pretendono almeno di eseguire il tipo di crittografia automatica in modo tale che ciò che si desidera. Vedi, ad esempio, il DS5002FP di Maxim Integrated. Si noti che non sostengo che questo prodotto sia danneggiato: si tratta di una CPU a 8 bit molto piccola che è improbabile che esegua la previsione di diramazioni o altre fonti simili di perdite e incorpora tutta la RAM nel chip stesso. Ciò rende la richiesta di sicurezza almeno possibile , anche plausibile . Significa anche che la potenza di calcolo rimarrà bassa. Tale microcontrollore offrirà la stessa potenza di il mio primo computer (dal 1984).

Una CPU virtuale, allora? È teoricamente possibile (o, più precisamente, non è stato dimostrato impossibile) di scaricare calcoli arbitrari su un computer non affidabile attraverso l'uso di la crittografia omomorfa . Esiste anche un'implementazione opensource ma è ancora più lenta della CPU compatibile con 8051 del paragrafo precedente. Anche in questo caso, si tratta di un'area di ricerca attiva.

    
risposta data 13.10.2012 - 17:25
fonte
3

Sì, c'è. In effetti, è molto probabile che tu abbia postato da uno. Ma la crittografia nel processore non è un proiettile d'argento.

Una CPU x86 (processore PC) o una CPU ARM di fascia alta (processore smartphone) contiene una piccola quantità di cache. C'è spazio sufficiente per adattarsi al codice per crittografare e decrittografare istruzioni e memoria dati al volo. In questo modo, la RAM esterna diventa efficacemente spazio di archiviazione e scambio crittografato .¹

Per la maggior parte degli attacchi, non vi è alcuna differenza tra il processore stesso e il livello di cache più interno (la cache L1). La cache L1 si trova all'interno dello stesso wafer di silicio del processore e un attacco fisico alla cache sarebbe difficile quanto un attacco fisico al processore stesso. Quindi, per motivi di sicurezza, il processore e la cache L1 sono gli stessi. In molti processori, anche la cache L2 è all'interno dello stesso pacchetto e altrettanto difficile da attaccare, il che dà più spazio per lavorare. Se sei preoccupato per gli attaccanti che possono entrare nel pacchetto, devi davvero mettere il processore dentro una scatola resistente alle manomissioni, cioè un HSM , nel qual caso si potrebbe anche mettere abbastanza RAM all'interno della scatola.

Il vantaggio di crittografare i dati al di fuori della CPU è di evitare attacchi alla RAM esterna. Esistono due tipi principali di attacchi: eseguire lo snooping su un bus RAM live o modificare i dati sul bus e scaricare il contenuto della RAM.

Ci sono diversi problemi con la crittografia dei dati al di fuori della cache del processore.

  • È lento. Non solo stai spendendo molto tempo in crittografia, ma stai sprecando molto spazio nella cache.
  • Ciò richiede un supporto profondo nelle viscere del sistema operativo. Non è un'impresa banale; con risorse di codifica limitate, spesso vale la pena dedicare più tempo a combattere attacchi più comuni, ad esempio cercando buffer overflow e vulnerabilità di injection string.
  • C'è un problema di bootstrap: come fa il processore a sapere che sta ottenendo il codice di crittografia che non ha una backdoor e da dove prende la chiave? Se le chiavi sono memorizzate sul disco fisso, potrebbero anche essere conservate nella RAM.
    • Una possibilità è che l'utente digiti una passphrase ad alta entropia, che l'attaccante non può realisticamente usare come forza bruta. Dato che gli attacchi alla chiave sarebbero offline, l'ipotesi che l'utente avesse una passphrase con entropia sufficiente è solo realistica in una piccola percentuale di utenti.
    • Un'altra possibilità è quella di memorizzare la chiave all'interno del pacchetto. Per quanto ne so, gli attuali processori Intel non hanno memoria persistente. Alcuni processori ARM di fascia alta (hanno una piccola quantità di bit di sola scrittura o alcuni kilobyte di on-chip memoria flash).

Esistono anche processori con supporto hardware diretto per la crittografia nella CPU e in cui vengono crittografati tutti i bus di comunicazione che escono dalla CPU. (So che esistono, ma non posso nominare un numero di parte.) Questi processori tendono ad essere utilizzati in applicazioni specializzate.

¹ Il modo ovvio per farlo è anche brevettato .

    
risposta data 15.10.2012 - 03:27
fonte
1

Non in una singola istruzione, no. Ma forse è possibile ottenere qualcosa di molto vicino ad esso con una CPU che supporta le istruzioni AES-NI (moderne CPU Intel e AMD) con un programma scritto in ASM x86_64 (linguaggio assembly). Non posso darti una risposta definitiva, perché non sono un programmatore ASM. Presumo che tu voglia evitare di scrivere informazioni non criptate nella RAM del sistema e tenerlo interamente contenuto nella CPU. Questo è roba piuttosto di basso livello. Su una nota correlata, esiste una patch per il kernel Linux, che consente di memorizzare la chiave di crittografia del disco completo solo nei registri della CPU e non nella RAM. Fornisce un fattore di attenuazione contro gli attacchi cold-boot che si basano sulla chiave di crittografia memorizzata nella RAM.

    
risposta data 13.10.2012 - 13:27
fonte

Leggi altre domande sui tag