Come implementare un Web of Trust?

5

Come implementare un Web of Trust o qualcosa di simile?

Alice riceve una chiave pubblica e una privata dal ragazzo RSA.

Bob ha bisogno di inviare ad Alice un codice segreto nucleare (o il numero di telefono del suo babysitter).

Bob chiede la chiave pubblica di Alice sul server, ma la malvagia Eve intercetta la richiesta e invece manda la sua chiave.

Come evitare quelle situazioni?

Qualcuno di StackExchange su Crypto mi ha detto:

Linking identity to public keys is out of scope for pure crypto. Cryptography can't know who you mean with "Alice". Exchange it in RL, have somebody else you already trust tell you(either web of trust or CA),...

Bene, come posso implementarlo (in PHP / MySQL)? Qualcuno può spiegarmi come implementarlo o come funziona, quindi posso implementarlo?

Grazie

    
posta Jeremy Dicaire 24.01.2013 - 19:37
fonte

2 risposte

4

L'idea di base della rete di fiducia, utilizzata in PGP per inviare messaggi, è la convalida peer:

Alice conosce Bob, Bob conosce Cindy, ma Alice non conosce Cindy. Cindy vuole inviare qualcosa a Alice in privato, ma prima deve essere "presentato" ad Alice.

Cindy inizia chiedendo prima ad Alice il suo certificato di chiave pubblica. Alice lo manda; è un'informazione pubblica, quindi può trasmetterla al mondo. In questo certificato è incluso un numero di firme digitali, ciascuna di una persona che Alice conosce, incluso Bob, che garantisce l'accuratezza di questo certificato. Ogni firma è unica per la combinazione del certificato e del firmatario e la creazione di una firma richiede una chiave privata nota solo a quel firmatario. Una volta creato, chiunque conosca la chiave pubblica che corrisponde alla chiave privata del firmatario può utilizzare tale chiave per verificare che la firma corrisponda sia al messaggio che al firmatario (o che non lo sia).

Come tale, la malvagia Eva non può sperare di alterare il messaggio in modo tale che la firma (s) possa ancora corrispondere, né può cambiare le firme stesse, senza aver compromesso le chiavi private di tutti i firmatari. Il peggio che può fare, dato che qualcun altro già conosce e garantisce l'identità di Alice, è corrotto dal certificato che ha indotto Cindy a rifiutarlo, impedendo la comunicazione prevista.

In alternativa, Cindy potrebbe chiedere a tutti i suoi amici se conoscono Alice, e qualsiasi cosa, inclusa Bob, può trasmettere a Cindy una copia del certificato di Alice con solo la loro firma. Ciò riduce il numero di firme che devono essere incluse in un singolo certificato per fornire una buona possibilità a Cindy di riconoscerne una; da quando Cindy chiede ai suoi amici, che rispondono solo se conoscono davvero Alice, Cindy riceve solo firme da persone che conosce e si fida apparentemente. Ma potrebbe causare l'invio di un'inondazione di dati a Cindy se Cindy e Alice hanno molti amici in comune.

In entrambi i casi, Cindy analizza queste firme per i firmatari che conosce. Trova il nome di Bob, convalida la sua firma di questo certificato e ora sa che Bob pensa che questo sia il vero certificato per la vera Alice. Cindy ora ha la scelta di affidarsi a Bob in modo implicito, quindi si fida del certificato di Alice sulla sua sola parola, o di affidarsi parzialmente a Bob, e cerca altre persone che sa chi ha firmato il certificato di Alice. Se trova abbastanza persone di cui si fida in parte, o almeno una persona di cui si fida implicitamente, può fidarsi del certificato di Alice per estensione. Questo è noto come "introduzione fidata" ed è centrale nella rete della fiducia.

Una volta che Cindy decide di fidarsi del certificato, usa la sua chiave pubblica per crittografare la chiave di un messaggio simmetricamente crittografato che è stato anche firmato da Cindy con il proprio certificato. Lei quindi lo invia ad Alice. Alice non conosce Cindy, e quindi ripete un processo simile che Cindy ha fatto per ottenere, convalidare e decidere di fidarsi del certificato di chiave pubblica di Cindy (cosa che fa, perché Bob ha firmato il certificato di Cindy e Alice si fida di Bob implicitamente). Usa la propria chiave privata per decifrare la chiave del messaggio, quindi usa la chiave del messaggio per decrittografare il messaggio e infine usa la chiave pubblica di Cindy per convalidare la firma del messaggio.

Ora, è con tre persone che sono già parzialmente "impigliate" nel web e quindi possono fidarsi l'un l'altro sulla base delle raccomandazioni dei pari. Per due persone senza amici di fiducia reciproci, come quando un web sta appena iniziando o quando una nuova persona che non ha mai usato PGP prima di provare a unirsi, questa raccomandazione peer automatica semplicemente non funzionerà; non ci sono raccomandazioni tra pari per parlare (potrebbero non esserci nemmeno colleghi). Per girare correttamente i primi thread di questo Web, le persone che desiderano formarlo devono scambiarsi i file dei certificati tra loro all'interno di un ambiente che è intrinsecamente attendibile (noto come "key signing party"). Altrimenti la malvagia Eve può intercettare i certificati scambiati, sostituirli con certificati falsi, e diventa un "uomo nel mezzo".

Il modo più semplice e più semplice per evitarlo è quello di incontrarsi di persona e scambiare fisicamente i file dei certificati tra loro. Esistono altre possibilità, come cassette di sicurezza sicure, ma tutte le esigenze di Eve sono un secondo di accesso illimitato e non rilevato alla memoria fisica della chiave per rovinare tutto.

    
risposta data 25.01.2013 - 00:48
fonte
2

Questo è un problema classico a cui una rete di fiducia è destinata per aiutare. Se una rete di fiducia viene fatta bene, la chiave pubblica dovrebbe essere presentata per ottenere una firma da un altro membro del web e un'impronta digitale della chiave pubblica dovrebbe essere condivisa in un canale fuori banda (come pure la verifica dell'identità dovrebbe essere fatto fuori banda). Per alcuni siti Web di trust, questo implica effettivamente l'incontro di persona con l'autenticazione dell'autentica.

Questo rende molto più difficile compromettere un canale, ma anche se un utente malintenzionato riesce a compromettere un particolare canale, ottiene solo una firma. L'altro aspetto di una buona rete di fiducia è che dovrebbe essere possibile ottenere più firme che attestino la tua identità. Anche se uno o due utenti finiscono per firmare la chiave pubblica sbagliata, sarebbe molto difficile (a meno che non venga trovato un problema sistematico) ottenere firme per la chiave pubblica falsa da più parti nella rete di fiducia.

L'attaccante potrebbe fare un gruppo di entità a firmare le proprie chiavi, ma dal momento che quei firmatari non sarebbero più fidati di quelli falsi, non aumenterebbe la fiducia a meno che l'attaccante non fosse in grado di ottenere i loro falsi certificati fidati dei firmatari di cui ti fidi.

Per quanto riguarda la logistica della creazione di una rete di fiducia, hai alcune opzioni. Se vuoi optare per uno semi-centralmente gestito, puoi convalidare personalmente l'autenticità di alcune persone e quindi concedere loro la possibilità di accedere alle persone in un database centrale. Per una versione P2P / non centralizzata, è sufficiente che ogni cliente tenga traccia di un elenco di livelli di fiducia associati alle chiavi pubbliche che conosce. Ogni certificato dell'utente verrà firmato da ogni persona che li approva e quindi il cliente può calcolare la fiducia esaminando le chiavi pubbliche di cui si è fidato che l'hanno firmata. Il rovescio della medaglia è che le chiavi potrebbero diventare piuttosto grandi, quindi potrebbe richiedere un qualche tipo di ottimizzazione come avere l'elenco di certificati attendibili pubblicati per ogni cliente e quindi avere la persona che vuole autenticarsi invia solo le catene appropriate di fiducia. / p>

Le dimensioni sarebbero comunque piuttosto grandi, quindi un sistema centralizzato sarebbe generalmente più semplice. Il sistema centralizzato potrebbe essere semplice come un repository di certificati PKI. Ogni certificato è memorizzato centralmente e tutti i certificati che hanno firmato un altro certificato possono essere consultati. Il server o il client possono quindi consultare le catene di trust più aggiornate. (Come in un sistema p2p, se A ha firmato B e poi C ha firmato A, B avrebbe un certificato obsoleto per il firmatario A e se la terza parte D si fidava solo di C, quindi non si fiderebbero di B a meno che le cose non fossero centralizzate.)

    
risposta data 24.01.2013 - 21:01
fonte

Leggi altre domande sui tag