next up previous contents
Successivo: Calcolo delle S-box Su: Criteri generali d'implementazione Precedente: Criteri generali d'implementazione

Le permutazioni

Per le permutazioni, visto che sono diverse, una prima idea è di utilizzare una funzione che sia in grado di realizzarle tutte (questo è il modo d'agire dell'implementazione Plain Des).

Consideriamo:

La specificazione di d e l'uso di vettori di char (un char è costituito da 8 bit) per la memorizzazione di tex2html_wrap_inline4384 e tex2html_wrap_inline4408 , rende la funzione molto flessibile. Infatti grazie a d è posssibile realizzare oltre alle permutazioni IP, tex2html_wrap_inline4302 e P anche l'espansione E e le riduzioni PC-1 e PC-2 caratterizzate da sequenze d'output che hanno dimensioni differenti dalle sequenze d'input, e grazie all'uso di vettori di char le diverse taglie che tex2html_wrap_inline4384 e tex2html_wrap_inline4408 possono assumere vengono gestite in modo semplice (per IP e tex2html_wrap_inline4302 n=d=64, per E n= 32 mentre d=48, per P n=d=32, per PC-1 n=64 mentre d=56 e per PC-1 n=56 mentre d=48, si osserva che la lunghezza delle varie sequenze è sempre multipla di 8 quindi un opportuno vettore di char riesce a memorizzarle sempre).

Lo schema della funzione è il seguente :

tex2html_wrap4700

I passi (4) e (5) sono composti. Infatti per prelevare il bit r (passo (4)) si devono fare le seguenti operazioni :

  1. Individuare il byte in cui è contenuto il k-esimo bit di tex2html_wrap_inline4384 , è il byte tex2html_wrap_inline4506 .
  2. Individuare la posizione del bit all'interno del byte, è k mod 8.
  3. Prelevare il bit k-esimo tramite un and tra l'r-esimo byte è una mask opportuna.

Un discorso analogo vale per inserire il bit x nella sequenza d'output (passo (5)). Si individua il byte in cui occorre inserirlo, la posizione all'interno del byte, quindi si copia il bit x tramite un operazione di or.

Tale metodo risulta essere perømolto costoso, per la realizzazione di IP infatti sono necessarie circa 2500 operazioni (sono le operazioni elementari del linguaggio C compresa l'assegnazione).

Un altra possibilità è avere del codice non flessibile come quello suddetto ma che funzioni per una specifica permutazione. Si puørealizzare il cambiamento di posizione di un bit in questo modo:

   tex2html_wrap4702


Con questa tecnica avremo tante istruzioni di questo tipo, tante linee di codice, quanti sono i bit nella sequenza d'output. Si utilizzerà per ciascuna la tex2html_wrap_inline4568 e lo shift opportuno.

A differenza della prima tecnica descritta, che per essere flessibile ci costringe ad usare i vettori di char per memorizzare le sequenze di bit, con questa tecnica possiamo usare i tipi di dati piú utili, generalmente dei long (un long è 32 bit).

Diamo un esempio di come la tecnica descritta dall'istruzione (1) viene utilizzata effettivamente. Consideriamo la permutazione IP, la realizziamo nel seguente modo:

  1. Consideriamo tex2html_wrap_inline4572 e tex2html_wrap_inline4574 una coppia di long che contiene i 64 bit su cui si deve applicare la matrice di permutazione IP. tex2html_wrap_inline4578 e tex2html_wrap_inline4580 è una coppia di long usata per contere i 64 bit finali. Con riferimento all'istruzione (1) tex2html_wrap_inline4572 e tex2html_wrap_inline4574 sono rispettivamente i 32 bit piă sinistra e i 32 bit piă destra della sequenza iniziale x, mentre tex2html_wrap_inline4578 e tex2html_wrap_inline4580 sono rispettivamente i 32 bit piă sinistra e i 32 bit piă destra della sequenza finale y;
  2. Inizializziamo a zero tex2html_wrap_inline4578 e tex2html_wrap_inline4580 : tex2html_wrap_inline4598 ;
  3. Realizziamo M(1)=58 con la linea di codice

    displaymath4602

    Rispetto alla schema generale non abbiamo tex2html_wrap_inline4604 né lo shift di 58-1=57 posizioni. Questo perché nel nostro caso x e y sono entrambe suddivise in due sottosequenze di 32 bit ciascuna, tex2html_wrap_inline4572 e tex2html_wrap_inline4574 per x e tex2html_wrap_inline4578 e tex2html_wrap_inline4580 per y. Percui, quando consideriamo l'epressione generale M(k)=t il t-esimo bit di x è inserito come k-esimo bit di tex2html_wrap_inline4578 se tex2html_wrap_inline4634 e come (k-32)-esimo bit di tex2html_wrap_inline4580 se tex2html_wrap_inline4640 . Anche il valore t è preso con riferimento alle due sequenze di 32 bit tex2html_wrap_inline4572 e tex2html_wrap_inline4574 , invece di 58 consideriamo 26 perché il 58-esimo bit di x è il 26-esimo di tex2html_wrap_inline4574 (26=58-32). Ciøsignifica che consideriamo il t-esimo bit di tex2html_wrap_inline4572 quando tex2html_wrap_inline4666 e il (t-32)-esimo bit di tex2html_wrap_inline4574 quando tex2html_wrap_inline4672 ;

  4. Il secondo scambio che si effettua è M(2)=50, realizzato tramite

    displaymath4676

    Visto che 18=50-32 e dovendo considerare un valore di k=18 lo shift dev'essere di 18-2=16 posizioni.

  5. Si continua in questo modo usando tex2html_wrap_inline4572 o tex2html_wrap_inline4574 e tex2html_wrap_inline4578 o tex2html_wrap_inline4580 in accordo con i valori di k e t, finché la permutazione non è completata.

Ogni istruzione di tipo (1) equivale a fare 4 operazioni quindi occorrono 256 operazioni per realizzare IP contro le circa 2500 della tecnica precedente, un guadagno notevole, anche se la realizzazione risulta essere ancora lenta se comparata al numero di operazioni con cui IP è effettuata nelle implementazioni D3Des e Libdes, per entrambe solo 45 operazioni.


next up previous contents
Successivo: Calcolo delle S-box Su: Criteri generali d'implementazione Precedente: Criteri generali d'implementazione

Aniello Castiglione e Gerardo Maiorano < anicas,germai@zoo.diaedu.unisa.it >