Sicurezza per oscurità. Una domanda alla quale la risposta attesa è errata quando viene fornita solo l'informazione presentata nella sfida richiede alcune conoscenze "segrete" aggiuntive che solo il software "in" ha. Il guaio è che il software è nelle mani del tuo aggressore, che può decompilarlo per scoprire il segreto. Questo è quindi molto debole, perché si basa su un segreto statico di bassa entropia (il "segreto" è quello di aggiungere 1 alla risposta alla domanda indicata).
Se due programmi devono fidarsi l'un l'altro, ognuno sapendo che l'altro non può essere garantito al 100% da chi dicono di essere e non da impostore, il metodo usuale è un po 'di "verifica indipendente"; se una terza parte fidata afferma che questo programma è quello che dice di essere, è una "prova" che puoi usare per aumentare la tua sicurezza.
I certificati sono una forma di questa verifica; un server che desidera provare da solo ottiene un certificato da una terza parte indipendente, che ha crittografato le sue informazioni utilizzando una chiave privata non fornita al server, ma che può essere letta da chiunque richieda il certificato del server, utilizzando una chiave pubblica distribuito indipendentemente dalla terza parte. Il server (o un utente malintenzionato che desidera simulare questa posizione) pertanto non può modificare le informazioni nel certificato e, fintanto che le informazioni corrispondono alla posizione effettiva e agli identificatori pubblici del server, i client possono essere sicuri che il server sia tale Dice che lo è.
Senza i certificati, la maggior parte dei sistemi si basa su un modello di prova "a conoscenza zero". Le prove a conoscenza zero di solito richiedono ancora una sorta di terza parte, che distribuisce le prove che i programmi usano per rispondere alle sfide. Nel mondo reale, questo è di solito un server di autenticazione. La differenza è che nessuno deve sapere tutto sullo schema di autenticazione e le informazioni utilizzate possono essere ottenute in tempo reale e quindi possono cambiare ogni volta che vengono eseguite.
Ecco un esempio: Alice è accolta da Bob, di cui Alice non si fida. Bob dice di conoscere Cindy e quindi, dice, è degno di fiducia. Per provare questo fatto, Alice chiama Cindy, che conosce Alice, e chiede metà della coppia di chiavi asimmetriche. Quindi sfida Bob a crittografare un messaggio segreto che può essere decodificato dalla chiave di Alice. Bob chiama Cindy, che conosce anche Bob, e gli dà l'altra metà della coppia di chiavi. Bob crittografa il messaggio, che Cindy non conosce mai, e lo consegna ad Alice, che la decifra con la sua chiave e ottiene il messaggio originale. Bob non avrebbe potuto crittografare il messaggio correttamente senza conoscere l'altra metà della chiave, e l'unico modo in cui avrebbe potuto ottenere è Cindy. Cindy, da parte sua, non conosce mai il messaggio segreto, quindi non può dare a Bob il messaggio da inviare a meno che Bob non le dica (e se Cindy lo avesse chiesto, Bob sarebbe stato sospettoso che forse Cindy non fosse chi lei dice che lo è).
Nel mondo reale, Alice e Bob sarebbero programmi usati dagli utenti finali (forse lo stesso utente finale) e Cindy sarebbe un sistema di autenticazione centrale. Gli utenti finali dei due programmi avrebbero segreti offline (username / password) che avrebbero usato per l'autenticazione con il sistema centrale, e una volta fatto ciò i programmi possono dimostrare l'un l'altro che i loro utenti finali sono utenti validi sul sistema, senza o app che conosce le credenziali dell'altro utente o il servizio centrale che conosce il segreto passato tra i due programmi come parte del loro handshake.
Affinché questo tipo di schema possa essere infranto, un attaccante David deve convincere Cindy che in realtà è Bob, o deve anche avere una complice Emily, che deve convincere Alice che è Cindy, prima di dare liberamente a Bob l'altra metà della chiave che ha generato per Alice. Come Alice sa che Cindy è davvero Cindy e non Emily, e come Cindy sa che Alice e Bob sono chi dicono, richiedono i loro schemi con i loro segreti. Questi schemi possono coinvolgere anche terze parti, ma alla fine si finisce con le terze parti; ad un certo punto devi fare affidamento sul trasferimento di un segreto offline, come un set di credenziali utente, per verificare che qualcuno sia chi dice senza dover consultare terze parti.