# Principio di Kerckhoffs

In crittografia, il principio di Kerckhoffs (noto anche come assunzione, assioma o legge di Kerckhoffs), fu enunciato dal crittografo olandese Auguste Kerckhoffs alla fine del 1880. Esso afferma che la sicurezza di un crittosistema non dipende dal tenere segreto l'algoritmo crittografico, ma solo dal tenere segreta la chiave. È un principio apprezzato da molti crittografi, malgrado sia in netto contrasto con il principio della sicurezza tramite segretezza.
In altre parole, il sistema può rimanere sicuro anche nell'ipotesi che il nemico conosca l'algoritmo di crittazione. Quest'ultimo può anche essere di pubblico dominio; l'unica cosa che importa è che rimanga segreta la chiave.
Il principio è stato riformulato (o forse indipendentemente formulato) da Claude Shannon nella forma "il nemico conosce il sistema": “un sistema dovrebbe essere progettato sotto l'assunzione che il nemico acquisirà immediatamente familiarità con esso”. In questa forma, il principio è noto come massima di Shannon.

## Origini

Nel 1883 Auguste Kerckhoffs scrisse due articoli pubblicati ne La Cryptographie Militaire, nei quali stilò sei principi progettuali per i cifrari militari:
* Il sistema deve essere praticamente, se non matematicamente, indecifrabile.
* Questo non deve essere segreto, deve poter cadere nelle mani del nemico senza inconvenienti.
* La sua chiave deve essere comunicabile senza l'aiuto di note scritte, e sostituibile o modificabile a piacimento dei corrispondenti.
* Deve essere applicabile alla corrispondenza telegrafica.
* Deve essere portatile e il suo utilizzo e uso non deve richiedere il concorso di più persone.
* È necessario che la sua applicazione sia facile da usare e che non richieda la conoscenza e l'uso di una lunga serie di regole.
Alcuni non sono più validi dall'avvento dei computer, ma il secondo principio, noto oggi come principio di Kerckhoffs, è tutt'oggi di importanza critica.

## Spiegazione del principio

Kerckhoffs considerava la crittografia come una sfida, e come una migliore alternativa alla tecnica steganografica, la quale era comune nel diciannovesimo secolo, per nascondere il significato dei messaggi militari. Il problema degli schemi di codifica è che essi fanno affidamento sul fatto che gli uomini sappiano mantenere segreti i dizionari necessari alla decodifica. I dizionari steganografici, una volta rivelati, compromettono permanentemente il sistema di codifica corrispondente. Un altro problema è dato dal fattore rischio che aumenta con l'aumentare delle persone che sono a conoscenza dei dizionari.
La crittografia del diciannovesimo secolo, al contrario, usava semplici tabelle per la trasposizione di caratteri alfanumerici, generalmente date da intersezioni riga-colonna che potevano essere modificate da chiavi genericamente corte e numeriche e che potevano essere trasferite alla memoria umana. Il sistema era visto come indecifrabile in quanto quella tabella e le chiavi non sembravano avere senso compiuto ad un occhio esterno. Il messaggio segreto era compromesso solamente nel caso in cui la tabella, la chiave e il messaggio cadessero tutti nelle mani del nemico in un arco di tempo rilevante. Kerckhoff vedeva i messaggi tattici come se avessero solo poche ore di rilevanza. I sistemi non sono necessariamente compromessi, perché i loro componenti (ad esempio tabelle e tasti di caratteri alfanumerici) possono essere facilmente modificati.

## Considerazioni odierne

Un cambiamento odierno al principio di Kerckhoffs idealizza che la sicurezza di un crittosistema dovrebbe dipendere esclusivamente dalla segretezza della chiave e da un randomizzatore privato. Si può dire dunque che un metodo per decifrare e trasmettere informazioni segretamente dovrebbe essere sicuro anche se tutti sono a conoscenza del suo funzionamento. Sicuramente gli attaccanti hanno più familiarità col sistema in questione, ma mancheranno di conoscenza quando dovranno approcciarsi con tutte le possibili istanze che gli vengono presentate dal sistema.
Alcuni crittografi non sono d'accordo con questo e controbattono sul fatto che Kerckhoffs sentisse la necessità di mantenere segreta la chiave. Un altro fattore discordante è dato dal fatto che non si è sicuri della contrarietà di Kerckhoffs al mantenere "segreti" altri componenti del sistema di crittografia (tabelle, protocolli, algoritmi, ecc.) fintanto che il sistema rimane "indecifrabile".

### Vantaggio della chiave segreta

Utilizzare una crittografia sicura dovrebbe rimpiazzare il problema di mantenere i messaggi al sicuro con un metodo più facile da gestire, ovvero mantenere al sicuro chiavi di relativamente piccole dimensioni. Un sistema che richiede segretezza a lungo termine per qualcosa di così grande e complesso come l'intero progetto di un sistema crittografico non può ovviamente raggiungere questo obiettivo. Dunque se un sistema è sicuro anche quando il nemico conosce tutto tranne che la chiave, l'unica cosa da gestire è appunto mantenere le chiavi segrete.
Ovviamente ci sono molti metodi con i quali un attaccante può venire a conoscenza dei dettagli interni del sistema. Tra questi abbiamo la corruzione, il ricatto, oppure la minaccia diretta verso un membro dello staff o verso dei clienti che sono in grado di spiegare il funzionamento del sistema. In guerra, ad esempio, una parte probabilmente catturerà alcune attrezzature e persone dall'altra parte. Ogni parte userà anche spie per raccogliere informazioni. Se un metodo coinvolge un software, qualcuno potrebbe fare un dump della memoria o eseguire il software sotto il controllo di un debugger per capire il metodo. Se si utilizza l'hardware, qualcuno potrebbe acquistare o rubare parte dell'hardware e costruire qualsiasi programma o gadget necessario per testarlo. L'hardware può anche essere smontato in modo che i dettagli del chip possano essere esaminati al microscopio.

### Mantenere la sicurezza

Una generalizzazione che alcuni fanno del principio di Kerckhoffs afferma: “Minori e semplici sono i segreti che uno deve mantenere per assicurare la sicurezza del sistema, più sarà facile mantenere la sicurezza del sistema.”
Ogni sistema di sicurezza dipende fondamentalmente dal mantenere qualcosa "segreto". Tuttavia l'obiettivo fondamentale del principio di Kerchoffs consiste nel tenere "nascosto" ciò che è meno dispendioso da cambiare in caso di eventi inaspettati e sgradevoli.
Ad esempio, un algoritmo crittografico può essere implementato da hardware e software ampiamente distribuiti tra gli utenti. Se la sicurezza dipende dal mantenerlo "segreto", la divulgazione porta a grandi difficoltà logistiche nello sviluppo, nella verifica e nella distribuzione di implementazioni di un nuovo algoritmo. D'altra parte, se la "segretezza" dell'algoritmo non è importante, ma solo le chiavi utilizzate con l'algoritmo devono essere nascoste, la divulgazione delle chiavi richiede semplicemente il processo più semplice e meno costoso di generare e distribuire nuove chiavi.

## Applicazioni

In accordo con il principio di Kerckhoffs, la maggior parte dei crittografi civili utilizza algoritmi di dominio pubblico. Al contrario, i cifrari utilizzati per proteggere le informazioni governative o militari sono spesso mantenuti segreti. Tuttavia, non si deve presumere che i codici governativi / militari debbano essere tenuti segreti per mantenere la sicurezza. È piuttosto comune tra le aziende il mantenere segreto il sistema interno. Il fulcro del dibattito consiste nel fatto che questa segretezza renda veramente il prodotto più sicuro e meno vulnerabile agli attacchi, oppure si tratti esclusivamente di una sicurezza a breve termine e nel lungo periodo saranno i sistemi che sono stati pubblicati ed analizzati ad essere i più sicuri ed affidabili.

## Sicurezza tramite segretezza

Si tratta di un principio comune per le aziende, e talvolta anche per gli enti standard come nel caso del Content Scrambling System, allo scopo di mantenere "segreti" i meccanismi interni di un sistema. Alcuni sostengono che questa "sicurezza tramite segretezza" rende il prodotto più sicuro e meno vulnerabile agli attacchi. Una contro-argomentazione è che mantenere "nascosto" l'interno potrebbe migliorare la sicurezza a breve termine, ma a lungo termine dovrebbero essere considerati solo i sistemi che sono stati pubblicati e analizzati. Steve Bellovin commentò:
Credo sia utile ritornare al secondo principio di Kerckhoffs, spiegato come 'Il sistema non deve richiedere segretezza e può essere rubato dal nemico senza causare problemi', su http://petitcolas.net/fabien/kerckhoffs/. Kerckhoffs non diceva 'pubblica tutto', né 'tieni tutto segreto'; piuttosto, diceva che il sistema dovrebbe essere sicuro anche se il nemico ne ha una copia. In altre parole: progetta il tuo sistema assumendo che i tuoi avversari lo conoscano in dettaglio. (Un ex funzionario del National Security Center della NSA mi disse che l'ipotesi standard era che il numero seriale 1 di ogni nuovo dispositivo fosse consegnato al Cremlino.) Dopo di ciò, però, non c'è niente di sbagliato nel cercare di mantenerlo segreto - è un altro ostacolo che il nemico deve superare. (Un ostacolo che gli inglesi incontrarono quando attaccavano il sistema tedesco Enigma era semplice: non conoscevano la mappatura tra i tasti della tastiera e l'ingresso all'array di rotori.) Ma - non fare affidamento sulla segretezza del sistema.»