Architetture per la protezione dell informazione nei sistemi embedded

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Architetture per la protezione dell informazione nei sistemi embedded"

Transcript

1 POLITECNICO DI TORINO III Facoltà di Ingegneria dell Informazione Corso di Laurea in Ingegneria delle Telecomunicazioni Tesi di Laurea Magistrale Architetture per la protezione dell informazione nei sistemi embedded Relatori: prof. Guido Masera ing. Andrea Molino ing. Fabrizio Vacca Candidato: Federico Bianco Levrin Luglio 2007

2 ii

3 Sommario Negli ultimi anni l ampliamento della gamma dei servizi e applicazioni offerti dai sistemi embedded ha dato la nascita di nuove preoccupazioni per quanto riguarda la sicurezza delle informazioni. Con il termine sistema embedded si identificano dei sistemi a microprocessore progettati appositamente per una determinata applicazione, integrati nel sistema che controllano e in grado di gestirne le funzionalità. Il problema principale per quanto riguarda la sicurezza è lo scambio costante di dati e istruzioni fra la memoria esterna e la CPU. La memoria esterna presente nella maggior parte di questi dispositivi può contenere dati confidenziali, come software coperto da copyright, che per ovvie ragioni devono essere preservati. La soluzione proposta al problema si basa sull utilizzo di un sistema crittografico che permette solamente alla CPU di conoscere il reale contenuto della memoria esterna. Il contenuto della memoria esterna è cifrato cosicché da rendere invano qualsiasi tentativo di lettura diretta della memoria. Questa soluzione considera la CPU come un entità sicura, quindi al suo interno i dati e le istruzioni sono in chiaro mentre sono cifrati al suo esterno. La scelta della tipologia del sistema cifrante deve essere fatta in rispetto delle specifiche del sistema, e molto spesso è un compromesso fra il livello di sicurezza desiderato e la perdita di performance che ci si può permettere. Il sistema crittografico, oggetto della tesi, è stato sviluppato per poter essere inserito all interno del microprocessore LEON3, un progetto open source di un microprocessore RISC sviluppato dalla Gaisler Research. Il microprocessore è sintetizzato con il linguaggio VHDL, può essere efficientemente implementato nelle tecnologie FPGA e ASIC ed è disponibile sotto GNU General Public License. La scelta di sviluppare un sistema crittografico specificatamente per il microprocessore LEON3 è stata dettata dal fatto che quest ultimo, in ambito commerciale, sta riscuotendo particolare successo per lo sviluppo di SOC (System On a Chip). Il LEON3 ha un sistema cache molto flessibile che consiste in due cache separate per la gestione dei dati e delle istruzioni. Il sistema crittografico è stato posizionato fra il controllore della memoria cache per le istruzioni, e il modulo atto ad inoltrare le richieste di trasferimento dati sul bus AMBA AHB (figura 1). L architettura sviluppata è in grado di intercettare le richieste di trasferimento di istruzioni fatte dalla iii

4 CPU verso l area di memoria cifrata e di eseguire le operazioni necessarie alla decifratura parallelamente alle operazioni di fetch delle istruzioni dalla memoria esterna. Le scelte progettuali sono rivolte a realizzare un unità crittografica trasparente al microprocessore LEON3 ed in grado di ridurre al minimo la perdita di prestazioni in termini di tempo di accesso alla memoria esterna. MEMORIA ESTERNA SISTEMA CRITTOGRAFICO Microprocessore LEON3 BUS AMBA AHB MEMORIA CACHE CPU Figura 1. Collocazione del sistema crittografico La scelta dell algoritmo di crittografia è stata orientata sull utilizzo dell Advanced Encryption Standard (AES). Conosciuto anche come Rijndael (benché, più propriamente, AES sia una particolare implementazione dell algoritmo Rijndael), è un algoritmo di cifratura a blocchi utilizzato come standard dal governo degli Stati Uniti d America. È stato adottato dalla National Institute of Standards and Technology (NIST) e dalla US FIPS PUB 197 nel novembre del La modalità di funzionamento dell algoritmo di cifratura prescelto è la CTR (CounTeR) poiché è la modalità che meglio si adatta alle problematiche di accesso casuale ai dati come nel caso della lettura della memoria da parte della CPU che non è sequenziale (e.g. istruzione di salto). Il progetto del sistema crittografico è stato logicamente suddiviso in due parti. La prima parte prevede la progettazione di un core AES, con chiave di codifica a bit, altamente prestante in termini di throughput dei dati, mentre la seconda parte prevede l inserimento del core, precedentemente sviluppato, all interno del microprocessore LEON3. Sono state realizzate e analizzate diverse architetture per l implementazione dell algoritmo AES sia per la funzionalità di codifica che di decodifica dei dati. In particolare sono state sviluppate due architetture differenti: la prima di tipo iterativo mentre la seconda di tipo fully unrolled. Entrambe le architetture sono in grado di eseguire le operazioni con un parallelismo di bit (massimo per l AES) e sono realizzate con differenti livelli di sub-pipeline (fino a due livelli). Il target tecnologico è l FPGA poiché l utilizzo di hardware riconfigurabile permette un approccio decisamente più flessibile. L FPGA utilizzata come riferimento per l analisi delle prestazioni è la XC2V4000, un FPGA di medie dimensioni della famiglia Virtex2 della XILINX. Le prestazioni del core AES sviluppato sono, rispetto alle altre implementazioni sia di tipo accademico che commerciale disponibili in letteratura, decisamente competitive (figura 2). Il massimo delle prestazioni, in termini di throughput, si sono ottenute con l implementazione fully unrolled con due livelli di sub-pipeline che permette di raggiungere un bit rate (stimato) pari a 40,40 iv

5 Gbps. L architettura più compatta è di tipo iterativo con un livello di sub-pipeline che garantisce un throughput (stimato) di 2,9 Gbps a fronte di un occupazione di sole 1.40 Slice Area [Slice] TESI, Iterativa TESI, Fully unrolled Chodowiec et al., 2001 Hodjat et al., 2004 McLoone et al., 2001 Saggese et al., 2003 Standaert et al., 2003 Wang et al., 2004 Zambreno et al., 2004 Zhang et al., Throughput [Gbps] Figura 2. Grafico riassuntivo delle prestazioni del core AES Il sistema crittografico inserito nel microprocessore LEON3 può utilizzare una qualsiasi versione del core AES precedentemente descritto. L implementazione più adatta è quella iterativa senza sub-pipeline che ha un critical path paragonabile a quello del microprocessore LEON3. L impatto del sistema crittografico sulle prestazioni del microprocessore LEON3 è stato valutato attraverso l esecuzione di un programma di test. La differenza di tempo necessario alla sua esecuzione con e senza il sistema crittografico rappresenta la perdita di performance che si stimano essere del 17%. Il lavoro di tesi si conclude con lo sviluppo di un software in grado di cifrare il contenuto di un file SREC. Il formato S-record (SREC) è stato sviluppato dalla Motorola ed è comunemente utilizzato per l upload del firmware nelle memorie. Grazie a questo software, sviluppato in linguaggio C++, è possibile cifrare il contenuto della memoria esterna ovvero poter proteggere la proprietà intellettiva di un qualsiasi programma già precedentemente sviluppato. Con il presente lavoro si è voluto soddisfare il bisogno di embedding security necessario alle attuali e future applicazioni mediante la realizzazione di un framework completo per lo sviluppo di applicazioni sicure in ambito SOC. Infatti, a partire da un qualsiasi file sorgente è possibile creare un eseguibile cifrato compatibile con il microprocessore LEON3 modificato, ottenendo così la protezione del codice eseguito secondo gli standard attuali di sicurezza. Il degrado di prestazioni del sistema sviluppato rispetto a quella originale è dimostrato essere contenuto, grazie alle alte prestazioni del modulo cifrante hardware realizzato. v

6 Indice Sommario vi 1 Introduzione alle architetture hardware Sviluppi storici Hardware crittografico (Co-)Processore crittografico Smart Card e dispositivi USB RFID tags Sicurezza degli apparati hardware FPGA vs. ASIC 7 3 Metodologia per il design dell hardware L approccio Top-Down Progettazione congiunta FPGA e ASIC AES - Advanced Encryption Standard Introduzione Descrizione dell algoritmo AES Analisi dettagliata dell algoritmo Rijndael Il campo GF(2 ) Moltiplicazione per x nel campo GF(2 ) Polinomi con coefficienti nel campo GF(2 ) La funzione cifrante Schedulazione della chiave La funzione cifrante inversa La cifratura inversa equivalente Criteri di progetto Modi di funzionamento Electronic Code Book (ECB) Cipher Block Chaining (CBC) vi

7 4.4.3 Cipher Feedback (CFB) Output Feedback (OFB) Confronto dei modi di funzionamento Aspetti hardware Pipelining, Sub-Pipelining e Loop Unrolling AES: Stato dell arte nell implementazione Implementazioni lightweight Principi di progettazione Lavori presenti in letteratura Dettagli implementativi Caratteristiche dell implementazione Architetture ottimizzate per il throughput Principi di progettazione Lavori presenti in letteratura Dettagli implementativi Caratteristiche delle implementazioni Implementazione dell AES Architettura iterativa Macchina a stati finiti (fsm) Architettura fully unrolled Architetture per la cifratura dei dati (aes enc) Entity rounddata enc Entity roundkey enc Inserimento dei registri di sub-pipeline Architetture per la decifratura dei dati (aes dec) Entity rounddata dec Entity roundkey dec Inserimento dei registri di sub-pipeline Sintesi del core crittografico AES Analisi delle performance Tecniche per la protezione dell informazione nei sistemi embedded Il sistema cifrante Architetture: stato dell arte Il processore LEON Overview Cache istruzioni Funzionamento vii

8 .2.2 Instruction cache tag Funzionalità aggiuntive della cache istruzioni La libreria GRLIB IP Organizzazione della libreria LEON3MP: configurazione del microprocessore Analisi del codice VHDL Entity icache Leon3MP Crittografico Modifiche apportate al codice VHDL Principio di funzionamento dell unità cifrante Entity sniffer mci Simulazione del microprocessore Leon3MP crittografico Prima simulazione Seconda simulazione Conclusioni e sviluppi futuri A Il formato S-record 151 Bibliografia 153 viii

9 Capitolo 1 Introduzione alle architetture hardware Tradizionalmente gli algoritmi di crittografia sono implementati in hardware allo scopo di ottenere alte prestazioni, in termini di throughput, rispetto all alternativa software. Tuttavia il requisito delle attuali e future applicazioni richiede delle caratteristiche aggiuntive. Il basso consumo energetico e la bassa occupazione di silicio stanno diventando requisiti sempre più importanti nel campo delle smart card e RFID. Esistono numerosi algoritmi di crittografia ma solo un piccolo numero di questi è utilizzato nella pratica. RSA e DES sono prominenti esempi di algoritmi frequentemente utilizzati; sono inoltre un esempio di algoritmi che stanno gradualmente scomparendo a favore di altri più recenti e performanti. Algoritmi basati su curve ellittiche sono diventati popolari nel campo della firma digitale. L Advanced Encryption Standard (AES) data la sua sicurezza e le sue specifiche pubbliche è stato scelto come successore del DES. Si presume che in un prossimo futuro venga utilizzato in numerose applicazioni come è successo al suo predecessore. 1.1 Sviluppi storici L implementazione hardware degli algoritmi di crittografia ha una lunga storia. Già nel 1930 le macchine crittografiche basate su rotori erano frequentemente utilizzate in applicazioni militari allo scopo di cifrare e decifrare informazioni sensibili. Le macchine a rotori erano dei dispositivi elettromeccanici che implementavano complesse sostituzioni poli-alfabetiche in maniera veloce e semplice per l utente; queste caratteristiche ne sancirono la loro popolarità. Con l avvento del calcolatore elettronico (computer) vi è la possibilità di realizzare calcoli sempre più complessi in tempi ridotti. Conseguentemente la criptoanalisi 1

10 1 Introduzione alle architetture hardware è divenuta molto potente e si è dovuto sviluppare nuovi algoritmi di cifratura. Lo sviluppo è da ora rivolto alla realizzazione di algoritmi in grado di essere eseguiti in maniera efficiente da un computer. Tuttavia nel 1970 quando furono inventati i moderni sistemi di crittografia come il DES e l RSA, divenne ancora una volta interessante implementare questi algoritmi in un hardware dedicato. Infatti un computer standard di questo periodo era troppo lento per poter eseguire velocemente i nuovi algoritmi di cifratura; si rese quindi necessario sviluppare delle implementazioni in hardware dedicati. Questa situazione è cambiata più volte nel corso degli anni. In accordo con la legge di Moore, sia la potenza che la memoria di un computer sono diventate col passare del tempo incredibilmente veloci e poco costose, ed i moderni personal computer sono sufficientemente veloci per la maggior parte delle applicazioni. Tuttavia, con il sempre maggiore uso di sistemi di crittografia in differenti applicazioni, il bisogno di memorizzare in maniera sicura le chiavi di cifratura diventa prioritario e, sfortunatamente, un personal computer non è progettato per garantire questa priorità. Negli scorsi anni è stato chiaro come un personal computer è insicuro e non è una piattaforma adeguata per custodire le chiavi di cifratura. A titolo di esempio, in un applicazione che richiede la firma elettronica il firmatario è tenuto alla memorizzazione dei dati relativi alla propria firma in maniera sicura; conseguentemente un sistema hardware di crittografia che permette l archiviazione in modo sicuro della chiave diventa appetibile. Proprio per questo fatto vi è la necessità di creare un area denominata hardware security module cioè un dispositivo atto a realizzare l algoritmo crittografico, cossiché la chiave di cifratura non debba uscire dal dispositivo. Il bisogno di avere funzioni di crittografia e di memorizzazione sicura dei dati coinvolge sempre più applicazioni. La Smart card, utilizzata come tessera del bancomat o come scheda SIM nel telefono portatile, è un esempio della larga diffusione di questi dispositivi; recentemente hanno avuto ricevuto ampia attenzione anche i dispositivi di identificazione via radio: RFID (Radio Frequency IDentification). Il bisogno crescente di embedding security nei dispositivi portatili e non ha spinto sia le industrie che i gruppi di ricerca a ritornare alle implementazioni hardware degli algoritmi di crittografia a scapito di quelle software. Al giorno d oggi possiamo identificare due scenari in cui l implementazione hardware porta dei vantaggi rispetto a quella software. Per prima cosa l hardware consente di realizzare un applicazione ad alta velocità in cui il co-processore crittografico alleggerisce il resto del sistema dal costo computazionale dell algoritmo di cifratura. In secondo luogo è possibile realizzare dispositivi ottimizzati per un basso consumo energetico e una bassa occupazione spaziale di silicio. In entrambi gli scenari l immagazzinamento della chiave è prioritario e realizzabile in maniera sicura ed affidabile. 2

11 1.2 Hardware crittografico 1.2 Hardware crittografico Si intende per hardware crittografico un qualsiasi circuito hardware in grado di eseguire un algoritmo di crittografia. Questo piuttosto ampio concetto include anche i processori standard che semplicemente eseguono l algoritmo di crittografia. Nelle seguenti sezioni si farà un resoconto sugli hardware crittografici più diffusi analizzandone le loro peculiarità (Co-)Processore crittografico Nel caso più generale possiamo far riferimento al processore general purpose che esegue l algoritmo di crittografia grazie l appoggio di un dispositivo hardware esterno. Il (co-)processore crittografico è un dispositivo che è stato specificamente sviluppato per eseguire un certo tipo di algoritmo di cifratura. Tipicamente, uno o più (co-)processori crittografici affiancano un processore general purpose e ciascuno di essi è responsabile delle operazioni di cifratura. Tra i sistemi che si basano su questo approccio ci sono i moduli hardware di sicurezza (HSMs) e gli acceleratori SSL entrambi sviluppati su schede con interfaccia PCI. Esiste un numero crescente di acceleratori SSL allo stato dell arte che utilizzano la tecnologia dell FPGA per implementare le funzioni di cifratura. Per un sistema HSM l archiviazione sicura delle chiavi di cifratura è di massima importanza soprattutto quando è utilizzato come dispositivo per la creazione della firma o all interno di operazioni bancarie. Per questo tipo di applicazioni diventa prioritario la resistenza agli attacchi ([3, 1]) piuttosto che la potenza di calcolo; inoltre se queste apparecchiature sono utilizzate all interno di una rete aperta, come ad esempio durante le fasi di autenticazione in rete internet, bisogna prestare particolare attenzione al timing attack [17]. Il processore crittografico come descritto in questa sezione necessita di essere gestito da un software che ne permetta l interfaccia con il mondo esterno. Questi software sono denominati Application Programming Interface (API) ed è frequente che una loro errata programmazione apra una porta agli attacchi [6] Smart Card e dispositivi USB Il termine smart card è comunemente utilizzato per indicare delle schede che contengono al loro interno un circuito integrato, in alternativa sono anche chiamate Integrated Circuit Card (ICC) [15]. Al giorno d oggi si presume che le smart card siano inviolabili e propio per questo le loro funzioni di sicurezza sono utilizzate in diverse applicazioni. Le smart card si interfacciano con il proprio lettore attraverso una contattiera elettrica che tra le altre cose fornisce alla scheda l alimentazione e il segnale di clock. Recentemente si stanno diffondendo smart card equipaggiate con 3

12 1 Introduzione alle architetture hardware un interfaccia radio che dunque, a differenza delle tradizionali, non necessitano un contatto fisico con il lettore. Possiamo distinguere due tipi di smart card: le Memory cards e le Microprocessor cards. Le Memory cards oltre ad un Electrically Erasable Programmable Read-Only Memory (EEPROM) hanno al loro interno anche la logica di sicurezza e una memoria per la lettura/scrittura dei dati. La logica di sicurezza permette di proteggere una certa zona di memoria implementando un semplice meccanismo di autenticazione. Le Microprocessor cards contengono un microcontrollore prevalentemente costituito da una Central Processing Unit (CPU), da una memoria (ROM e RAM), da delle periferiche di Input e Output (IO) e da qualche modulo per la crittografia. Tipicamente questi moduli sono un generatore di numeri pseudo-casuali, un acceleratore DES e uno RSA. Le attuali smart card di tipo microprocessor integrano una CPU da, 16 o 32 bit, fino a 64 Kbyte di memoria di tipo ROM, fino a 64 Kbyte di memoria EEPROM e fino a 1 Kbyte di memoria RAM. Le microprocessor card sono tipicamente utilizzate per le svolgere applicazioni sicure. A causa del limite di spazio e di potenza di alimentazione è necessario sviluppare per questi dispositivi delle versioni ad hoc degli algoritmi di crittografia. La resistenza ad ogni tipo di attacco è la prerogativa da tenere in conto durante lo sviluppo di una smart card. Le periferiche di sicurezza basate sullo standard USB sono essenzialmente una smart card con interfaccia USB. L implementazione degli algoritmi di crittografia è del tutto simile a quanto visto per le smart card RFID tags Le RFID tags [16] stanno avendo già tutt oggi un largo impiego come alternativa al codice a barre. Tuttavia è possibile utilizzare questa tecnologia per applicazioni in cui è richiesta la sicurezza nel trattamento dei dati. Uno dei vantaggi delle RFID tags consiste nel fatto che non richiedo un contatto fisico con il lettore e possono essere utilizzate a qualche metro di distanza dal lettore (il limite dipende dal modello di tags utilizzato). Ciò nonostante, queste tags ricevono l alimentazione dal lettore e quindi è fondamentale poter implementare una versione a bassissimo consumo degli algoritmi di crittografia. 1.3 Sicurezza degli apparati hardware Negli ultimi anni si é visto come le implementazioni degli algoritmi crittografici possono essere attaccate in vari modi. Gli attacchi di tipo invasivo sono fatti accedendo direttamente al circuito elettrico dell apparato. Quelli semi-invasivi, invece, fanno 4

13 1.3 Sicurezza degli apparati hardware accesso al dispositivo ma senza stabilire un contatto elettrico. Infine, quelli noninvasivi sono portati a termine accedendo solamente alle porte standard di input e output. Tutte e tre le tipologie di attacco presentate sono di tipo attivo, ovvero, l aggressore perpetua attivamente un uso illecito del dispositivo. Sono anche noti attacchi di tipo passivo, noti anche col nome di side-channel attacks. Questi ultimi sono perpetuati monitorizzando informazioni sensibili del dispositivo. Ad esempio si può effettuare il monitoraggio di alcune grandezze fisiche come le emissioni elettromagnetiche piuttosto che il consumo energetico del dispositivo che, sono direttamente correlate con le operazioni svolte dal dispositivo. La sicurezza delle implementazioni contro gli attacchi non-invasivi è stata di recente discussa da due gruppi di ricerca del VAM3 ([5] e [4]). 5

14 1 Introduzione alle architetture hardware 6

15 Capitolo 2 FPGA vs. ASIC Esistono due metodi convenzionalmente utilizzati per l implementazione in hardware degli algoritmi logici. Il primo metodo si basa sull utilizzo di una tecnologia hardwired su misura, per esempio mediante lo sviluppo di un Application Specific Integrated Circuit (ASIC). L ASIC è specificamente sviluppata per eseguire un determinato calcolo ed è particolarmente efficiente. Per efficienza si intende che è possibile realizzare un applicazione molto veloce, oppure che richieda una piccolo spazio su silicio o infine che richieda pochissima energia. Tuttavia non è possibile modificare il circuito dopo la produzione, questo forzerebbe un ridisegnamento del circuito e la sua successiva riproduzione. Il secondo metodo si basa invece sull utilizzo di circuiti programmati via software ed è, per ovvie ragioni, decisamente più flessibile. Cambiando le istruzioni software è possibile cambiare le funzionalità del sistema senza modificare l hardware utilizzato. Il rovescio della medaglia di questo approccio è il prezzo da pagare in termini di prestazioni rispetto ad un analoga implementazione in ASIC. L utilizzo di hardware riconfigurabile si pone a metà strada fra l implementazione hardware e quella software, ottenendo delle potenzialità decisamente maggiori rispetto a quelle software e mantenendo un alto livello di flessibilità rispetto a quella hardware. L hardware riconfigurabile, di cui le Field Programmable Gate Arrays (FPGAs) ne sono un esempio, contengono una matrice di celle elementari la cui funzione è programmabile. Queste celle, anche note col nome di blocchi logici, sono interconnesse attraverso una rete di collegamenti anch essi programmabili. L utilizzo di software di sintesi e di implementazione permette di descrivere il progetto ad alto livello per poi tradurlo a basso livello e poter così programmare l FPGA. La possibilità di riconfigurazione offerta da una FPGA permette di ottenere diversi vantaggi quando è utilizzata in applicazioni di crittografia: Algorithm Agility Questo definizione si riferisce alla possibilità di poter passare 7

16 2 FPGA vs. ASIC da un algoritmo all altro in base alle richieste dell applicazione. Si può osservare che la maggior parte dei moderni protocolli di sicurezza, come l SSL o l IPsec, sono algoritmi che permettono l utilizzo di diverse tipologie di algoritmi di crittografia. L algoritmo di crittografia utilizzato viene negoziato all inizio della sessione e puo essere scelto fra un ampia varietà di algoritmi. Algorithm Upload E utile che il dispositivo possa essere aggiornato con i più recenti algoritmi di crittografia senza doverlo sostituire e quindi di poter disporre di un apparato sempre compatibile con le nuove applicazioni. Da un punto di vista crittografico, la possibilità di aggiornare il dispositivo può rendersi necessaria perchè gli attuali algoritmi possono essere considerati insicuri (e.g. DES), oppure non più a norma (e.g. DES), oppure infine per supportare un nuovo standard (e.g. AES). Si deve tenere in conto inoltre che l aggiornamento di un apparato potrebbe essere impossibile a causa della sua dislocazione, per esempio se è all interno di un satellite artificiale. L utilizzo di un FPGA aggiornata a distanza, magari attraverso una rete di telecomunicazione, è sicuramente preferibile rispetto un ASIC che per aggiornarla sarebbe necessario sostituirla. Algorithm Modification Ci sono applicazioni nelle quali è richiesto modificare in parte lo standard crittografico, per esempio usando S-Boxes (vedi standard AES) o permutazioni proprietarie. Queste modifiche possono essere facilmente fatte se si sta utilizzando un FPGA. Un esempio in cui l algoritmo standard è stato leggermente modificato e nella crittografia delle password in UNIX in cui l algoritmo DES è usato 25 volte in una riga con una mappatura differente per l espansione. E altrettanto interessante poter adattare il codificatore a blocco DES o AES con S-Boxes proprietarie al fine di incrementare la sicurezza. Inoltre in molte occasioni è necessario modificare le primitive o il metodo di operare di uno standard in accordo con l applicazione che ne farà uso. Throughput Un processore general-purpose non è ottimizzato per una veloce esecuzione dell algoritmo, specialmente nel caso di algoritmi di crittografia basati su chiave pubblica e privata. Questo è dovuto all assenza, in questo tipo di dispositivi, di istruzioni adatte all elaborazione aritmetiche in modulo su operandi di grandi dimensioni. L aritmetica modulare include per esempio l elevamento ad esponente per RSA e la moltiplicazione, l elevamento al quadrato, l inversione e l addizione per i sistemi crittografici basati su curve ellittiche. Sebbene sia tipicamente più lenta di un implementazione in ASIC, l implementazione in FPGA ottiene una sostanziale incremento di prestazioni rispetto all implementazione software, soprattutto nelle applicazioni sopracitate. Cost Efficiency Ci sono due fattori di costo da tenere in considerazione quando si

17 analizza l efficienza di costo in un FPGAs: il costo di sviluppo e il costo di ogni singola unità. Il costo di implementazione in FPGA, di un dato algoritmo, è decisamente inferiore rispetto all alternativa ASIC, poiché è facile utilizzare le risorse messe a disposizione da una FPGA ed è possibile testare il risultato senza costi aggiuntivi. Queste caratteristiche rendono estremamente ridotto il time-to-market che oggigiorno è un importante fattore di costo. Tuttavia, per alti volumi di produzione la soluzione basata su ASIC ha senz altro un efficienza di costo maggiore dato il basso costo per unità che si riesce ad avere in fase di produzione. 9

18 2 FPGA vs. ASIC 10

19 Capitolo 3 Metodologia per il design dell hardware Durante la realizzazione di circuiti digitali è fondamentalmente seguire una corretta strategia di progetto che permetta di ridurre la complessità del progetto. Neil Weste ha individuato quattro punti che devono essere seguiti durante lo sviluppo di un circuito digitale: gerarchia, regolarità, modularità e località [33]. In questo capitolo si discuterà delle strategie di progetto che bisogna seguire durante lo sviluppo di un circuito digitale. Organizzare in maniera gerarchica il sistema è un importante strategia per lo sviluppo di complessi circuiti digitali. Per rafforzare la gerarchia è possibile fare delle astrazioni che permettano di maneggiare in maniera semplice le complessità del sistema senza perdersi nei dettagli. La gerarchia si può ottenere suddividendo i moduli hardware in sotto-moduli di dimensioni tali da rendere più semplice lo sviluppo del sistema. La suddivisione del circuito in sotto-moduli corrisponde all approccio del divide et impera utilizzato in ambiente software. Questo aiuta a ridurre la complessità dei sotto-moduli e ad ottenere la possibilità di poterli riutilizzare. La regolarità è una strategia di progetto che ha l obbiettivo di mantenere il numero di sotto-moduli derivanti dalla suddivisione gerarchica entro dei limiti. Una struttura che fa uso di piccolo numero di sotto-moduli, paragonata ad una che ne fa alto uso, garantisce di realizzare una struttura regolare che rende minimo lo sforzo nella gestione dei collegamenti fra i vari moduli (datapath); ottimizzare un singolo blocco migliora l intero datapath. Le standard-cell utilizzate nei ICs sono un esempio di regolarità. La modularità richiede un ben definito interfacciamento fra i sotto-moduli. L interfacciamento è definito senza ambiguità dalle proprietà del blocco che possono riguardare, tra le altre cose, l aspetto elettrico e/o funzionale del blocco stesso. E chiaro che l interfacciamento semplifica l assemblaggio di ampi moduli a partire dall istanza di uno o più sotto-moduli. Un buon esempio di modularità sono le standard-cell che 11

20 3 Metodologia per il design dell hardware obbediscono a rigidi schemi per il loro interfacciamento. La località è una strategia di progetto che nasconde i dettagli dei moduli: le caratteristiche costruttive del blocco dovrebbero rimanere nascoste al suo interno a garanzia dell astrazione delle sue funzioni. Nel caso in cui la località è affrontata dai sotto-moduli, le caratteristiche del blocco possono essere predette a partire dai sotto-moduli. Un esempio di località sono i sotto-moduli con l uscita registrata che permettono di predire la massima frequenza di clock di un blocco partendo dall analisi dei sotto-moduli stessi. Contrariamente i moduli che hanno un cammino combinatorio impedisce questo e viola la strategia di progetto basata sulla località. 3.1 L approccio Top-Down Al fine di sviluppare un complesso sistema digitale è necessario utilizzare una progettazione strutturata che sia capace di determinare il prima possibile i potenziali punti deboli onde evitare inutili sprechi di tempo. Per sistemi di grandi dimensioni questo è possibile solamente adottando un approccio di tipo top-down che suddivide il problema alla ricerca dell hardware ottimale all interno dei vari strati di astrazione. Il più alto livello di astrazione si pone l obbiettivo di definire le funzionalità e alcune condizioni di contorno sotto le quali il circuito deve operare. Il più basso livello, invece, ha lo scopo di individuare l implementazione del circuito su silicio. La progettazione top-down crea l hardware necessario partendo da una descrizione ad alto livello per poi raffinarla attraverso alcuni livelli intermedi di astrazione fino ad ottenere l implementazione fisica. La metodologia top-down con i suoi diversi livelli di astrazione mantiene la complessità di progettazione di ciascun livello entro i propri limiti. Nello sviluppo di un complesso sistema digitale l approccio top-down permette di suddividere il problema in un insieme di problemi di complessità inferiore. Questa suddivisione del problema segue la strategia del divide et impera, che è riconosciuta essere la più efficiente nel risolvere i problemi in campo informatico. I sotto-problemi, derivanti dalla decomposizione del problema generale, possono essere classificati all interno dei livelli di astrazione presentati nella figura 3.1. La figura 3.1 elenca cinque livelli di astrazione che sono comunemente distinti nel campo dello sviluppo di circuiti digitali. Questi cinque livelli di astrazione sono il livello di sistema (system level), il livello algoritmico (algorithmic level), il livello architetturale (architectural level), il livello di registro (register-transfer level) e il livello di circuito (circuit level). Una breve descrizione di questi livelli è data qui di seguito: System Level Il livello di sistema definisce le funzionalità del sistema e le condizioni al contorno sotto le quali il sistema deve operare. Il livello di sistema 12

21 3.1 L approccio Top-Down Abstraction level System Algorithm Architecture Registertransfer Circuit Figure 5 Abstraction levels Functionality, Constraints Algorithm Hierarchical partitioning Cycle accuracy Technology mapping Details added Figura 3.1. Livelli di astrazione è il livello più alto di astrazione e per questo descrive il sistema senza troppi dettagli. Essenzialmente in questo livello vengono descritti il tipo di applicazione e le funzionalità che il circuito deve implementare senza indicare come realizzarle. Algorithmic Level Il livello algoritmico esplora le differenti alternative necessarie a realizzare le funzionalità desiderate dal circuito. È un raffinamento delle indicazioni provenienti dal livello superiore. Molto spesso il modello funzionale del circuito è scritto usando un linguaggio di programmazione che permette di descrivere le funzionalità del circuito in maniera rapida. Architectural Level Il livello architetturale di un circuito definisce il circuito attraverso i suoi moduli e sotto-moduli. Questi moduli servono ad implementare le funzionalità definite nei livelli superiori. Ci sono tipicamente due tipi di approccio che permettono di ricercare la massima efficienza architetturale. Il primo prevede di ricercare l hardware necessario ad implementare il maggior numero di funzioni del modello ad alto livello. Il secondo, invece, cerca di ottenere il massimo parallelismo dell hardware sfruttando il fatto che molti algoritmi possono processare i dati in parallelo. L istanza di più moduli, o sotto moduli, incrementa la capacità computazionale quando questi operano allo stesso tempo. Register-Transfer Level Il livello RTL perfeziona il livello architetturale definendo in maniera precisa la struttura dei moduli e sotto-moduli. Il livello di registro definisce, in poche parole, quali operazioni devono essere svolte in un determinato ciclo di clock, ottenendo così una descrizione accurata a livello di clock. I circuiti digitali sono solitamente sincroni cioè sono dei circuiti in cui tutte le operazioni sono governate da un unico segnale: quello di clock. In questo livello si descrivono i segnali in maniera tale che possano essere direttamente ricondotti a segnali elettrici; ciò significa che la modellizzazione a livello di registro è accurata al bit. 13

22 3 Metodologia per il design dell hardware Circuit Level Il livello di circuito (o gate level) rappresenta l implementazione fisica del circuito. E ottenuta mappando le funzionalità desiderate su di una data tecnologia. Esistono due tipi di tecnologia prevalentemente utilizzate: la prima è basata su dispositivi a logica riconfigurabile mentre la seconda è basata sull implementazione su misura su silicio. La prima opzione prevede tipicamente l utilizzo di FPGA che è un dispositivo prodotto in serie e già disponibile sul mercato. Tuttavia il costo dell FPGA e il suo considerevole consumo energetico ammette il suo utilizzo solo in piccoli lotti di produzione o in fase di prototipazione. L implementazione su misura su silicio è indicata per grandi volumi di produzione e permette di ottimizzare il progetto per alte frequenze di clock o bassi consumi energetici. Lo stato dell arte di questa tecnologia permette di realizzare circuiti digitali, basati sull utilizzo di transistor CMOS, attraverso una progettazione che fa uso di standard-cell. 3.2 Progettazione congiunta FPGA e ASIC Il flusso di progetto di un circuito digitale e molto spesso identico sia per l FPGA che per l ASIC. I programmi di sintesi permettono di tradurre il modello HDL (VHDL o Verilog) scritto a livello di registro in una netlist, utilizzata per configurare l FPGA, o una descrizione a livello di porte logiche (gate-level), utilizzata per lo sviluppo di un ASIC. E quindi possibile ottenere, almeno in parte, un descrizione comune fra le due tecnologia ed ottenere così dal progetto la massima versatilità. 14

23 Capitolo 4 AES - Advanced Encryption Standard 4.1 Introduzione Lo standard di cifratura AES, acronimo di Advanced Encryption Standard, è nato su proposta del National Institute of Standard and Technology (NIST) al fine di sostituire il DES che era stato utilizzato per vent anni e la cui sicurezza risultava ormai praticamente nulla. Tale standard di cifratura doveva esibire caratteristiche di sicurezza superiori al DES, essere applicabile in un ampio spettro di soluzioni hardware e software (il DES era stato pensato principalmente per applicazioni hardware), essere di pubblico dominio e divulgazione e non avere licenza di utilizzo. Sarebbe stato utilizzato da strutture governative statunitensi e, su base volontaria, in organizzazioni private. L algoritmo cifrante doveva essere un cifratore simmetrico a blocchi con chiavi a, 192 e 256 bit e una dimensione del blocco che al minimo doveva essere di bit. Tale iniziativa fu avviata il 2 febbraio del 1997 e fu resa pubblica con un bando di concorso il 12 settembre dello stesso anno. Il 20 agosto 199 il NIST annunciò alla prima conferenza First AES Candidate Conference (AES1) che i candidati erano 15 algoritmi realizzati da gruppi di crittografi provenienti da tutto il mondo. Il NIST sollecitò pubblici commenti sui candidati che furono discussi alla seconda conferenza AES2, avvenuta nel marzo del 199. Il 15 aprile 1999 furono tratte le conclusioni di queste analisi e si creò una lista ristretta di cinque candidati che fu resa pubblica il 9 agosto 1999: MARS sviluppato da IBM, RC6 dei laboratori RSA, Rijdael sviluppato da due ricercatori belgi, Serpent di Ross Anderson, Eli Biham, Lars Knudsen e Twofish sviluppato da Bruce Schneier, John Kelsey, Doug Whiting, David Wagner, Chris Hall e Niels Ferguson. La terza conferenza AES3 tenutasi a New York nell aprile 2000, consentì una pubblica conferenza sui finalisti e il 2 ottobre 15

24 4 AES - Advanced Encryption Standard 2000 fu annunciato che il vincitore era l algoritmo Rijndael. Dopo quest anno il NIST preparò un preliminare del Federal Information Processing Standard (FIPS) per l AES e lo pubblicò nel febbraio del 2001, lasciando tre mesi di attesa in risposta di pubblici commenti. Nell estate del 2001 l AES, e quindi Rijndael, divenne lo standard di cifratura per i nuovi sviluppi. Rijndael (si pronuncia Reign Dahl, Rain Doll, o Rhine Dahl ) è stato progettato dai due ricercatori belgi Vincent Rijmen (Catholic University of Leuven) e Joan Daemen (Proton World International). La denominazione dell algoritmo deriva dalle iniziali del cognome di uno e dalle finali del cognome dell altro. Al fine di consentire approfondite analisi delle prestazioni dall algoritmo furono presentate applicazioni di riferimenti in Java e in C. I quindici algoritmi selezionati come semifinalisti furono: CAST-256 (Entrust Technology), CRYPTON (Future System), DEAL (Richard Outerbridge, Lars Knudssen), DFC (National Center of Scientific Reserch, France), E2 (NTT), FROG (TecApro International), HPC (Rich Schroeppel), LOKI97 (Lawrie Brown, Josef Pieprzyk, Jennifer Seberry), MAEGENTA (Deutsche Telekom), MARS (IBM), RC6 (RSA), Rijndael (Vincent Rijmen, Joan Daemen), Safer+ (Cylink), Serpent (Ross Anderson, Eli Biham, Lars Knudsen), Twofish (Bruce Schneier, John Kelsey, Doug Whiting, David Wagner, Chris Hall, Niels Ferguson). L AES è adatto per piattaforme basate su processori ad bit, su comuni processori a 32 bit ed è appropriato per implementazioni su hardware dedicato. Con l implementazione hardware è possibile realizzare un implementazione in cui il throughput è nell ordine dei Giga-bit. L efficienza dell implementazione e l assenza di licenza di utilizzo ha aperto la strada all utilizzo dell AES per applicazioni come le reti wireless in accordo con lo standard 02.11i e futuri standard come l ISO , IPSec e TLS. Sebbene l AES sia utilizzato in molte e differenti applicazioni, l implementazione hardware dell algoritmo è prevalentemente rivolta all ottimizzazione del throughput. Sono disponibili diverse pubblicazioni che riportano delle implementazioni mature dell algoritmo AES: [7, 19, 25, 26, 29, 31]. La maggior parte di questi report mettono l accento sull ottimizzazione del throughput senza alcuna limitazione delle risolse utilizzate [31]. Solo alcune implementazioni provano a realizzare un utilizzo efficiente delle risorse hardware, con prestazioni al limite, a partire da occupazioni spaziali di silicio e budget di potenza limitati. Molte pubblicazioni sono rivolte all implementazione dell AES su architetture riconfigurabili come le FPGA [7, 26]. Sono state pubblicate solamente poche architetture fatte su misura per l implementazione su silicio [19, 29]. 16

25 4.2 Descrizione dell algoritmo AES 4.2 Descrizione dell algoritmo AES Rijndael è un cifratore a blocchi iterativo con diverse opzioni per la dimensione del blocco dei dati trattati e della chiave. La dimensione del blocco d ingresso coincide con la dimensione del blocco restituito in uscita dopo la cifratura o la decifratura, che in questo contesto viene genericamente indicata come cifratura inversa. Sono disponibili dimensioni della chiave e dei blocchi dati di, 192 e 256 bit. Successivamente sono state proposte altre due dimensioni: 160 e 224 bit. Lo standard AES utilizza un unica dimensione del blocco dati, cioè un blocco da bit (anche se non pregiudica l uso di altri) e tre valori per la chiave (, 192 e 256). In base alla dimensione della chiave si utilizzano le denominazioni indicative AES-, AES-192 e AES-256. Più grande è tale dimensione maggiore è la sicurezza dell algoritmo. La funzione non-lineare complessa utilizzata per cifrare o decifrare viene iterata per un numero di volte, o iterazioni (o round) che è in relazione alla dimensione della chiave: 10 iterazioni per chiavi a bit, 12 iterazioni per chiavi a 192 bit e 14 iterazioni per chiavi a 256 bit. Inizialmente verrà descritto il principio di funzionamento dell algoritmo come specificato nello standard AES [1], ovvero con dimensione del blocco dati fissa, successivamente verranno descritte le differenze quando si esegue l estensione dei questa dimensione. Tra queste si vedrà come il numero delle iterazioni si modifichi anche al variare della dimensione del blocco dati che, come ricordato, nello standard AES resta fisso. Gli ingressi e le uscite dell algoritmo AES (nel relativo standard FIPS PUB 197 la denominazione dell algoritmo passa da Rijndael a AES [1]) sono sequenze di bit, indicate anche come blocchi dati. Simili sequenze, ma con differenti dimensioni, si hanno per i tre tipi di chiave. I bit all interno delle sequenze sono numerati da 0 alla dimensione del blocco, o della chiave, meno uno. Se si introduce un indice i che marca la posizione dei bit all interno della sequenza è possibile avere un campo di variazione 0 i < rispettivamente per i dati e per le chiavi dell AES-, 0 i < 192 per le chiavi dell AES-192 e 0 i < 256 per le chiavi dell AES-256. I bit delle sequenze sono accorpati in byte che risultano essere le unità elementari di elaborazione. Il blocco può quindi essere interpretato come composto da un certo numero di otto bit contigui, ovvero di 16 byte (se l indie n indica la posizione del byte all interno della sequenza, si ha 0 n 15), quello delle chiavi può essere di 16, 24 o 32 byte. Se indichiamo con a 0, a 1, a 2,..., a 15 i byte del blocco d ingresso o d uscita e con bit 0, bit 1, bit 2,..., bit 127 i bit ordinati di queste sequenze dati, la reciproca associazione è: 17

26 4 AES - Advanced Encryption Standard a 0 = (bit 0, bit 1,..., bit 7 ) a 1 = (bit, bit 9,..., bit 15 ) a 15 = (bit 120, bit 121,..., bit 127 ) (4.1) Per le chiavi è possibile estendere la regola utilizzando l indice n che varia in base alla lunghezza della chiave tra 0 e 15, 23 o 31. Per cui vale la regola: a n = (bit n, bit n+1,..., bit n+7 ) (4.2) Da notare che all interno dei byte si usa la convenzione che il bit più a sinistra è quello con indice 7, quello più a destra con indice 0, come riportato nella figura 4.1. Input bit sequence Byte number Bit numbers in byte Figura 4.1. Indicizzazione dei byte all interno delle sequenze I byte sono riordinati in una struttura rettangolare che viene denominata Stato (o State). Tale matrice bidimensionale è composta da quattro righe e quattro colonne di byte, quest ultime indicate con N b, generalizzazione che ci consenterà l estensione a blocchi dati di dimensione superiore. Per questo motivo, ogni un elemento dell Stato, che individua un byte, è etichettato con due indici r e c indicanti le coordinate riga e colonna, ovvero s[r,c] con 0 r < 4 e 0 c < N b, o anche 0 c < 4, in quanto per l AES N b = 4. Le operazioni di cifratura e decifratura avvengono sfruttando lo Stato che è anche l elemento di appoggio delle trasformazioni intermedie insite in questi processi. La prima operazione compiuta dall algoritmo sia in fase di cifratura sia in fase di decifratura consiste nell opportuna associazione dei byte d ingresso alla matrice di Stato. Analogamente l ultima operazione consiste nel ricostruire da questa matrice, e con legge congruente, la sequenza d uscita. Se si indicano con in 0, in 1, in 2,..., in 15 i byte d ingresso ordinati per colonne e con out 0, out 1, out 2,..., out 15 quelli d uscita, le due associazioni sono così rappresentabili: s[r,c] = [r + 4c] per 0 r < 4 e 0 c < N b out[r + 4c] = s[r,c] per 0 r < 4 e 0 c < N b (4.3) Se i byte di ogni colonna si reinterpretano come parole di 4 byte (o 32 bit), lo Stato del sistema è associabile ad un vettore monodimensionale i cui elementi sono: 1

27 4.2 Descrizione dell algoritmo AES input bytes State array output bytes in 0 in 4 in in 12 s 0,0 s 0,1 s 0,2 s 0,3 out 0 out 4 out out 12 in 1 in 5 in 9 in 13 s 1,0 s 1,1 s 1,2 s 1,3 out 1 out 5 out 9 out 13 in 2 in 6 in 10 in 14 s 2,0 s 2,1 s 2,2 s 2,3 out 2 out 6 out 10 out 14 in 3 in 7 in 11 in 15 s 3,0 s 3,1 s 3,2 s 3,3 out 3 out 7 out 11 out 15 Figure 3. State array input and output. Figura 4.2. Rappresentazione della matrici di Stato e associazione con gli ingressi e le uscite c 0 = (s 0,0, s 1,0, s 2,0, s 3,0 ) c 1 = (s 0,1, s 1,1, s 2,1, s 3,1 ) c 2 = (s 0,2, s 1,2, s 2,2, s 3,2 ) c 3 = (s 0,3, s 1,3, s 2,3, s 3,3 ) (4.4) La chiave ha una rappresentazione rettangolare simile allo stato. Le sue colonne, denotate con N k, sono pari alla lunghezza della chiave diviso 32 (ovvero diviso i 4 byte che formano ciascuna colonna). Se si indica con N r il numero delle iterazioni che effettua l algoritmo, le mutue relazioni N k, N b e N r sono desumibili dalla tabella 4.1. AES- AES-192 AES-256 N k 4 6 N b N r Tabella 4.1. Relazione tra il numero di colonne N k della matrice della chiave, il numero di colonne N b della matrice di Stato e il numero N r di iterazioni. Al fine di applicare in ogni iterazione una diversa composizione della chiave, questa viene inizialmente espansa in una struttura rettangolare avente quattro righe di byte e un numero di colonne pari al prodotto del numero di iterazioni previste più una, il tutto moltiplicato per il numero di colonne dello Stato, che nell AES è pari a quattro. In altre parole il numero di sottochiavi, o Roundkey, è pari al numero di iterazioni più una, ciascuna sottochiave sarà di N b colonne, ovvero bit, e il numero di bit totali coinvolti nel processo di espansione di espansione della chiave è pari alla lunghezza del blocco dati moltiplicato il numero di iterazioni più uno (per il blocco di bit e una chiave di medesima dimensione, sono stabilite 10 iterazioni e quindi occorrono 4 (10+1) = 44 colonne, o parole, e di conseguenza = 140 bit). 19

28 4 AES - Advanced Encryption Standard In termini formali le parole a 4 byte componenti il vettore monodimensionale risultante saranno N b (N r + 1) e verranno indicate con: w[i] con 0 i < N b (N r + 1) (4.5) Le operazioni di cifratura iniziano con la creazione delle matrici di Stato e con l espansione della chiave nell opportuno numero di sottochiavi. Quindi viene eseguita un addizione modulo 2 (mediante XOR bit a bit) tra gli elementi dello Stato e quelli della prima sottochiave che, a loro volta, coincidono con le prime quattro colonne della matrice rappresentativa della chiave. A questo punto viene applicata allo Stato la funzione cifrante per un certo numero di iterazioni, ad eccezione dell ultima, dove si utilizza una funzione cifrante modificata. In ultima istanza prende forma l uscita a partire dallo Stato. La funzione cifrante, parametrizzata dalla sottochiave, è composta da quattro differenti trasformazioni operanti sui singoli byte dello Stato. Tali trasformazioni, individualmente invertibili, sono: una sostituzione non-lineare di byte mediante S-box, o substitution table (SubBytes); uno shift circolare di alcune righe della matrice di Stato con differenti offset (ShiftRows); un operazione di miscelazione dei dati all interno delle colonne di Stato (MixColumns); un aggiunta della sottochiave d iterazione (AddRoundKey). Nell ultima, dove si utilizza tale funzione cifrante modificata, dalle quattro trasformazioni ne viene esclusa una, che è quella responsabile della miscelazione delle colonne. Utilizzando una notazione che fa uso di uno pseudocodice è possibile indicare le operazioni di cifratura nel seguente modo: Cipher(byte in[4*nb], byte out[4*nb], word w[nb*(nr+1)]) begin byte state[4,nb] state = in AddRoundKey(state, w[0, Nb-1]) for round = 1 step 1 to Nr{1 SubBytes(state) ShiftRows(state) MixColumns(state) AddRoundKey(state, w[round*nb, (round+1)*nb-1]) end for SubBytes(state) ShiftRows(state) 20

29 4.2 Descrizione dell algoritmo AES AddRoundKey(state, w[nr*nb, (Nr+1)*Nb-1]) end out = state Nell ultima iterazione MixColumns non viene utilizzata. Questo non pregiudica la sicurezza del codice ma consente di realizzare una struttura cifrante inversa più simile a quella diretta. Tale tecnica è paragonabile alla rimozione dello swap nell ultima iterazione del DES. Nell operazione di decifratura, indicata anche come cifratura inversa, si utilizzano le inverse delle quattro trasformazioni che compongono la funzione cifrante, se ne inverte l ordine di esecuzione all interno della funzione e si esegue prima l iterazione finale, quindi le altre ed infine l addizione con la prima sottochiave. Anche in questo caso è utile una descrizione mediante pseudocodice: InvCipher(byte in[4*nb], byte out[4*nb], word w[nb*(nr+1)]) begin byte state[4,nb] state = in AddRoundKey(state, w[nr*nb, (Nr+1)*Nb-1]) for round = Nr-1 step -1 downto 1 InvShiftRows(state) InvSubBytes(state) AddRoundKey(state, w[round*nb, (round+1)*nb-1]) InvMixColumns(state) end for InvShiftRows(state) InvSubBytes(state) AddRoundKey(state, w[0, Nb-1]) end out = state Si noti che la sequenza delle trasformazioni inverse differisce da quelle che caratterizza la cifratura ma sostanzialmente il contenuto delle sottochiavi resta invariato (non l ordine). Allo scopo di pervenire ad una semplificazione realizzativa è possibile dimostrare che, sfruttando le proprietà delle singole trasformazioni, l inversa della 21

30 4 AES - Advanced Encryption Standard cifratura può essere realizzata con la stessa sequenza delle trasformazioni presenti nella cifratura, pur se ricorrendo alle rispettive inverse e ad un diverso contenuto delle sottochiavi. In questo caso si parla di cifratura inversa equivalente. Nella progettazione dell algoritmo la scelta delle trasformazioni, e la conseguente ottimizzazione delle relative prestazioni, è stata principalmente focalizzata sull aspetto cifrante. Ne consegue che le due funzioni MixColumns e InvMixColumns non esibiscono la stessa complessità computazionale. La prima viene realizzata in maniera più agevole dell inversa. Questa asimmetria di comportamento è dovuta al fatto che le prestazioni di cifratura inversa sono ritenute meno importanti di quelle di cifratura diretta. Secondo i progettisti di Rijndael le più comuni applicazioni della cifratura a blocchi si hanno in modalità CFB e OFB o nel calcolo del checksum crittografico (MAC). Questi modi di funzionamento non fanno affatto uso della cifratura inversa ma sfruttano la modalità di esecuzione cifrante anche per la decifratura. 4.3 Analisi dettagliata dell algoritmo Rijndael Nell AES la lunghezza del blocco dati d ingresso, dello Stato e del blocco dati d uscita, misurata in multipli di 32 bit, è 4. L algoritmo Rijndael consente maggiori flessibilità. Possibili valori sono 4, 6 e e opzionalmente 5 e 7. La relazione generale tra il numero delle iterazioni (N r ), lunghezza delle chiavi (N k ) e la lunghezza dei blocchi dati (N b ), è raffigurata nella tabella 4.2, dove chiavi e dati sono espressi in multipli di 32 bit. Le operazioni che avvengono all interno delle trasformazioni agiscono utilizzando il byte come unità elementare. Riconsiderando la definizione di Stato, le relative colonne, formate da quattro byte, sono esprimibili mediante la seguente rappresentazione polinomiale: N r = max(n k,n b ) + 6 N b = 4 N b = 6 N b = N k = N k = N k = Tabella 4.2. Numero di iterazioni N r dell algoritmo Rijndael in funzione di N b e N k. c 0 (x) = s 0,0 x 3 + s 1,0 x 2 + s 2,0 x + s 3,0 c 1 (x) = s 0,1 x 3 + s 1,1 x 2 + s 2,1 x + s 3,1 c 2 (x) = s 0,2 x 3 + s 1,2 x 2 (4.6) + s 2,2 x + s 3,2 c 3 (x) = s 0,3 x 3 + s 1,3 x 2 + s 2,3 x + s 3,3 22

31 4.3 Analisi dettagliata dell algoritmo Rijndael Le operazioni su questi polinomi possono essere di svariato tipo. La moltiplicazione tra due polinomi, ad esempio, restituisce un polinomio di grado 6. Al fine di ottenere una ridotta complessità implementativa è opportuno considerare i coefficienti dei polinomi come appartenenti ad un campo finito. In virtù di tale requisito si ricorre alla teoria dei campi finiti di Galois e si ipotizza che i coefficienti polinomiali appartengono al campo finito GF(2 ) Il campo GF(2 ) In un campo finito GF(2 ) i suoi elementi, i byte, possono essere sommati o moltiplicati, ma queste operazioni sono differenti da quelle definite nel tradizionale campo numerico. Un byte, composto da una generica sequenza di bit (b 7, b 6, b 5, b 4, b 3, b 2, b 1, b 0 ), può essere considerato come un polinomio di grado 7 (polinomio binario) i cui coefficienti, definiti nell insieme dei valori {0, 1}, sono proprio i valori dei bit: b(x) = b 7 x 7 + b 6 x 6 + b 5 x 5 + b 4 x 4 + b 3 x 3 + b 2 x 2 + b 1 x + b 0 (4.7) Nel campo GF(2 ) tra due polinomi è definibile l operazione di somma, indicata con e pari all operazione di XOR tra i coefficienti di medesimo grado. La definizione dell operazione di moltiplicazione fa uso del polinomio irriducibile m(x) = x + x 4 + x 3 + x + 1 che, in esadecimale, vale {01}{1b} (un polinomio si dice irriducibile se, oltre a se stesso ed all unità, non ha divisori). Tale operazione, indicata con, avviene come moltiplicazione polinomiale e successiva riduzione in modulo per m(x). In pratica si calcola il prodotto di due polinomi del tipo b(x), se ne effettua la divisione per il polinomio irriducibile, e se considera il resto come risultato. Lo scopo di tale operazione è quello di ottenere risultati ancora esprimibili con la rappresentazione che fa uso di un solo byte, ovvero con polinomi di grado inferiore a. Questa moltiplicazione è associativa ed ha come elemento neutro il byte {01}. Per ogni polinomio b(x) è possibile determinare l inverso. A tale scopo si utilizza l algoritmo esteso di Euclide. Tale algoritmo consente di trovare il massimo comun divisore tra due polinomi attraverso la tecnica delle divisioni successive. Per ogni polinomio binario b(x) di grado minore di, l algoritmo di Euclide può essere utilizzato per calcolare i polinomi a(x) e c(x) tali che: b(x)a(x) + m(x)c(x) = 1 (4.) Applicando quest algoritmo ai polinomi m(x) e b(x) si ottiene: e quindi: a(x) b(x) mod m(x) = 1 (4.9) 23

32 4 AES - Advanced Encryption Standard b 1 (x) = a(x) mod m(x) (4.10) In conclusione il campo finito GF(2 ) è definito dall insieme dei 256 possibili valori che possono assumere i coefficienti polinomiali binari considerati complessivamente come un byte (tutte le combinazioni ottenibili da un byte) e su cui sono definite le due operazioni di addizione ( ) e di moltiplicazione ( ) Moltiplicazione per x nel campo GF(2 ) Riprendendo in considerazione il polinomio b(x), il risultato della moltiplicazione per la variabile x fornisce un polinomio di grado superiore: b(x) x = b 7 x + b 6 x 7 + b 5 x 6 + b 4 x 5 + b 3 x 4 + b 2 x 3 + b 1 x 3 + b 0 x (4.11) La moltiplicazione b(x) x si completa riducendo in modulo m(x) il polinomio risultante dalla tradizionale moltiplicazione polinomiale. Se b 7 = 0 il risultato è già in forma ridotta. Se b 7 = 1 la riduzione è compiuta sottraendo il risultato al polinomio m(x) (in virtù della definizione di XOR, la somma di polinomi in GF(2 ) è identica alla sottrazione e quindi basta eseguire l XOR bit a bit). Per cui nel campo GF(2 ) la moltiplicazione di un byte per x (che in notazione esadecimale è rappresentato con il valore {02}) si ottiene con uno shift a sinistra dei bit del byte e conseguente XOR bit a bit con la costante {1b}. La ripetuta applicazione di questa tecnica consente di realizzare con semplicità moltiplicazioni per potenze di x di grado superiore Polinomi con coefficienti nel campo GF(2 ) È possibile definire dei polinomi che hanno ciascun coefficiente appartenente al campo finito GF(2 ). I byte delle colonne della matrice di Stato possono essere interpretati come coefficienti di polinomi di quattro termini quindi di terzo grado. Dati due polinomi di questo tipo, ad esempio a(x) = a 3 x 3 +b 2 x 2 +b 1 x+b 0, dove in questo caso i coefficienti a 3, a 2, a 1, a 0 e b 3, b 2, b 1, b 0, sono dei byte, l operazione di somma polinomiale si effettua sommando i corrispondenti coefficienti (con un XOR bit a bit). Se tra i polinomi a(x) e b(x) si effettuasse la classica moltiplicazione polinomiale si otterrebbe un polinomio di grado 6, non più rappresentabile come vettore di quattro byte. Per cui si definisce una nuova operazione, denominata prodotto modulare ed indicata con, in cui il risultato del prodotto polinomiale viene ridotto ad un polinomio di grado inferiore a 4, mediante divisione con il polinomio irriducibile x

33 4.3 Analisi dettagliata dell algoritmo Rijndael Il risultato del prodotto modulare tra a(x) e b(x) ed indicato con il polinomio: è pari a: d(x) = a(x) b(x) = d 3 x 3 + d 2 x 2 + d 1 x + d 0 (4.12) d 0 = a 0 b 0 + a 3 b 1 + a 2 b 2 + a 1 b 3 d 1 = a 1 b 0 + a 0 b 1 + a 3 b 2 + a 2 b 3 (4.13) d 2 = a 2 b 0 + a 1 b 1 + a 0 b 2 + a 3 b 3 d 3 = a 3 b 0 + a 2 b 1 + a 1 b 2 + a 0 b 3 Quando uno dei due, ad esempio a(x), è un polinomio fisso, la moltiplicazione modulare può essere espressa nella seguente forma matriciale: d 0 d 1 d 2 d 3 = a 0 a 3 a 2 a 1 a 1 a 0 a 3 a 2 a 2 a 1 a 0 a 3 a 3 a 2 a 1 a 0 b 0 b 1 b 2 b 3 (4.14) In virtù del fatto che x è un polinomio irriducibile in GF(2 ), la moltiplicazione per un polinomio fisso non è sempre invertibile. Lo diviene se si utilizzano particolari polinomi. Uno di questi è il seguente: dotato dell inverso: a(x) = {03}x 3 + {01}x 2 + {01}x + {02} (4.15) a 1 (x) = {0b}x 3 + {0d}x 2 + {09}x + {0e} (4.16) L uso delle parentesi per i coefficienti individua una notazione esadecimale. Il prodotto modulare x b(x) è equivalente al prodotto del vettore b(x) con la precedente matrice che ha negli elementi individuati da a 1 il valore {01} ed in tutti gli altri il valore {00}. Tale operazione equivale ad una permutazione ciclica dei byte all interno del vettore passando da [b 0, b 1, b 2, b 3 ] a [b 3, b 0, b 1, b 2 ] o, in notazione polinomiale b 2 x 3 + b 1 x 2 + b 0 x + b La funzione cifrante La funzione cifrante coinvolta nel processo iterativo agisce ripetutamente sulla matrice di Stato e si compone delle seguenti quattro trasformazioni: SubBytes, ShiftRows, MixColumns, AddRoundKey. Tra queste, MixColumns non viene utilizzata nell ultima iterazione. La trasformazione SubBytes è una sostituzione non lineare operata a livello dei singoli byte dello Stato che fa uso della tabella di sostituzione o S-box di figura

34 4 AES - Advanced Encryption Standard Ciascun byte dello stato viene utilizzato come indirizzo della tabella. Da questa, e per ciascun byte dello Stato, si ottengono i valori di sostituzione che prenderanno il posto dei byte che hanno operato all indirizzamento. Ad esempio se un byte di Stato vale in esadecimale {3e}, il nibble rappresentativo dei primi 4 bit (oppure la prima cifra esadecimale), fornisce l indirizzo di riga all interno dell S-box, il secondo quello di colonna. Per cui il valore della singola trasformazione è individuato dalla quarta riga, o riga di indice 3, e quindicesima colonna, o colonna di indice e, e vale {b2}. a value of {ed}. x y a b c d e f c 77 7b f2 6b 6f c b fe d7 ab 76 1 ca 2 c9 7d fa f0 ad d4 a2 af 9c a4 72 c0 2 b7 fd f f7 cc 34 a5 e5 f1 71 d c7 23 c a e2 eb 27 b c 1a 1b 6e 5a a0 52 3b d6 b3 29 e3 2f d1 00 ed 20 fc b1 5b 6a cb be 39 4a 4c 5 cf 6 d0 ef aa fb 43 4d f9 02 7f 50 3c 9f a 7 51 a3 40 f 92 9d 3 f5 bc b6 da ff f3 d2 cd 0c 13 ec 5f c4 a7 7e 3d 64 5d f dc 22 2a ee b 14 de 5e 0b db a e0 32 3a 0a c c2 d3 ac e4 79 b e7 c 37 6d d d5 4e a9 6c 56 f4 ea 65 7a ae 0 c ba e 1c a6 b4 c6 e dd 74 1f 4b bd b a d 70 3e b f6 0e b9 6 c1 1d 9e e e1 f d9 e 94 9b 1e 7 e9 ce 55 2 df f c a1 9 0d bf e d 0f b0 54 bb 16 Figure 7. S-box: substitution values for the byte xy (in hexadecimal format). Figura 4.3. Tabella di sostituzione (S-box) in formato esadecimale Nella rappresentazione grafica (figura 4.4) si utilizza la convenzione di indicare con un apice gli elementi dello Stato che sono stati elaborati dalla trasformazione: s r,c s r,c. SubBytes() s0,0 s0, 1 s0, 2 s 0, 3 S-Box ' s 0,0 ' s 0,1 ' s 0,2 ' s 0,3 s1,0 s1, 1 s1, 2 s 1, 3 s r, c s2,0 s2, 1 s2, 2 s 2, 3 ' s 1,0 ' s 2,0 ' ' s 1,1 ' s s 1,2 r,c ' ' s 2,1 s 2,2 ' s 1,3 ' s 2,3 s3,0 s3, 1 s3, 2 s 3, 3 ' s 3,0 ' s 3,1 ' s 3,2 ' s 3,3 SubBytes() Figura 4.4. Trasformazione SubBytes per N b = 4. La successiva trasformazione è la ShiftRows che, a differenza delle altre trasformazioni, è l unica a dipendere dalla lunghezza del blocco. Essa esegue uno shift 26

35 4.3 Analisi dettagliata dell algoritmo Rijndael circolare verso sinistra degli elementi della seconda, terza e quarta riga di opportune quantità, mentre la prima riga resta inalterata. L ammontare dello shift per la seconda riga è di un byte, per la terza è di due (per blocchi di 256 bit è di 3 byte), per l ultima è di 3 byte (4 per N b = 7 e N b = ). ShiftRows() sr,0 sr, 1 sr, 2 s r, 3 ' s r,0 ' s r,1 ' s r,2 ' s r,3 S S s0,0 s0, 1 s0, 2 s0, 3 s0, 0 s0, 1 s0, 2 s 0, 3 s1,0 s1, 1 s1, 2 s1, 3 s1, 1 s1, 2 s1, 3 s 1, 0 s2,0 s2, 1 s2, 2 s2, 3 s2, 2 s2, 3 s2, 0 s 2, 1 s3,0 s3, 1 s3, 2 s3, 3 s3, 3 s3, 0 s3, 1 s 3, 2 Figure. ShiftRows() cyclically shifts the last three rows in the State. Figura 4.5. Trasformazione ShiftRows per N b = 4. La trasformazione MixColumns opera sulla matrice di Stato, colonna per colonna, considerandole ciascuna come polinomio di quattro termini definito nel campo finito GF(2 ). Ciascuno di tali polinomi viene moltiplicato per un polinomio fisso c(x) = {03}x 3 +{01}x 2 +{01}x+{02} e ridotto in modulo mediante il polinomio irriducibile x Tali moltiplicazioni modulari originano la nuova matrice di Stato indicata con: s (x) = c(x) s(x) (4.17) e meglio rappresentata con la seguente notazione matriciale: s 0,c s 1,c s 2,c s 3,c = s 0,c s 1,c s 2,c s 3,c per 0 c < N b (4.1) In definitiva, ciascuno dei quattro byte di ogni colonna è sostituito dal risultato delle seguenti operazioni: s 0,c = ({02} s 0,c ) ({03} s 1,c ) s 2,c s 3,c s 1,c = s 0,c ({02} s 1,c ) ({03} s 2,c ) s 3,c s 2,c = s 0,c s 1,c ({02} s 2,c ) ({03} s 3,c ) s 3,c = ({03} s 0,c ) s 1,c s 2,c ({02} s 3,c ) (4.19) 27

36 4 AES - Advanced Encryption Standard MixColumns() MixColumns() s s0,0 0,c 0, 1 s0, 2 s 0, 3 s s1,0 1,c 1, 1 s1, 2 s 1, 3 s s 2,0 2 2,,c 1 s2, 2 s 2, 3 ' s 0,0 ' s 1,0 ' s 2,0 ' s' 0c, 0,1 ' s' 1c, 1,1 ' ' s 2,1 2c, ' s 0,2 ' s 1,2 ' s 2,2 ' s 0,3 ' s 1,3 ' s 2,3 s s 3,0 3 3,,c 1 s3, 2 s 3, 3 ' s 3,0 ' ' s 3,1 3c, ' s 3,2 ' s 3,3 Figure 9. MixColumns() operates on the State column-by-column. Figura 4.6. Trasformazione MixColumns per N b = 4. L ultima trasformazione della funzione cifrante è la AddRoundKey in cui avviene la somma tra lo stato e la sottochiave di iterazione. Tale operazione e una XOR bit a bit dei byte rappresentativi dello Stato con i byte di una parte della chiave espansa. Il numero di vettori colonna coinvolti sarà N b. In virtù della notazione precedentemente illustrata in cui le colonne della sottochiave sono indicate con w[i] è possibile scrivere: [s 0,c s 1,c s 2,c s 3,c] = [s 0,c s 1,c s 2,c s 3,c ] w[round N b + c] per 0 c < N b (4.20) in cui round è un valore compreso nell intervallo 0 round < N r. Viene utilizzato round = 0 nella prima applicazione di questa trasformazione che avviene prima di iniziare le iterazioni della funzione cifrante. s 0,c s0,0 s0, 1 s0, 2 s 0, 3 s 1,c s1,0 s1, 1 s1, 2 s 1, 3 s2,0 ss 2, 1 2,c s2, 2 s 2, 3 w l+c wl wl + 1 wl + 2 w l + 3 l = round* Nb ' s 0,0 ' s 1,0 ' s 2,0 ' s 0c, ' ' s 0,1 s ' 0,2 s ' 1c, ' s 1,1 s 1,2 ' ' ' ss 2c, 2,1 s 2,2 ' s 0,3 ' s 1,3 ' s 2,3 s3,0 s3, s 1 s3, 2 s 3,c 3, 3 ' s 3,0 ' ' ' s 3,1 s 3c, s 3,2 ' s 3,3 Figura 4.7. Trasformazione AddRoundKey per N b = Schedulazione della chiave Le sottochiavi d iterazione sono derivate dalla chiave di ingresso mediante la procedura di schedulazione della chiave che si compone di un processo di espansione 2

37 4.3 Analisi dettagliata dell algoritmo Rijndael della chiave e di una conseguente selezione secondo la quale iterazione per iterazione, vengono fornite alla funzione cifrante, e nell ordine opportuno, le sottochiavi. L espansione della chiave genera, a partire dalla chiave di cifratura (denotata con Key), un totale di N b (N r + 1) parole a 32 bit che vengono indicate come un unico vettore monodimensionale denotato con w[i] con indice definito nel campo di valori 0 i < N b (N r + 1), oppure in maniera più intuitiva con una serie di N r + 1 matrici 4 N b indicate convenzionalmente RoundKey(r) per 0 r < N r. Inizialmente il vettore w[i] è riempito nelle sue prime N k posizioni dalla chiave di cifratura. Ogni successiva parola del vettore, e per tutto il restante campo di valori, è ottenuta come XOR tra la precedente parola, w[i 1], e la parola di N k posizioni prima, w[i N k ]. Tuttavia, sulle parole che sono in posizione multipla rispetto al numero indicante la dimensione N k e prima dell XOR, viene applicata una trasformazione. Tale trasformazione si differenzia se la chiave di ingresso è minore di 224 bit o maggiore (N b 6 oppure N b > 6). Utilizzando una notazione che fa uso di uno pseudocodice è possibile indicare le operazioni di espansione della chiave nel seguente modo: KeyExpansion(byte key[4*nk], word w[nb*(nr+1)], Nk) begin word temp end i = 0 while (i < Nk) w[i] = word(key[4*i], key[4*i+1], key[4*i+2], key[4*i+3]) i = i+1 end while i = Nk while (i < Nb * (Nr+1)] temp = w[i-1] if (i mod Nk = 0) temp = SubWord(RotWord(temp)) xor Rcon[i/Nk] else if (Nk > 6 and i mod Nk = 4) temp = SubWord(temp) end if w[i] = w[i-nk] xor temp i = i + 1 end while Nel primo caso si applica ai byte che compongono la parola corrente w[i] una 29

38 4 AES - Advanced Encryption Standard permutazione ciclica, definita RotWord (se la parola in ingresso è [a 0 a 1 a 2 a 3 ] l uscita diventa [a 1 a 2 a 3 a 0 ]). Tale trasformazione coincide con il prodotto modulare per x definito in precedenza. Quindi a ciascun byte del vettore viene applicata una sostituzione che fa uso della stessa tabella della trasformazione SubBytes. Infine, il risultato di queste due operazioni è posto in XOR con un vettore costante, indicato con Rcoin[i] e i cui valori, espressi in notazione esadecimale, sono rappresentati dal vettore [RC[i] {00} {00} {00}]. Le componenti di tale vettore sono indipendenti da N k e sono definite come elementi nel campo GF(2 ) con un valore x i 1, con i 0. Si noti che RC[1] = x 0 = 1, RC[2] = x 1 = {02} e che in generale è possibile scrivere RC[i] = x i 1 = x RC[i 1]. Nel secondo caso (N b > 6) alla parola corrente di w[i], il cui indice modulo N k ha come resto della divisione 4 (in altri termini quando i 4 è un multiplo di N k ), e prima dell XOR con la costante Rcoin[i], si applica solo la trasformazione SubWord escludendo la RotWord La funzione cifrante inversa La funzione cifrante può essere invertita utilizzando le inverse delle trasformazioni componenti: InvSubBytes, InvShiftRows e InvMixColumns. AddRoundKey resta la stessa in virtù dell operazione XOR. InvShiftRows è l inversa della trasformazione ShiftRows. La prima riga non è shiftata. I byte delle ultime tre righe sono shiftati ciclicamente, ciascuna riga del medesimo numero di byte usato in cifratura ma nella direzione contraria. InvShiftRows() sr,0 sr, 1 sr, 2 s r, 3 ' s r,0 ' s r,1 ' s r,2 ' s r,3 S S s0,0 s0, 1 s0, 2 s0, 3 s0, 0 s0, 1 s0, 2 s 0, 3 s1,0 s1, 1 s1, 2 s1, 3 s1, 3 s1, 0 s1, 1 s 1, 2 s2,0 s2, 1 s2, 2 s2, 3 s2, 2 s2, 3 s2, 0 s 2, 1 s3,0 s3, 1 s3, 2 s3, 3 s3, 1 s3, 2 s3, 3 s 3, 0 Figure 13. InvShiftRows()cyclically shifts the last three rows in the State. Figura 4.. Trasformazione InvShiftRows per N b = 4. InvSubBytes è l inversa della trasformazione SubBytes. Si esegue utilizzando come nuova tabella di sostituzione l inversa della S-box definita in fase di cifratura. 30

39 4.3 Analisi dettagliata dell algoritmo Rijndael The inverse S-box used in the InvSubBytes() transformation is presented in Fig. 14: x y a b c d e f a d a5 3 bf 40 a3 9e 1 f3 d7 fb 1 7c e b 2f ff 7 34 e c4 de e9 cb b a6 c2 23 3d ee 4c 95 0b 42 fa c3 4e 3 0 2e a d9 24 b2 76 5b a2 49 6d b d f f d4 a4 5c cc 5d 65 b c fd ed b9 da 5e a7 d 9d d ab 00 c bc d3 0a f7 e b b d0 2c 1e f ca 3f 0f 02 c1 af bd a 6b 3a f 67 dc ea 97 f2 cf ce f0 b4 e ac e7 ad 35 5 e2 f9 37 e 1c 75 df 6e a 47 f1 1a 71 1d 29 c5 9 6f b7 62 0e aa 1 be 1b b fc 56 3e 4b c6 d a db c0 fe 7 cd 5a f4 c 1f dd a c7 31 b ec 5f d f a9 19 b5 4a 0d 2d e5 7a 9f 93 c9 9c ef e a0 e0 3b 4d ae 2a f5 b0 c eb bb 3c f 17 2b 04 7e ba 77 d6 26 e c 7d Figure 14. Inverse S-box: substitution values for the byte xy (in Figura 4.9. Tabella di sostituzione inversa (S-box) in formato esadecimale InvMixColumns è l inversa della funzione MixColumn. Opera sulle singole colonne dello Stato considerandole ciascuna come un polinomio di quattro termini definito nel campo GF(2 ). Ciascuno di tali polinomi viene moltiplicato per un polinomio fisso c 1 (x) = {0b}x 3 +{0d}x 2 +{09}x+{0e}, inverso di quello utilizzato in cifratura c(x), e ridotto in modulo mediante il polinomio irriducibile x Tali moltiplicazioni modulari originano la nuova matrice di Stato indicata con: s (x) = c 1 (x) s(x) (4.21) e meglio rappresentata con la seguente notazione matriciale: s 0,c s 1,c s 2,c s 3,c = 0e 0b 0d e 0b 0d 0d 09 0e 0b 0b 0d 09 0e s 0,c s 1,c s 2,c s 3,c per 0 c < N b (4.22) In altri termini, ciascuno dei quattro byte di ogni colonna è sostituito dal risultato delle seguenti operazioni: s 0,c = ({0e} s 0,c ) ({0b} s 1,c ) ({0d} s 2,c ) ({09} s 3,c ) s 1,c = ({09} s 0,c ) ({0e} s 1,c ) ({0b} s 2,c ) ({0d} s 3,c ) s 2,c = ({0d} s 0,c ) ({09} s 1,c ) ({0e} s 2,c ) ({0b} s 3,c ) s 3,c = ({0b} s 0,c ) ({0d} s 1,c ) ({09} s 2,c ) ({0e} s 3,c ) (4.23) 31

40 4 AES - Advanced Encryption Standard La cifratura inversa equivalente Nella cifratura inversa, analizzata in precedenza, la sequenza delle trasformazioni differisce da quella cifratura, mentre la schedulazione della chiave rimane invariata anche se l ordine di utilizzo viene invertito. Sfruttando alcune proprietà algebriche delle trasformazioni e delle rispettive inverse è possibile creare una struttura cifrante inversa uguale a quella cifrante, con le singole trasformazioni sostituite dalla inverse e con un cambio della procedura di schedulazione della chiave. Le trasformazioni SubBytes e ShiftRows sono commutative, nel senso che l ordine di esecuzione è ininfluente. Una cosa analoga avviene per le inverse. Essendo InvMixColumns una trasformazione lineare (una trasformazione lineare f gode della proprietà f(x + y) = f(x) + f(y)) questo implica che: InvMixColumns(State XOR RoundKey) = InvMixColumns(State) XOR InvMixColumns(RoundKey) (4.24) Pertanto può essere scambiato l ordine di esecuzione di AddRoundKey e InvMixColumns. Tuttavia occorre modificare la schedulazione della chiave prevedendo l inclusione della funzione InvMixColumns,in una funzione che viene indicata con InvRoundKey, per le iterazioni che vanno da 1 a N r 1, senza modificare le prima e l ultima. Anche in questo caso è utile una descrizione mediante pseudocodice: EqInvCipher(byte in[4*nb], byte out[4*nb], word dw[nb*(nr+1)]) begin byte state[4,nb] state = in AddRoundKey(state, dw[nr*nb, (Nr+1)*Nb-1]) for round = Nr-1 step -1 downto 1 InvSubBytes(state) InvShiftRows(state) InvMixColumns(state) AddRoundKey(state, dw[round*nb, (round+1)*nb-1]) end for InvSubBytes(state) InvShiftRows(state) AddRoundKey(state, dw[0, Nb-1]) out = state 32

41 4.3 Analisi dettagliata dell algoritmo Rijndael end /* For the Equivalent Inverse Cipher, the following pseudo code is added at the end of the Key Expansion routine. */ for i = 0 step 1 to (Nr+1)*Nb-1 dw[i] = w[i] end for for round = 1 step 1 to Nr-1 InvMixColumns(dw[round*Nb, (round+1)*nb-1]) // note change of type end for /* Note that, since InvMixColumns operates on a two-dimensional array of bytes while the Round Keys are held in an array of words, the call to InvMixColumns in this code sequence involves a change of type (i.e. the input to InvMixColumns() is normally the State array, which is considered to be a two-dimensional array of bytes, whereas the input here is a Round Key computed as a one-dimensional array of words). */ 4.3. Criteri di progetto I criteri di progetto che sono stati presi in considerazione nella creazione dell algoritmo Rijndael sono essenzialmente tre: modularità, velocità e compattezza del codice per un ampio spettro di piattaforme di calcolo, resistenza contro tutti i tipi di attacchi noti. In Rijndael l elaborazione dei byte dello Stato è di tipo uniforme, ovvero ciascun elemento della matrice è trattato in maniera simile. La struttura dell algoritmo non è quindi di tipo Feistel, in cui parte dei bit all interno di un iterazione sono trasposti senza essere elaborati mentre altri sono sottoposti all azione della funzione cifrante. La funzione cifrante da iterare viene identificata da tre distinte trasformazioni invertibili e uniformi chiamate layer. La scelta di differenti layer discende dall applicazione di un metodo, utilizzato per resistere alla crittoanalisi lineare e differenziale, denominato Wide Trail Strategy. In questo metodo ogni layer ha una propria funzione. Il primo layer, denominato layer non-lineare e associabile alla funzione SubBytes, consente di ottenere caratteristiche di non linearità e quindi di confusione, il secondo layer, denominato layer di miscelazione lineare e associabile alle trasformazioni ShiftRows e MixColumns, garantisce alta diffusione se applicato su più iterazioni, il terzo layer, denominato layer di somma della chiave e associabile alla trasformazione AddRoundKey, consente di parametrizzare il testo cifrato con la 33

42 4 AES - Advanced Encryption Standard chiave. Tale layer è utilizzato anche al di fuori della funzione cifrante. Infatti prima di iniziare le iterazioni viene compiuta un addizione con la prima sottochiave. L aggiunta di tale addizione impedisce la rimozione in sede di crittoanalisi degli altri layer che non dipendono dalla chiave e che risulterebbero quindi ininfluenti ai fini della sicurezza complessiva (si noti come nel DES le permutazioni iniziali e finali non hanno valore crittografico). La trasformazione SubBytes, che interpreta il layer non lineare, è realizzata mediante una tabella di sostituzione, o S-box, che è invertibile e costruita componendo due trasformazioni. Nella prima di queste si genera l inverso moltiplicativo nel campo GF(2 ) di ciascun byte d ingresso (come caso particolare {00} è mappato in se stesso). La successiva trasformazione applicata è una trasformazione affine sul campo GF(2) 1. Il campo GF(2) è un campo finito applicato su elementi di entità pari a bit. La trasformazione utilizzata assume la seguente espressione: b i = b i b (i+4)mod b (i+5)mod b (i+6)mod b (i+7)mod c i per 0 i < (4.25) dove b i è i-esimo bit del byte sottoposto alla trasformazione e c i è iesimo bit di un byte che ha valore costante e pari a {63} in dotazione esadecimale. La trasformazione affine utilizzata può alternativamente essere rappresentata nella seguente forma matriciale: b 0 b 1 b 2 b 3 b 4 b 5 b 6 b 7 = b 0 b 1 b 2 b 3 b 4 b 5 b 6 b (4.26) Per quanto riguarda l espansione della chiave, ovvero la creazione delle sottochiavi di iterazione a partire dalla chiave di cifratura, uno dei principali ruoli di quest operazione è l eliminazione della simmetria all intero della funzione cifrante, ottenuta con l aggiunta di una serie di costanti che variano con l iterazione. Infine il numero delle iterazioni è stato scelto con criteri conservativi in quanto per blocchi di lunghezza pari a bit si ottiene una completa diffusione in due iterazioni che diventano tre per blocchi di dimensione superiore (nella completa diffusione ogni bit di Stato dipende da tutti i bit dello Stato di due iterazioni precedenti oppure, 1 Una trasformazione affine è una trasformazione che consiste nella moltiplicazione di un vettore ad una matrice seguita da una somma con un altro vettore. 34

43 4.4 Modi di funzionamento in altri termini, il cambio in un bit è probabile che alteri al metà dei bit dello Stato dopo due iterazioni). 4.4 Modi di funzionamento L AES, così come ogni altro algoritmo a blocchi, può essere utilizzato in quattro modi operativi: Electronic Code Book (ECB) Cipher Block Chaining (CBC) Cipher Feedback (CFB) Output Feedback (OFB) La descrizione di questi modi è presente nella norma Recommendation for Block Cipher Modes of Operation - Methods and Techniques NIST SP 00-3A pubblicata nel 2001 [22] Electronic Code Book (ECB) E il metodo più semplice ma anche il meno affidabile, infatti con esso ogni blocco di testo è cifrato in successione sempre con la stessa chiave e indipendentemente dagli altri blocchi. Il termine code book deriva dal fatto che, per un assegnata chiave, esiste un unica sequenza di testo cifrato corrispondente ad un dato testo in chiaro (detto anche plaintext). La debolezza della modalità consiste nel fatto che i blocchi uguali nello stesso messaggio in chiaro danno origine sempre allo stesso blocco cifrato. Un altro limite, ovviabile con operazioni di padding, è rappresentato dal fatto che il messaggio da cifrare deve essere multiplo della dimensione del blocco. Si definisce padding l aggiunta di bit di riempimento al blocco al fine di portare la dimensione complessiva a quella desiderata, nel caso dell AES a bit. L operazione di padding può essere effettuata anche per irrobustire la sicurezza della modalità nel caso in cui si trasmettono blocchi simili. Il padding, in questo caso, viene utilizzato in maniera random. La presenza di uno o più errori in un blocco cifrato si ripercuote solo nel corrispettivo blocco decifrato e non nei blocchi contigui. Questo implica l assenza del fenomeno di propagazione degli errori tra i blocchi. Da evidenziare che la presenza nel blocco cifrato anche di pochi errori introdotti dal canale di comunicazione origina un blocco decifrato notevolmente diverso da quello trasmesso (è possibile raggiungere anche il 50% di bit errati). 35

44 4 AES - Advanced Encryption Standard x j n key E E 1 key n c j (i) encipherment x j =x j (ii) decipherment Figura Modalità di funzionamento ECB Sia X il messaggio da trasmettere e (x 1, x 2,..., x j ) la suddivisione in j blocchi. Nell operazione di cifratura l i-esimo blocco di testo on chiaro, indicato con x j, si trasforma, in seguita all applicazione della chiave K all algoritmo cifrante e al blocco x j, nel blocco c j, ovvero: c j = E K (x j ) (4.27) Nell operazione di decifratura il blocco cifrato c j restituisce il blocco in chiaro x j, cioè: Cipher Block Chaining (CBC) x j = E 1 K (c j ) (4.2) É un metodo simile al precedente anche se in questo caso i blocchi di testo cifrato sono concatenati ai propri predecessori nascondendo le parti che si ripetono all interno del testo semplice e che verrebbero altrimenti ripetute nel testo cifrato. In particolare, viene sottoposto a cifratura il risultato dell XOR compiuta sul blocco di testo cifrato precedentemente e sul blocco corrente di testo in chiaro. Oltre alla chiave segreta, bisogna introdurre come parametro del modo operativo, un vettore di inizializzazione (anche denominato IV, acronimo di Initial Vector), cioè il blocco che viene posto come cifratura fittizia all inizio del funzionamento del sistema. La debolezza della modalità è che un eventuale errore nella fase di comunicazione dell informazione cifrata si propaga per due blocchi successivi del messaggio cifrato. Per la cifratura si può scrivere: e come caso particolare: c j = E K (x j c j 1 ) (4.29) 36

45 4.4 Modi di funzionamento c 0=IV c j 1 c j x j n E 1 key key E c j 1 n c j (i) encipherment x j =xj (ii) decipherment Figura Modalità di funzionamento CBC Inversamente per la decifratura si può scrivere: e come caso particolare: c 0 = E K (x 0 IV) (4.30) c 1 = E K (x 1 c 0 ) (4.31) x j = c j 1 E 1 K (x j ) (4.32) x 0 = IV E 1 K (x 0 ) (4.33) x 1 = c 0 E 1 K (x 1 ) (4.34) Per questo metodo è possibile enunciare alcune proprietà: 1. Ad identici blocchi di testo corrispondono medesimi risultati finali se non viene alterato il vettore di inizializzazione. 2. La dipendenza dal blocco precedente è limitata ad un blocco, questo però comporta la necessità di mantenere l ordine corretto dei blocchi in fase di decifratura. 3. La sincronizzazione è automatica nel caso di blocchi errorati, ovvero se il blocco j-esimo è errorato e quello j + 1 non lo è, il blocco j + 2 sarà decifrato correttamente. 4. Un singolo errore nel blocco cifrato si ripercuote sulla decifratura del blocco (in cui il 50% dei bit sono errati) e del successivo (in cui si verificano gli errori nella posizione in cui sono occorsi nel precedente blocco cifrato). 37

46 4 AES - Advanced Encryption Standard Cipher Feedback (CFB) Come per il CBC i blocchi vengono concatenati fra loro ma questa volta dopo l operazione di cifratura. Ovvero, si esegue la cifratura del blocco cifrato precedentemente e poi l XOR con il testo chiaro spezzettato in segmenti più piccoli. Lo scopo è quello di elaborare i dati non appena sono disponibili invece di aspettare che la cifratura di un blocco sia del tutto completata (cifratura real time). Poichè si può operare su un blocco di dimensione arbitraria tra uno e la dimensione del blocco, questa modalità consente di convertire l AES, o il generico cifratore a blocco in esame, in un cifratore a flussi eliminando la necessità di ricorrere ad operazioni di padding quando il messaggio non è un multiplo della dimensione dei blocchi. Il messaggio in chiaro X può essere suddiviso in blocchi di dimensione pari a r bit (1 r n, dove n è la dimensione del blocco). Un registro a scorrimento di n bit viene riempito con un vettore di inizializzazione indicato con IV (inviato all inizio della comunicazione). Gli r bit meno significativi del risultato di cifratura sul vettore di inizializzazione sono posti in XOR con la prima parte (a r bit) del messaggio da cifrare (gli altri n r bit sono ignorati). Il risultato è trasmesso come messaggio cifrato. Lo stesso messaggio è memorizzato nelle r posizioni più significative dello shift register, che a sua volta ha preventivamente subito altrettanti spostamenti a sinistra (i bit che superano la dimensione dello shift vengono persi). Nella decifratura di adopera lo stesso schema, ovvero si continua ad usare la funzione cifrante, ma il messaggio cifrato viene posto in XOR con l uscita della funzione cifrante applicata al precedente blocco cifrato. c) Cipher feedback (CFB), -bit characters/ -bit feedback r-bit shift r-bit shift I 1=IV I j c j 1 I j n c j 1 key E r E key n leftmost r bits O j r O j x j r c j x j =xj (i) encipherment (ii) decipherment Figura Modalità di funzionamento CFB Fissato r, il blocco cifrato del generico i-esimo blocco del messaggio in chiaro x j di lunghezza r bit sarà: 3

47 4.4 Modi di funzionamento c j = x j o j (4.35) dove: o j = leftmost r (O j ) (4.36) O j = E K (I j ) (4.37) e ancora: I j = leftshift r (c j 1 ) (4.3) Ad ogni iterazione il registro esegue r shift a sinistra sostituendo il contenuto con c j 1. La decifratura sarà: x j = c j o j (4.39) Questa relazione ribadisce che, a differenza delle modalità ECB e CBC, la CFB si avvale esclusivamente dell operazione di cifratura. Questo comporta che la modalità CFB non deve essere usata se la funzione cifrante è un algoritmo a chiave pubblica (l AES non lo è). Per questo metodo è possibile enunciare alcune proprietà: 1. Ad identici blocchi di testo in chiaro corrispondono medesimi risultati cifrati se non viene alterato il vettore di inizializzazione (non necessariamente, ma auspicabilmente, da cifrare). 2. Il blocco cifrato dipende dalla cifratura precedente, questo comporta la necessità di mantenere l ordine corretto dei blocchi in fase di decifratura. 3. La corretta decifratura avviene quando nello shift register sono presenti valori corretti. 4. Se uno o più bit del blocco di r sono errati questo si ripercuoterà sulla decifratura del blocco (con bit errati nelle stesse posizioni) e dei successivi (con una distribuzione degli errori del 50%) fino a che nello shift register il blocco errato di r bit è stato shiftato via. 39

48 4 AES - Advanced Encryption Standard Output Feedback (OFB) La struttura di questa modalità è simile alla precedente e anche in questo caso si ricorre alla funzione cifrante sia per l operazione di cifratura sia per quella di decifratura. In questo modo di funzionamento, affinché il procedimento cifrante risulti ancora più veloce, la connessione di retroazione (detta feedback) avviene tra l uscita del passo di cifratura precedente, che opera iterativamente sul vettore di inizializzazione, e il blocco corrente e produce un keystream. Un vantaggio di questo metodo sul precedente è che errori di trasmissione non si propagano nel processo di decifratura. Anche se n r bit sono trascurati prima della XOR con i dati da cifrare o decifrare, il feedback può essere composto dall intero blocco come mostrato in figura 4.13 (versione ISO 10116), o utilizzando anche qui uno shift register e porre in feedback gli r bit posti in XOR con il testo da elaborare (versione FIPS 1). In quest ultimo caso si ripetono le operazioni di shift a sinistra prima della cifratura come illustrato nel CFB. La nascita del primo metodo è dovuta al rischio di avere, utilizzando il secondo, periodi cifranti brevi che agevolino la crittoanalisi. Infatti applicando la stessa chiave è possibile, dopo una serie di iterazioni, ottenere un uscita pari al blocco d ingresso di una precedente iterazione presentando pericolose ripetitività. O j 1 O j 1 I 1=IV I j I j n key E n E key leftmost r bits O j r O j x j r r c j x j =xj (i) encipherment (ii) decipherment Figura Modalità di funzionamento OFB Anche per questo metodo è possibile enunciare alcune proprietà: 1. Con questo metodo un testo in chiaro, al variare del vettore di inizializzazione, produrrà differenti risultati di cifratura. 2. Il keystream che si pone in XOR con l ingresso è indipendente dal testo. 3. Uno o più bit errorati nel testo cifrato si presentano nel testo in chiaro decifrato nell esatta posizione in cui sono occorsi. 40

49 4.5 Aspetti hardware 4. La perdita di bit cifrati, anche se in seguito recuperati, distrugge l allineamento in decifratura. In questo caso è necessaria un esplicita risincronizzazione. 5. Per conferire proprietà di accesso casuali alla decifratura è possibile utilizzare l uscita di un contatore al posto del feedback (OFB counter mode): per decifrare un blocco non occorre decifrare il precedente Confronto dei modi di funzionamento La modalità ECB è una diretta applicazione dell algoritmo di crittografia alla cifratura o decifratura dei dati. Nel CBC si combinano blocchi di testo cifrato a quelli da cifrare. Il CFB usa il precedente blocco cifrato come ingresso all algoritmo la cui uscita viene combinata col testo in chiaro da cifrare. Sia per CBC sia per il CFB i blocchi cifrati sono incatenati. Nell OFB la cifratura non viene eseguita considerando anche i dati, ma solo la precedente versione cifrata che inizialmente ha come ingresso un vettore di inizializzazione. Il primo di questi quattro metodi, l ECB, nonostante sia il meno sicuro perchè non fornisce garanzie contro i pattern di dati ripetitivi, è quello più utilizzato. È sicuro quando si effettuano trasmissioni di valori singoli (ad esempio quando si trasmette una chiave di cifratura). I crittologi consigliano il secondo, il CBC, vista anche la sua semplicità. Questo metodo è consigliato per trasmissioni generiche eseguite mediante blocchi di dati. Il CFB è adatto alle applicazioni dei Terminali in cui i codici individuali, introdotti dall utente, devono essere inviati all host senza che rimangano in memoria e si orienta ad applicazioni cifranti a flussi. Sia il CBC che il CFB possono anche essere utilizzati per meccanismi di autenticazione. L OFB, generalmente orientato alla cifratura a flussi, viene spesso utilizzato nelle comunicazioni ad alta velocità su canale rumoroso come quelli satellitari. Gli ultimi due metodi fanno inoltre uso della sola operazione di cifratura anche quando devono decifrare il messaggio. 4.5 Aspetti hardware Le operazioni svolte nell AES sono orientate al byte, in modo tale che possano essere eseguite in maniera efficiente da un processore a bit. Su di un processore a 32 bit le trasformazioni dell AES possono essere comunque effettuate in maniera efficiente in quanto, più operazioni a bit possono essere combinate in un unica operazione a 32 bit. Molte delle architetture hardware tuttavia, preferiscono adottare un architettura a bit, che offre il più alto livello di parallelismo permesso nella computazione dell algoritmo AES. Un alto numero di operazioni svolte in concomitanza permette di ottenere un alto throughput. Alcune implementazioni adottano un completo srotolamento delle dieci, dodici e quattordici iterazioni previste rispettivamente dall AES-, AES-192 e AES-256. Inoltre, utilizzando dell hardware 41

50 4 AES - Advanced Encryption Standard supplementare è possibile realizzare una versione che introduce del pipeline all architettura. L aver srotolato l algoritmo porta ad un costo d implementazione di dieci, dodici e quattordici volte tanto, rispetto alla versione non srotolata e, ovviamente, ignora la simmetria presente nell AES. Infine la struttura con pipeline non è sempre adatta perché alcuni modi di utilizzo dell AES, presenti nella maggior parte degli apparati commerciali, non sono in grado di sfruttare il parallelismo offerto dalla struttura con pipeline. Per esempio durante la cifratura nella modalità CBC è richiesto che il risultato della precedente cifratura sia posto in ingresso all attuale. Di conseguenza molte implementazioni hardware dell AES realizzano in hardware un solo round che viene riutilizzato per computare tutte le iterazioni previste. Per implementazioni che richiedono un throughput dell ordine dei megabit non è, inoltre, necessario implementare un architettura parallela a bit; architetture più piccole possono comunque soddisfare il requisito. Per esempio, in [25] è presentata una implementazione a 32 bit che raggiunge 70 Mbps con un clock di 50 MHz. Il parallelismo dell architettura (32 bit, bit) influisce, ovviamente, sulle dimensioni del circuito. Un architettura a 32 bit necessita di quattro S-box per computare la trasformazione SubBytes di una parola a 32 bit, mentre un architettura a bit richiede ben sedici S-box. La S-box è il componente che richiede più spazio per essere realizzato in hardware, ne consegue che il numero di S-box implementate determina, in pratica, lo spazio richiesto dall architettura. Quindi un efficiente approccio nell implementazione della S-box è cruciale per le dimensioni finali del circuito. Una possibile scelta per l implementazione della S-box prevede l utilizzo di memoria ROM per realizzare la look-up table. La ROM deve essere in grado di memorizzare 256 = 204 bit. In alternativa, è possibile computare l uscita della S-box attraverso il calcolo di un inversione nel campo GF(2 ) e la successiva trasformazione affine. J. Wolkerstorfer et al. in [35] hanno messo in evidenza come sia possibile realizzare la S-box attraverso della logica combinatoria con un efficienza pari alla memoria ROM. In particolare, l utilizzo della logica combinatoria è più efficiente quando è richiesta dall implementazione anche la decodifica; in questo caso la dimensione della memoria ROM raddoppia (4096 bit). La moltiplicazione nel campo finito GF(2 ) richiesta nell operazione di MixColumns può essere combinata con la look-up table del SubBytes in nuove look-up table denominate T-boxes [9]. Tuttavia, la trasformazione prevista nel MixColumns è adatta ad essere realizzata attraverso della logica combinatoria che richiede meno spazio delle T-boxes, ha un percorso critico corto e consuma meno energia. Un implementazione combinata delle operazioni di MixColumns e InvMixColumns può riutilizzare le molte parti in comune dei due circuiti. La memorizzazione delle variabili richieste dell AES ha un forte impatto sulle dimensioni globali del circuito. Un implementazione dell AES- necessita la memorizzazione di almeno 256 bit: bit per memorizzare lo Stato e bit per 42

51 4.5 Aspetti hardware memorizzare la chiave di iterazione. In alcune piattaforme risulta essere più efficiente utilizzare la memoria integrata messa a disposizione; sulle FPGA della Xilinx, N. Pramstaller et al. [26], ha mostrato come una duplicazione dello Stato può ridurre il costo complessivo dell hardware. In un circuito che fa uso di standard-cell la memorizzazione, fatta attraverso flip-flop, è molto onerosa; perciò in questo tipo di circuito la memorizzazione dello Stato è solitamente effettuata una sola volta. Particolare attenzione va fatta anche a proposito della schedulazione della chiave. Un implementazione software su di una piattaforma a 32 bit, elabora tutte le sottochiavi in anticipo. Questo permette di risparmiare tempo durante la cifratura di diversi blocchi e durante la decifratura quando bisogna utilizzare le sottochiavi in ordine inverso. Un implementazione hardware che sia efficiente in termini di spazio occupato dal circuito, prevede la computazione delle sottochiavi al volo, riducendo così lo spazio di memorizzazione richiesto. Generare al volo la sottochiave significa che in ciascuna iterazione dell algoritmo l attuale sottochiave è calcolata a partire dalla precedente. Se in fase di codifica la prima sottochiave coincide con la prima chiave schedulata, nell operazione di decodifica, invece, la prima sottochiave deve essere calcolata: la prima sottochiave è l ultima sottochiave che si ottiene effettuando una completa schedulazione della chiave Pipelining, Sub-Pipelining e Loop Unrolling In un codificatore a blocco la dimensione del testo in ingresso è fissa e, nel caso dell AES, pari a bit. Un generico messaggio viene, prima di essere elaborato, suddiviso in blocchi di dimensione pari a quella elaborabile dal codificatore ( bit). Le modalità operative che non prevedono un feedback, come ad esempio l ECB, offrono minor sicurezza ma permettono l elaborazione di più blocchi in parallelo garantendo così un accelerazione dell elaborazione. Le altre modalità, che invece prevedono un feedback dei dati, offrono una maggior sicurezza nella crittografia dei dati ma non permettono l elaborazione di più blocchi in parallelo, infatti l elaborazione del blocco successivo non può partire fino a quando non è terminata quella attuale. Esistono tre tipi di architetture che possono essere utilizzate per incrementare le prestazioni dell architettura di riferimento (figura 4.14) del codificatore/decodificatore. Queste architetture si basano sull utilizzo di pipeline, sub-pipeline e loop unrolling. L architettura di riferimento oltre al blocco che esegue un iterazione, o round, dell algoritmo di codifica AES prevede un registro, necessario alla memorizzazione dello Stato, e un multiplexer che permette di eseguire l iterazione dell algoritmo. Pipelining L utilizzo di pipeline permette un accelerazione del processo di codifica/decodifica grazie alla possibilità di elaborare più dati simultaneamente. La struttura con pipeline si realizza inserendo una riga di registri fra la logica combinatoria che separa un round dell algoritmo dall altro. Ripartire delle 43

52 4 AES - Advanced Encryption Standard multiplexer registers 1 round round Figura AES: architettura di riferimento. operazioni di logica combinatoria fra due registri consecutivi crea un livello di pipeline. Durante ciascun ciclo di clock i dati, parzialmente elaborati vengono spostati nel successivo registro e sostituiti con dei nuovi. Il numero di round k in ciascun loop è solitamente scelto come divisore di N r e il massimo valore di k e ovviamente N r. In quest ultimo caso la struttura prende il nome di fully pipelined architecture. Per una struttura formata da k-round quando un blocco raggiunge il k-esimo round sarà rimandato all ingresso al primo round finché non sarà stato elaborato N r volte. Quando la struttura si è riempita in tutta la sua profondità, (ovvero quando tutti i registri che la compongono contengono dei dati valid) essa elabora k blocchi in parallelo a scapito di una latenza iniziale che è proporzionale a k. L area occupata da questa struttura è proporzionale al valore di k. Sub-Pipeline A differenza del pipeline, l architettura basata su sub-pipeline, prevede inserimento di una riga di registri oltre che all esterno anche all interno di ciascun round dell algoritmo. Se ciascun round dell algoritmo è diviso in r parti con ugual ritardo di elaborazione (dovuta alla logica combinatoria), la struttura sub-pipeline composta da k-round viene accelerata approssimativamente di r volte rispetto a quella con non fa uso del sub-pipeline. Questo significativo incremento avviene con la sola aggiunta dei registri di sub-pipeline (e di logica per il controllo) che causa un esiguo incremento dell area occupata. Tuttavia, suddividere ciascun round in un numero arbitrario numero di stadi non sempre porta ad un incremento delle prestazioni. Se la massima frequenza di clock è vincolata da un elemento combinatorio indivisibile (che è la causa del percorso a ritardo maggiore), dividere il resto del round in più stati non porta ad un incremento delle prestazioni. Siccome molti blocchi di dati sono elaborati allo stesso tempo, l ammontare del numero di cicli di clock necessario ad elaborare un dato è incrementato delle stesse proporzioni (tuttavia bisogna tenere in conto dell incremento significativo della frequenza di clock). 44

53 4.5 Aspetti hardware multiplexer registers round 1 k rounds registers round 2 registers round k Figura AES: architettura con pipeline. multiplexer r stages inner stage 1 registers inner stage 2 registers registers round 1 registers round 2 k rounds inner stage r registers round k Figura AES: architettura con sub-pipeline. Loop Unrolling L architettura che fa uso di loop unrolling può processare solo un blocco di dati alla volta, ma vari round sono elaborati allo stesso tempo. Il fattore di unrolling, o srotolamento, k è usualmente scelto come divisore di N r e il suo massimo valore e per l appunto N r. Un blocco dati viene, in ciascun ciclo di clock, processato da N r /k iterazioni. Con questa struttura il periodo di clock incrementa di circa k volte e non si hanno fenomeni di latenza presenti 45

54 4 AES - Advanced Encryption Standard negli altri due casi. L area occupata da quest architettura è proporzionale al numero k di round presenti in ciascun loop. multiplexer registers k rounds round 1 round 2 round k Figura AES: architettura con loop unrolling. 46

55 Capitolo 5 AES: Stato dell arte nell implementazione In questo capitolo vengono presentati alcuni dei lavori presenti in letteratura che descrivono l implementazione hardware dell algoritmo AES. Le implementazioni analizzate vengono logicamente suddivise in due categorie: la prima raggruppa tutte quelle implementazioni definite lightweight mentre la seconda raggruppa le implementazioni ottimizzare per il throughput. Per ciascuna implementazione vengono descritte le peculiarità e le performance che permette di raggiungere. 5.1 Implementazioni lightweight Per Implementazioni lightweight si intende far riferimento alle implementazioni hardware che sono in grado di soddisfare i vincoli di basso consumo energetico e minima occupazione di risorse hardware. Il campo di applicazione di queste implementazioni sono i diffusi dispositivi per la sicurezza elettronica di tipo passivo o alimentati a batteria, come ad esempio gli RFID e le reti di sensori wireless Principi di progettazione Un implementazione su silicio ottimizzata richiede stringenti metodologie di progetto che devono seguire fedelmente i principi di progettazione visti nel capitolo 3. Bisogna valutare attentamente le differenti opzioni di progetto tenendo presente che gli obbiettivi dell implementazione sono il basso consumo energetico e l utilizzo minimo di risorse hardware mentre il throughput è di secondaria importanza. È utile, a tal fine, analizzare i pro e i contro di alcune scelte architetturali e trovarne il giusto compromesso. Per esempio, una determinata architettura può diminuire le risorse 47

56 5 AES: Stato dell arte nell implementazione hardware necessarie ma aumentare anche sensibilmente il consumo energetico. In questa sezione saranno descritti diversi criteri di progetto. Verranno prese in esame le decisioni di progetto a livello architetturale che aiuteranno a trovare il giusto compromesso fra basso consumo energetico, basso uso di risorse hardware e un accettabile throughput. Le soluzioni pubblicate in letteratura hanno tutte come obbiettivo un throughput dell ordine dei Giga bit, questo è un po in contraddizione con quanto scritto precedentemente poiché questo nuovo vincolo innalza le risorse hardware necessarie. Le dimensioni del circuito integrato influenzano direttamente il costo del dispositivo su grandi volumi di produzione. In aggiunta, il vincolo di basso consumo energetico è di vitale importanza per i dispositivi senza contatto elettrico come le smart card o le tessere RFID. Attraverso le ottimizzazioni fatte a livello architetturale è molto importante considerare vari dettagli implementativi in grado di realizzare gli obbiettivi del progetto, che come già detto sono il basso consumo energetico e il minimo utilizzo di risorse. Nella progettazione VLSI è sempre un opzione ottimizzare le parti critiche del circuito utilizzando un approccio completamente su misura anziché un approccio basato su celle standard. Utilizzare un approccio su misura può talvolta portare ad alcuni problemi come l aumento del tempo necessario allo sviluppo che si ripercuote negativamente sul costo finale del dispositivo. Inoltre, in questo modo si rallenta la migrazione tra le diverse tecnologie CMOS. Di conseguenza tutte le ottimizzazioni sono fatte all interno della descrizione VHDL che velocizza il flusso di progetto, compresa la sintesi e il place and route per le differenti tecnologie CMOS. Progetto per il basso utilizzo di risorse hardware La progettazione di un circuito VLSI per il basso utilizzo di risorse hardware utilizzando le celle standard richiede delle valutazioni a partire dal livello algoritmico fino al livello circuitale. Tra le valutazioni fatte per l algoritmo AES c è la necessità di capire quale sia il grado di parallelismo da scegliere. Nell AES l unità fondamentale di calcolo è il byte ( bit), dunque un architettura a bit può essere scelta al fine di creare un implementazione compatta capace di riutilizzare al massimo le risorse messe a disposizione. Utilizzare una RAM dedicata anziché un approccio basato su flip-flop è una questione importante durante il progetto. Normalmente, la RAM ha un efficienza spaziale maggiore vista la sua regolarità strutturale. L approccio basato su flip-flop può essere vantaggioso solo se la dimensione della memoria è inferiore a 256 bit. Progetto per il basso consumo energetico L ottimizzazione del consumo energetico è diventato al giorno d oggi il maggior obbiettivo nella progettazione VLSI. È bene notare che esiste una precisa differenza fra il consumo energetico e consumo di potenza. Per i dispositivi alimentati a batteria il consumo 4

57 5.1 Implementazioni lightweight energetico per operazione è di vitale importanza, questo significa che il powerdelay deve essere minimizzato. Viceversa, in dispositivi alimentati in maniera passiva (come le smart card contactless) il consumo medio di potenza è il parametro critico e la durata della dell operazione non è importante. È importante che il consumo di potenza per ciclo di clock sia limitato anche se, alla fine, il consumo di energia è maggiore. Si rende necessario in questo caso porre in cascata le operazioni da effettuare poiché l esecuzione in contemporanea di più operazioni potrebbe eccedere il budget di potenza a disposizione. Questo tipo di implementazione porta ad ottenere un dispositivo che minimizza il consumo medio di potenza. Il consumo totale di potenza di un circuito CMOS è la somma dei consumi statici e dinamici. I consumi statici causati da una corrente di leakage dipendono principalmente dalla dimensione del circuito integrato e possono in questa analisi essere trascurati essendo un contributo controllabile solamente a livello tecnologico. I consumi dinamici consistono nell energia necessaria a caricare e scaricare la capacita totale C L di tutte le linee di interconnessione del chip. L equazione 5.1 mostra i parametri che bisogna ottimizzare al fine di minimizzare il consumo di potenza. P dyn = C L V 2 DD f CLK eff E sw (5.1) La capacità C L da caricare è tanto più grande quante sono le porte logiche piazzate nel circuito integrato. Questo significa che diminuire la dimensione del circuito così come diminuire la tensione di alimentazione V DD porta a una diminuzione della potenza assorbita dal circuito. Questi due coefficienti sono implicitamente predeterminati, il primo dal vincolo di ottenere un basso utilizzo di risorse hardware, il secondo dalla tecnologia utilizzata per l implementazione. Supponendo una tensione di alimentazione fissa, la miglior scelta per un progetto a basso consumo di potenza è ridurre la frequenza di clock efficace f CLK eff del circuito. Questo diminuirà in maniera lineare il consumo di potenza del circuito. Il Clock Gating è un efficiente tecnica che permette di ridurre la frequenza di clock effettiva. Questo si ottiene attivando il segnale di clock solo per i registri che hanno effettivamente del lavoro da compiere. Per esempio, nella memoria RAM soltanto un registro da bit può essere scritto alla volta, quindi soltanto un registro assorbirà energia durante il fronte di clock. In aggiunta, non vi è la necessità di avere un multiplexer all ingresso del registro per memorizzare il valore precedente che garantisce una diminuzione dell hardware richiesto. Nell implementazione hardware dell AES la misura del Clock Gating è stata 49

58 5 AES: Stato dell arte nell implementazione applicata in maniera rigorosa a tutti i sottomoduli con il risultato di abbassare significativamente il consumo di potenza. L attivita di switching E sw del circuito può essere ridotta attraverso l applicazione del metodo chiamato sleep logic. Questa tecnica si utilizza quando si nota che l uscita di un circuito combinatorio non è sempre necessaria e che la variazione dei suoi ingressi causerà un consumo energetico inutile. Al fine di evitare questo spreco energetico si possono mascherare gli ingressi del circuito combinatorio attraverso un schiera di porte logiche AND a due ingressi, una per ogni segnale d ingresso, pilotate da un segnale comune di enable. Così facendo si impediranno tutte le attività di commutazione dei segnali all interno della logica combinatoria Lavori presenti in letteratura Le prime implementazioni hardware dell algoritmo AES furono presentate durante la fase di selezione dello standard AES. Nel frattempo un ampia gamma di implementazioni è stata pubblicata in letteratura. La maggior parte di queste implementazioni utilizza un hardware riconfigurabile (FPGA) come obbiettivo tecnologico. Le implementazioni ottimizzate per l FPGA possono differire in maniera sostanziale da quelle proposte per le celle standard poiché le funzioni di costo tra le due tecnologie come visto già in precedenza sono molto differenti. Conseguentemente in questa sezione verranno analizzati solo quelle realizzazioni che hanno come target le celle standard poiché sono le uniche a garantire un basso consumo energetico e basso utilizzo di risorse. L hardware AES presentato da A. Satoh et al. [29] è basato su di un architettura a 32 bit che divide su tre blocchi le funzionalità di cifratura, decifratura e espansione della chiave. Le quattro S-Box implementate vengono utilizzate in maniera congiunta sia dal modulo cifrante che da quello per la schedulazione della chiave. Sono presenti due grandi multiplexer, il primo è utilizzato per selezionare una parola a 32 bit dallo Stato o dal registro della chiave, il secondo per selezionare all uscita del datapath il risultato appropriato. Data la sua struttura interna necessita di un moltiplicatore MixColumns e due moltiplicatori InvMixColumns. Questa implementazione esegue la cifratura e decifratura con una dimensione della chiave di bit. La complessità dell hardware è di porte e raggiunge un throughput di 311 Mbps. Un approccio molto regolare è presentato da Mangard et al. [19]. È un architettura a 32 bit in grado di eseguire la cifratura e decifratura con differenti dimensione della chiave segreta. Vengono impiegati sedici istanze di una data cella di calcolo in grado di memorizzare bit di dati ciascuna. La cella contiene il moltiplicatore MixColumns ed è in grado di eseguire tutte le trasformazione con l eccezione del 50

59 5.1 Implementazioni lightweight SubBytes. La parametrizzazione del numero di S-Box, che possono essere 4 o 16, permette di ottenere una scalabilità del throughput. In un successivo articolo [25] gli stessi autori presentano una versione minimale che prevede l utilizzo di soli 4 moltiplicatori MixColumns. Questo approccio richiede un area del circuito integrato pari a.500 porte equivalenti ed ha un throughput massimo di 70 Mbps. Da menzionare il fatto che è in grado di supportare la modalita CBC. Feldhofer et al. [10] descrivono nel loro articolo un architettura in grado di eseguire la funzionalità di sola cifratura. La sua applicazione è rivolta alla tecnologia RFID e utilizza un architettura a bit. La descrizione dei dettagli implementativi, a cui si farà riferimento successivamente in questa sezione, sono principalmente originati dal lavoro di Feldhofer et al. [11] in cui viene descritto un circuito integrato disponibile sul mercato Dettagli implementativi Il progetto dell implementazione hardware dell AES è stata fatta utilizzando una metodologia flessibile che ha messo in evidenza una serie di possibili idee per l ottimizzazione. Tutte le idee sono state valutate per quanto riguarda il loro impatto sulla dimensione del chip e sull efficienza di potenza. Le valutazioni sono state fatte a partire dai risultati di sintesi e sulle simulazioni fatte a livello di circuito. Questa analisi assicura che il circuito realizzato sarà compatibile per i dispositivi alimentati passivamente. Qui di seguito è presentata l architettura del modulo AES mettendo in evidenza alcuni particolari. Architettura hardware In [11] è proposta un architettura per la cifratura e la decifratura che supporta una dimensione della chiave fissa pari a bit. Questo riduce il numero di round a 10 e la memoria richiesta per la memorizzazione dello Stato e della chiave di round non eccede 256 bit. I requisiti di basso consumo di potenza del chip sono molto restrittivi da non permettere l uso di operazioni a bit e neppure un esecuzione a 32 bit. Ne consegue che è necessario sviluppare un architettura a bit che è l unica in grado di soddisfare i requisiti, la figura 5.1 mostra la struttura l architettura implementata. La parte principale dell architettura sono il controller, la memoria RAM, il datapath e il modulo di IO. Il modulo di IO è un interfaccia verso il microcontrollore che permette di utilizzare il modulo come un coprocessore. Il controller accetta i comandi provenienti dal modulo di IO a provvede alla generazione dei segnali di controllo per la RAM e per il datapath al fine di eseguire l algoritmo AES. Il controller è realizzato mediante la descrizione di una macchina a stati finiti implementa in hardware che permette di ottimizzare il consumo energetico e la dimensione del 51

60 5 AES: Stato dell arte nell implementazione Control RAM 32 x -bit IO Datapath Reg Rcon 1 S-Box 1/4 Mix- Columns d in Datapath Figura 5.1. Architettura a bit per l AES chip. Le sue parti principali sono un contatore ciclico a 4 bit e un registro per l indirizzamento della memoria RAM. Il contatore è implementato come un shift-register utilizzando una codifica one-hot la quale assicura che il cambiamento di stato causi solo due transizioni di segnale. Inoltre la codifica one-hot riduce al minimo l attività di glitching dei segnali di controllo. La macchina a stati finiti (fsm) sequenzia i dieci round dell algoritmo ciascuno dei quali comprende le operazioni di AddRoundKey, ShiftRows, SubBytes, MixColumns e le loro funzioni inverse. È implementata la generazione al volo della chiave di round che aiuta a minimizzare il quantitativo di memoria necessario pari a 256 bit: bit per la memorizzazione dello stato e bit per la memorizzazione della chiave di round. Siccome non vi è altro quantitativo di memoria a disposizione per la computazione dell algoritmo, il controller, assicura che nessun byte dello Stato o della chiave è sovrascritto dai risultati intermedi se questi ultimi sono ancora necessari alla computazione. La memoria è di tipo single ported al fine di facilitare l implementazione su silicio ed è realizzata come una memoria basata su flip-flop. L utilizzo intensivo della tecnica di clock gating ha permesso di ridurre al minimo il consumo di potenza. 52

61 5.1 Implementazioni lightweight Implementazione del datapath Il datapath (figura 5.1) del modulo AES contiene la logica combinatoria necessaria al calcolo delle trasformazioni SubBytes, MixColumns, AddRoundKey e le loro inverse. Le operazioni di ShiftRows e InvShiftRows sono realizzate attraverso un appropriato indirizzamento della memoria RAM fatto dopo l utilizzo della S-Box. I rimanenti componenti del datapath sono il sottomodulo Rcon, qualche porta logica XOR e un registro a bit per la memorizzazione del risultato intermedio della schedulazione della chiave. Rcon è un circuito che provvede a fornire la costante necessaria per la schedulazione della chiave. Le porte logiche XOR sono necessarie per la schedulazione della chiave e vengono riutilizzate nell operazione di AddRoundKey. Inoltre le operazione di input dello Stato e della chiave sono maneggiate dal datapath. L obbiettivo di progetto era di rendere il consumo di potenza regolare nel tempo per tutte le operazioni eseguite dal datapath che avvengono durante l esecuzione dell algoritmo AES. Il livellamento è molto importante per i dispositivi contactless poiché un aumento improvviso della richiesta di potenza elettrica potrebbe causare un reset del circuito. Questo reset può essere innescato dalla caduta della tensione di alimentazione sotto il livello minimo. Conseguentemente a ciò i sottomoduli S-Box e MixColumns sono progettati in maniera tale che il loro assorbimento di potenza sia il più simile possibile. La cifratura o decifratura dei 16 byte dello stato avviene nel seguente modo. I 16 byte dello stato in input vengono scritti in memoria RAM attraverso il modulo di IO seguiti dai 16 byte della chiave di cifratura. Nella cifratura l operazione di AddRoundKey iniziale è fatta durante l operazione di caricamento della chiave; per la decifratura ciò non è possibile poiché è necessario schedulare in anticipo la chiave al fine di trovare l ultima. All arrivo del segnale di start incomincia la cifratura o decifratura dello Stato. I dieci round dell AES con le funzionalità di SubBytes, ShiftRows, MixColumns per la cifratura e di InvSubBytes, InvShiftRows, InvMixColumns per la decifratura, sono effettuate in accordo con le specifiche dell algoritmo. Durante l operazione di AddRoundKey, che è uguale sia per la cifratura che per la decifratura, viene elaborata la successiva chiave di round utilizzando la S-Box, il modulo Rcon e le porte logiche XOR del datapath. La cifratura è fatta in cicli di clock comprese anche le fasi di IO, mentre la decifratura necessita di cicli di clock a causa della schedulazione iniziale della chiave. S-Box Un significativo vantaggio dell architettura a bit è la riduzione ad una sola istanza della S-Box. Ciò permette di ridurre in maniera considerevole lo spazio richiesto dal chip dato che la S-Box è il componente più grande del datapath. La singola S-Box viene utilizzata per le operazioni di SubBytes e di 53

62 5 AES: Stato dell arte nell implementazione InvSubBytes. Ci sono diverse opzioni per implementare la S-Box tra queste la più evidente è l utilizzo di una 512 bit ROM che consente di immagazzinare la lookup table sia per la cifratura che per la decifratura. Purtroppo la ROM non ha buone proprietà per quanto riguarda il basso consumo di potenza. Un opzione particolarmente vantaggiosa per il computo delle operazioni di SubBytes e InvSubBytes è presentato nell articolo di Xinmiao et al. [35] e propone l utilizzo di logica combinatoria. Una caratteristica di questa S-Box è la possibilità, di inserire al suo interno dei registri di pipelining. La S-Box utilizzata nell architettura proposta prevede un livello di pipelining che oltre ridurre il critical path riduce l attività di glitching. Inoltre il registro di pipelining è utilizzato come unità intermedia di memoria durante le operazioni di ShiftRows e la sua inversa. Durante l operazione di SubBytes sono due i byte che entrano nella struttura con pipelining cosicché si creano le condizioni per poter sovrascrivere alcuni byte in memoria ed eseguire contemporaneamente le operazioni di SubBytes e ShiftRows. Quest ultima, in pratica, degenera in un indirizzamento in memoria. Allo scopo di ridurre l attività dei segnali della S-Box viene utilizzato per i suoi ingressi una variante della tecnica del sleep logic. Quando l uscita della S-Box non è necessaria vengono azzerati i suoi ingressi in maniera tale da renderla inattiva. Questo si realizza ponendo in ingresso alla S-Box il valore {0 52} per la cifratura e {0 63} per la decifratura il che rende l uscita della S-Box sempre uguale a zero (vedi le tabelle 4.3 e 4.9). Grazie a questa variante della tecnica di sleep logic è possibile utilizzare delle semplici porte logiche XOR per poter multiplexare l uscita della S-Box e degli altri componenti del datapath (Mix- Columns, etc.). Questo approccio consente di ottenere dei vantaggi in termini di spazio e potenza assorbita se confrontato alla soluzione con multiplexer. MixColumns Un altra ed innovativa soluzione per realizzare un basso consumo di potenza viene dalla tecnica utilizzata per la computazione delle operazioni di MixColumns e InvMixColumns. È stato sviluppato un sottomodulo in grado di elaborare un quarto dell operazione di moltiplicazione di colonna in un ciclo di clock e anziché utilizzarne quattro come proposto in [34] se ne utilizza solo uno ma modificato. Le colonne dello Stato sono considerati come polinomi nel campo GF(2 ) che vengono moltiplicati modulo x 4 +1 per un polinomio fisso c(x) per la cifratura. Il polinomio inverso c 1 (x) viene utilizzato per la decifratura. L equazione 5.2 mostra il risultato della combinazione dei due polinomi fissi al fine di ridurre la complessità per il calcolo congiunto della funzione di MixColumns e della sua inversa. Dopo la sottrazione del polinomio c(x) dal suo inverso c 1 (x) e dopo aver raccolto i termini comuni {0} e {0c} si nota come sono necessari 54

63 5.1 Implementazioni lightweight solo due coefficienti per poter calcolare il polinomio inverso a partire da quello originario. c(x) = {03}x 3 + {01}x 2 + {01}x + {02}x c 1 (x) = {0b}x 3 + {0d}x 2 + {09}x + {0e}x c 1 (x) c(x) = {0}x 3 + {0c}x 2 + {0}x + {0c}x c 1 (x) c(x) = {0}(x 3 + x) + {0c}(x 2 + 1) c 1 (x) = c(x) + {0}(x 3 + x) + {0c}(x 2 + 1) (5.2) data_in -bit FF -bit FF i j k l Multiplier data_out -bit FF a i {01} {0} a l {03} a j {01} a k Multiplier {0C} {02} dec Figura 5.2. Sottomodulo MixColumns Questo nuovo approccio ha portato a implementare un moltiplicatore particolarmente efficiente mostrato in figura 5.2. Il moltiplicatore così configurato, dopo una fase di caricamento che dura tre cicli di clock, produce in uscita un byte valido in colpo di clock. L elaborazione di un intera colonna dello Stato necessita sette cicli di clock e per trasformare l intero Stato 2 cicli di clock. Il percorso critico del moltiplicatore non è di rilievo perché più corto di quello della S-Box. 55

64 5 AES: Stato dell arte nell implementazione Caratteristiche dell implementazione L implementazione di Feldhofer et al. [11] utilizza una tecnologia a celle standard CMOS da 0,35 µm della Philips Semiconductors. Il circuito è stato descritto e validato in VHDL a livello di registro. Alcuni elementi del circuito sono stati modellati manualmente al fine di ottenere dal sintetizzatore i risultati voluti. Il sintetizzatore utilizzato è il PKS della Cadence e il generazione del clock tree è stata fatta con il software della CT-Gen. I test e le verifiche fatte con continuità hanno permesso di eliminare gli errori durante le fasi di progetto. Pei il placement and routing è stato utilizzato il Silicon Ensemble della Cadence. Infine sono stati eseguiti dei test per accertare la manufacturability del dispositivo. Le prove effettuate riguardano la static timing analysis, la power simulation, l LSV e la DRC. Dopo la produzione del circuito integrato è stata eseguita la verifica del corretto funzionamento del chip attraverso l utilizzo grazie all ambiente di test HP2000. Die size Il die size del chip è la più piccola conosciuta in grado di eseguire la cifratura e la decifratura dell AES. Il core necessita di un area di silicio pari a 0,25 mm 2 su una tecnologia CMOS di 0,35 µm che può approssimativamente essere paragonata a porte equivalenti. I risultati di sintesi indicano una complessità di porte equivalenti. La differenza della complessità è dovuto al clock tree, alle filler cell e ad altri elementi per il layout. La figura 5.3 mostra la foto del die usando un fattore di ingrandimento di circa 40 volte. La parte più grande del circuito è quella che realizza la memoria RAM basata su flipflop e occupa circa il 60% dell area del circuito. Il controller che include la fsm, il contatore ciclico, il registro di indirizzamento necessita di circa il 12%. La S-Box e il MixColumns richiedono rispettivamente il 12% e il 9%. L area rimanente è occupata dal sottomodulo Rcon, dalle porte logiche XOR e dal multiplexer per l uscita del datapath. Prestazioni Le misurazioni fatte con il chip tester indicano che il circuito è in grado di funzionare anche con tensioni di alimentazione molto basse. Il chip lavora correttamente con una tensione di alimentazione maggiore di 0,65 V. A questa tensione è possibile spingere la frequenza di clock fino a circa 2 MHz. Alla massima tensione di lavoro, pari a 3,3 V, la massima frequenza di clock ottenibile è di 0 MHz. Con questa frequenza di clock si ottiene il massimo throughput che è pari a 9,9 Mbps per la cifratura. Le performance per la decifratura sono circa simili. Consumo di potenza Un metodo comune per misurare la potenza consumata da un circuito digitale è quella di misurare la corrente assorbita e assumere la tensione di alimentazione costante. La misura di corrente viene fatta indirettamente misurando con un oscilloscopio la caduta di tensione ai capi di un 56

65 5.1 Implementazioni lightweight Figura 5.3. Foto del die del chip resistore, di basso valore ohmico, posto in ingresso al circuito. Questa tecnica è inevitabilmente affetta da errore a causa dei picchi di corrente che caratterizzano i circuiti digitali ed è difficile poter misurare piccoli valori di corrente a causa del rumore termico. Si è dunque utilizzato il metodo del charge transfer per evitare i problemi appena elencati. Questo metodo è molto diffuso per la misura di potenza assorbita da circuiti digitali a basso consumo. Questa tecnica si basa sulla misura della caduta di tensione ai capi di una condensatore che alimenta il circuito digitale durante il suo funzionamento. Il consumo di corrente misurato del chip è di 0,3 µa quando opera a una frequenza di clock di 100 KHz e la tensione di alimentazione è di 1,5 V. A confronto, il consumo di corrente simulato con il tool DIESEL della Philips Semiconductor è di 3,3 µa per la stessa frequenza di clock e di tensione di alimentazione. Questa figura di potenza non include la potenza dissipata dai piedini di IO poiché sono alimentati con una tensione differente. La potenza assorbita viene distribuita fra i vari componenti nel seguente modo: la RAM assorbe circa il 52% della potenza, segue il controller con il 1% e il datapath con la restante potenza libera. La S-Box consuma il 14% della potenza, il MixColumns l % come pure il restante circuito che comprende il multiplexer di uscita, il registro a bit, le porte logiche XOR e il modulo Rcon. Confronto con altre implementazioni Questa sezione mette a confronto il lavoro proposto da Feldhofer et al. [11] con altre implementazioni proposte [25] e [29]. Queste due alternative proposte sono anch esse ottimizzate per un basso consumo energetico e un basso utilizzo di risorse. La tabella 5.1 mostra 57

66 5 AES: Stato dell arte nell implementazione come il circuito proposto da Satoh et al. necessita di porte equivalente su di una tecnologia di 0,11 µm mentre il circuito di riferimento ne richiede solo 3.400, circa il 40% in meno. Infine, il circuito proposto da Mangard et al. necessita invece di.500 porte equivalenti ma include il funzionamento della modalità CBC e un interfaccia AMBA su tecnologia 0,6 µm. Non considerando la funzionalità CBC il conteggio delle porte equivalenti necessarie scende a 7.000, circa il doppio della soluzione di riferimento. Un confronto ragionevole fra la massima frequenza di clock e il throughput è difficile da compiere. Il lavoro proposto in [29] raggiunge i 130 MHz circa il 60% più veloce della soluzione presentata. Questo risultato è pero da attribuire alla più recente tecnologia implementativa che alle scelte architetturali. Il percorso critico della soluzione [29] è molto più lungo della soluzione presentata in [11] poiché comprende una S-Box completa, due ampi multiplexer, un moltiplicatore MixColumns e delle porte logiche XOR. A confronto il percorso critico di [11] è di circa un terzo perché costituito fondamentalmente da metà della S-Box, si ricorda la presenza all interno del registro di pipelining, e da alcuni componenti di logica simili alla soluzione proposta in [25]. Purtroppo le altre pubblicazioni non presentato i dati relativi al consumo di potenza poiché i loro progetti non sono stati fabbricati su silicio. Il consumo di potenza di [11] dovrebbe essere il più basso perché è l unico progetto che si pone seriamente come obbiettivo la realizzazione di un dispositivo a bassissimo consumo di potenza. AES Tech. Area Throughput Max. Freq. Power Version [µm] [GEs] [Mbps] [MHz] [µw ] Feldhofer [11] 0, ,9 0 4,5 Satoh [29] 0, Mangard [25] 0, Tabella 5.1. Stima delle risorse e delle performance per diverse soluzioni lightweight 5.2 Architetture ottimizzate per il throughput Le applicazioni che richiedono un implementazione ad alta velocità dell AES sono svariate, ad esempio un throughput nell ordine dei Gigabit è necessario nei protocolli di rete come l IPsec e il TLS. Sia le tradizionali reti cablate che quelle ottiche sono tuttora in grado di garantire un data rates fino a 20 Gbps. Le reti wireless, invece, stanno attraversando un periodo di sviluppo tecnologico che le porterà nei prossimi anni a raggiungere la soglia dei Gigabit. 5

67 5.2 Architetture ottimizzate per il throughput Principi di progettazione La metodologia di progetto hardware per un applicazione ad alta velocità dell AES richiede un attenta valutazione delle differenti opzioni di progetto. Lo scopo principale in questa sezione è quello di ottenete dall implementazione un alto throughput mentre è di minor importanza la minimizzazione delle risorse hardware e il consumo energetico. Le prestazioni richieste dipendo inoltre dal tipo di applicazione per la quale si sviluppa l AES; in questa sezione si evidenzieranno diversi aspetti che bisogna tenere in conto durante la fase di progetto. La scelta dell architettura hardware di un implementazione determina fondamentalmente le proprietà del circuito. Al fine di conseguire l obbiettivo prefissato oltre all ottimizzazione del livello architetturale è importante considerare vari dettagli implementativi. Nella progettazione VLSI, che prevede lo sviluppo di un progetto completamente su misura, è comune ottimizzare le parti critiche del circuito per da ottenere alte performance a scapito di un lungo periodo di sviluppo e validazione. La decisione di sviluppare un circuito completamente su misura deve essere fatta con attenzione poiché riadattare il circuito su di un differente processo tecnologico può non essere facile. La scelta della tecnologia sulla quale implementare il circuito, come è noto, è determinata dal numero di unità che si intende produrre. I costi di produzione di un ASIC basata su standard-cell sono spesso troppo alti per la produzione di un piccolo numero di apparati, perciò l utilizzo di FPGA è una alternativa valida. Oltre ai vantaggio di essere un dispositivo adattabile (ad esempio, rispetto al cambiamento della dimensione della chiave o al modo di operare) il costo per dispositivo in FP- GA di grandi dimensioni diminuisce. Per questa ragione il costo di sviluppo e di produzione potrebbe essere contenuto. Concetti per l architettura del sistema La scelta del tipo di architettura determina essenzialmente le performance del circuito. Sebbene un architettura a 32 bit riduca le risorse hardware richieste ed il rapporto tra throughput e area occupata è paragonabile a quello ottenuto con un architettura a bit, prestazioni dell ordine dei Gigabit possono essere ottenute solamente quando il computo è fatto con operazioni a bit. Le operazioni di ShiftRows e InvShiftRows se effettuate a bit sono delle semplici rimappature dei byte dello Stato. SubBytes e InvSubBytes sono operazioni eseguite a livello di byte, quindi per elaborare in modo parallelo lo Stato è necessario istanziare sedici S-Box. In maniera analoga per le operazioni di MixColumns e InvMixColumns è necessario istanziare quattro moltiplicatori. Per la schedulazione della chiave sono necessarie oltre ad alcuni elementi di logica combinatoria quattro S-Box (AES-) che opzionalmente possono essere condivise con l unità che elabora i dati. 59

68 5 AES: Stato dell arte nell implementazione Le tecniche di pipelining, sub-pipelining e loop unrolling dovranno essere prese in considerazione al fine di incrementare al massimo le performance. Ottimizzazione dell hardware per i differenti modi operativi In letteratura pipelining e loop unrolling sono indicate come delle tecniche per incrementare le prestazioni di un circuito. Questo concetto non è del tutto corretto e ne chiariremo qui di seguito le motivazioni. I modi di funzionamento raccomandati per un codificatore simmetrico come l AES sono definite dal NIST [22]. Secondo l applicazione i modi più noti sono: Electronic Codebook (ECB), Cipher Block Chaining (CBC), Cipher Feedback (CFB), Output Feedback (OFB) e Counter (CTR). Altri modi recentemente standardizzati sono Cipher-based MAC (CMAC) e Counter with Cipher Block Chaining-message Authentication Code (CCM) [23, 24]. Due classificazioni di base possono essere fatte se la procedura di crittografia usa un modo con feedback (CBC, CFB, OFB) o senza feedback (ECB, CTR). Nella modalità che prevedono un feedback, la precedente codifica è coinvolta nel computo della successiva. Quindi non è possibile iniziare la crittografia del blocco seguente fino a che il risultato di quello precedente non è terminato. Perciò, le tecniche di loop unrolling e pipelining sono in generale inutili poiché è attivo solamente un round alla volta. Ne consegue che il guadagno di prestazioni è esiguo e lo spreco di risorse notevole. Inoltre, il tempo che intercorre tra l inizio delle operazioni di cifratura e la fine (latenza) rimane lo stesso. Il throughput, come si vedrà i seguito, è inversamente proporzionale al tempo di latenza. Un eccezione deriva dalla codifica o decodifica di flussi di dati indipendenti e multipli. Il numero di round che compongono il pipelining definiscono il numero di flussi dati indipendenti che possono essere elaborati parallelamente. Ciò è possibile perché il risultato di un flusso non è influenzato dagli altri. Sebbene la tecnica di sub-pipelining non porti ad un incremento delle prestazioni nella modalità con feedback ci sono dei validi motivi per i quali è bene introdurla nell architettura. Il percorso critico, dovuto alla logica combinatoria, se troppo lungo potrebbe essere spezzato al fine di ottenere la frequenza di clock desiderata. Inserendo una riga di registri si riduce il cammino critico ottenendo così la possibilità di incrementare la frequenza di clock e ridurre l attività del segnale. Questo è una metodo per ridurre significativamente l assorbimento di energia del circuito. Per i metodi che non prevedono feedback, come l ECB oppure il CTR, è possibile sfruttare le tecniche di pipelining, sub-pipelining e loop unrolling al fine di ottenere il massimo delle performance dal circuito. Nell AES la più veloce architettura può essere ottenuta srotolando completamente tutti i round e inserendo molti livelli di sub-pipelining. 60

69 5.2 Architetture ottimizzate per il throughput Il calcolo del throughput, per una data implementazione, dipende da molti fattori. L equazione 5.3 evidenzia come il throughput di un circuito dipende solamente dalla dimensione del blocco e dalla latenza. Nell AES a causa di una dimensione del blocco fissa, pari a bit, la latenza è minimizzata per elevati throughput come evidenziato dall equazione 5.4. T hroughput = Block size Latency (5.3) Latency = T clk #Rounds per block #P ipeline stages #U tilized stages (5.4) Il tempo T clk è il periodo di clock del circuito e dipende dal percorso critico del circuito. Il valore #Rounds per block è il numero di round necessari al calcolo di un blocco dati. #P ipeline stages rappresenta il numero di stadi di pipelining presenti nell architettura e #U tilized stages è il numero di stadi di pipelining usati in parallelo. Architecture Iterative Iterative Sub-unrolling Sub-unrolling Fully Fully unrolled piped piped unrolled piped Unrolled rounds 1 1 k k Inner-round stages 0 n 0 n 0 n #P ipeline stages 1 n k k n n #Rounds per block /k 10/k 1 1 T clk T ref T ref /n T ref T ref /n T ref T ref /n #U tilized stages 1 n k k n n Latency 10 T ref 10 T ref /n 10 T ref /k 10 T ref /(k n) T ref T ref /n Throughput ECB Th ref n Th ref k Th ref k n Th ref 10 Th ref 10 n Th ref Throughput CBC Th ref Th ref Th ref Th ref Th ref Th ref Resources A ref A ref +n R k A ref k (A ref +n R) 10 A ref 10 (A ref +n R) Figura 5.4. Tabella comparativa delle performance di diverse architetture. La figura 5.4 confronta le prestazioni ottenute da diverse implementazioni ad alta velocità dell AES. La prima colonna contiene l implementazione di riferimento nella quale è stato adottato un approccio iterativo senza pipelining. Le penultime due righe mostrano il throughput ottenibile dalle due architetture base, ECB e CBC, per le differenti implementazioni. Come detto precedentemente per un architettura che non fa uso di feedback, come l ECB, il throughput cresce con il numero di stadi di pipelining inseriti. Per le architetture di tipo feedback, come il CBC, il throughput non può incrementare se si elabora un solo flusso di dati alla volta. Per le modalità operative che prevedono 61

70 5 AES: Stato dell arte nell implementazione l elaborazione di più flussi dati alla volta è possibile ottenere le stesse prestazioni ottenibili dalla modalità ECB. Le risorse hardware richieste dalle diverse implementazioni sono elencate nell ultima riga, in cui il valore R tiene conto dell introduzione dei registri di pipelining a bit Lavori presenti in letteratura Molti gruppi di ricerca hanno sviluppato diverse implementazioni ad alta velocità dell AES. La maggior parte di queste fa uso di hardware riconfigurabile (FPGA) [7,, 13, 20, 26, 2, 30, 27, 32, 36, 37] mentre solo alcune convergono nell utilizzo di celle standard CMOS [12, 14, 31]. Il flusso dati ottenuto spazia dai 150 Mbps ottenuti da un implementazione a 32 bit fino a 6 Gbps realizzati da un implementazione a bit. Le architetture con pipelining completamente srotolate soffrono del fatto che possono essere utilizzate solo in alcuni modi operativi. Nei modi senza feedback, ECB e CTR, è possibile riempire per intero la struttura pipelinata ma in generale i modi con feedback, come il CBC, CFB e OFB, sono più utilizzati per la crittografia di flussi ad alta velocità. In molti articoli non viene affrontata la schedulazione della chiave rendendo quindi non funzionale il progetto. Le implementazioni di Chodowiec [7] e Pramstaller [26] sono implementazioni a 32 bit adatte per la cifratura e decifratura. Il loro massimo data rate è di rispettivamnete 150 Mbps e 215 Mbps. Entrambe utilizzano un innovativa rappresentazione dello Stato in cui vengono memorizzati due Stati. Il primo Stato memorizza i valori attuali mentre l altro memorizza quelli futuri cioè quelli in via di elaborazione. Questa rappresentazione avvantaggia l operazione di ShiftRows che è solamente più un indirizzamento al registro corretto così da non richiedere nessuna operazione di trasposizione fra colonne e righe. Ambedue le implementazioni eseguono la schedulazione della chiave in anticipo. Chodowiec [7] utilizza un datapath seriale in cui sono necessari quattro cicli di clock per round. Le S-Box sono implementate in blocchi dedicati di RAM. Le operazioni di MixColumns e InvMixColumns sono implementate efficientemente in LUT attraverso l esplorazione della logica in comune. L implementazione sull FPGA Spartan II della XILINX richiede 222 CLB e 3 blocchi di RAM ed è capace di un throughput di 166 Mbps con un clock di 60 MHz. L implementazione di Pramstaller [26] supporta la modalità CBC, ha un interfaccia al bus AMBA APB ed ha una datapath in cui le operazioni di SubBytes e MixColumns lavorano in parallelo. In questo modo il percorso critico è più corto ma sono necessari dieci cicli di clock per round. I circuiti che implementano la S-Box [35] e MixColumns sono basati sul lavoro di Johannes Wolkerstorfer. La memoria di stato è realizzata configurando le CLB come una memoria RAM sincrona di tipo dual-port. Questa soluzione richiede un totale di CLB e nessun blocco di RAM. Alla frequenza di clock di 161 MHz il throughput è pari a 215 Mbps sia per il modo ECB che CBC. 62

71 5.2 Architetture ottimizzate per il throughput Una delle prime implementazioni ad alta velocità dell AES è stata presentata da McLoone [20]. L architettura è a bit e prevede, in base alla dimensione della chiave, il completo srotolamento dei 10, 12 o 14 round dell algoritmo ciascuno dei quali prevede degli stadi di pipeline all interno. Dopo una fase iniziale, per ciascun colpo di clock, viene elaborato uno Stato per le modalità senza feedback. La matrice di moltiplicazione dell operazione di MixColumns è implementata direttamente e i valori delle S-Box sono memorizzati nei blocchi di RAM. Le risorse richieste dall FP- GA sono CLB e 100 blocchi di RAM. Il data rate di 7 Gbps è ottenuto con una frequenza di clock pari a MHz. In aggiunta è proposto un approccio che prevede sia la cifratura che la decifratura. Questa soluzione realizza un throughput di 3,23 Gbps alla frequenza di 25.3 MHz. Saggese et al. [2] propone un architettura a bit per la sola cifratura. Egli compara una struttura completamente srotolata e pipelinata a fondo rispetto ad una iterativa con il minimo ingombro. I modi di funzionamento sono indirizzati all utilizzo in flussi dati multipli al fine di riempire completamente la struttura pipelinata. Viene implementata una schedulazione al volo della chiave e le S-Box sono implementate in blocchi di RAM. Il circuito che realizza il MixColumns è realizzato attraverso una rete di XOR. L approccio iterativo senza pipelining ha un data rate di un 1 Gbps ad una frequenza di clock di 79 MHz. L implementazione più veloce ha cinque livelli di pipelining per round ed è completamente srotolata. Il throughput di 20.3 Gbps alla frequenza di 15 MHz è realizzabile utilizzando 5.10 CLB e 100 blocchi di RAM. Nel 2004, Hodjat [13] ha presentato un architettura a bit completamente srotolata e con quattro livelli di pipelining per round. L operazione di SubBytes è realizzata attraverso l implementazione di operazioni nel GF(2 4 ) che utilizzano tre livelli di pipelining. Vengo utilizzati quattro moltiplicatori MixColumns per ciascun round realizzati attraverso una rete di XOR. La schedulazione della chiave non è presa in considerazione in questo articolo. Il massimo throughput è di 21,54 Gbps, alla frequenza di clock di 16 MHz, può essere ottenuto nelle sole modalità che non prevedono feedback. Le risorse necessarie sono CLB e nessun blocco RAM. Altre interessanti pubblicazioni sull implementazione dell AES su FPGA possono essere trovate in [27, 30, 32, 36, 37]. Pubblicazioni riguardanti implementazioni ad alta velocità su tecnologia CMOS sono rare. La prima pubblicazione è di Verbauwhede [31] e risale al 2003, si tratta di un implementazione a bit. L architettura proposta prevede la sola cifratura e non ha una dimensione del blocco dati fissa come prevede l AES, ma implementa l algoritmo Rijndael con una dimensione della chiave e del blocco dati di, 192 e 256 bit. L architettura è completamente parallela senza pipelining e richiede un ciclo di clock per round. L architettura prevede 32 S-Box per l unità cifrante e 16 S-Box per la schedulazione della chiave sviluppate in accordo con lo standard AES [21]. L operazione di MixColumns è realizzata con una rete di XOR e istanziata quattro volte per ciascuna colonna. La schedulazione della chiave avviene al volo e supporta tutte le dimensioni della chiave. L implementazione è stata fatta con 63

72 5 AES: Stato dell arte nell implementazione celle standard CMOS a 0,1 µm che permette di ottenere una frequenza massima di clock pari a 154 MHz alla tensione di alimentazione di 1. V. Per la dimensione del blocco dati di bit il throughput è di 1.6 Gbps mentre l occupazione del chip è di 3.96 mm 2 comparato a 173K porte logiche. Gli stessi autori descrivono in [12] una nuova versione dell architettura che è di tipo cifrante, iterativa e senza pipelining. Quest ultima implementazione realizza un throughput di 3.3 Gbps utilizzando un area di 0.79 mm 2 sempre sulla tecnologia CMOS a celle standard di 0,1 µm. Nell articolo di Hodjat [14] è presentata la più veloce architettura esistente per l AES, essa è in grado di realizzare un throughput fino a 70 Gbps. L applicazione di questo core AES è rivolta alla reti ottiche in cui la cifratura del flusso dati utilizza la modalità CTR. Sono presentate differenti idee tra cui la generazione al volo della chiave e la pre-computazione della chiave per tutti i round. L architettura prevede lo srotolamento completo dell algoritmo e l inserimento di quattro livelli di pipelining per ciascun round. Le 32 S-Box per round hanno tre livelli di pipelining e sono realizzate implementando operazioni in capo finito [35]. Quattro moltiplicatori MixColumns sono utilizzati per round e sono implementati attraverso una catena di XOR. Il massimo data rate ottenuto è di 6 Gbps con un area di 250 K porte logiche su di una tecnologi CMOS a celle standard di 0,1 µm Dettagli implementativi Le possibili implementazioni dell AES con requisiti di alta velocità sono numerose; in accordo con quanto scritto precedentemente si considerano due implementazioni ad alta velocità. La prima implementazione può essere utilizzata sia per le modalità che richiedono un feed-back sia per quelle che non lo richiedono, utilizza un metodo iterativo per cifrare e decifrare i dati ed è sviluppata per essere pienamente compatibile con la tecnologia a celle standard. La seconda implementazione analizzata ha un architettura che prevede il completo srotolamento dell algoritmo per ricercare il massimo delle prestazioni nelle modalità operative che non richiedono il feed-back dei dati; il target tecnologico per questa implementazione è l FPGA. Entrambe le architetture sono designate per l AES ovvero per una dimensione della chiave di cifratura di bit. Architettura AES per la cifratura e decifratura iterativa Le applicazioni target per il modulo AES ad alta velocità implementato su celle standard sono per esempio le applicazioni IPsec nelle produzioni di serie come i router. L analisi dei requisiti dei differenti protocolli internet ha condotto ad un architettura che fosse un compromesso fra il throughput e le dimensioni del die. Il supporto a tutte le modalità operative (con e senza feed-back) è stato l obbiettivo principale 64

73 5.2 Architetture ottimizzate per il throughput durante lo sviluppo dell architettura mentre il supporto di più flussi di dati indipendenti è di secondaria importanza. Mentre altre implementazioni supportano la cifratura, l architettura analizzata supporta anche la decifratura e la schedulazione al volo della chiave di codifica. Il massimo throughput è ottenuto quando l ampiezza dei dati elaborati e massima ovvero quando vengono elaborano in parallelo bit. L approccio iterativo permette la computazione di un round AES per ogni ciclo di clock. Questo porta alla massima riutilizzazione dell hardware mentre l utilizzo delle risorse, confrontato all architettura completamente srotolata, è relativamente basso. Le architetture dell unità dati e dell unità per la schedulazione della chiave sono rispettivamente presentate in figura 5.5 e 5.6. Qui di seguito vengono analizzate nel dettaglio le due unità. enc 16xSBox Shift- Rows InvShift- Rows 1 0 enc enc 4xMixCol data_in en enc subkey Reg Data Unit data_out Figura 5.5. Unità dati con parallelismo a bit per l AES Unità dati L unità dati del modulo AES contiene la logica combinatoria necessaria al calcolo delle operazioni di SubBytes, ShiftRows, MixColumns, AddRoundKey 65

74 5 AES: Stato dell arte nell implementazione enc RotWord 0 1 enc enc enc 4xSBox Rcon key en Reg Key Unit subkey Figura 5.6. Unità di schedulazione della chiave con parallelismo a per l AES e le relative operazioni inverse. La figura 5.5 mostra le interconnessioni fra i diversi moduli del circuito che permetto il calcolo di un round AES in un singolo ciclo di clock. L operazione di SubBytes opera indipendentemente su ciascun byte dello Stato utilizzando una tabella per le sostituzioni S-Box; sono necessarie sedici istanze del circuito che realizza la S-Box per poter operare contemporaneamente sullo Stato. Ciascuna S-Box, figura 5.7, è realizzata sfruttando le proprietà delle operazioni nei campi finiti in accordo con Wolkerstorfer [35]. Per la cifratura è utilizza la combinazione dell inversione nel campo finito GF(2 ) e della trasformazione affine. La decifratura lavora in maniera analoga ma la trasformazione affine è fatta prima dell inversione. Nell architettura a bit le operazioni di ShiftRows e InvShiftRows sono delle semplici ricablature del bus in cui un multiplexer seleziona se effettuare lo shift verso sinistra per la cifratura o verso destra per la decifratura. Allo stesso modo la sequenza delle operazioni di AddRoundKey e MixColumns è scambiata durante la cifratura e la decifratura, l operazione di XOR con la chiave avviene per la decifratura dopo l operazione di InvShiftRows mentre per la cifratura è l ultima operazione da 66

75 5.2 Architetture ottimizzate per il throughput effettuare. Un multiplexer è utilizzato per selezionare l uscita del MixColumns, o per il bypass di quest ultimo, o per leggere lo Stato in ingresso. Le operazioni di MixColumns e InvMixColumns sono implementate attraverso quattro moltiplicatori ciascuno dei quali opera su una singola colonna dello Stato. L implementazione dei moltiplicatori è basata sul lavoro di Wolkerstorfer [34] con l introduzione di alcuni miglioramenti che permettono la riutilizzazione dei termini comuni. Unità per la schedulazione della chiave Questa unità esegue l algoritmo per la schedulazione della chiave e per ogni ciclo di clock è in grado di trasmettere all unità dati la chiave di round. Durante la decifratura è possibile fornire l ultima chiave oppure quest ultima può essere calcolata a partire dalla chiave di cifratura in una fase di inizializzazione che dura dieci cicli di clock (AES). In ciascun passo di espansione della chiave sulla prima parola (32 bit) della chiave viene effettuata inizialmente un operazione di shift ciclico e successivamente applicata l operazione di SubBytes. Perciò sono necessarie quattro istanze del modulo S-Box. La costante Rcon è inoltre aggiunta all uscita del modulo S-Box tramite un operazione di XOR. Questo risultato è combinato con l ultima parola della chiave precedente tramite un operazione di XOR. Le altre tre parole della chiave sono calcolate a partire dai valori della chiave precedente e un operazione di XOR in accordo con l algoritmo di espansione. La parola da porre in XOR è selezionata tramite un opportuno multiplexer. Architettura AES completamente srotolata Per applicazioni in backend router o in server in cui più flussi dati devono essere cifrati simultaneamente è necessario un data rate dell ordine dei Giga bit. A causa del basso numero di unità prodotte è l FPGA la tecnologia target per l implementazione. Il massimo throughput per la cifratura AES è ottenuto srotolando completamente tutti e dieci (AES) i round dell algoritmo e inserendo dei registri di pipelining tra un round e l altro come mostrato in figura 5.. A causa dello srotolamento dei round dell algoritmo, solamente i modi che non prevedono un feed-back dei dati, come la modalità CTR o ECB, ottengono dei vantaggi dall utilizzo di questo tipo di architettura. La decisione di implementare solamente il modulo cifrante, e non quello decifrante, è nata dal fatto che nella modalità CTR la decifratura è fatta con lo stesso modulo cifrante. L architettura proposta in figura 5. è composta da un round iniziale in cui si effettua l operazione di XOR fra la chiave di cifratura e i dati in ingresso seguito da nove istanze del round di trasformazione. A seguire vi è l ultima istanza del round di trasformazione che, in accordo con l algoritmo AES, non include il moltiplicatore MixColumns. Come conseguenza dell implementazione in FPGA del circuito le S-Box 67

76 5 AES: Stato dell arte nell implementazione data_in inverse affine transformation 1 0 GF(2 ) inversion enc affine transformation S-Box 1 0 data_out Figura 5.7. Circuito S-Box implementato con operazioni nel campo finito GF(2 ) vengono realizzate come lookup table in dedicati blocchi di RAM. L operazione di ShiftRows è, come in precedenza già visto, delle semplici ricablature del bus in uscita dalla S-Box e l ingresso del circuito successivo. L architettura del moltiplicatore MixColumns è la stessa già presentata in precedenza ma implementata in LUT. Le dieci differenti chiavi di round sono generate in anticipo e memorizzate all interno dell FPGA in blocchi di RAM Caratteristiche delle implementazioni A causa del diverso target tecnologico per l implementazione, FPGA o celle standard, non è possibile un confronto diretto per l occupazione di risorse che nel caso dell FPGA è misurato in LUT e blocchi di RAM mentre nel caso delle celle standard in gate equivalenti. Qui di seguito le architetture precedentemente esposte sono confrontate con altre analoghe. 6

77 5.2 Architetture ottimizzate per il throughput data_in input key Initial round data_out key subkey 1 Initial round Reg Round 1 data_in 16xSBox Reg Shift- Rows Round 10 data_in 16xSBox Shift- Rows subkey 9 subkey 10 subkey Round 9 Reg Round 10 Reg Round 1-9 4xMixCol data_out subkey data_out output Figura 5.. Unità dati completamente srotolata per l AES Approccio basato su celle standard La stima dell area del chip per l architettura iterativa implementata su celle standard e mostrata in tabella 5.2. La stima è basata sui risultati della sintesi delle singole parti che formano il circuito. L area occupata dal chip sia per l unità dati che per l unità di schedulazione della chiave è di circa porte equivalenti. Come paragone si è presa la soluzione presentata da Hodjat [35] che è anch essa di tipo iterativo, include l hardware per l esecuzione di differenti modi operativi ma non è in grado di eseguire da decifratura. Questa soluzione occupa porte equivalenti ed ha un throughput maggiore poiché utilizza una tecnologia CMOS a 0.1 µm anziché quella a 0.35 µm della Austriamicrosystem. 69

78 5 AES: Stato dell arte nell implementazione Area/Instance #Instance Area [GEs] [GEs] S-BOX MixColumns Flip flops Multiplexer XOR misc AES Iretativo TOTAL Hodjat [12] Tabella 5.2. Stima dell area occupata per l architettura AES iterativa Approccio basato su FPGA L architettura di un implementazione AES determina fortemente il requisito delle risorse hardware necessarie. Tuttavia sia il software di sintesi che il modello di FPGA utilizzati possono influenzare il requisito hardware necessario. In tabella 5.3 è mostrata una veduta generale delle soluzioni esistenti basate su FPGA. A causa delle differenti FPGA utilizzate, nella maggior parte della XILINX, i valori riportati devono essere visti come un confronto relativo fra la stima delle risorse occupate e del throughput. 70

79 5.2 Architetture ottimizzate per il throughput Throughput Authors LUTs Block RAMs [Gbps] Chodowiec [7] ,166 Chodowiec [] ,16 Chodowiec [] ,265 Chodowiec [] ,414 Hodjat [13] ,64 Hodjat [13] ,54 McLoone [20] ,0 Pramstaller [26] ,215 Rouvroy [27] ,35 Saggese [2] ,0 Saggese [2] ,2 Saggese [2] ,9 Saggese [2] ,3 Standaert [30] ,05 Standaert [30] ,560 Wang [32] ,604 Zambreno [36] ,41 Zambreno [36] ,44 Zambreno [36] , Zambreno [36] ,93 Zambreno [36] ,57 Zhang [37] ,965 Zhang [37] ,556 Tabella 5.3. Stima delle risorse e delle performance per diverse soluzioni basate si FPGA 71

80 5 AES: Stato dell arte nell implementazione 72

81 Capitolo 6 Implementazione dell AES In questo capitolo sono descritte le scelte progettuali fatte per l implementazione del core AES. Tali scelte sono rivolte alla realizzazione di un core AES altamente prestante in termini di throughput dei dati; valgono quindi tutte le considerazioni fatte nel capitolo 5. Le funzionalità di cifratura e di decifratura, per garantire il massimo delle prestazioni, vengono realizzate in due entity separate denominate rispettivamente aes enc e aes dec 1. Sono state realizzate e analizzate due architetture differenti: la prima di tipo iterativo 6.1(a) mentre la seconda di tipo fully unrolled 6.1(b). Entrambe le architetture hanno un parallelismo a bit e sono realizzate con differenti livelli di sub-pipeline (fino a due livelli); tale tecnica, come visto nel capitolo 4.5.1, permette di incrementare in maniera considerevole le prestazioni a fronte di un piccolo incremento delle risorse richieste. In figura 6.2 sono rappresentate rispettivamente le entity del core AES per l architettura iterativa e per l architettura fully unrolled. Le entity si differenziano per la presenza o meno dei segnali di controllo start e end conv. Questi ultimi sono presenti nell architettura iterativa perché necessari al controllo della macchina a stati finiti che governa il funzionamento del core, mentre sono assenti nell architettura fully unrolled poiché quest architettura non necessita per il suo funzionamento di una macchina a stati finiti. 6.1 Architettura iterativa L architettura del core AES iterativo è essenzialmente composta da tre moduli come mostrato in figura 6.3: il primo modulo è la macchina a stati finiti (fsm) che governa il funzionamento del core, il secondo è il rounddata che esegue un round 1 I nomi sopracitati si riferiscono rispettivamente al prefisso del nome dell entity che realizza il core AES per la codifica (encode) e per la decodifica (decode). Inoltre i suffissi enc e dec identificano tutti quelle entity sviluppate per le funzioni di codifica e decodifica. 73

82 6 Implementazione dell AES Multiplexer Register Register Round 1 Round Register Round 2 Register Round 10 (a) (b) Figura 6.1. AES: (a) architettura iterativa, (b) architettura fully unrolled clk clk_en rst_n aes start end_conv clk clk_en rst_n aes key in_txt out_txt key in_txt out_txt (a) (b) Figura 6.2. Entity del core AES: (a) architettura iterativa, (b) architettura fully unrolled di trasformazione della parola, il terzo modulo è il roundkey che esegue un round di schedulazione della chiave di cifratura. Oltra a questi moduli sono presenti tre multiplexer che permettono come visto nel capitolo l iterazione dell algoritmo e un sommatore (XOR) per eseguire il primo passo dell algoritmo AES ovvero la somma fra la parola da cifrare e la chiave di cifratura. Nella figura 6.4 è rappresentata una simulazione dell utilizzo del core AES iterativo fatta grazie al tool ModelSim SE PLUS 6.2c della Mentor Graphics Corporation. Il suo utilizzo è molto semplice e per il suo funzionamento si avvale di due soli segnali di controllo: un segnale di start (start) e un segnale di fine elaborazione (end conv). Se il segnale di fine elaborazione è a livello logico alto il 74

83 6.1 Architettura iterativa key in_txt roundkey rounddata clk clk_en rst_n start clk clk_en rst_n start fsm lst_round load end_conv enable end_conv clk clk_en rst_n key_in rc_in key_out rc_out clk clk_en rst_n round_key txt_in lst_round txt_out out_txt 1 0 INITVALUE_ENC Figura 6.3. Architecture iterativa del core AES core AES è pronto per eseguire una nuova cifratura che inizia quando il segnale di start, per un ciclo di clock, assume il livello logico alto. Durante ques ultimo evento vengono lette la parola da cifrare attraverso il bus in txt e la chiave di cifratura sul bus key. Il core AES risponderà dell avvenuta cifratura ponendo a livello logico alto il segnale di fine conversione e contemporaneamente sul bus out txt la parola cifrata. Questa procedura si riferisce alla cifratura di una singola parola; nel caso in cui si debba cifrare un flusso di dati è possibile mantenere a livello logico alto il segnale di start e sincronizzare l immissione di nuove parole e chiavi di cifratura con il segnale di fine conversione che rimarrà alto per un ciclo di clock. Infine, oltre al segnale di clock (clk) e di reset (rst n), attivo a livello logico basso, è presente un segnale di enable (clk en) che permette di bloccare il funzionamento del core AES. Il tempo necessario per l elaborazione dei dati è comunque determinato a priori e dipende dal numero di livelli di sub-pipeline implementati Macchina a stati finiti (fsm) La macchina a stati finiti si preoccupa di generare tutti i segnali di controllo del core AES iterativo. I segnali pilotati da questo modulo sono quattro: load enable end conv 75

84 {XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX} {00 {XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX} 6 Implementazione dell AES clk clk_en rst_n start key {XX {XX in_txt end_conv A 0B 0C 0D 0E 0F} { AA BB CC DD EE FF} { } out_txt {69 C4 E0 D 6A 7B D CD B B4 C5 5A} /tb/aes/load Figura 6.4. Simulazione del core AES lst round Il segnale load viene posto a livello logico alto all inizio di ogni processo di cifratura ed è utilizzato per pilotare i tre multiplexer. Due di questi multiplexer servono il modulo roundkey mentre il terzo serve il modulo rounddata. I primi due permettono di caricare all interno del modulo roundkey la chiave di cifratura key e la costante INITVALUE ENC (Rcoin[0], capitolo 4.3.5). Il terzo multiplexer permette invece di caricare all interno del modulo rounddata la parola da cifrare. Il segnale enable assume il livello logico alto quando si stanno eseguendo le operazioni di cifratura sempre se il segnale di enable clk en è a livello logico alto. Questo segnale pilota tutti i registri interni al core AES e permette di congelare il funzionamento del core AES per ottimizzare il consumo energetico. Infatti, grazie a questo segnale, durante lo stato di fine conversione (end conv = 1 ) il modulo non assorbe energia elettrica permettendo così un risparmio energetico non indifferente. Il segnale di fine conversione end conv come precedentemente descritto assume il livello logico alto alla fine di ogni ciclo di cifratura. Anche il segnale lst round assume il livello logico alto durante l ultimo round di cifratura e permette di pilotare il multiplexer interno all architecture del modulo rounddata. L architecture di questo modulo è stata sviluppata descrivendo in codice VHDL una macchina a stati finiti basata su quattro stati. Lo macchina a stati è sempre nello stato di attesa idle fin tanto che il segnale di start non assume il livello logico uno. Nel codice VHDL è stato descritto in maniera behavioral un contatore che tiene traccia del round in corso e che permette di determinare la fine dell elaborazione dei dati. Nell entity di questo modulo è presente la dichiarazione della variabile generic NN che permette di parametrizzare la profondità di conteggio del contatore. Questa variabile permette un uso versatile di questo modulo, come si vedrà successivamente, in presenza di registri di sub-pipelining all interno dell architettura Entity:tb Architecture:beh Date: Fri May ora solare Europa occidentale 2007 Row: 1 Page: 1

85 6.2 Architettura fully unrolled 6.2 Architettura fully unrolled L architettura del core AES fully unrolled è presentata in figura 6.5. Rispetto alla struttura iterativa non necessita dei multiplexer necessari per realizzare l iterazione e della macchina a stati finiti fsm. key in_txt clk clk_en rst_n roundkey rounddata_mr clk clk_en rst_n INITVALUE_ENC key_in rc_in key_out rc_out round_key txt_in txt_out clk clk_en rst_n roundkey rounddata_mr clk clk_en rst_n key_in rc_in key_out rc_out round_key txt_in txt_out clk clk_en rst_n roundkey rounddata_mr clk clk_en rst_n key_in rc_in key_out rc_out round_key txt_in txt_out clk clk_en rst_n roundkey_lr clk clk_en rst_n rounddata_lr key_in rc_in key_out round_key txt_in txt_out out_txt Figura 6.5. Architecture fully unrolled del core AES La struttura di elaborazione dei dati pone in cascata per dieci volte i moduli di trasformazione della parola da cifrare (rounddata) e di schedulazione della chiave (roundkey). L architettura prevede che l uscita di ciascun modulo è posta in ingresso al modulo successivo. In accordo con l algoritmo AES l ultimo round di trasformazione (rounddata lr) differisce dai precedenti (rounddata mr) per l assenza della moltiplicazione di colonna mixcolumns. Anche l ultimo round di schedulazione della chiave (roundkey lr) differisce dai precedenti (roundkey) per l assenza della logica di elaborazione della costante di round Rcoin[i]. 77

86 6 Implementazione dell AES 6.3 Architetture per la cifratura dei dati (aes enc) In questo capitolo vengono descritte le architetture delle entity rounddata enc e roundkey enc sviluppate per le funzionalità di cifratura del core AES Entity rounddata enc Questo modulo permette di eseguire un round dell algoritmo AES. La sua architettura è di tipo parallela a bit e in un solo ciclo di clock è in grado di eseguire un passo dell algoritmo. La sua architettura visibile in figura 6.6 è composta da un registro (reg state) a bit necessario per la memorizzazione della parola da cifrare e da alcuni elementi di logica combinatoria: sbox enc, shiftrow enc, mixcolumn enc, un multiplexer e un sommatore (XOR). L architettura necessita sedici istanze del modulo che implementa la Sbox, denominato sbox enc, un istanza per ogni byte dello Stato. Il modulo shiftrow enc esegue l operazione di ShiftRows tramite un rewiring del bus a bit. Ciascun dei quattro blocchi mixcolumn enc esegue l operazione di moltiplicazione di colonna che può essere bypassata, durante l ultimo round, grazie all utilizzo del multiplexer, comandato dal segnale lst round. Infine il sommatore permette di sommare la chiave di round. La Sbox, come visto nel capitoli precedenti, può essere implementata sia attraverso l uso di logica combinatoria che attraverso l uso di una memoria ROM contenete i 256 possibili valori della sostituzione. Nell implementazione proposta la Sbox è stata realizzata tramite una descrizione VHDL che realizza una LUT (Look Up Table). Questa scelta si è resa necessaria per soddisfare il requisito di progetto che prevede la possibilità di poter cambiare a piacimento la Sbox per poter implementare una versione ad hoc dell algoritmo AES. Inoltre, a favore di questa soluzione vi è il fatto che nel caso di implementazione in FPGA l utilizzo della memoria ROM è vantaggioso in termini di area/performance ottenibili. Gli articoli in letteratura che propongono l utilizzo della logica combinatoria confermano questo fatto, infatti, l utilizzo di logica combinatoria introduce un lieve aumento delle prestazioni ma garantisce un risparmio in termini di risorse hardware necessarie (soprattutto di memorie necessarie). Le FPGA Virtex2 della XILINX munite di veloci memorie chiamate BlockRAM sono ideali per questo tipo di implementazione; tuttavia la scelta dell implementazione della LUT in questo tipo di tecnologia viene lascia al tool di sintesi. In letteratura sono proposte differenti implementazioni del moltiplicatore MixColumns ma non tutte permettono di ottenere il massimo delle prestazioni ottimizzando le risorse hardware necessarie; si veda a titolo di esempio gli articoli [29], [3], [39] e [40]. La struttura proposta permette di ottenere, attraverso un attenta condivisione 7

87 6.3 Architetture per la cifratura dei dati (aes enc) TXT_IN reg_state sbox_enc 0 sbox_enc 1 sbox_enc 2... sbox_enc 15 shiftrow_enc mixcolumn_enc 0 mixcolumn_enc 1 mixcolumn_enc 2 mixcolumn_enc lst_round 1 0 round_key TXT_OUT Figura 6.6. Architecture dell entity rounddata enc delle operazioni fatte a livello di byte, un implementazione efficiente del moltiplicatore di colonna. In particolare, l operazione di MixColumns 6.1 può essere riscritta 79

88 6 Implementazione dell AES in forma 6.2 che risulta essere più appropriata per il nostro scopo. s 0,c s 1,c s 2,c s 3,c = s 0,c s 1,c s 2,c s 3,c per 0 c < N b (6.1) s 0,c = {02} (s 0,c s 1,c ) (s 2,c s 3,c ) s 1,c s 1,c = {02} (s 1,c s 2,c ) (s 3,c s 0,c ) s 2,c s (6.2) 2,c = {02} (s 2,c s 3,c ) (s 0,c s 1,c ) s 3,c s 3,c = {02} (s 3,c s 0,c ) (s 1,c s 2,c ) s 0,c Secondo la 6.2 l operazione di MixColumns può essere implementata attraverso l architettura proposta in figura 6.7. La funzione VHDL s xtime() è necessaria per il calcolo della moltiplicazione con la costante {02}. Gli elementi del GF(2 ) possono essere rappresentati nella seguente forma polinomiale: S = s 7 x 7 + s 6 x 6 + s 5 x 5 + s 4 x 4 + s 3 x 3 + s 2 x 2 + s 1 x + s 0, dove s 0,s 1,...,s 7 GF(2) e x è una radice del polinomio p(x). Quindi: {02}S = xs = = s 7 x + s 6 x 7 + s 5 x 6 + s 4 x 5 + s 3 x 4 + s 2 x 3 + s 1 x 2 + s 0 x 1 mod p(x) = = s 6 x 7 + s 5 x 6 + s 4 x 5 + (s 3 + s 7 )x 4 + (s 2 + s 7 )x 3 + s 1 x 2 + (s 0 + s 7 )x + s 7 (6.3) L architettura della funzione s xtime() è visibile in figura 6. e può essere implementata attraverso l uso di tre porte logiche XOR. Come illustrato in figura 6.7 il numero totale di porte logiche XOR necessarie al computo della moltiplicazione di colonna sono 10 e il critical path è di 3 porte logiche XOR Entity roundkey enc Questo modulo permette di eseguire un round di schedulazione della chiave di cifratura. La sua architettura è di tipo parallela a bit e in un solo ciclo di clock è in grado di eseguire un passo dell algoritmo di schedulazione della chiave. L architecture dell entity per la schedulazione della chiave, presentata in figura 6., necessita di due registri, reg byte e reg key, rispettivamente per la memorizzazione della costante di round e della chiave di cifratura, quattro istanze della Sbox e di alcuni sommatori XOR. La generazione della chiave di round è fatta al volo, ovvero data la round key e la costante di round del passo precedente genera all uscita la round key e la costante di round del passo attuale. La generazione al volo della chiave di round non introduce alcune penalità poiché nel caso dell AES la dimensione della chiave di cifratura fissata a bit permette di realizzare un modulo per la 0

89 6.3 Architetture per la cifratura dei dati (aes enc) c_in 32 MSB LSB s_xtime() s_xtime() 32 s_xtime() s_xtime() mixcolun_1o2_enc mixcolun_2o2_enc c_out Figura 6.7. Architecture dell entity mixcolumn enc schedulazione della chiave che ha un critical path bilanciato con quello del modulo rounddata enc. Anche la generazione della costante di round RC è fatta al volo tramite l utilizzo di tre porte logiche XOR. Questa scelta è particolarmente efficiente in quanto permette di risparmiare memoria ROM e le prestazioni sono ottimizzate. L implementazione della Sbox è stata fatta con le stesse modalità viste nel capitolo precedente Inserimento dei registri di sub-pipeline Il tool di sintesi Synplify Pro.6.2 della Synplicity ha permesso di individuare il critical path delle entity precedentemente descritte. Questa caratteristica ha dato la possibilità di individuare nella struttura delle entity il punto migliore per inserire dei registri di sub-pipelining. Durante l analisi del critical path, per una maggior accuratezza dell analisi, la macchina a stati finiti fsm non è stata sintetizzata. Il posizionamento dei registri è avvenuto cercando di mantenere bilanciato il tempo di esecuzione della logica prima e dopo il registro. Sono state sviluppate due varianti dell architettura, la prima che prevede un solo livello di sub-pipelining e una seconda con due livelli di sub-pipeline. Le architetture sono presentate rispettivamente in figura 6.9 e Il critical path nel caso dell architettura con due livelli di subpipelining è dato modulo che implementa la Sbox. 1

90 6 Implementazione dell AES RC_IN KEY_IN reg_byte reg_key (31 downto 0) 32 MSB LSB sbox_enc 0... sbox_enc 2 MSB 32 LSB MSB 32 LSB s_xtime() 32 MSB LSB MSB LSB MSB LSB RC_OUT KEY_OUT Figura 6.. Architecture dell entity roundkey enc 6.4 Architetture per la decifratura dei dati (aes dec) In questo capitolo vengono descritte le architetture delle entity rounddata dec e roundkey dec sviluppate per le funzionalità di decifratura del core AES. 2

91 6.4 Architetture per la decifratura dei dati (aes dec) TXT_IN RC_IN KEY_IN reg_state reg_byte reg_key (127 downto 96) 32 sbox_enc 0 sbox_enc 1 sbox_enc 2... sbox_enc 15 MSB LSB sbox_enc 0... sbox_enc 2 shiftrow_enc MSB 32 LSB 32 reg_state reg_byte reg_word reg_key 32 MSB LSB mixcolumn_enc 0 mixcolumn_enc 1 mixcolumn_enc 2 mixcolumn_enc MSB LSB lst_round 1 0 s_xtime() TXT_OUT RC_OUT KEY_OUT Figura 6.9. Architettura cifrante con un livello di sub-pipeline 3

92 6 Implementazione dell AES TXT_IN RC_IN KEY_IN reg_state reg_byte reg_key (127 downto 96) 32 sbox_enc 0 sbox_enc 1 sbox_enc 2... sbox_enc 15 MSB LSB sbox_enc 0... sbox_enc 2 MSB 32 LSB 32 reg_state reg_byte reg_word reg_key 32 shiftrow_enc MSB LSB MSB LSB mixcolumn_1o2_enc 0 32 mixcolumn_1o2_enc 1 mixcolumn_1o2_enc 2 mixcolumn_1o2_enc s_xtime() reg_state reg_state reg_state reg_byte reg_key MSB LSB mixcolumn_2o2_enc 0 mixcolumn_2o2_enc 1 mixcolumn_2o2_enc 2 mixcolumn_2o2_enc lst_round 1 0 TXT_OUT RC_OUT KEY_OUT Figura Architettura cifrante con due livelli di sub-pipeline 4

93 6.4 Architetture per la decifratura dei dati (aes dec) Entity rounddata dec Questo modulo permette di eseguire un round dell algoritmo di decifratura dello standard AES. La sua architettura è di tipo parallela a bit è in un solo ciclo di clock è in grado di eseguire un passo dell algoritmo. La sua architettura è mostrata in figura 6.11 ed è composta da un registro (reg state) a bit necessario per la memorizzazione della parola da decifrare e da alcuni elementi di logica combinatoria: shiftrow dec, sbox dec, un sommatore (XOR), mixcolumn dec e un multiplexer. In analogia con l entity rounddata enc necessita di sedici istanze della Sbox, un istanza per ogni byte dello Stato. Il modulo shifrow dec esegue l operazione inversa dell operazione di ShiftRows attraverso un rewiring del bus dati. Ciascuna delle quattro istanze del moltiplicatore di colonna mixcolumn dec esegue l operazione inversa di moltiplicazione di colonna che può essere bypassata attraverso l uso del multiplexer pilotato dal segnale lst round. Infine il sommatore permette di sommare la chiave di round. Come già visto in precedenza in letteratura, sono proposte diverse implementazioni per il moltiplicatore MixColumns. Per l implementazione del moltiplicatore inverso InvMixColumns vengono proposte diverse architetture che permettono la condivisione, almeno in parte, del moltiplicatore MixColumns per eseguire l operazione inversa ma questo tipo di architetture non garantiscono il massimo delle performance. L architettura sviluppata è stata sviluppata per minimizzare il tempo di elaborazione dell operazione. La struttura proposta permette di ottenere, attraverso un attenta condivisione delle operazioni fatte al livello di byte, un implementazione efficiente del moltiplicatore inverso di colonna. In particolare, l operazione di InvMixColumns 6.4 può essere riscritta in forma 6.5 che risulta essere più appropriata per il nostro scopo. s 0,c s 1,c s 2,c s 3,c = 0e 0b 0d e 0b 0d 0d 09 0e 0b 0b 0d 09 0e s 0,c s 1,c s 2,c s 3,c per 0 c < N b (6.4) s 0,c = {04} ( {02}(S 0,c S 1,c ) {02}(S 2,c S 3,c ) (S 0,c S 2,c ) ) {02}(S 0,c S 1,c ) S 1,c (S 2,c S 3,c ) s 1,c = {04} ( {02}(S 1,c S 2,c ) {02}(S 3,c S 0,c ) (S 1,c S 3,c ) ) {02}(S 1,c S 2,c ) S 2,c (S 3,c S 0,c ) s 2,c = {04} ( {02}(S 2,c S 3,c ) {02}(S 0,c S 1,c ) (S 2,c S 0,c ) ) {02}(S 2,c S 3,c ) S 3,c (S 0,c S 1,c ) s 3,c = {04} ( {02}(S 3,c S 0,c ) {02}(S 1,c S 2,c ) (S 3,c S 1,c ) ) {02}(S 3,c S 0,c ) S 0,c (S 1,c S 2,c ) (6.5) 5

94 6 Implementazione dell AES TXT_IN reg_state shiftrow_dec sbox_dec 0 sbox_dec 1 sbox_dec 2... sbox_dec 15 round_key mixcolumn_dec 0 mixcolumn_dec 1 mixcolumn_dec 2 mixcolumn_dec lst_round 1 0 TXT_OUT Figura Architecture dell entity rounddata dec Secondo la 6.5 l operazione di InvMixColumns può essere implementata attraverso l architettura proposta in figura Il numero totale di porte logiche XOR 6

95 6.4 Architetture per la decifratura dei dati (aes dec) necessarie al computo della moltiplicazione di colonna sono 244 e il critical path è di 7 porte logiche XOR. Nell articolo di Zhang et al. [40] è proposta un architettura in grado di ridurre il critical path a 6 porte logiche XOR ma, da analisi fatte col tool di sintesi Synplify.6.2 della Synplicity, si è evidenziato il fatto che, nonostante la riduzione del critical path, la struttura non è più veloce di quella proposta. Inoltre l architettura proposta ha il vantaggio di diminuire il numero di registri necessari per suddividere l operazione in due stadi. c_in 32 MSB LSB mixcolun_2o2_dec s_xtime() s_xtime() s_xtime() s_xtime() s_xtime() s_xtime() s_xtime() s_xtime() s_xtime() s_xtime() s_xtime() s_xtime() mixcolun_1o2_dec 32 c_out Figura Architettura dell entity mixcolumn dec Entity roundkey dec Questo modulo permette di eseguire un round di schedulazione inversa della chiave di cifratura. La schedulazione inversa della chiave di cifratura è fatta al volo e permette di ottenere la chiave del round n a partire dalla chiave del round n + 1. Dunque è necessario disporre, prima di iniziare con l operazione di decodifica, dell ultima chiave di round. Come visto nel capitolo 4, l ultima chiave di round può essere ottenuta solamente eseguendo una schedulazione completa dalla chive di cifratura; questa operazione può essere fatta sviluppando un modulo esterno che sfrutti l architettura, precedentemente descritta, dell entity roundkey enc. L architettura mostrata in figura 6.13 necessita di due registri reg byte e reg key, rispettivamente per la memorizzazione della costante di round e della chiave di cifratura, quattro istanze della Sbox sbox enc e di alcuni sommatori XOR. La generazione al 7

96 6 Implementazione dell AES volo della chiave di round e della costante RC non introduce alcuna penalità perché, anche in questo caso, l architettura risulta bilanciata con il modulo rounddata dec. L implementazione della Sbox segue le linee guida già precedentemente descritte. RC_IN KEY_IN reg_byte reg_key MSB LSB MSB LSB sbox_enc 0... sbox_enc 2 MSB 32 LSB MSB 32 LSB s_inv_xtime() MSB LSB MSB LSB RC_OUT KEY_OUT Figura Architecture dell entity roundkey dec Inserimento dei registri di sub-pipeline Il tool di sintesi Synplify Pro.6.2 della Synplicity ha permesso di individuare il critical path delle entity precedentemente descritte. Questa caratteristica ha dato la possibilità di individuare nella struttura delle entity il punto migliore per inserire dei registri di sub-pipelining. Durante l analisi del critical path, per una maggior accuratezza dell analisi, la macchina a stati finiti fsm non è stata sintetizzata. Il

97 6.4 Architetture per la decifratura dei dati (aes dec) posizionamento dei registri è avvenuto cercando di mantenere bilanciato il tempo di esecuzione della logica prima e dopo il registro. Sono state sviluppate due varianti dell architettura, la prima che prevede un solo livello di sub-pipelining e una seconda con due livelli di sub-pipeline. Le architetture sono presentate rispettivamente in figura 6.14 e TXT_IN RC_IN KEY_IN reg_state reg_byte reg_key MSB LSB sbox_dec 0 sbox_dec 1 sbox_dec 2... sbox_dec 15 MSB LSB shiftrow_dec sbox_enc 0... sbox_enc 2 MSB 32 LSB reg_state MSB 32 LSB s_inv_xtime() mixcolumn_dec 0 mixcolumn_dec 1 mixcolumn_dec 2 mixcolumn_dec lst_round 1 0 reg_byte reg_key TXT_OUT RC_OUT KEY_OUT Figura Architettura decifrante con un livello di sub-pipeline 9

98 6 Implementazione dell AES TXT_IN RC_IN KEY_IN reg_state reg_byte reg_key MSB LSB sbox_dec 0 sbox_dec 1 sbox_dec 2... sbox_dec 15 MSB LSB shiftrow_dec sbox_enc 0... sbox_enc 2 32 reg_state reg_byte reg_key reg_word 32 MSB LSB 32 MSB LSB MSB LSB mixcolumn_1o2_dec mixcolumn_1o2_dec mixcolumn_1o2_dec mixcolumn_1o2_dec s_inv_xtime() reg_state reg_state reg_state reg_byte reg_key mixcolumn_2o2_dec 0 mixcolumn_2o2_dec 1 mixcolumn_2o2_dec 2 mixcolumn_2o2_dec lst_round 1 0 TXT_OUT RC_OUT KEY_OUT Figura Architettura decifrante con due livelli di sub-pipeline 90

99 6.5 Sintesi del core crittografico AES 6.5 Sintesi del core crittografico AES La sintesi del core crittografico AES è stata fatta tramite il tool Synplify Pro.6.2 della Synplicity sull FPGA XILINX XC2V4000. La serie XC2V4000 è un FPGA di medie dimensione della famiglia Virtex2, contiene 5760 CLB (equivalenti a slice) e 120 moduli di Block SelectRAM. Le impostazioni del tool di sintesi sono riassunte in tabella 6.1. PARAMETRO VALORE FPGA Xilinx, Virtex2, XC2V4000BF957-6 Fan out guide Disable I/O insertion false Pipelining true Update Compile Point Timing Data false Verification Mode false Modular Design Enable true Retiming true Disable Sequential Optimization true/false Fix Gated Clock 0 FSM Compiler true FSM Explorer true Frequency 500 MHz Tabella 6.1. Impostazioni del tool di sintesi: Synplify Pro Tra le caratteristiche del tool di sintesi utilizzato vi è la possibilità di eseguire le cosiddette ottimizzazioni sequenziali (Disable Sequential Optimization). Durante il processo di sintesi questa funzionalità è stata dapprima disabilitata per poi essere successivamente abilitata. Con l abilitazione delle ottimizzazioni sequenziali il tool di sintesi ha utilizzato parte dei Block SelectRAM integrati nell FPGA. Come si vedrà in seguito l utilizzo di queste ottimizzazioni permette un utilizzo più razionale delle risorse dell FPGA. L esecuzione del software di sintesi permette inoltre di verificare la sintetizzabilità del codice VHDL sviluppato. L esame del report del processo di sintesi, è a garanzia del corretto funzionamento del core crittografico una volta implementato in FPGA. Il report di sintesi, per l implementazione del core crittografico senza le ottimizzazioni sequenziali, è privo di errori e/o warning. Di particolare interesse vi sono due gruppi di annotazioni del report; la prima riguarda riguarda la sintesi dell entity che realizza la Sbox (sbox enc e sbox dec) mentre la seconda riguarda l entity fsm che realizza la macchina a stati finiti. Il sintetizzatore avverte, nel primo caso, dell implementazione 91

100 6 Implementazione dell AES della Sbox attraverso l utilizzo di memoria ROM dedicata. Questa possibilità era già stata ipotizzata in precedenza e permette di garantire il massimo delle performance al nostro circuito. Nel secondo caso, il sintetizzatore avverte dell utilizzo della codifica sequenziale per l enumerazione degli stati della macchina a stati. Anche questa scelta era abbastanza prevedibile visto che gli stati della macchina a stati finiti sono quattro. Il report di sintesi, con attivata la funzionalità di ottimizzazione sequenziale, è privo anch esso di errori ma presenta alcuni warning in cui segnala l eliminazione di alcuni registri a seguito delle ottimizzazioni effettuate. Infine, come già precedentemente detto, notifica che a seguito delle ottimizzazioni sequenziali l implementazione delle Sbox (o di alcune di esse) nella memoria Block SelectRAM integrata nell FPGA. Utilizzando il software di sintesi è stato possibile stimare la massima frequenza di clock (f clk ), il numero di LUT utilizzate e il numero di blocchi di RAM utilizzati. A partire dalla frequenza di clock stimata è possibile calcolare il massimo throughput e la latenza del core crittografico utilizzando le formule 5.3 e 5.4 presentate nel capitolo 5.2. L architettura presentata ha una dimensione del blocco (Block size) di bit. Il numero di round necessari al calcolo di un blocco dati (#Round per block) è pari a 10 per l architettura iterativa e pari a 1 per l architettura fully unrolled. Il numero di stadi di pipelining (#P ipeline stage) così come il numero di stadi di pipelining utilizzati in parallelo (#U tilized stages) è uguale a n per l architettura iterativa e pari a 10 n per quella fully unrolled; dove n è il numero di inner-round stage. Successivamente al processo di sintesi è stato eseguito un mapping con il tool ISE 9.1i della Xilinx. Quest ultima procedura ha permesso di conteggiare le risorse hardware necessarie con maggior accuratezza. In particolare è stato di fondamentale importanza per il calcolo del numero di slice impiegate dall FPGA per implementazione il core AES. Architettura iterativa Le performance del core crittografico per la cifratura (Encoder AES UF1) e per la decifratura (Decoder AES UF1) con architettura iterativa sono riassunte nelle tabelle 6.2, 6.3, 6.4 e 6.5. Nelle tabelle sono riportate le performance del core crittografico per tre differenti livelli di sub-pipeline. Il valore 0 si riferisce alla presenza del solo registro di pipeline all inizio del round, i valori 1 e 2 invece si riferisce alla presenza, rispettivamente, di uno o due registri di sub-pipeline interni al round. Le tabelle 6.2 e 6.4 riassumono le performance del core crittografico sintetizzato senza abilitare la funzionalità di ottimizzazione sequenziale, mentre le tabelle 6.3 e 6.5 mostrano il risultato di sintesi con la funzionalità attivata. 92

101 6.5 Sintesi del core crittografico AES Encoder AES UF1 LUTs Slices Block Frequency Throughput Latency (liv. sub-pipeline) RAMs [MHz] [Gbps] [ns] ,6 2,22 57, ,0 2,9 44, ,2 2,2 45,0 Tabella 6.2. Performance dell encoder crittografico AES con architettura iterativa (Disable Sequential Optimization) Encoder AES UF1 LUTs Slices Block Frequency Throughput Latency (liv. sub-pipeline) RAMs [MHz] [Gbps] [ns] ,0 2,24 57, ,7 2,40 53, ,0 2,66 4,0 Tabella 6.3. Performance dell encoder crittografico AES con architettura iterativa (Enable Sequential Optimization) Come studiato nel capitolo l inserimento dei registri di sub-pipeline permettono l incremento delle prestazioni. In tabella 6.2 è mostrato, invece, come l architettura con due livelli di sub-pipeline perda in prestazioni rispetto a quella con un solo livello di sub-pipeline. Questo è dovuto al fatto che l analisi del critical path è stata fatta senza l inserimento della macchina a stati finiti (fsm) che introduce un cospicuo calo delle performance. Le stesse architetture senza la fsm hanno un critical path che permetterebbe una frequenza di lavoro di circa 100 MHz maggiore. In questo particolare caso è da preferire l utilizzo dell architettura con un solo livello di sub-pipeline e quindi scartare quella con due livelli. Nelle tabelle 6.3 e 6.5 è possibile notare come l utilizzo della memoria RAM integrata nell FPGA ha permesso una drastica riduzione del numero di LUT o Slice necessarie all implementazione dell architettura. Nel caso della sintesi del core Encoder AES UF1 PP1 il tool di sintesi utilizza Block SelectRAM che utilizza per implementare le 16 Sbox del rounddata enc. Le Sbox del roundkey enc vengono invece implementate come memoria ROM distribuita. Similmente nella sintesi del core Encoder AES UF1 PP2 e Decoder AES UF1 PP2 il tool di sintesi implementa tutte e 20 le Sbox attraverso l uso delle Block SelectRAM. Si noti come ciascuna delle 120 Block SelectRAM permette di implementare contemporaneamente due Sbox. 93

102 6 Implementazione dell AES Decoder AES UF1 LUTs Slices Block Frequency Throughput Latency (liv. sub-pipeline) RAMs [MHz] [Gbps] [ns] ,9 1,66 77, ,2 2,34 54, ,3 3,00 3,4 Tabella 6.4. Performance del decoder crittografico AES con architettura iterativa (Disable Sequential Optimization) Decoder AES UF1 LUTs Slices Block Frequency Throughput Latency (liv. sub-pipeline) RAMs [MHz] [Gbps] [ns] , 1,5 69, ,6 2,61 49, , 2,3 45,3 Tabella 6.5. Performance del decoder crittografico AES con architettura iterativa (Enable Sequential Optimization) Architettura fully unrolled Le performance del core crittografico per la cifratura (Encoder AES UF10) con architettura fully unrolled sono riassunte nelle tabelle 6.6 e 6.7. Encoder AES UF10 LUTs Slices Block Frequency Throughput Latency (liv. sub-pipeline) RAMs [MHz] [Gbps] [ns] ,6 24,27 5, , 40,04 3, ,6 40,40 3,1 Tabella 6.6. Performance dell encoder crittografico AES con architettura fully unrolled (Disable Sequential Optimization) Le tabella 6.6 mostra le performance del core crittografico sintetizzato senza abilitare la funzionalità di ottimizzazione sequenziale, mentre le tabella 6.7 mostra il risultato di sintesi con la funzionalità attivata. Anche in questo caso l utilizzo della memoria RAM integrata nell FPGA ha permesso una drastica riduzione del numero di LUT o Slice necessarie all implementazione dell architettura. Il tool di sintesi, nel caso dell architettura con uno e due livelli si sub-pipeline, utilizza 60 delle 120 Block SelectRAM messe a disposizione dall FPGA. Quindi 120 Sbox delle 200 necessarie (20 Sbox per round) sono implementate attraverso l uso delle Block SelectRAMs. 94

103 6.5 Sintesi del core crittografico AES Encoder AES UF10 LUTs Slices Block Frequency Throughput Latency (liv. sub-pipeline) RAMs [MHz] [Gbps] [ns] ,2 25,50 5, ,2 2,31 4, ,6 37,5 3,2 Tabella 6.7. Performance dell encoder crittografico AES con architettura fully unrolled (Enable Sequential Optimization) Analisi delle performance Sono stati adottati tre differenti parametri per valutare le prestazioni delle architetture proposte per l AES. Il primo parametro è il throughput che tiene conto della velocità di cifratura o decifratura dei dati; il secondo parametro è il costo in termini di area occupata valutando il numero di slice occupate nell FPGA Xilinx Virtex2 XC2V4000; ed infine, il terzo parametro è il rapporto fa throughput e area che tiene conto dell efficienza dell implementazione. Il calcolo del numero di slice occupate dall implementazione è stata fatta in accordo con le osservazioni fatte nell articolo di Saggese et al. [2]. Saggese et al. propone un calcolo innovativo del numero di slice occupate al fine di poter confrontare architetture che utilizzano o no le Block SelectRAMs. Questo calcolo si basa sull osservazione che una memoria RAM dual-port 256 b, contenuta in ciascuna Block SelectRAMs, può essere sostituita utilizzando una composizione di memoria distribuita composta da 256 LUTs, equivalenti a slice. Con questo metodo l area può essere valutata in termini di slice equivalenti (Eq.Slice) calcolato con la seguente formula: Area = Slices + BlockRAMs [Eq.Slice] (6.6) Nella 6.6 i termini Slices e Block RAMs sono quelli che compaiono nelle tabelle 6.2, 6.3, 6.4, 6.5, 6.6 e 6.7 rispettivamente nella terza e quarta colonna. La tabella 6. elenca per ciascuna architettura i tre parametri oggetto d analisi per le performance. Dai risultati mostrati in tabella 6. è possibile estrapolare alcune osservazioni. Come era atteso, l architettura fully unrolled permette di ottenere il massimo delle prestazioni, in termini di throughput, raggiungendo i 40,40 Gbps dell architettura Encoder UF10 PP2. È interessante notare come questa performance sia ottenuta senza l uso delle ottimizzazioni sequenziali. L uso di questa caratteristica del sintetizzatore, come visibile in tabella, non introduce sostanzialmente un aumento delle performance. Infatti se si guarda, per ogni architettura, il throughput, l area e il T/A con e senza l utilizzo delle ottimizzazioni sequenziali si nota come in quasi tutte le architetture si ha una perdita di performance. È bene ricordare che l area è misurata in termini di slice equivalenti e che quindi tiene conto anche delle Block SelectRAMs; risultati differenti si otterrebbero se non si utilizzasse tale tecnica. Si 95

104 6 Implementazione dell AES Architettura Throughput Area T/A AES [Gbps] [Eq.Slice] [Mbps/Eq.Slice] Encoder UF1 PP0 (Disable Seq. Opt.) 2, ,12 Encoder UF1 PP0 (Enable Seq. Opt.) 2, ,12 Encoder UF1 PP1 (Disable Seq. Opt.) 2, ,57 Encoder UF1 PP1 (Enable Seq. Opt.) 2, ,12 Encoder UF1 PP2 (Disable Seq. Opt.) 2, ,41 Encoder UF1 PP2 (Enable Seq. Opt.) 2, ,14 Encoder UF10 PP0 (Disable Seq. Opt.) 24, ,56 Encoder UF10 PP0 (Enable Seq. Opt.) 25, ,63 Encoder UF10 PP1 (Disable Seq. Opt.) 40, ,46 Encoder UF10 PP1 (Enable Seq. Opt.) 2, ,57 Encoder UF10 PP2 (Disable Seq. Opt.) 40, ,30 Encoder UF10 PP2 (Enable Seq. Opt.) 37, , Decoder UF1 PP0 (Disable Seq. Opt.) 1, ,79 Decoder UF1 PP0 (Enable Seq. Opt.) 1, , Decoder UF1 PP1 (Disable Seq. Opt.) 2, ,07 Decoder UF1 PP1 (Enable Seq. Opt.) 2, ,26 Decoder UF1 PP2 (Disable Seq. Opt.) 3, ,05 Decoder UF1 PP2 (Enable Seq. Opt.) 2, ,15 Tabella 6.. Analisi delle performance osservi inoltre come sia sempre un architettura di tipo fully unrolled ad ottenere il più alto rapporto T/A; si tratta dell architettura Encoder UF10 PP1 implementata senza le ottimizzazioni sequenziali. Rispetto all architettura più compatta (Encoder UF1 PP1 (Disable Eq. Opt.)) occupa un area di circa volte maggiore ma garantisce un throughput di circa 14 volte maggiore. Tra le architetture iterative, che quindi permettono un risparmio sia in area che in consumi, quella che ottiene il miglio rapporto T/A è l Encoder UF1 PP1 (Disable Eq. Opt.) per la cifratura e l Decoder UF1 PP1 (Enable Eq. Opt.) per la decifratura. Si noti come a parità di altre caratteristica l architettura per la decifratura dei dati occupi un area maggiore rispetto a quella per la cifratura. Questo aspetto è dovuto al maggior numero di risorse hardware necessarie al moltiplicatore di colonna mixcolumn dec rispetto a quello necessario per la cifratura dei dati mixcolumn enc. Se si confrontano le performance ottenute dalle architettura proposte con quelle presentate in tabella 5.3 si evince che le prestazioni raggiunte dal core AES presentato in questo capitolo sono estremamente competitive. Oltre alla forma tabulare esiste una metodo grafico per riassumere le performance delle varie architetture. Questa tecnica è molto più intuitiva e di facile consultazione. Nelle figure 6.16 e 6.17 sono riassunte in maniera grafica le performance delle 96

105 6.5 Sintesi del core crittografico AES architetture precedentemente analizzate. Il grafico di figure 6.16 mostra le performance del core AES sintetizzato senza le ottimizzazioni sequenziali, mentre il grafico di figura 6.17 mostra le performance con la feature attivata Area [Slice] Encoder UF1 PP0 Encoder UF1 PP1 Encoder UF1 PP2 Encoder UF10 PP0 Encoder UF10 PP1 Encoder UF10 PP2 Decoder UF1 PP0 Decoder UF1 PP1 Decoder UF1 PP Throughput [Gbps] Figura Grafico performance core AES (Disable Sequential Optimization) 97

106 6 Implementazione dell AES Area (Slices + * BlockRAMs) [Eq.Slice] Encoder UF1 PP0 Encoder UF1 PP1 Encoder UF1 PP2 Encoder UF10 PP0 Encoder UF10 PP1 Encoder UF10 PP2 Decoder UF1 PP0 Decoder UF1 PP1 Decoder UF1 PP Throughput [Gbps] Figura Grafico performance core AES (Enable Sequential Optimization) 9

107 Capitolo 7 Tecniche per la protezione dell informazione nei sistemi embedded Negli ultimi anni l allargamento della gamma dei servizi e applicazioni offerti dai dispositivi embedded ha dato la nascita di nuove preoccupazioni per quanto riguarda la sicurezza delle informazioni. La maggior parte di questi dispositivi (e.g. pay-tv, PDA, smartphone, etc.) utilizza una memoria esterna quindi il problema principale per quanto riguarda la sicurezza è lo scambio costante di dati e istruzioni, non cifrati, fra la memoria esterna e la CPU. Questa memoria può contenere dei dati confidenziali, come software coperto da copyright, che sarebbe preferibile proteggere sia per evitare delle copie illecite che per evitare qualsiasi tipo di spionaggio industriale. L obbiettivo di questo capitolo è descrivere chiaramente il problema delle comunicazioni fra la CPU e la memoria esterna, e a questo proposito proporre delle tecniche di cifratura dei dati per assicurare un canale di comunicazione sicuro. 7.1 Il sistema cifrante La scelta della tipologia del sistema cifrante deve essere fatta in rispetto delle specifiche del sistema e molto spesso è un compromesso fra il livello di sicurezza desiderato (robustezza) e la perdita di performance che ci si può permettere. Il processo di decifratura, necessario a seguito di una richiesta di lettura/scrittura sulla memoria esterna da parte della CPU, sarà analizzato in profondità poiché è critico per le prestazioni. I sistemi di cifratura asimmetrici (e.g. RSA) spesso basati su operazioni modulari operanti su grandi numeri interi ( bit) non sono adatti al nostro scopo poiché richiedono maggior potenza computazionale (dovuta all elevamento a 99

108 7 Tecniche per la protezione dell informazione nei sistemi embedded potenza modulare) rispetto a sistemi di cifratura simmetrici (e.g. 3DES, AES) a parità di robustezza. È importante sottolineare che la maggior richiesta di potenza computazionale dei sistemi asimmetrici si traduce in un aumento del tempo necessario per la cifratura e decifratura delle informazioni. Inoltre, nei sistemi asimmetrici, il testo cifrato è più lungo del testo in chiaro e quindi richiedono quantitativi di memoria maggiore per memorizzare le informazioni cifrate. Gli algoritmi di cifratura simmetrica sono divisi in due: stream cipher e block cipher. Per quanto riguarda i block cipher, il testo in chiaro è suddiviso in blocchi e quindi cifrato blocco per blocco. Invece, nei sistemi stream cipher il principio di funzionamento è basato sull operazione di XOR fatta fra il testo in chiaro e il key stream. Nel nostro contesto gli algoritmi di cifratura a flusso sono più adatti per quanto riguarda le prestazioni: la generazione del key stream può essere fatta in parallelo con le operazioni di fetch dei dati. L imperfezione dei sistemi di cifratura a blocco deriva dal fatto che le operazioni di decifratura non posso incominciare fin tanto che non si ha a disposizione un blocco completo. Gli algoritmi di cifratura simmetrica a blocco permettono però differenti modi di funzionamento, capitolo 4.4. L ECB (Electronic Code Book) è il più ovvio metodo di funzionamento ma non garantisce un livello di sicurezza accettabile. Il metodo CBC (Cipher Block Chaining) permette un alto livello di sicurezza ma la dipendenza del blocco cifrato dai sui precedenti non lo rende adatto alla lettura non sequenziale dei dati; il che lo rende inadatto per il nostro scopo. Infatti, la lettura della memoria da parte della CPU non è sequenziale (e.g. istruzioni di jump). Il metodo OFB in modalità counter mode permette di ottenere dei livelli di sicurezza molto simili alla modalità CBC e conferisce delle proprietà di accesso casuale per la cifratura è decifratura dei dati. Quest ultima modalità di funzionamento permette di vedere il codificatore a blocco come un sistema di cifratura a flusso. In questa modalità la generazione del key stream è indipendente dalla lettura dei dati e può essere fatta in parallelo con le operazione di fetch dei dati. L utilizzo di un codificatore a blocco in modalità counter mode rispetto a un codificatore a flusso è preferibile vista la maggior sicurezza offerta dagli algoritmi di cifratura a blocco attualmente sviluppati e standardizzati. 7.2 Architetture: stato dell arte L idea della cifratura del contenuto della memoria esterna è stata sviluppata circa 2 anni fa da Best [45, 46, 47]. Best ha proposto di considerare la CPU come un entità sicura, quindi al suo interno gli indirizzi e i dati sono sono in forma chiara mentre sono in forma cifrata all esterno del SOC (System On Chip). A tale scopo propone di implementare all interno del SOC un unità cifrante e di immagazzinare in un registro interno la chiave di cifratura, figura 7.1. Il cifratore a blocco scelto è 100

109 7.2 Architetture: stato dell arte basato su funzioni crittografiche basilari come mono e poli-sostituzioni alfabetiche e trasposizione dei byte. Figura 7.1. Principio di funzionamento dell idea di Best Alcune delle regole enunciate da Best sono ancora oggi considerate come riferimento: il System On Chip è considerato sicuro, l unità cifrante e la chiave di cifratura sono all interno del SOC, inoltre l unità cifrante è posizionata fra la memoria cache e il controllore della memoria esterna. In letteratura sono proposte diverse architetture basate sui principi dettati da Best e alcune di queste architetture sono diventate brevetti industriali [4, 49, 50] mentre altre sono ancora di tipo accademico [43, 51, 52]. VLSI Technology [4] propone un architettura, mostrata in figura 7.2, in cui il trasferimento dei dati da e verso la memoria esterna sono fatti page-by-page. Tutte le richieste di dati esterne alla CPU sono gestite da un Secure DMA e le comunicazioni fra la memoria esterna e quella interna utilizzano un Encryption/Decryption Core. Questo sistema consente di utilizzare un codificatore a blocco. Il Secure DMA è controllato dal sistema operativo che obbligatoriamente deve essere considerato sicuro. Quest ultimo aspetto è fortemente penalizzante per l architettura perché richiede un sistema operativo sviluppato appositamente. L architettura dalla General Instrument Corporation [49] visibile in figura 7.3 utilizza un core crittografico basato sullo standard 3-DES in modalità di funzionamento CBC. Questa architettura offre la possibilità di autenticare i dati provenienti dalla memoria esterna attraverso un algoritmo di impronta (keyed hash algorithm). Il funzionamento in modalità CBC dell algoritmo di cifratura offre un alto livello di sicurezza ma, come visto in precedenza, implica una degradazione inaccettabile delle prestazioni per gli accessi casuali nella memoria esterna. Tra i dispositivi di autenticazione sviluppati per differenti mercati, come quello 101

110 7 Tecniche per la protezione dell informazione nei sistemi embedded Figura 7.2. Architettura della VLSI Technology Figura 7.3. Architettura della General Instrument Corporation delle pay-tv e le carte di credito, c è il sistema proposto dalla Dallas Semiconductors, figura 7.4. La vecchia versione del dispositivo, la DS5002FP [50], fu violata dal celebre attacco sviluppato da Markus G. Kuhn [44]. La recente DS5240 [50] implementa un cifratore basato sullo standard DES o 3-DES quindi con una chiave di cifratura a 64 bit anziché gli della precedente versione. Guilmont et al. [43] utilizza un innovativa tecnica di predizione dei dati di cui è necessario il fetch dalla memoria esterna. L unità per la decifratura dei dati è 102

111 7.2 Architetture: stato dell arte Figura 7.4. Architettura della Dallas Semiconductors basata su una versione con pipeline dell algoritmo 3-DES. Grazie a questa tecnica l autore presuppone di mantenere il costo della decodifica dei dati al di sotto del 2,5% in termini di performance. Tuttavia questo risultato è stato ottenuto richiamando dalla memoria dei dati di grandezza pari alla dimensione del blocco dell unità di decifratura. Come visto in precedenza, la maggior perdita di performance si ha nella lettura e scrittura di dati di dimensione inferiore a quella del blocco dell unità di decifratura. Il progetto XOM sviluppato dal gruppo di ricerca VLSI dell università di Stanford (USA) utilizza una versione con pipeline dell algoritmo AES come unità cifrante. L obbiettivo principale di questo progetto non è l unità cifrante ma lo sviluppo di un architettura robusta ai tentativi di manomissione (tamper-resistant). L architettura proposta dal progetto AEGIS [52] prevede l utilizzo di un motore crittografico basato su una versione con pipeline dell algoritmo AES. La modalità di funzionamento dell unità cifrante è la CBC ma la lunghezza dei blocchi concatenati è pari alla dimensione di una riga della memoria cache; ciascuna riga di cache è cifrata in maniera indipendente. Questa caratteristica permette un accesso casuale alle memoria esterna garantendo un discreto livello di protezione. Tuttavia, i dati scaricati dalla memoria non possono essere utilizzati finché non si è eseguito l algoritmo di cifratura sull intera riga di memoria cache. La generazione del vettore di inizializzazione (IV) necessario alla modalità CBC è formato dall indirizzo di memoria del blocco e da un vettore casuale. Per contrastare il birthday attack [42] è possibile sostituire il vettore casuale con un contatore. Lo svantaggio di questa architettura è ancora una volta il peso computazionale da sostenere per garantire un livello di sicurezza adeguato. Si stima che questa architettura introduca un degrado delle performance del 25%. 103

112 7 Tecniche per la protezione dell informazione nei sistemi embedded Le architetture appena descritte condivido l utilizzo di un algoritmo di cifratura robusto e approvato dal NIST (National Institute of Standard Technology): il 3-DES o l attuale AES. Inoltre in tutte le architetture presentate l unità cifrante (EDU) è posizionata fra la memoria cache e il controllore della memoria, figura 7.5. Si differenziano per le modalità con la quale propongono la cifratura dei dati provenienti dalla memoria esterna e dalle performance che permettono di raggiungere. Trusted area CPU core Cache (a) EDU Memory Controller External Memory Figura 7.5. Posizione dell unità cifrante 104

113 Capitolo Il processore LEON3 Il LEON3 è un progetto open source di un microprocessore RISC compatibile con l architettura SPARC V sviluppato dalla Gaisler Research [53]. Il microprocessore è molto versatile ed è particolarmente adatto per il progetto di SOC (System On a Chip). La sua versatilità risiede nella caratteristica di poter essere ottimizzato su diversi aspetti, come ad esempio, le performance, il consumo di potenza, I/O throughput, occupazione di risorse ed il costo. Il microprocessore si interfaccia con il bus AMBA-2.0 AHB e supporta l IP plug&play descritta nella libreria GRLIB (Gaisler Research ip LIBrary). Il microprocessore può essere efficientemente implementato nelle tecnologie FPGA e ASIC ed utilizza delle celle standard di RAM sincrona per implementare sia la memoria cache che i register file. Per promuovere l architettura SPARC e semplificare la progettazione vengono forniti le descrizioni hardware in VHDL sia del processore LEON3 che della libreria IP sotto licenza GNU (General Public License). Il LEON3 è anche disponibile in versione fault tolerant per applicazioni spaziali..1 Overview Il LEON3 è un microprocessore a 32 bit conforme allo standard IEEE-1754 (SPARC V). È stato progettato per applicazioni embedded e le sue principali caratteristiche sono: pipeline a 7 stadi cache separate per dati e istruzioni moltiplicatore e divisore hardware unità per il supporto del debug on-chip 105

114 Il processore LEON3 compatibilità con sistemi multiprocessore L architettura del LEON3, figura.1, è composta da diversi macro blocchi alcuni dei quali vengono brevemente descritti. 3-Port Register File IEEE-754 FPU Trace Buffer Co-Processor 7-Stage Integer pipeline Debug port Debug support unit HW MUL/DIV Interrupt port Interrupt controller Local IRAM I-Cache D-Cache Local DRAM ITLB SRMMU AHB I/F DTLB AMBA AHB Master (32-bit) Figura.1. Schema a blocchi del microprocessore LEON3 Integer Unit L integer unit del LEON3 implementa in pieno lo standard SPARC V comprese le istruzioni per la moltiplicazione e divisione hardware. Il numero di registri della register windows è configurabile, entro i limiti dello standard SPARC (2 32), e di default è pari a. Il pipeline è su 7 livelli con interfaccia separata per le istruzioni e i dati (architettura Harvard). Cache sub-system Il LEON3 ha una sistema cache molto flessibile che consiste in due chace separate per la gestione dei dati e delle istruzioni. Entrambe possono essere configurate in 1 4 set, kbyte/set, byte per linea. Il subblocking è implementato con un bit di validità per ciascuna parola da 32 bit. La cache istruzioni utilizza una tecnica di streaming, durante il riempimento della riga, per ridurre al minimo il tempo di attesa. La cache dati utilizza la politica di pass-through e implementa un buffer di scrittura da due parole. La cache dati può inoltre eseguire il bus-snooping sul bus AHB. A supporto di entrambi i controllori dell memoria cache può essere implementata una scratchpad RAM locale che permette di realizzare un accesso in memoria di tipo 0-waitstates senza il write back dei dati. 106

115 .1 Overview Floating point unit e co-processor L integer unit del LEON3 fornisce un interfaccia per la floating-point unit (FPU) e per un eventuale co-processore. Sono disponibili due FPU, una sviluppata dalla Gaisler Research (GRFPU) e l altra sviluppata della Sun Microsystems (Meiko FPU core). La floating-point unit e l eventuale co-processore elaborano i dati in parallelo all integer unit finché non vi sono dei conflitti nell utilizzo di risorse o dati in comune. Memory management unit Può essere opzionalmente abilitata una Memory Management Unit (SRMMU) compatibile con lo standard SPARC V. La SRM- MU provvede a tradurre gli indirizzi, multipli di 32 bit, della memoria virtuale nei 36 bit della memoria fisica. Sono implementati tre livelli hardware della table-walk e la MMU può essere configurata per gestire fino a 64 fully-associative TLB. On-chip debug support Il pipeline del LEON3 ha la caratteristica di permettere di effettuare un debug non intrusivo. Per aiutare il software di debug possono essere abilitati fino a quattro registri per il watch-point. Ciascun registro può causare un evento di breakpoint su di un istruzione arbitraria o su un determinato intervallo di indirizzamento. Quando questa unità, che è opzionale, viene abilitata i watch-point possono essere utilizzati per entrare nella modalità di debug. Attraverso l interfaccia di supporto al debug è possibile accedere a tutti i registri del processore e alla memoria cache. L interfaccia per il debug permette inoltre il single stepping, l instruction tracing e il controllo dei break-point/watch-point hardware. Infine è implementato un buffer per monitorare e memorizzare le istruzioni eseguite che potranno essere lette attraverso l interfaccia per il debug. Interrupt interface Il LEON3 supporta fino a un totale di 15 interrupt asincroni. L interfaccia di interrupt fornisce le funzionalità per la generazione e la gestione degli interrupt. AMBA interface Il sistema cache implementa un unità master per il bus AMBA AHB che permette la lettura e la scrittura da e verso la memoria cache. L interfaccia è compatibile con lo standard AMBA-2.0. Durante il riempimento di una riga della memoria cache è generata una richiesta di trasferimento di tipo incremental burst per ottimizzare il trasferimento dei dati. Power-down mode Il processore LEON3 implementa la modalità di power-down che arresta il pipeline e la cache fino all arrivo di un successivo interrupt. Questa è una strategia vincente per minimizzare il consumo di energia quando l applicazione è inattiva. 107

116 Il processore LEON3 Multi-processor support Il LEON3 è progettato per essere utilizzato in sistemi multiprocessore. Ciascun processore ha un proprio numero identificativo che permette indicizzare i processori. I meccanismi di write-through delle memorie cache e di snooping garantiscono la coerenza dei dati condivisi. Le prestazioni che il microprocessore LEON3 dipendono molto dalla sua configurazione. A titolo di esempio, utilizzando K+K di memoria cache e un moltiplicatore 16 16, il resoconto del benchmark dhrystone 2.1 è di iterazioni/s/mhz utilizzando il compilatore gcc con l opzione -O2. Questo significa che vengono eseguite 0.5 MIPS/MHz utilizzando come riferimento per un MIPS il valore di VAX 11/70..2 Cache istruzioni In questo capitolo si analizzerà in dettaglio le caratteristiche della memoria cache per le istruzioni implementata dal microprocessore LEON3. Questa analisi, come si vedrà nel capitolo 9, è di fondamentale importanza per la comprensione del funzionamento della memoria cache..2.1 Funzionamento La memoria cache per le istruzioni può essere configurata come direct-mapped o come multi-set con associatività da 2 a 4. L algoritmo di rimpiazzamento dei dati per la cache multi-set da 2, 3 o 4 set, può essere scelto fra il Least Recently Used (LRU) o il Random Replacement Policy; solo per la cache multi-set a 2 set è possibile utilizzare l algoritmo di Least Recently Replace (LRR). La dimensione del set è configurabile tra 1 e 64 kbyte e diviso in linee di memoria da 16 o 32 byte. Ciascuna linea ha associato un cache tag che consiste in un registro che memorizza l address tag, l informazione di validità dei dati (un bit per ciascuna word) e opzionalmente un bit per l informazione di LLR e un bit per l informazione di lock. Al verificarsi di un cache miss, di una locazione di memoria di cui è possibile la memorizzazione in memoria cache, l istruzione viene recuperata e vengono aggiornato il cache tag e la linea di memoria corrispondenti. In una configurazione multi-set, il set in cui memorizzare la linea viene scelto un accordo con l algoritmo di rimpiazzamento scelto. Se è abilitata l opzione di instruction burst fetch, nel cache control register (CCR), la linea della cache è riempita dalla memoria principale a partire dall indirizzo di partenza fino alla fine della linea. Contemporaneamente, viene implementata la tecnica di streaming, in cui le istruzioni vengono inoltrate all IU. Se l IU non accetta il flusso di istruzioni a causa di una dipendenza interna o ad un istruzione che 10

117 .2 Cache istruzioni dura più di un ciclo, l IU viene messa in attesa fino a che la linea di memoria non viene riempita completamente. Se l IU esegue un istruzione di salto condizionato (e.g. branch, CALL, JMPL, RETT, TRAP... ) durante il riempimento di una riga viene interrotto lo streaming dalla memoria principale e si attende il prossimo cache miss. Se è abilitato l instruction burst fetch, lo streaming delle istruzioni verso l IU è abilitato anche quando la memoria cache è disabilitata. In questo caso le istruzioni recuperate dalla memoria vengono solamente inoltrate all IU e non viene aggiornata la linea di cache. Durante il riempimento di una linea di cache viene richiesto al bus AMBA AHB un trasferimento in modalità incremental burst. Se si sono verificati degli errori nell accesso alla memoria durante il riempimento di una linea di cache, il corrispondente bit di validità nel cache tag non viene impostato. Se l IU richiede un istruzione che ha associato un bit di validità non impostato, viene generato un cache miss, forzando una nuova lettura nella memoria principale. Se l errore persiste viene generata un istruzione trappola (tt=0 1) che permette di uscire dallo stato di errore..2.2 Instruction cache tag L instruction cache tag è formato da diversi campi come mostrato in figura.2. In funzione delle configurazione della cache saranno implementati i bit necessari al suo funzionamento. Ad esempio, una memoria cache da 4 kbyte con 16 bytes per linea necessita di 4 bit di validità (uno per ogni word da 32 bit) e 12 bit per l indirizzo di tag..2.3 Funzionalità aggiuntive della cache istruzioni Vengono qui di seguito descritte alcune peculiarità della memoria cache che sono implementate nel microprocessore LEON3. Cache flushing La cache può essere svuotata eseguendo l istruzione di FLUSH ma anche settando il bit FI nel registro di controllo della cache o attraverso la scrittura in una qualsiasi locazione di memoria con ASI=0 15. Lo svuotamento della cache richiede un ciclo di clock per ogni linea. Durante il flushing delle istruzioni l IU non può essere arrestata e la cache è disabilitata. Quando l operazione è terminata la cache riassume lo stato precedente (disable, enable o frozen) indicato nel registro di controllo. L accesso diagnostico alla cache non è possibile durante l operazione di FLUSH e causa un eccezione (trap=0 09) se si tenta l accesso. Accesso diagnostico alla cache Tags e dati nella cache istruzioni possono essere letti e/o scritti attraverso esecuzione delle istruzioni LDA e STA nello spazio 109

118 Il processore LEON3 Tag for 1 Kbyte set, 32 bytes/line ATAG LRR LOCK VALID Tag for 4 Kbyte set, 16bytes/line 31 ATAG LRR LOCK VALID 0 Figure 165. Instruction cache tag layout examples Address TAG (ATAG) [31:10] Contiene l indirizzo di tag della linea di cache corrispondente LLR [9] Utilizzato dall algoritmo LLR per memorizzare le informazioni sul rimpiazzamento, altrimenti è impostato a 0. LOCK [] Blocca la scrittura di una linea di cache quando è impostato. È pari a 0 quando la linea non è bloccata. Valid(V) [7:0] È settato quando la word della linea di cache contiene dati validi. Questo bit viene impostato al termine di una scrittura completa di una riga di memoria cache, se la lettura dalla memoria principale ha generato degli errori questo bit non viene impostato. L istruzione di FLUSH resetta i bit di valid. V[0] corrisponde alla prima word con indirizzo 0, V[1] alla seconda con indirizzo 1 e cosi via. Figura.2. Instruction cache tag di indirizzo ASI 0 C e 0 D. I bit dell indirizzo che formano l offset della memoria cache saranno utilizzati per indirizzare il tag in cui accedere mentre i bit meno significativi dell indirizzo di tag saranno utilizzati per indirizzare il set della cache. La lettura diagnostica del tag è possibile attraverso l esecuzione dell istruzione LDA con ASI=0 C. La linea di cache e il set sono indirizzati rispettivamente attraverso i bit che formano l offset della memoria cache e dai bit meno significativi dei bit che formano l indirizzo di tag. Analogamente il blocco dati 110

119 .2 Cache istruzioni può essere letto attraverso l esecuzione dell istruzione LDA con ASI=0 D. La word dati (è un istruzione) da leggere è indirizzata dal registro A[4:2]. Il tags dell indirizzo può essere direttamente scritto eseguendo l istruzione STA con ASI=0 C. La linea di cache e il set sono indirizzati attraverso i bit che formano l offset della memoria cache e i bit meno significativi dell indirizzo di tag. Il registro D[31:10] è scritto all interno del campo ATAG e i bit di validità sono scritti con il contenuto del registro D[7:0]. Il bit D[9] è scritto all interno del campo LLR (se abilitato) e D[] è scritto all interno del campo lock (se abilitato). Il blocco dati può essere scritto attraverso l esecuzione dell istruzione STA con ASI=0 D. La word dati (è un istruzione) da scrivere è indirizzata dal registro A[4:2]. Blocco di una linea di cache Nella configurazione multi-set può essere impostato nell instruction cache tag il bit di lock che informa il controllore della cache l impossibilità di rimpiazzare la linea di cache corrispondente. Per bloccare una linea di cache è necessario eseguire una scrittura diagnostica nell instruction cache tag della linea che deve essere bloccata, impostando il campo Address TAG con l address tag della linea che si intende bloccare, il bit di lock con il valore logico 1 e ripulire i bit di validità. La linea di cache bloccata sarà aggiornata inseguito a un read miss. La prima linea di cache del primo set è di default bloccata. La procedura di bloccaggio su differenti linee ma con lo stesso offset viene eseguita a partire dal primo set e in ordine verso l ultimo set. L ultimo set non può essere bloccato ed è sempre sostituibile. La procedura di sbloccaggio è eseguita in ordine inverso, cioè a partire dal penultimo set. NOTA: Questa caratteristica deve essere abilitata durante la fase di configurazione del microprocessore LEON3. Memoria RAM locale per le istruzioni È possibile collegare al controllore della memoria cache una memoria RAM di supporto. La dimensione della memoria è configurabile e compresa fra 1 e 256 kbyte. La memoria RAM locale può mappare un qualsiasi blocco da 16 Mbyte dello spazio di indirizzamento. Quando si eseguono istruzioni memorizzate nella memoria RAM locale non si causa lo stallo del pipeline dell IU e non si generano letture sul bus AMBA AHB. Si può accedere alla memoria RAM locale attraverso delle istruzioni di lettura/scrittura (LD/ST) di integer word. È permessa la lettura/scrittura solamente di word, l accesso alla memoria a livello di byte, half word o double causa la generazione di un eccezione. 111

120 Il processore LEON3 Memoria scratchpad RAM locale Può essere opzionalmente collegata una memoria scratchpad RAM locale al controllore della cache. Questa tecnica permette un accesso in memoria di tipo 0-waistates. La memoria RAM può essere compresa fra 1 e 512 kbyte e può mappare un qualsiasi blocco da 16 Mbyte dello spazio di indirizzamento. Le istruzioni lette attraverso questa tecnica non vengono memorizzato in memoria cache e non attraversano il bus AMBA AHB. La lettura e scrittura attraverso questa tecnica può essere fatta solamente dal processore, e non dalle altre periferiche collegate al bus AMBA AHB. La memoria deve essere inizializzata dal software (attraverso le istruzioni di store) prima del suo utilizzo. L indirizzo di default della memoria RAM è 0 e NOTA: Questa tecnica può essere utilizzata solo se la MMU è disabilitata. Registro di controllo della cache Il Cache Control Register (CCR) è un registro, figura.3, in comune fra la cache istruzioni e quella dati e ne controlla il funzionamento. Ciascuna cache può essere in tre diverse modalità: disabilitata, abilitata e frozen. Se è disabilitata le richieste di lettura e scrittura sono direttamnete passate al memory controller. Se è abilitata, la memoria chace è abilitata ed opera come descritto in precedenza. Se è nello stato di frozen, la memoria cache è accessibile e si mantiene sincronizzata con la memoria principale (cache dati) come se fosse abilitata ma nessuna nuova linea viene allocata inseguito ad un read miss. Se DF o IF sono impostati, la corrispondente memoria cache entra nella modalità frozen a seguito di un interrupt asincrono. Questa particolarità è utile nelle applicazioni in tempo reale per permettere un calcolo accurato del segmento di codice con il tempo di esecuzione più lungo. Registro di configurazione della cache Il Cache Configuration Register, figura.4, è di sola lettura e indica la dimensione e la configurazione della memoria cache. Sono necessari due registri, uno per la memoria cache dei dati ed uno per la memoria cache delle istruzioni. Entrambi i registi sono accessibili attraverso le operazioni di load/store (LDA/STA) utilizzando ASI=2. La seguente tabella di figura.5 mostra l indirizzo dei registri. Considerazioni software Dopo l operazione di reset la memoria cache è disabilitata e il CCR è 0. Prima di abilitare la cache è bene eseguire l operazione di flush per ripulire i campi ATAG e VALID. Un appropriata sequenza assembler potrebbe essere la seguente: flush 112

121 on read misses..2 Cache istruzioni DS FD FI IB IP DP DF IF 3 2 DCS 1 ICS 0 Instruction cache flush pending (IP) Data cache flush pending (DP) Data Cache Freeze on Interrupt (DF) Instruction Cache Freeze on Interrupt (IF) Data Cache state (DCS) Instruction Cache state (ICS) Data cache snoop enable Figure [23] 167. Cache Secontrol impostato register abilita lo snooping (DS) della cache dati. Flus data cache (FD) [22] Se impostato svuota la memoria cache dei dati. È sempre letto come zero. Flush Instruction cache (FI) cache delle istruzioni. È sempre [21] Se impostato svuota la memoria letto come zero. Instruction burst fetch [16] Queta impostazione abilita la lettura (IB) delle istruzioni dalla memoria principale in modalità burst. [15] Questo bit viene impostato duarante l esecuzione dell operazione di flush della cache istruzioni. [14] Questo bit viene impostato duarante l esecuzione dell operazione di flush della cache dati. [5] Se impostato la meoria cache dei dati entra nella modalità frozen a seguito di un interrupt asincrono. [4] Se impostato la meoria cache delle istruzioni entra nella modalità frozen a seguito di un interrupt asincrono. [3:2] Indica lo stato della memoria cache dei dati secondo il seguente schema: 0=disabilitata, 01=frozen, 11=abilitata. [1:0] Indica lo stato della memoria cache delle istruzioni secondo il seguente schema: 0=disabilitata, 01=frozen, 11=abilitata. Figura.3. Cache Control Register (CCR) set 0x1000f, %g1 sta%g1, [%g0] 2 113

122 Il processore LEON CL REPL SN SETS SSIZE LR LSIZE LRSIZE LRSTART 4 3 M 0 Cache locking (CL) [31] Impostato se è implementato il cache locking. Cache replacement [29:2] 00=nessuna politica di rimpiazzamneto policy (REPL) (direct mapped cache), 01=LRU, 10=LLR, 11=random. Cache snooping (SN) [27] Impostato se è implementato lo snoopig. Cache associativity [26:24] Numero dei set della memoria cache: (SETS) 000=direct mapped, 001=2- way associative, 010=3-way associative, 011=4-way associative. Set size (SSIZE) [23:20] Indica la dimensione (KByte) di ciascun set. Size = 2 SIZE. Local ram (LR) [19] Impostato se è implementata la tecnica scratch pad. Line size (LSIZE) [1:16] Indica la dimensione (word) di ciascuna linea. Linesize = 2 LSZ. Local ram size (LRSZ) [15:12] Indica la dimensione in (KByte) della memoria ram locale implementata con la tecnica scratch Local ram start address (LRSTART) pad. Localramsize = 2 LRSZ. [11:4] Indica gli MSB dell indirizzo di partenza della memoria ram locale. MMU (M) [3] Impostato a 1 se è presente la MMU. Figura.4. Cache Configuration Register Address 0x00 0x04 0x0 0x0C Register Cache control register Reserved Instruction cache configuration register Data cache configuration register Figura.5. Indirizzo dei registri di configurazione della cache 114

123 .3 La libreria GRLIB IP.3 La libreria GRLIB IP La libreria GRLIB IP è una collezione di IP (Intelligent Peripheral) espressamente sviluppate per le architetture SOC (System On Chip). Le IP sono sviluppate per condividere un bus comune e utilizzare un metodo coerente per la simulazione e la sintesi. La libreria è stata realizzata per essere pienamente compatibile con differenti strumenti CAD e differenti tecnologie implementative. Un unico metodo plug&play viene utilizzato per configurare e connettere le IP in maniera automatica. La GRLIB è un progetto open source ed è distribuita sotto licenza GNU GPL. Questo significa che tutti i componenti della libreria, sviluppati secondo questa licenza, sono distribuiti liberamente e vengono fornite le descrizioni hardware. La libreria GRLIB è reperibile presso [53] come un file compresso gzipped tar che può essere installato in qualsiasi direttorio del computer..3.1 Organizzazione della libreria La GRLIB è organizzata in differenti librerie VHDL ciascuna delle quali individua un IP (o venditore di IP) tramite un nome univoco. L uso di differenti librerie previene il conflitto di nome fra differenti IP e permette di nascondere all utente finale i dettagli implementativi non essenziali. Ciascuna libreria VHDL contiene parecchi package in cui vi sono le dichiarazioni per l esportazione degli IP e la loro interfaccia. Gli script per la simulazione e la sintesi sono generati automaticamente attraverso dei makefile globali. L aggiunta e la rimozione delle librerie e dei package possono essere fatte senza modificare alcun file globale. Alcune librerie globali provvedono a definire le strutture dati e le funzioni in comune. GRLIB fornisce gli script generator per i simulatori Modelsim, Ncsim e GHDL, e per i sintetizzatori Synopsys, Synplify, Cadence, Mentor, Actel, Altera, Lattice e Xilinx. Il supporto ad altri strumenti CAD può essere facilmente implementato. La libreria GRLIB è sviluppata per essere bus-centric, ovvero è una libreria in cui la maggior parte degli IP sono connessi a un bus comune. Il bus scelto per connettere i vari IP è l AMBA-2.0 AHB/APB poiché è largamente utilizzato (vedi i processori della ARM), può essere utilizzato liberamente senza restrizioni d utilizzo ed è disponibile a corredo un ampia documentazione. La figura.6 mostra un esempio di un sistema basato sul microprocessore LEON3 progettato con la libreria GRLIB. L utilizzo della libreria GRLIB permette di creare un microcontrollore completo di tutte le periferiche necessarie. Vengono messe a disposizione componenti come il controllore AMBA AHB/APB, il microprocessore LEON3 SPARC, l unita in virgola mobile IEEE-754, l AHB/ABH bridge, il controllore SDRAM a 32 bit PC133, il bridge PCI a 32 bit con DMA, l interfaccia ethernet a 10/100 Mbit, il controllore CAN-2.0, il debug link USB-2.0, il controllore PROM/SDRAM a /16/32 bit, il 115

124 Il processore LEON3 USB PHY RS232 JTAG PHY LVDS CAN PCI LEON3 Template Design LEON3 Processor USB Serial Dbg Link JTAG Dbg Link Ethernet MAC Spacewire Link CAN 2.0 Link PCI AMBA AHB AHB Controller Memory Controller AHB/APB Bridge VGA PS/2 AMBA APB UART Timers IrqCtrl I/O port /32-bits memory bus PROM I/O SRAM SDRAM Video DAC PS/2 IF RS232 WDOG 32-bit I/O port Figura.6. LEON3 template design controllore SSRAM a 32 bit, il controllore DDR a 32 bit, la porta GPIO a 32 bit, la timer unit, il controllore degli interrupt, l interfaccia PS/2 e il controllore VGA. GRLIB introduce nell architettura del sistema delle sostanziose novità per quanto riguarda la decodifica di indirizzo distribuita, la gestione degli interrupts e la funzionalità di plug&play. Per plug&play si intende la capacità di rilevare la configurazione hardware attraverso il software. Tale possibilità permette all applicazione software o al sistema operativo di configurarsi automaticamente al fine di adattarsi alle caratteristiche hardware. Ciò semplifica notevolmente lo sviluppo delle applicazioni software poiché diventano indipendenti dalla piattaforma hardware. La libreria GRLIB è stata sviluppata per essere facilmente implementata su tecnologia ASIC o FPGA. La portabilità prevede il supporto per componenti come le single-port RAM, le two-port RAM, le dual-port RAM, le single-port RAM, il generatore di clock e i pad. La portabilità è stata implementata per mezzo di componenti virtuali il cui codice VHDL permette di selezionare la tecnologia desiderata. Nell architettura del componente il comando VHDL generate è utilizzato per istanziare i macro blocchi della tecnologia selezionata..3.2 LEON3MP: configurazione del microprocessore La libreria GRLIB include all interno dei progetti già pronti all uso, tra questi vi è il LEON3MP che è un sistema di riferimento completo basato sul microprocessore LEON3. Il LEON3MP è altamente configurabile ed è composto dai seguenti IP: 116

125 .3 La libreria GRLIB IP Da 1 a 4 microprocessori LEON3 Unita per il supporto del debug (DSU) Controllore PROM/SRAM a 32 bit Controllore PROM/SRAM/SDRAM a /16/32/64 bit Interfaccia PCI a 32 bit, target only o initiator/target con FIFO e DMA Arbitro AHB round robin e controllore con supporto del plug&play AHB/APB bridge con supporto del plug&play Controllore degli interrupt Modular Timer Unit a 32 bit Da 1 a 2 UART con FIFO Interfaccia ethernet MAC a 10/100 Mbps Interfaccia CAN Link per il debug via seriale Link per il debug via ethernet Link per il debug via JTAG Il LEON3MP è costituito da un bus AMBA AHB e APB che connette fra loro i vari IP presenti nella libreria GRLIB. Il metodo di configurazione plug&play della GRLIB da la possibilità di assegnare qualsiasi combinazione di indirizzo e interrupts ai vari IP. Tuttavia per mantenere la compatibilità software con semplici sistemi operativi come il LEON Bare-C cross-compiler alcuni IP essenziali devono essere assegnati a predefiniti indirizzi e interrupt. La tabella.1 mostra le assegnazioni di default fatte per il LEON3MP. La configurazione del LEON3MP è definita attraverso il package di configurazione situato nel file VHDL config.vhd. Questo file può essere automaticamente generato utilizzando un interfaccia grafica, figura.7, basata su tkconfig. Per eseguire la GUI è necessario eseguire il comando make xconfig. Effettuata la configurazione l applicativo genererà in automatico il file di configurazione con i parametri selezionati. Dal menù principale si possono configurare tutti gli aspetti hardware del sistema LEON3MP. Tra le varie configurazioni c è quella che riguarda la configurazione della memoria cache, raggiungibile tramite il menù Processor, figura. 117

126 Il processore LEON3 IP Core Memory area Interrupt Memory controller : PROM - (separate SRAM and SDRAM : external I/O bus controllers, or combined : SRAM/SDRAM LEON2 controller) : Memory controller registers (APB) APB bridge : APB bus - UART : UART registers 2 Interrupt controller : IRQ registers - Timer unit : timer registers, 9 LEON3 debug support unit a : DSU registers - (DSU) Tabella.1. LEON3MP: assegnazioni di default per gli indirizzi e interrupt degli IP essenziali Figura.7. LEON3MP Design Configuration Il menù per la configurazione della memoria cache, figura.9, riporta in maniera chiara e schematica tutte le impostazioni possibili per la memoria cache delle istruzioni e dei dati. Per maggior chiarezza viene brevemente illustrato il significato delle impostazioni riguardanti la memoria cache per le istruzioni; fra parentesi graffe è riportato il nome della costante presente nel file VHDL config.vhd. Enable instruction cache Abilita la cache delle istruzioni che dovrebbe essere sempre abilitata per garantire il massimo delle prestazioni. Alcuni sistemi a basse prestazioni possono risparmiare spazio disabilitando la cache e accettando un calo di prestazioni di un fattore 2 3. {CFG ICEN} Associativity (sets) La cache delle istruzioni può essere implementata come una cache di tipo direct mapped o di tipo set associative. Per la prima tipologia è necessario impostare il parametro sul valore 1, mentre per la seconda tipologia il parametro va impostato fra 2 e 4 in base al numero di set che si intende implementare. Un alto livello di associatività tipicamente incrementa il cache hit rate e quindi le prestazioni. L altro lato della medaglia è l incremento del 11

127 .3 La libreria GRLIB IP Figura.. LEON3MP Design Configuration, Processor menù consumo di potenza e l aumento di risorse hardware per l implementazione. {CFG ISETS} Set size (kbytes/set) Permette di impostare la dimensione, espressa in kbytes, di ciascun set della memoria cache. I valori ammessi sono 1, 2, 4,, 16, 32, 64, e 256 kbytes. Alcune tecnologie implementative permettono la scelta dei valori compresi fra 2 e 16, mentre solo per la famiglia VIRTEX2 della XILINX è possibile scegliere nell intero range. Una dimensione ampia del set offre alte prestazioni ma limita la massima frequenza soprattutto se la tecnologia implementativa è l ASIC. La dimensione della cache è il prodotto fra il numero di set e il set size. {CFG ISETSZ} Line size (Bytes/line) Questo parametro consente di impostare la dimensione della linea di cache. Può essere impostata solamente fra due valori: 16 e 32 byte. Tipicamente di hanno dei benefici con un ampia dimensione di riga ma per limitare l eviction miss rate potrebbe essere preferibile selezionare il valore più basso. {CFG ILINE} Replacement algorithm Naturalmente l algoritmo di rimpiazzamento può essere scelto solo se stiamo implementando una cache di tipo set associative. È possibile scegliere fra tre algoritmi di rimpiazzamento: random, LRU e LRR. L algoritmo di rimpiazzamento casuale (random) utilizza un semplice contatore a 1 o 2 bit per selezionare il set ed ha un basso impatto sulle risorse hardware. Lo schema LRR utilizza un bit extra nel instruction cache tag e 119

128 Il processore LEON3 ha quindi anch esso un basso impatto sulle risorse hardware. Tuttavia questo schema può essere utilizzato solo se il set size e pari a 2. Lo schema LRU ha tipicamente le migliori prestazioni ma un impatto non trascurabile sull overhead. Per memorizzare la cronologia di accesso il 2-set LRU utilizza 1 flip-flop per linea mentre il 3-set LRU ne utilizza 3 e il 4-set LRU ne utilizza 5. {CFG IREPL} Cache locking Impostare su Y se si vuole abilitare il cache locking sulla memoria cache per le istruzioni. Il bloccaggio può essere fatto a livello di linea. Si incrementa di un bit la dimensione dell instruction cache tag. È preferibile disabilitare questa opzione se non vi è nessun motivo particolare. {CFG ILOCK} Enable local instruction RAM Questa opzione permette di inserisce una memoria RAM all interno del controllore della cache per le istruzioni. Essa opera in modo simile ad una cache di secondo livello poiché le istruzioni sono salvate in questa RAM quando vengono sostituite da altre nella cache principale. L accesso a questa RAM avviene senza accedere al bus AHB e in un solo ciclo di clock. {CFG ILRAMEN} Local instruction RAM size (kbytes) Definisce la dimensione della memoria RAM locale che può essere impostata fra i seguenti valori: 1, 2, 4,, 16, 32, 64, e 256 kbytes. {CFG ILRAMSZ} Local data RAM start address ( MSB) Vengono inizializzati gli MSB dell indirizzo iniziale della RAM. Come opzione di default viene proposto l indirizzo 0 E {CFG ILRAMADDR}.4 Analisi del codice VHDL In questo capitolo si analizzeranno le descrizioni hardware che realizzano il sistema cache del LEON3. Attraverso il tool di simulazione ModelSim SE PLUS 6.2c, della Mentor Graphics Corporation, si è analizzato il funzionamento della cache per le istruzioni dando particolare attenzione al protocollo di comunicazione fra i blocchi hardware che realizzano la memoria cache. Le descrizioni VHDL che governano il funzionamento della memoria cache sono quattro e sono raggiungibili attraverso la libreria gaisler disponibile nel progetto ModelSim testbench.mpf oppure all interno del direttorio...\lib\gaisler\leno3\. I seguenti quattro file contengono le omonime entity che realizzano la memoria cache: cache.vhd 120

129 .4 Analisi del codice VHDL Figura.9. LEON3MP Design Configuration, Cache System menu 121

Dispensa di Informatica I.1

Dispensa di Informatica I.1 IL COMPUTER: CONCETTI GENERALI Il Computer (o elaboratore) è un insieme di dispositivi di diversa natura in grado di acquisire dall'esterno dati e algoritmi e produrre in uscita i risultati dell'elaborazione.

Dettagli

Architettura hardware

Architettura hardware Architettura dell elaboratore Architettura hardware la parte che si può prendere a calci Sistema composto da un numero elevato di componenti, in cui ogni componente svolge una sua funzione elaborazione

Dettagli

C. P. U. MEMORIA CENTRALE

C. P. U. MEMORIA CENTRALE C. P. U. INGRESSO MEMORIA CENTRALE USCITA UNITA DI MEMORIA DI MASSA La macchina di Von Neumann Negli anni 40 lo scienziato ungherese Von Neumann realizzò il primo calcolatore digitale con programma memorizzato

Dettagli

Architetture Applicative

Architetture Applicative Alessandro Martinelli alessandro.martinelli@unipv.it 6 Marzo 2012 Architetture Architetture Applicative Introduzione Alcuni esempi di Architetture Applicative Architetture con più Applicazioni Architetture

Dettagli

Laboratorio di Informatica

Laboratorio di Informatica per chimica industriale e chimica applicata e ambientale LEZIONE 4 La CPU e l esecuzione dei programmi 1 Nelle lezioni precedenti abbiamo detto che Un computer è costituito da 3 principali componenti:

Dettagli

Prestazioni CPU Corso di Calcolatori Elettronici A 2007/2008 Sito Web:http://prometeo.ing.unibs.it/quarella Prof. G. Quarella prof@quarella.

Prestazioni CPU Corso di Calcolatori Elettronici A 2007/2008 Sito Web:http://prometeo.ing.unibs.it/quarella Prof. G. Quarella prof@quarella. Prestazioni CPU Corso di Calcolatori Elettronici A 2007/2008 Sito Web:http://prometeo.ing.unibs.it/quarella Prof. G. Quarella prof@quarella.net Prestazioni Si valutano in maniera diversa a seconda dell

Dettagli

Elettronica dei Sistemi Programmabili

Elettronica dei Sistemi Programmabili Elettronica dei Sistemi Programmabili Introduzione Stefano Salvatori Università degli Studi Roma Tre (stefano.salvatori@uniroma3.it) Università degli Studi Roma Tre Elettronica dei Sistemi Programmabili

Dettagli

Laboratorio di Informatica

Laboratorio di Informatica per chimica industriale e chimica applicata e ambientale LEZIONE 4 - parte II La memoria 1 La memoriaparametri di caratterizzazione Un dato dispositivo di memoria è caratterizzato da : velocità di accesso,

Dettagli

Calcolatori Elettronici A a.a. 2008/2009

Calcolatori Elettronici A a.a. 2008/2009 Calcolatori Elettronici A a.a. 2008/2009 PRESTAZIONI DEL CALCOLATORE Massimiliano Giacomin Due dimensioni Tempo di risposta (o tempo di esecuzione): il tempo totale impiegato per eseguire un task (include

Dettagli

TECNICO SUPERIORE PER L AUTOMAZIONE INDUSTRIALE

TECNICO SUPERIORE PER L AUTOMAZIONE INDUSTRIALE ISTRUZIONE E FORMAZIONE TECNICA SUPERIORE SETTORE INDUSTRIA E ARTIGIANATO TECNICO SUPERIORE PER L AUTOMAZIONE INDUSTRIALE STANDARD MINIMI DELLE COMPETENZE TECNICO PROFESSIONALI DESCRIZIONE DELLA FIGURA

Dettagli

CPU. Maurizio Palesi

CPU. Maurizio Palesi CPU Central Processing Unit 1 Organizzazione Tipica CPU Dispositivi di I/O Unità di controllo Unità aritmetico logica (ALU) Terminale Stampante Registri CPU Memoria centrale Unità disco Bus 2 L'Esecutore

Dettagli

SISTEMI DI ELABORAZIONE DELLE INFORMAZIONI

SISTEMI DI ELABORAZIONE DELLE INFORMAZIONI SISTEMI DI ELABORAZIONE DELLE INFORMAZIONI Prof. Andrea Borghesan venus.unive.it/borg borg@unive.it Ricevimento: martedì, 12.00-13.00. Dip. Di Matematica Modalità esame: scritto + tesina facoltativa 1

Dettagli

Introduzione. Classificazione di Flynn... 2 Macchine a pipeline... 3 Macchine vettoriali e Array Processor... 4 Macchine MIMD... 6

Introduzione. Classificazione di Flynn... 2 Macchine a pipeline... 3 Macchine vettoriali e Array Processor... 4 Macchine MIMD... 6 Appunti di Calcolatori Elettronici Esecuzione di istruzioni in parallelo Introduzione... 1 Classificazione di Flynn... 2 Macchine a pipeline... 3 Macchine vettoriali e Array Processor... 4 Macchine MIMD...

Dettagli

! La crittoanalisi è invece la scienza che cerca di aggirare o superare le protezioni crittografiche, accedendo alle informazioni protette

! La crittoanalisi è invece la scienza che cerca di aggirare o superare le protezioni crittografiche, accedendo alle informazioni protette Crittografia Cenni Damiano Carra Università degli Studi di Verona Dipartimento di Informatica La crittografia! Scienza che si occupa di proteggere l informazione rendendola sicura, in modo che un utente

Dettagli

Struttura del calcolatore

Struttura del calcolatore Struttura del calcolatore Proprietà: Flessibilità: la stessa macchina può essere utilizzata per compiti differenti, nessuno dei quali è predefinito al momento della costruzione Velocità di elaborazione

Dettagli

Esame di INFORMATICA

Esame di INFORMATICA Università di L Aquila Facoltà di Biotecnologie Esame di INFORMATICA Lezione 4 MACCHINA DI VON NEUMANN Anni 40 i dati e i programmi che descrivono come elaborare i dati possono essere codificati nello

Dettagli

Contenuti. Visione macroscopica Hardware Software. 1 Introduzione. 2 Rappresentazione dell informazione. 3 Architettura del calcolatore

Contenuti. Visione macroscopica Hardware Software. 1 Introduzione. 2 Rappresentazione dell informazione. 3 Architettura del calcolatore Contenuti Introduzione 1 Introduzione 2 3 4 5 71/104 Il Calcolatore Introduzione Un computer...... è una macchina in grado di 1 acquisire informazioni (input) dall esterno 2 manipolare tali informazioni

Dettagli

Un sistema operativo è un insieme di programmi che consentono ad un utente di

Un sistema operativo è un insieme di programmi che consentono ad un utente di INTRODUZIONE AI SISTEMI OPERATIVI 1 Alcune definizioni 1 Sistema dedicato: 1 Sistema batch o a lotti: 2 Sistemi time sharing: 2 Sistema multiprogrammato: 3 Processo e programma 3 Risorse: 3 Spazio degli

Dettagli

CALCOLATORI ELETTRONICI A cura di Luca Orrù

CALCOLATORI ELETTRONICI A cura di Luca Orrù Lezione 1 Obiettivi del corso Il corso si propone di descrivere i principi generali delle architetture di calcolo (collegamento tra l hardware e il software). Sommario 1. Tecniche di descrizione (necessarie

Dettagli

Sistema operativo: Gestione della memoria

Sistema operativo: Gestione della memoria Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Sistema operativo: Gestione della memoria La presente dispensa e

Dettagli

Software di sistema e software applicativo. I programmi che fanno funzionare il computer e quelli che gli permettono di svolgere attività specifiche

Software di sistema e software applicativo. I programmi che fanno funzionare il computer e quelli che gli permettono di svolgere attività specifiche Software di sistema e software applicativo I programmi che fanno funzionare il computer e quelli che gli permettono di svolgere attività specifiche Software soft ware soffice componente è la parte logica

Dettagli

SISTEMI DI NUMERAZIONE E CODICI

SISTEMI DI NUMERAZIONE E CODICI SISTEMI DI NUMERAZIONE E CODICI Il Sistema di Numerazione Decimale Il sistema decimale o sistema di numerazione a base dieci usa dieci cifre, dette cifre decimali, da O a 9. Il sistema decimale è un sistema

Dettagli

L informatica INTRODUZIONE. L informatica. Tassonomia: criteri. È la disciplina scientifica che studia

L informatica INTRODUZIONE. L informatica. Tassonomia: criteri. È la disciplina scientifica che studia L informatica È la disciplina scientifica che studia INTRODUZIONE I calcolatori, nati in risposta all esigenza di eseguire meccanicamente operazioni ripetitive Gli algoritmi, nati in risposta all esigenza

Dettagli

Input/Output. Moduli di Input/ Output. gestiscono quantità di dati differenti a velocità diverse in formati diversi. n Grande varietà di periferiche

Input/Output. Moduli di Input/ Output. gestiscono quantità di dati differenti a velocità diverse in formati diversi. n Grande varietà di periferiche Input/Output n Grande varietà di periferiche gestiscono quantità di dati differenti a velocità diverse in formati diversi n Tutti più lenti della CPU e della RAM n Necessità di avere moduli di I/O Moduli

Dettagli

Telerilevamento e GIS Prof. Ing. Giuseppe Mussumeci

Telerilevamento e GIS Prof. Ing. Giuseppe Mussumeci Corso di Laurea Magistrale in Ingegneria per l Ambiente e il Territorio A.A. 2014-2015 Telerilevamento e GIS Prof. Ing. Giuseppe Mussumeci Strutture di dati: DB e DBMS DATO E INFORMAZIONE Dato: insieme

Dettagli

CALCOLATORI ELETTRONICI A cura di Luca Orrù. Lezione n.7. Il moltiplicatore binario e il ciclo di base di una CPU

CALCOLATORI ELETTRONICI A cura di Luca Orrù. Lezione n.7. Il moltiplicatore binario e il ciclo di base di una CPU Lezione n.7 Il moltiplicatore binario e il ciclo di base di una CPU 1 SOMMARIO Architettura del moltiplicatore Architettura di base di una CPU Ciclo principale di base di una CPU Riprendiamo l analisi

Dettagli

Architettura di un calcolatore

Architettura di un calcolatore 2009-2010 Ingegneria Aerospaziale Prof. A. Palomba - Elementi di Informatica (E-Z) 7 Architettura di un calcolatore Lez. 7 1 Modello di Von Neumann Il termine modello di Von Neumann (o macchina di Von

Dettagli

Database. Si ringrazia Marco Bertini per le slides

Database. Si ringrazia Marco Bertini per le slides Database Si ringrazia Marco Bertini per le slides Obiettivo Concetti base dati e informazioni cos è un database terminologia Modelli organizzativi flat file database relazionali Principi e linee guida

Dettagli

LABORATORIO DI SISTEMI

LABORATORIO DI SISTEMI ALUNNO: Fratto Claudio CLASSE: IV B Informatico ESERCITAZIONE N : 1 LABORATORIO DI SISTEMI OGGETTO: Progettare e collaudare un circuito digitale capace di copiare le informazioni di una memoria PROM in

Dettagli

Architettura del calcolatore

Architettura del calcolatore Architettura del calcolatore La prima decomposizione di un calcolatore è relativa a due macro-componenti: Hardware Software Architettura del calcolatore L architettura dell hardware di un calcolatore reale

Dettagli

Automazione Industriale (scheduling+mms) scheduling+mms. adacher@dia.uniroma3.it

Automazione Industriale (scheduling+mms) scheduling+mms. adacher@dia.uniroma3.it Automazione Industriale (scheduling+mms) scheduling+mms adacher@dia.uniroma3.it Introduzione Sistemi e Modelli Lo studio e l analisi di sistemi tramite una rappresentazione astratta o una sua formalizzazione

Dettagli

23/02/2014. Dalla scorsa lezione. La Macchina di Von Neumann. Uomo come esecutore di algoritmi

23/02/2014. Dalla scorsa lezione. La Macchina di Von Neumann. Uomo come esecutore di algoritmi Dalla scorsa lezione LABORATORIO DI PROGRAMMAZIONE Corso di laurea in matematica LA MACCHINA DI VON NEUMANN Marco Lapegna Dipartimento di Matematica e Applicazioni Universita degli Studi di Napoli Federico

Dettagli

SISTEMI E RETI. Crittografia. Sistemi distribuiti e configurazione architetturale delle applicazioni WEB.

SISTEMI E RETI. Crittografia. Sistemi distribuiti e configurazione architetturale delle applicazioni WEB. SISTEMI E RETI Crittografia. Sistemi distribuiti e configurazione architetturale delle applicazioni WEB. CRITTOGRAFIA La crittografia è una tecnica che si occupa della scrittura segreta in codice o cifrata

Dettagli

Indice generale. OOA Analisi Orientata agli Oggetti. Introduzione. Analisi

Indice generale. OOA Analisi Orientata agli Oggetti. Introduzione. Analisi Indice generale OOA Analisi Orientata agli Oggetti Introduzione Analisi Metodi d' analisi Analisi funzionale Analisi del flusso dei dati Analisi delle informazioni Analisi Orientata agli Oggetti (OOA)

Dettagli

Architettura dei computer

Architettura dei computer Architettura dei computer In un computer possiamo distinguere quattro unità funzionali: il processore (CPU) la memoria principale (RAM) la memoria secondaria i dispositivi di input/output Il processore

Dettagli

Informatica - A.A. 2010/11

Informatica - A.A. 2010/11 Ripasso lezione precedente Facoltà di Medicina Veterinaria Corso di laurea in Tutela e benessere animale Corso Integrato: Matematica, Statistica e Informatica Modulo: Informatica Esercizio: Convertire

Dettagli

Informatica B a.a 2005/06 (Meccanici 4 squadra) PhD. Ing. Michele Folgheraiter

Informatica B a.a 2005/06 (Meccanici 4 squadra) PhD. Ing. Michele Folgheraiter Informatica B a.a 2005/06 (Meccanici 4 squadra) Scaglione: da PO a ZZZZ PhD. Ing. Michele Folgheraiter Architettura del Calcolatore Macchina di von Neumann Il calcolatore moderno è basato su un architettura

Dettagli

ARCHITETTURE DI SISTEMI INTEGRATI PER APPLICAZIONI SPECIFICHE. Design Flow

ARCHITETTURE DI SISTEMI INTEGRATI PER APPLICAZIONI SPECIFICHE. Design Flow ARCHITETTURE DI SISTEMI INTEGRATI PER APPLICAZIONI SPECIFICHE Design Flow Prof. Luigi Raffo Dipartimento di ingegneria elettrica ed elettronica Università di Cagliari Flusso di progetto classico su silicio

Dettagli

Appunti sulla Macchina di Turing. Macchina di Turing

Appunti sulla Macchina di Turing. Macchina di Turing Macchina di Turing Una macchina di Turing è costituita dai seguenti elementi (vedi fig. 1): a) una unità di memoria, detta memoria esterna, consistente in un nastro illimitato in entrambi i sensi e suddiviso

Dettagli

Organizzazione della memoria

Organizzazione della memoria Memorizzazione dati La fase di codifica permette di esprimere qualsiasi informazione (numeri, testo, immagini, ecc) come stringhe di bit: Es: di immagine 00001001100110010010001100110010011001010010100010

Dettagli

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi.

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi. Algoritmi 1 Sommario Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi. 2 Informatica Nome Informatica=informazione+automatica. Definizione Scienza che si occupa dell

Dettagli

ControlloCosti. Cubi OLAP. Controllo Costi Manuale Cubi

ControlloCosti. Cubi OLAP. Controllo Costi Manuale Cubi ControlloCosti Cubi OLAP I cubi OLAP Un Cubo (OLAP, acronimo di On-Line Analytical Processing) è una struttura per la memorizzazione e la gestione dei dati che permette di eseguire analisi in tempi rapidi,

Dettagli

Sistemi Operativi IMPLEMENTAZIONE DEL FILE SYSTEM. D. Talia - UNICAL. Sistemi Operativi 9.1

Sistemi Operativi IMPLEMENTAZIONE DEL FILE SYSTEM. D. Talia - UNICAL. Sistemi Operativi 9.1 IMPLEMENTAZIONE DEL FILE SYSTEM 9.1 Implementazione del File System Struttura del File System Implementazione Implementazione delle Directory Metodi di Allocazione Gestione dello spazio libero Efficienza

Dettagli

I sistemi di numerazione

I sistemi di numerazione I sistemi di numerazione 01-INFORMAZIONE E SUA RAPPRESENTAZIONE Sia dato un insieme finito di caratteri distinti, che chiameremo alfabeto. Utilizzando anche ripetutamente caratteri di un alfabeto, si possono

Dettagli

Strutturazione logica dei dati: i file

Strutturazione logica dei dati: i file Strutturazione logica dei dati: i file Informazioni più complesse possono essere composte a partire da informazioni elementari Esempio di una banca: supponiamo di voler mantenere all'interno di un computer

Dettagli

La gestione di un calcolatore. Sistemi Operativi primo modulo Introduzione. Sistema operativo (2) Sistema operativo (1)

La gestione di un calcolatore. Sistemi Operativi primo modulo Introduzione. Sistema operativo (2) Sistema operativo (1) La gestione di un calcolatore Sistemi Operativi primo modulo Introduzione Augusto Celentano Università Ca Foscari Venezia Corso di Laurea in Informatica Un calcolatore (sistema di elaborazione) è un sistema

Dettagli

Strutture di Memoria 1

Strutture di Memoria 1 Architettura degli Elaboratori e Laboratorio 17 Maggio 2013 Classificazione delle memorie Funzionalitá: Sola lettura ROM, Read Only Memory, generalmente usata per contenere le routine di configurazione

Dettagli

Introduzione alla Virtualizzazione

Introduzione alla Virtualizzazione Introduzione alla Virtualizzazione Dott. Luca Tasquier E-mail: luca.tasquier@unina2.it Virtualizzazione - 1 La virtualizzazione è una tecnologia software che sta cambiando il metodo d utilizzo delle risorse

Dettagli

Introduzione alle tecnologie informatiche. Strumenti mentali per il futuro

Introduzione alle tecnologie informatiche. Strumenti mentali per il futuro Introduzione alle tecnologie informatiche Strumenti mentali per il futuro Panoramica Affronteremo i seguenti argomenti. I vari tipi di computer e il loro uso Il funzionamento dei computer Il futuro delle

Dettagli

FONDAMENTI di INFORMATICA L. Mezzalira

FONDAMENTI di INFORMATICA L. Mezzalira FONDAMENTI di INFORMATICA L. Mezzalira Possibili domande 1 --- Caratteristiche delle macchine tipiche dell informatica Componenti hardware del modello funzionale di sistema informatico Componenti software

Dettagli

Fasi di creazione di un programma

Fasi di creazione di un programma Fasi di creazione di un programma 1. Studio Preliminare 2. Analisi del Sistema 6. Manutenzione e Test 3. Progettazione 5. Implementazione 4. Sviluppo 41 Sviluppo di programmi Per la costruzione di un programma

Dettagli

Laurea Specialistica in Informatica

Laurea Specialistica in Informatica Corso di Laurea in FISICA Laurea Specialistica in Informatica Fisica dell informazione 1 Elementi di Architettura degli elaboratori Prof. Luca Gammaitoni Informazioni sul corso: www.fisica.unipg unipg.it/gammaitoni/fisinfoit/gammaitoni/fisinfo

Dettagli

Scopo della lezione. Informatica. Informatica - def. 1. Informatica

Scopo della lezione. Informatica. Informatica - def. 1. Informatica Scopo della lezione Informatica per le lauree triennali LEZIONE 1 - Che cos è l informatica Introdurre i concetti base della materia Definire le differenze tra hardware e software Individuare le applicazioni

Dettagli

lo 2 2-1 - PERSONALIZZARE LA FINESTRA DI WORD 2000

lo 2 2-1 - PERSONALIZZARE LA FINESTRA DI WORD 2000 Capittol lo 2 Visualizzazione 2-1 - PERSONALIZZARE LA FINESTRA DI WORD 2000 Nel primo capitolo sono state analizzate le diverse componenti della finestra di Word 2000: barra del titolo, barra dei menu,

Dettagli

Lezione 8. La macchina universale

Lezione 8. La macchina universale Lezione 8 Algoritmi La macchina universale Un elaboratore o computer è una macchina digitale, elettronica, automatica capace di effettuare trasformazioni o elaborazioni su i dati digitale= l informazione

Dettagli

Progettaz. e sviluppo Data Base

Progettaz. e sviluppo Data Base Progettaz. e sviluppo Data Base! Progettazione Basi Dati: Metodologie e modelli!modello Entita -Relazione Progettazione Base Dati Introduzione alla Progettazione: Il ciclo di vita di un Sist. Informativo

Dettagli

Generazione Automatica di Asserzioni da Modelli di Specifica

Generazione Automatica di Asserzioni da Modelli di Specifica UNIVERSITÀ DEGLI STUDI DI MILANO BICOCCA FACOLTÀ DI SCIENZE MATEMATICHE FISICHE E NATURALI Corso di Laurea Magistrale in Informatica Generazione Automatica di Asserzioni da Modelli di Specifica Relatore:

Dettagli

Scheduling della CPU. Sistemi multiprocessori e real time Metodi di valutazione Esempi: Solaris 2 Windows 2000 Linux

Scheduling della CPU. Sistemi multiprocessori e real time Metodi di valutazione Esempi: Solaris 2 Windows 2000 Linux Scheduling della CPU Sistemi multiprocessori e real time Metodi di valutazione Esempi: Solaris 2 Windows 2000 Linux Sistemi multiprocessori Fin qui si sono trattati i problemi di scheduling su singola

Dettagli

Ing. Paolo Domenici PREFAZIONE

Ing. Paolo Domenici PREFAZIONE Ing. Paolo Domenici SISTEMI A MICROPROCESSORE PREFAZIONE Il corso ha lo scopo di fornire i concetti fondamentali dei sistemi a microprocessore in modo semplice e interattivo. È costituito da una parte

Dettagli

Esercizio 1: trading on-line

Esercizio 1: trading on-line Esercizio 1: trading on-line Si realizzi un programma Java che gestisca le operazioni base della gestione di un fondo per gli investimenti on-line Creazione del fondo (con indicazione della somma in inizialmente

Dettagli

Architettura dei calcolatori II parte Memorie

Architettura dei calcolatori II parte Memorie Università degli Studi di Palermo Dipartimento di Ingegneria Informatica Informatica ed Elementi di Statistica 3 c.f.u. Anno Accademico 2010/2011 Docente: ing. Salvatore Sorce Architettura dei calcolatori

Dettagli

SISTEMI OPERATIVI. Prof. Enrico Terrone A. S: 2008/09

SISTEMI OPERATIVI. Prof. Enrico Terrone A. S: 2008/09 SISTEMI OPERATIVI Prof. Enrico Terrone A. S: 2008/09 Che cos è il sistema operativo Il sistema operativo (SO) è il software che gestisce e rende accessibili (sia ai programmatori e ai programmi, sia agli

Dettagli

RETI DI CALCOLATORI. Crittografia. La crittografia

RETI DI CALCOLATORI. Crittografia. La crittografia RETI DI CALCOLATORI Crittografia La crittografia La crittografia è la scienza che studia la scrittura e la lettura di messaggi in codice ed è il fondamento su cui si basano i meccanismi di autenticazione,

Dettagli

Riepilogo delle modifiche di PA-DSS dalla versione 2.0 alla 3.0

Riepilogo delle modifiche di PA-DSS dalla versione 2.0 alla 3.0 Settore delle carte di pagamento (PCI) Standard di protezione dei dati per le applicazioni di pagamento () Riepilogo delle modifiche di dalla versione 2.0 alla 3.0 Novembre 2013 Introduzione Il presente

Dettagli

TECNICHE DI SIMULAZIONE

TECNICHE DI SIMULAZIONE TECNICHE DI SIMULAZIONE INTRODUZIONE Francesca Mazzia Dipartimento di Matematica Università di Bari a.a. 2004/2005 TECNICHE DI SIMULAZIONE p. 1 Introduzione alla simulazione Una simulazione è l imitazione

Dettagli

I Thread. I Thread. I due processi dovrebbero lavorare sullo stesso testo

I Thread. I Thread. I due processi dovrebbero lavorare sullo stesso testo I Thread 1 Consideriamo due processi che devono lavorare sugli stessi dati. Come possono fare, se ogni processo ha la propria area dati (ossia, gli spazi di indirizzamento dei due processi sono separati)?

Dettagli

Origini e caratteristiche dei calcolatori elettronici

Origini e caratteristiche dei calcolatori elettronici Origini e caratteristiche dei calcolatori elettronici Lunedì, 09 ottobre 2006 Supercomputer, mainframe 1 Server, workstation, desktop, notebook, palmare Un po di storia 1642 Biagio Pascal 1671 Leibniz

Dettagli

PLC Programmable Logic Controller

PLC Programmable Logic Controller PLC Programmable Logic Controller Sistema elettronico, a funzionamento digitale, destinato all uso in ambito industriale, che utilizza una memoria programmabile per l archiviazione di istruzioni orientate

Dettagli

UTILIZZATORI A VALLE: COME RENDERE NOTI GLI USI AI FORNITORI

UTILIZZATORI A VALLE: COME RENDERE NOTI GLI USI AI FORNITORI UTILIZZATORI A VALLE: COME RENDERE NOTI GLI USI AI FORNITORI Un utilizzatore a valle di sostanze chimiche dovrebbe informare i propri fornitori riguardo al suo utilizzo delle sostanze (come tali o all

Dettagli

Rappresentazione dei numeri in un calcolatore

Rappresentazione dei numeri in un calcolatore Corso di Calcolatori Elettronici I A.A. 2010-2011 Rappresentazione dei numeri in un calcolatore Lezione 2 Università degli Studi di Napoli Federico II Facoltà di Ingegneria Rappresentazione dei numeri

Dettagli

Sistema ATM con rete NetRail. Divisione elco srl

Sistema ATM con rete NetRail. Divisione elco srl Sistema ATM con rete NetRail Divisione elco srl Introduzione Verrà di seguito descritto un sistema di gestione degli impianti automotore di tipo evoluto. Questo sistema si basa sull'utilizzo di una rete

Dettagli

Excel. A cura di Luigi Labonia. e-mail: luigi.lab@libero.it

Excel. A cura di Luigi Labonia. e-mail: luigi.lab@libero.it Excel A cura di Luigi Labonia e-mail: luigi.lab@libero.it Introduzione Un foglio elettronico è un applicazione comunemente usata per bilanci, previsioni ed altri compiti tipici del campo amministrativo

Dettagli

Introduzione alle basi di dati. Gestione delle informazioni. Gestione delle informazioni. Sistema informatico

Introduzione alle basi di dati. Gestione delle informazioni. Gestione delle informazioni. Sistema informatico Introduzione alle basi di dati Introduzione alle basi di dati Gestione delle informazioni Base di dati Modello dei dati Indipendenza dei dati Accesso ai dati Vantaggi e svantaggi dei DBMS Gestione delle

Dettagli

PROTOTIPAZIONE DI UN TRADUTTORE DA SORGENTE PLC AD ASSEMBLY DI UNA MACCHINA VIRTUALE

PROTOTIPAZIONE DI UN TRADUTTORE DA SORGENTE PLC AD ASSEMBLY DI UNA MACCHINA VIRTUALE PROTOTIPAZIONE DI UN TRADUTTORE DA SORGENTE PLC AD ASSEMBLY DI UNA MACCHINA VIRTUALE Relatore: prof. Michele Moro Laureando: Marco Beggio Corso di laurea in Ingegneria Informatica Anno Accademico 2006-2007

Dettagli

Informatica 3. Informatica 3. LEZIONE 10: Introduzione agli algoritmi e alle strutture dati. Lezione 10 - Modulo 1. Importanza delle strutture dati

Informatica 3. Informatica 3. LEZIONE 10: Introduzione agli algoritmi e alle strutture dati. Lezione 10 - Modulo 1. Importanza delle strutture dati Informatica 3 Informatica 3 LEZIONE 10: Introduzione agli algoritmi e alle strutture dati Modulo 1: Perchè studiare algoritmi e strutture dati Modulo 2: Definizioni di base Lezione 10 - Modulo 1 Perchè

Dettagli

Università degli Studi "Roma Tre" Dipartimento di Informatica ed automazione. Facoltà di Ingegneria

Università degli Studi Roma Tre Dipartimento di Informatica ed automazione. Facoltà di Ingegneria Università degli Studi "Roma Tre" Dipartimento di Informatica ed automazione Facoltà di Ingegneria Corso di Laurea in Ingegneria Informatica Tesi di Laurea AUTENTICAZIONE PER APPLICAZIONI WEB Relatore

Dettagli

IL RISPARMIO ENERGETICO E GLI AZIONAMENTI A VELOCITA VARIABILE L utilizzo dell inverter negli impianti frigoriferi.

IL RISPARMIO ENERGETICO E GLI AZIONAMENTI A VELOCITA VARIABILE L utilizzo dell inverter negli impianti frigoriferi. IL RISPARMIO ENERGETICO E GLI AZIONAMENTI A VELOCITA VARIABILE L utilizzo dell inverter negli impianti frigoriferi. Negli ultimi anni, il concetto di risparmio energetico sta diventando di fondamentale

Dettagli

Il glossario della Posta Elettronica Certificata (PEC) Diamo una definizione ai termini tecnici relativi al mondo della PEC.

Il glossario della Posta Elettronica Certificata (PEC) Diamo una definizione ai termini tecnici relativi al mondo della PEC. Il glossario della Posta Elettronica Certificata (PEC) Diamo una definizione ai termini tecnici relativi al mondo della PEC. Avviso di mancata consegna L avviso, emesso dal sistema, per indicare l anomalia

Dettagli

4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0

4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0 Rappresentazione dei numeri I numeri che siamo abituati ad utilizzare sono espressi utilizzando il sistema di numerazione decimale, che si chiama così perché utilizza 0 cifre (0,,2,3,4,5,6,7,8,9). Si dice

Dettagli

Cosa è un foglio elettronico

Cosa è un foglio elettronico Cosa è un foglio elettronico Versione informatica del foglio contabile Strumento per l elaborazione di numeri (ma non solo...) I valori inseriti possono essere modificati, analizzati, elaborati, ripetuti

Dettagli

Sistemi Operativi IMPLEMENTAZIONE DEL FILE SYSTEM. Implementazione del File System. Struttura del File System. Implementazione

Sistemi Operativi IMPLEMENTAZIONE DEL FILE SYSTEM. Implementazione del File System. Struttura del File System. Implementazione IMPLEMENTAZIONE DEL FILE SYSTEM 9.1 Implementazione del File System Struttura del File System Implementazione Implementazione delle Directory Metodi di Allocazione Gestione dello spazio libero Efficienza

Dettagli

Il Sistema Operativo. C. Marrocco. Università degli Studi di Cassino

Il Sistema Operativo. C. Marrocco. Università degli Studi di Cassino Il Sistema Operativo Il Sistema Operativo è uno strato software che: opera direttamente sull hardware; isola dai dettagli dell architettura hardware; fornisce un insieme di funzionalità di alto livello.

Dettagli

Il software impiegato su un computer si distingue in: Sistema Operativo Compilatori per produrre programmi

Il software impiegato su un computer si distingue in: Sistema Operativo Compilatori per produrre programmi Il Software Il software impiegato su un computer si distingue in: Software di sistema Sistema Operativo Compilatori per produrre programmi Software applicativo Elaborazione testi Fogli elettronici Basi

Dettagli

BANCHE DATI. Informatica e tutela giuridica

BANCHE DATI. Informatica e tutela giuridica BANCHE DATI Informatica e tutela giuridica Definizione La banca dati può essere definita come un archivio di informazioni omogenee e relative ad un campo concettuale ben identificato, le quali sono organizzate,

Dettagli

Dimensione di uno Spazio vettoriale

Dimensione di uno Spazio vettoriale Capitolo 4 Dimensione di uno Spazio vettoriale 4.1 Introduzione Dedichiamo questo capitolo ad un concetto fondamentale in algebra lineare: la dimensione di uno spazio vettoriale. Daremo una definizione

Dettagli

03. Il Modello Gestionale per Processi

03. Il Modello Gestionale per Processi 03. Il Modello Gestionale per Processi Gli aspetti strutturali (vale a dire l organigramma e la descrizione delle funzioni, ruoli e responsabilità) da soli non bastano per gestire la performance; l organigramma

Dettagli

Introduzione alla crittografia. Il crittosistema RSA e la sua sicurezza

Introduzione alla crittografia. Il crittosistema RSA e la sua sicurezza Introduzione alla crittografia. Il crittosistema RSA e la sua sicurezza Prof. Massimiliano Sala MINICORSI 2011. Crittografia a chiave pubblica: oltre RSA Università degli Studi di Trento, Lab di Matematica

Dettagli

Il processore. Il processore. Il processore. Il processore. Architettura dell elaboratore

Il processore. Il processore. Il processore. Il processore. Architettura dell elaboratore Il processore Architettura dell elaboratore Il processore La esegue istruzioni in linguaggio macchina In modo sequenziale e ciclico (ciclo macchina o ciclo ) Effettuando operazioni di lettura delle istruzioni

Dettagli

Corso di Informatica

Corso di Informatica Corso di Informatica Modulo T2 1 Sistema software 1 Prerequisiti Utilizzo elementare di un computer Significato elementare di programma e dati Sistema operativo 2 1 Introduzione In questa Unità studiamo

Dettagli

Concetti di base di ingegneria del software

Concetti di base di ingegneria del software Concetti di base di ingegneria del software [Dalle dispense del corso «Ingegneria del software» del prof. A. Furfaro (UNICAL)] Principali qualità del software Correttezza Affidabilità Robustezza Efficienza

Dettagli

INFORMATICA. Il Sistema Operativo. di Roberta Molinari

INFORMATICA. Il Sistema Operativo. di Roberta Molinari INFORMATICA Il Sistema Operativo di Roberta Molinari Il Sistema Operativo un po di definizioni Elaborazione: trattamento di di informazioni acquisite dall esterno per per restituire un un risultato Processore:

Dettagli

La Firma Digitale La sperimentazione nel Comune di Cuneo. Pier Angelo Mariani Settore Elaborazione Dati Comune di Cuneo

La Firma Digitale La sperimentazione nel Comune di Cuneo. Pier Angelo Mariani Settore Elaborazione Dati Comune di Cuneo La Firma Digitale La sperimentazione nel Comune di Cuneo Pier Angelo Mariani Settore Elaborazione Dati Comune di Cuneo Perchè questa presentazione Il Comune di Cuneo, aderente alla RUPAR, ha ricevuto due

Dettagli

Approccio stratificato

Approccio stratificato Approccio stratificato Il sistema operativo è suddiviso in strati (livelli), ciascuno costruito sopra quelli inferiori. Il livello più basso (strato 0) è l hardware, il più alto (strato N) è l interfaccia

Dettagli

3. Introduzione all'internetworking

3. Introduzione all'internetworking 3. Introduzione all'internetworking Abbiamo visto i dettagli di due reti di comunicazione: ma ce ne sono decine di tipo diverso! Occorre poter far comunicare calcolatori che si trovano su reti di tecnologia

Dettagli

Il software di base comprende l insieme dei programmi predisposti per un uso efficace ed efficiente del computer.

Il software di base comprende l insieme dei programmi predisposti per un uso efficace ed efficiente del computer. I Sistemi Operativi Il Software di Base Il software di base comprende l insieme dei programmi predisposti per un uso efficace ed efficiente del computer. Il sistema operativo è il gestore di tutte le risorse

Dettagli

introduzione I MICROCONTROLLORI

introduzione I MICROCONTROLLORI introduzione I MICROCONTROLLORI Definizione Un microcontrollore è un dispositivo elettronico programmabile Può svolgere autonomamente diverse funzioni in base al programma in esso implementato Non è la

Dettagli

GUIDA RAPIDA PER LA COMPILAZIONE DELLA SCHEDA CCNL GUIDA RAPIDA PER LA COMPILAZIONE DELLA SCHEDA CCNL

GUIDA RAPIDA PER LA COMPILAZIONE DELLA SCHEDA CCNL GUIDA RAPIDA PER LA COMPILAZIONE DELLA SCHEDA CCNL GUIDA RAPIDA BOZZA 23/07/2008 INDICE 1. PERCHÉ UNA NUOVA VERSIONE DEI MODULI DI RACCOLTA DATI... 3 2. INDICAZIONI GENERALI... 4 2.1. Non modificare la struttura dei fogli di lavoro... 4 2.2. Cosa significano

Dettagli

INFORMATICA 1 L. Mezzalira

INFORMATICA 1 L. Mezzalira INFORMATICA 1 L. Mezzalira Possibili domande 1 --- Caratteristiche delle macchine tipiche dell informatica Componenti hardware del modello funzionale di sistema informatico Componenti software del modello

Dettagli

INDIRIZZI IP ARCHITETTURA GENERALE DEGLI INDIRIZZI IP FORME DI INDIRIZZI IP CINQUE FORME DI INDIRIZZI IP

INDIRIZZI IP ARCHITETTURA GENERALE DEGLI INDIRIZZI IP FORME DI INDIRIZZI IP CINQUE FORME DI INDIRIZZI IP INDIRIZZI IP ARCHITETTURA GENERALE DEGLI INDIRIZZI IP Un indirizzo IP è composto da 32 bit. Generalmente, per convenienza, è presentato in decimale: 4 ottetti (bytes) separati da un punto. Ogni rete fisica

Dettagli

la scienza della rappresentazione e della elaborazione dell informazione

la scienza della rappresentazione e della elaborazione dell informazione Sistema binario Sommario informatica rappresentare informazioni la differenza Analogico/Digitale i sistemi di numerazione posizionali il sistema binario Informatica Definizione la scienza della rappresentazione

Dettagli