La differenza fondamentale sta in ciò che viene tenuto segreto.
Prendi RSA come esempio. Il principio fondamentale di RSA è la matematica semplice. Chiunque abbia un po 'di conoscenza matematica può capire come funziona RSA (la matematica è vecchia di quasi mezzo millennio). Ci vuole più immaginazione ed esperienza per capire come sfruttare tutto ciò per la sicurezza, ma è stato fatto in modo indipendente almeno due volte (da Rivest, Shamir e Adleman e alcuni anni prima da Clifford Cocks) . Se progetti qualcosa come RSA e lo mantieni segreto, ci sono buone probabilità che qualcun altro sia abbastanza intelligente da capirlo.
D'altra parte, una chiave privata viene generata a caso. Se eseguita correttamente, la generazione casuale garantisce che sia impossibile ricostruire il segreto con la potenza di calcolo disponibile all'uomo. Nessuna intelligenza consentirà a nessuno di ricostruire una stringa segreta di bit casuali, perché quella stringa non ha una struttura da intuire.
Gli algoritmi crittografici sono inventati per intelligenza, con obiettivi largamente condivisi (proteggere alcuni dati, implementare l'algoritmo in modo economico, ...). Ci sono buone possibilità che le persone intelligenti convergeranno sullo stesso algoritmo. D'altra parte, le stringhe casuali di bit segreti sono abbondanti e per definizione le persone non troveranno la stessa stringa casuale¹. Quindi, se progetti il tuo algoritmo, ci sono buone probabilità che il tuo vicino crei lo stesso. E se condividi il tuo algoritmo con il tuo amico e poi vuoi comunicare in privato da lui, avrai bisogno di un nuovo algoritmo. Ma se generi una chiave segreta, sarà distinta da quella del tuo vicino e del tuo amico. C'è sicuramente un potenziale valore nel mantenere un segreto di chiave casuale, il che non è il caso di mantenere segreto un algoritmo.
Un punto secondario sulla segretezza delle chiavi è che può essere misurata. Con un buon generatore casuale, se generi una stringa casuale di n bit e la mantieni segreta, c'è una probabilità di 1/2 ^ n che qualcun altro la trovi in un tentativo. Se si progetta un algoritmo, il rischio che qualcun altro lo capisca non può essere misurato.
Le chiavi private RSA non sono una semplice stringa casuale: hanno una struttura, essendo una coppia di numeri primi. Tuttavia la quantità di entropia - il numero di possibili chiavi RSA di una certa dimensione - è abbastanza grande da renderne una praticamente indovinabile. (Per quanto riguarda le chiavi RSA che sono praticamente impossibili da ricostruire da una chiave pubblica e un mucchio di testi in chiaro e cifrati, è qualcosa che non possiamo provare matematicamente, ma crediamo che sia così perché molte persone intelligenti hanno provato e fallito. Ma questo è un'altra storia.)
Ovviamente questo si generalizza a qualsiasi algoritmo crittografico. Mantieni segrete stringhe casuali. Pubblica progetti intelligenti.
Questo non vuol dire che tutto dovrebbe essere reso pubblico tranne la piccola parte che è un gruppo casuale di bit. Il principio di Kerckhoff non lo dice: dice che la sicurezza del progetto non dovrebbe fare affidamento sulla segretezza del progetto. Sebbene gli algoritmi crittografici siano pubblicati al meglio (e dovresti aspettare un decennio circa prima di usarli per vedere se un numero sufficiente di persone non è riuscito a infrangerli), ci sono altre misure di sicurezza che è meglio tenere segrete, in particolare misure di sicurezza che richiedono un sondaggio attivo per risolvere. Ad esempio, alcune regole del firewall possono rientrare in questa categoria; tuttavia un firewall che non offra protezione contro un utente malintenzionato che conosce le regole sarebbe inutile, poiché alla fine qualcuno le scoprirà.
¹ Sebbene questo non sia vero matematicamente parlando, puoi letteralmente scommetterci.