<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wx="http://ilps.science.uva.nl/WikiXML/wx" xml:lang="it" lang="it">
<head>
<title>Blowfish</title>
<meta name="wx_namespace" content="0"/>
<meta name="wx_pagename" content="Blowfish"/>
<meta name="wx_page_id" content="92299"/>
</head>
<body>
<div id="wx_article">
<wx:section level="1" title="Blowfish" id="wxsec1"><h1 class="pagetitle" id="wx1">Blowfish</h1>

<p id="wx2">In <a href="/wit/Crittologia" title="Crittologia" wx:linktype="known" wx:pagename="Crittologia" wx:page_id="830" id="wx3">crittologia</a>, <b id="wx4">Blowfish</b> è un <a href="/wit/Algoritmo" title="Algoritmo" wx:linktype="known" wx:pagename="Algoritmo" wx:page_id="16" id="wx5">algoritmo</a> a <a href="/wit/Chiave_crittografica" title="Chiave crittografica" wx:linktype="known" wx:pagename="Chiave_crittografica" wx:page_id="64301" id="wx6">chiave</a> <a href="/wit/Crittografia_simmetrica" title="Crittografia simmetrica" wx:linktype="known" wx:pagename="Crittografia_simmetrica" wx:page_id="1263" id="wx7">simmetrica</a> a <a href="/wit/Dimensione_blocco" title="Dimensione blocco" wx:linktype="known" wx:pagename="Dimensione_blocco" wx:page_id="68914" id="wx8">blocchi</a>, ideato nel <a href="/wit/1993" title="1993" wx:linktype="known" wx:pagename="1993" wx:page_id="4670" id="wx9">1993</a> da <a href="/wit/Bruce_Schneier" title="Bruce Schneier" wx:linktype="known" wx:pagename="Bruce_Schneier" wx:page_id="499234" id="wx10">Bruce Schneier</a> e implementato in molti <a href="/wit/Software" title="Software" wx:linktype="known" wx:pagename="Software" wx:page_id="3889" id="wx11">software</a> di <a href="/wit/Crittografia" title="Crittografia" wx:linktype="known" wx:pagename="Crittografia" wx:page_id="310023" id="wx12">crittografia</a>. Sebbene a tutt'oggi non sia reperibile una <a href="/wit/Crittanalisi" title="Crittanalisi" wx:linktype="known" wx:pagename="Crittanalisi" wx:page_id="698568" id="wx13">crittanalisi</a> di Blowfish, questo algoritmo sta suscitando nuovamente interesse se implementato con una maggior <a href="/wit/Dimensione_blocco" title="Dimensione blocco" wx:linktype="known" wx:pagename="Dimensione_blocco" wx:page_id="68914" id="wx14">dimensione dei blocchi</a>, come nel caso di <a href="/wit/AES" title="AES" wx:linktype="known" wx:pagename="AES" wx:page_id="68718" id="wx15">AES</a> o <a href="/wit/Twofish" title="Twofish" wx:linktype="known" wx:pagename="Twofish" wx:page_id="356827" id="wx16">Twofish</a>.</p>

<p id="wx17">Schneier progettò Blowfish per essere un algoritmo di utilizzo generale, utile a rimpiazzare l'allora decadente <a href="/wit/Data_Encryption_Standard" title="Data Encryption Standard" wx:linktype="known" wx:pagename="Data_Encryption_Standard" wx:page_id="69534" id="wx18">Data Encryption Standard</a> (DES), e libero da problemi caratteristici di altri algoritmi. All'epoca molti altri sistemi di cifratura erano proprietari, coperti da brevetto o da segreti governativi. Schneier dichiarò: <i id="wx19">"Blowfish è libero da brevetti, e rimarrà tale in tutte le nazioni. L'algoritmo è di pubblico dominio, e può essere usato liberamente da chiunque"</i>.</p>

<p id="wx20">Due delle caratteristiche di rilievo di Blowfish sono <a href="/wit/S-box" title="S-box" wx:linktype="known" wx:pagename="S-box" wx:page_id="68734" id="wx21">S-box</a> dipendenti dalla chiave, e una lista di chiavi estremamente complessa.</p>

<div id="wx_toc"/>

<a id="L.27algoritmo" name="L.27algoritmo"/>
<wx:section level="2" title="L'algoritmo" id="wxsec2"><h2 id="wx22">L'algoritmo</h2>

<p id="wx23">Blowfish ha una <a href="/wit/Dimensione_blocco" title="Dimensione blocco" wx:linktype="known" wx:pagename="Dimensione_blocco" wx:page_id="68914" id="wx24">dimensione blocco</a> a 64bit e una lunghezza di chiave variabile fra i 32 e i 448 bit. Ha una struttura a <a href="/wit/Rete_di_Feistel" title="Rete di Feistel" wx:linktype="known" wx:pagename="Rete_di_Feistel" wx:page_id="68883" id="wx25">rete di Feistel</a> a 16 cicli, e usa <a href="/wit/S-box" title="S-box" wx:linktype="known" wx:pagename="S-box" wx:page_id="68734" id="wx26">S-box</a> grandi e dipendenti dalla chiave. Ha una struttura simile al sistema <a href="/wit/CAST-128" class="new" title="CAST-128" wx:linktype="unknown" wx:pagename="CAST-128" id="wx27">CAST-128</a>, che usa però S-Box fisse.</p>

<div class="wx_image" wx:align="left" wx:thumb="thumb" id="wx28"><a href="/wit/Immagine:Blowfish_structure_%28en%29.svg" title="Diagramma di Blowfish" wx:linktype="image" wx:pagename="Immagine:Blowfish_structure_(en).svg" id="wx29"><img src="/wit/Immagine:Blowfish_structure_%28en%29.svg" alt="Diagramma di Blowfish" width="216" id="wx30"/></a> 

<div class="thumbcaption" id="wx31">
<p id="wx32">Diagramma di Blowfish</p>
</div>
</div>

<p id="wx33">Il diagramma a sinistra mostra come opera Blowfish. Ogni linea rappresenta 32 bit. L'algoritmo gestisce due tipi di liste di sottochiavi: una lista di 18 elementi, definita <i id="wx34">P-array</i>, e quattro lista da 256 elementi ciascuna di S-Box. Ciascuna S-Box ha in ingresso 8 bit di informazioni, e produce in uscita 32 bit. A ogni ripetizione del ciclo si usa un elemento diverso del <i id="wx35">P-array</i>, e dopo l'ultimo ciclo a ogni metà del blocco di dati viene moltiplicata in <a href="/wit/XOR#XOR" title="XOR" wx:linktype="known" wx:pagename="XOR" wx:page_id="36912" wx:fragment="XOR" id="wx36">XOR</a> con uno dei due elementi inutilizzati del <i id="wx37">P-array</i>.</p>

<div class="wx_image" wx:align="right" wx:thumb="thumb" id="wx38"><a href="/wit/Immagine:Blowfish_Feistel_function_%28en%29.svg" title="Diagramma della funzione F di Blowfish" wx:linktype="image" wx:pagename="Immagine:Blowfish_Feistel_function_(en).svg" id="wx39"><img src="/wit/Immagine:Blowfish_Feistel_function_%28en%29.svg" alt="Diagramma della funzione F di Blowfish" width="250" id="wx40"/></a> 

<div class="thumbcaption" id="wx41">
<p id="wx42">Diagramma della funzione F di Blowfish</p>
</div>
</div>

<p id="wx43">Il diagramma a destra rappresenta la funzione F di Blowfish. La funzione divide 32 bit in ingresso in quattro <a href="/wit/Byte" title="Byte" wx:linktype="known" wx:pagename="Byte" wx:page_id="641" id="wx44">bytes</a>, utilizzati a loro volta come ingressi delle S-Box. I risultati sono sommati in <a href="/wit/Aritmetica_modulare" title="Aritmetica modulare" wx:linktype="known" wx:pagename="Aritmetica_modulare" wx:page_id="322141" id="wx45">modulo</a> 2<sup id="wx46">32</sup> e messi in XOR, per ottenere il risultato finale di 32bit cifrati.</p>

<p id="wx47">Dato che Blowfish è una rete di Feistel, può essere invertito semplicemente mettendo in XOR gli elementi 17 e 18 del <i id="wx48">P-array</i>, e quindi utilizzando gli elementi del <i id="wx49">P-array</i> in ordine inverso.</p>

<p id="wx50">La lista delle chiavi di Blowfish viene generata caricando i valori iniziali del <i id="wx51">P-array</i> e delle S-Box con rappresentazioni esadecimali delle cifre di <a href="/wit/Pi_greco" title="Pi greco" wx:linktype="known" wx:pagename="Pi_greco" wx:page_id="23232" id="wx52">pi greco</a>, che apparentemente non hanno periodicità o schemi ripetitivi. La chiave segreta viene quindi messa in XOR con ciascun elemento del <i id="wx53">P-array</i> (ripetendo la chiave, se necessario). Un blocco da 64bit di valore zero viene criptato con l'algoritmo stesso, e il risultato cifrato sostituisce gli elementi P-1 e P-2. Il risultato cifrato viene quindi codificato nuovamente con le nuove sottochiavi, e va a sostituire gli elementi P-3 e P-4. Questo procedimento continua fino a rimpiazzare tutti gli elementi del <i id="wx54">P-array</i> e delle S-Box. In tutto, l'algoritmo di cifratura di Blowfish viene eseguito 521 volte in modo da generare tutte le sottochiavi, ed elaborando circa 4Kb di dati.</p>

<a id="Crittanalisi_di_Blowfish" name="Crittanalisi_di_Blowfish"/>
</wx:section><wx:section level="2" title="Crittanalisi di Blowfish" id="wxsec3"><h2 id="wx55">Crittanalisi di Blowfish</h2>

<p id="wx56">Non esistono, o perlomeno non sono conosciute, <a href="/wit/Crittanalisi" title="Crittanalisi" wx:linktype="known" wx:pagename="Crittanalisi" wx:page_id="698568" id="wx57">crittanalisi</a> di Blowfish, almeno fino al <a href="/wit/2004" title="2004" wx:linktype="known" wx:pagename="2004" wx:page_id="5559" id="wx58">2004</a>, dato che una dimensione di blocco di 64bit è oggi considerata troppo piccola, e codificando più di 2<sup id="wx59">32</sup> blocchi si potrebbero rivelare alcuni frammenti del testo originale, a causa del <a href="/wit/Paradosso_del_compleanno" title="Paradosso del compleanno" wx:linktype="known" wx:pagename="Paradosso_del_compleanno" wx:page_id="67115" id="wx60">paradosso del compleanno</a>. Nonostante questo, Blowfish fino ad oggi sembra abbastanza sicuro. Mentre la ridotta dimensione del blocco non crea problemi per applicazioni tradizionali come l'e-mail, potrebbe rendere inutilizzabile Blowfish per la cifratura di testi di grandi dimensioni, come ad esempio in caso di archivi.</p>

<p id="wx61">Nel <a href="/wit/1996" title="1996" wx:linktype="known" wx:pagename="1996" wx:page_id="4667" id="wx62">1996</a> <a href="/wit/Serge_Vaudenay" class="new" title="Serge Vaudenay" wx:linktype="unknown" wx:pagename="Serge_Vaudenay" id="wx63">Serge Vaudenay</a> escogitò un attacco che permetteva di forzare la cifratura di un testo conoscendo 2<sup id="wx64">8<i id="wx65">r</i>+1</sup> testi in chiaro con la stessa chiave, dove <i id="wx66">r</i> identifica il numero di cicli (<i id="wx67">rounds</i>). Inoltre trovò una classe di <a href="/wit/Chiave_debole" class="new" title="Chiave debole" wx:linktype="unknown" wx:pagename="Chiave_debole" id="wx68">chiavi deboli</a> che possono essere identificate e rotte, con lo stesso attacco, conoscendo solo 2<sup id="wx69">4<i id="wx70">r</i> + 1</sup> testi in chiaro. Questo attacco non può essere usato contro il Blowfish implementato con tutti i 16 cicli. Vaudenay utilizzò una variante basata su meno cicli di cifratura. Vincent Rijmen, nella sua tesi di dottorato, introdusse un attacco differenziale di secondo grado in grado di forzare non più di 4 cicli. Non rimane quindi nessuna via conosciuta per forzare un testo codificato con 16 cicli, tranne ovviamente la <a href="/wit/Metodo_forza_bruta" title="Metodo forza bruta" wx:linktype="known" wx:pagename="Metodo_forza_bruta" wx:page_id="2709" id="wx71">forza bruta</a>.</p>

<p id="wx72">Nel <a href="/wit/2005" title="2005" wx:linktype="known" wx:pagename="2005" wx:page_id="12300" id="wx73">2005</a> Dieter Schmidt studiò la lista delle chiavi di Blowfish e notò che le sottochiavi del terzo e quarto ciclo sono indipendenti dai primi 64 bit della chiave utente <a href="http://eprint.iacr.org/2005/063" class="external autonumber" wx:linktype="external" rel="nofollow" id="wx74"/>.</p>

<a id="Blowfish_in_pratica" name="Blowfish_in_pratica"/>
</wx:section><wx:section level="2" title="Blowfish in pratica" id="wxsec4"><h2 id="wx75">Blowfish in pratica</h2>

<p id="wx76">Blowfish è uno degli algoritmi di codifica a blocchi più veloci in circolazione, eccetto quando si cambi la chiave. Ogni nuova chiave richiede un tempo di elaborazione equivalente alla codifica di 4Kb di testo, che è molto se confrontato con altri sistemi di cifratura a blocchi. Questo impedisce che venga usato in alcune applicazioni, ma non è un problema in altre. In un caso, è addirittura un vantaggio: il metodo di <a href="/wit/Hashing" title="Hashing" wx:linktype="known" wx:pagename="Hashing" wx:page_id="41574" id="wx77">hashing</a> basato su password utilizzato in <a href="/wit/OpenBSD" title="OpenBSD" wx:linktype="known" wx:pagename="OpenBSD" wx:page_id="10777" id="wx78">OpenBSD</a> usa un algoritmo derivato dal Blowfish che sfrutta la lentezza di elaborazione delle chiavi; l'idea è che il maggior tempo di calcolo necessario dia protezione da un <a href="/wit/Attacco_basato_su_dizionario" title="Attacco basato su dizionario" wx:linktype="known" wx:pagename="Attacco_basato_su_dizionario" wx:page_id="1100029" id="wx79">attacco basato su dizionario</a>.</p>

<p id="wx80">In alcune implementazioni Blowfish usa un'area di memoria molto superiore ai 4Kb teorici di <a href="/wit/RAM" title="RAM" wx:linktype="known" wx:pagename="RAM" wx:page_id="1200437" id="wx81">RAM</a>. Questo non è un problema nemmeno per i <a href="/wit/Personal_computer" title="Personal computer" wx:linktype="known" wx:pagename="Personal_computer" wx:page_id="25630" id="wx82">personal computer</a> più vecchi, ma ne impedisce l'uso in piccoli sistemi integrati come le prime <a href="/wit/Smartcard" title="Smartcard" wx:linktype="known" wx:pagename="Smartcard" wx:page_id="674489" id="wx83">smartcard</a>.</p>

<p id="wx84">Blowfish non è soggetto a nessun brevetto ed è quindi liberamente utilizzabile da chiunque. Questo ha contribuito alla sua popolarità nei software di crittografia.</p>

<a id="Voci_correlate" name="Voci_correlate"/>
</wx:section><wx:section level="2" title="Voci correlate" id="wxsec5"><h2 id="wx85">Voci correlate</h2>

<ul id="wx86">
<li id="wx87"><a href="/wit/Twofish" title="Twofish" wx:linktype="known" wx:pagename="Twofish" wx:page_id="356827" id="wx88">Twofish</a></li>

<li id="wx89"><a href="/wit/Advanced_Encryption_Standard" title="Advanced Encryption Standard" wx:linktype="known" wx:pagename="Advanced_Encryption_Standard" wx:page_id="68586" id="wx90">Advanced Encryption Standard</a></li>
</ul>

<p id="wx91"><br id="wx92"/>
</p>

<wx:template id="wx_t1" pagename="Template:Portale" page_id="949487"/>
<div style="margin-left:0; margin-right:0" id="wx93">
<ul style="display:block; clear:both; list-style-image:none; list-style-type:none; width:100%; vertical-align:middle; margin:0; margin-bottom:1em; padding:0; min-height:27px" id="wx94">
<li style="float:left; height:27px; line-height:25px; width:100%; margin:0; margin-top:.5em; margin-left:0; margin-right:0; padding:0; border:1px solid #CCF; background-color:#F0EEFF" title="Accedi alle voci di Wikipedia che parlano di matematica" id="wx95"><a href="/wit/Immagine:Stub_matematica.png" title="matematica" wx:linktype="image" wx:pagename="Immagine:Stub_matematica.png" wx:page_id="627197" id="wx96"><img src="/wit/Immagine:Stub_matematica.png" alt="matematica" width="25" height="25" id="wx97"/></a> <b id="wx98"><a href="/wit/Portale:matematica" class="new" title="Portale:matematica" wx:linktype="unknown" wx:pagename="Portale:matematica" id="wx99">Portale Matematica</a></b>
<p id="wx100">:  accedi alle voci di Wikipedia che parlano di matematica</p>
</li>
</ul>
</div>

<wx:templateend start="wx_t1"/>
</wx:section></wx:section></div>
<div id="wx_categorylinks">
<a href="/wit/index.php?title=Speciale:Categories&amp;article=Blowfish" title="Speciale:Categories" wx:linktype="known" wx:pagename="Speciale:Categories" id="wx101">Categoria</a>: <span dir="ltr" id="wx102"><a href="/wit/Categoria:Cifrari_a_blocchi" title="Categoria:Cifrari a blocchi" wx:linktype="known" wx:pagename="Categoria:Cifrari_a_blocchi" wx:page_id="64535" id="wx103">Cifrari a blocchi</a></span></div>
<div id="wx_languagelinks">
Altre lingue: <a href="http://de.wikipedia.org/wiki/Blowfish" class="external" wx:linktype="interwiki" wx:pagename="de:Blowfish" id="wx104">Deutsch</a> | <a href="http://en.wikipedia.org/wiki/Blowfish_%28cipher%29" class="external" wx:linktype="interwiki" wx:pagename="en:Blowfish_(cipher)" id="wx105">English</a> | <a href="http://es.wikipedia.org/wiki/Blowfish" class="external" wx:linktype="interwiki" wx:pagename="es:Blowfish" id="wx106">Español</a> | <a href="http://fi.wikipedia.org/wiki/Blowfish" class="external" wx:linktype="interwiki" wx:pagename="fi:Blowfish" id="wx107">Suomi</a> | <a href="http://fr.wikipedia.org/wiki/Blowfish" class="external" wx:linktype="interwiki" wx:pagename="fr:Blowfish" id="wx108">Français</a> | <a href="http://gl.wikipedia.org/wiki/Blowfish" class="external" wx:linktype="interwiki" wx:pagename="gl:Blowfish" id="wx109">Galego</a> | <a href="http://ja.wikipedia.org/wiki/Blowfish" class="external" wx:linktype="interwiki" wx:pagename="ja:Blowfish" id="wx110">日本語</a> | <a href="http://nl.wikipedia.org/wiki/Blowfish-encryptiealgoritme" class="external" wx:linktype="interwiki" wx:pagename="nl:Blowfish-encryptiealgoritme" id="wx111">Nederlands</a> | <a href="http://pl.wikipedia.org/wiki/Blowfish" class="external" wx:linktype="interwiki" wx:pagename="pl:Blowfish" id="wx112">Polski</a> | <a href="http://pt.wikipedia.org/wiki/Blowfish" class="external" wx:linktype="interwiki" wx:pagename="pt:Blowfish" id="wx113">Português</a> | <a href="http://ru.wikipedia.org/wiki/Blowfish" class="external" wx:linktype="interwiki" wx:pagename="ru:Blowfish" id="wx114">Русский</a> | <a href="http://sv.wikipedia.org/wiki/Blowfish" class="external" wx:linktype="interwiki" wx:pagename="sv:Blowfish" id="wx115">Svenska</a> | <a href="http://tg.wikipedia.org/wiki/Blowfish" class="external" wx:linktype="interwiki" wx:pagename="tg:Blowfish" id="wx116">Тоҷикӣ</a> | <a href="http://th.wikipedia.org/wiki/%E0%B9%82%E0%B8%9A%E0%B8%A5%E0%B8%A7%E0%B9%8C%E0%B8%9F%E0%B8%B4%E0%B8%8A" class="external" wx:linktype="interwiki" wx:pagename="th:โบลว์ฟิช" id="wx117">ไทย</a> | <a href="http://tr.wikipedia.org/wiki/Blowfish" class="external" wx:linktype="interwiki" wx:pagename="tr:Blowfish" id="wx118">Türkçe</a></div>
</body>
<wx:templatearguments for="wx_t1"><wx:argument name="1">
<p id="wx119">matematica</p>
</wx:argument></wx:templatearguments>
</html>
