La differenza fondamentale è 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 funzionalmente (la matematica ha quasi mezzo millennio). Ci vuole più immaginazione ed esperienza per capire come sfruttare la sicurezza, ma è stato fatto indipendentemente almeno due volte (da Rivest, Shamir e Adleman, e alcuni anni prima da Clifford Cocks ). Se progetti qualcosa come RSA e tienilo segreto, ci sono buone probabilità che qualcun altro sia abbastanza intelligente da capirlo.
D'altra parte, una chiave privata viene generata casualmente. Una volta eseguita correttamente, la generazione casuale assicura che è impossibile ricostruire il segreto con la potenza di calcolo disponibile umanamente. Nessuna quantità di intelligenza consentirà a chiunque 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 ampiamente condivisi (proteggere alcuni dati, implementare l'algoritmo in modo economico, ...). C'è una buona possibilità che le persone intelligenti convergeranno nello 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 si progetta il proprio algoritmo, ci sono buone probabilità che il vicino progetterà lo stesso. E se condividi il tuo algoritmo con il tuo amico e poi vuoi comunicarlo privatamente, avrai bisogno di un nuovo algoritmo. Ma se generi una chiave segreta, sarà diversa da quella del tuo vicino e del tuo amico. Esiste sicuramente un potenziale valore nel mantenere un segreto di chiave casuale, il che non è il caso di mantenere un algoritmo segreto.
Un punto secondario sulla segretezza della chiave è che può essere misurato. Con un buon generatore casuale, se generi una stringa a n bit casuale e la tenga segreta, c'è una probabilità di 1/2 ^ n che qualcun altro la troverà in una prova. 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 praticamente impossibile la guida. (Dal momento che le chiavi RSA sono praticamente impossibili da ricostruire da una chiave pubblica e da una serie 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. un'altra storia.)
Ovviamente questo si generalizza a qualsiasi algoritmo crittografico. Mantieni segrete le stringhe casuali. Pubblica progetti intelligenti.
Questo non vuol dire che tutto dovrebbe essere reso pubblico tranne che per la piccola parte che è un mucchio casuale di bit. Il principio di Kerckhoff non dice questo - dice che la sicurezza del design non dovrebbe basarsi sulla segretezza del design. Mentre gli algoritmi di crittografia sono pubblicati al meglio (e dovresti aspettare circa un decennio prima di usarli per vedere se un numero sufficiente di persone non riesce a romperli), ci sono altre misure di sicurezza che sono meglio tenere segrete, in particolare le misure di sicurezza che richiedono un sondaggio attivo risolvere. Ad esempio, alcune regole del firewall possono rientrare in questa categoria; tuttavia un firewall che non offre protezione contro un utente malintenzionato che conosce le regole sarebbe inutile, poiché alla fine qualcuno lo scoprirà.
¹ Anche se questo non è vero matematicamente parlando, puoi letteralmente scommettere su di esso.