Il nome utente e la password necessari per registrarsi e autenticare l'utente con zero conoscenze guillou quisquater?

1

Voglio fare l'autenticazione quisquater guillou per un sito web con Laravel (PHP). L'autenticazione è tra server e client (utente). Nei riferimenti che ho letto ( qui e qui ) lo schema di registrazione è:

  1. Il server seleziona 2 primi p e q abbastanza grandi da rendere impossibile il factoring del loro prodotto n = pq.
  2. Quindi il server seleziona un altro grande numero primo b (0 < b < n). I valori b e n sono pubblicati. p e q sono tenuti segreti da tutti i provers e i verificatori.
  3. Quando si generano nuovi certificati, il server lancia una nuova chiave privata casuale u (0 < u < n) e la chiave pubblica la sua inversa u -1 oscurata dal tasto di gruppo v = u -1 b . Questi valori sostituiscono le chiavi private e pubbliche normalmente generate dallo schema RSA.

Per lo schema di autenticazione:

  1. Alice tira casualmente r (0 < r < n) e invia a Bob.
  2. Bob tira a caso k (1 < k < n) e calcola y = ku r mod n e x = k b mod n, quindi invia (y , hash (x)) ad Alice.
  3. Alice calcola z = v r y b mod n e verifica hash (z) uguale a hash (x).

Le mie domande sono:

  1. Quando l'utente si registra al mio sito web, l'utente deve scegliere il nome utente e parola d'ordine. Ma lo schema non menziona per cosa lo username e la password. Per favore spiegami qual è lo scopo del nome utente e della password nella registrazione e nello schema di autenticazione.
  2. Quando l'utente si registra, lo schema dice che il server seleziona 2 primi p e q. Devo generare i 2 numeri primi su ogni registrazione utente? o dovrei generare i 2 numeri primi una volta e usare quei numeri primi per ogni utente?
  3. C'è una libreria PHP che può calcolare z = v r y b mod n veloce? perché il calcolo di questa equazione richiede fino a 3 minuti (ho provato con p = 337 e q = 357)
  4. Nello schema di registrazione (la frase in grassetto), dovrei salvare il valore di p e q nel database del server?
posta kevin 03.05.2017 - 07:14
fonte

1 risposta

0

Nome utente e password sono un sistema di autenticazione in cui si trasmette il canale (codificato) della coppia e lo si utilizza per dimostrare al server che il client è quello che dichiara di essere (la conoscenza della password è la prova). Al contrario, i protocolli di autenticazione Zero Knowledge non trasmettono mai una password sul canale. Lavorano sullo schema di risposta alle sfide.

Dato che stai progettando una soluzione a conoscenza zero basata sul protocollo di autenticazione di Quillquator Guillou, avere username e password sconfiggeranno lo scopo. Ciò a sua volta risponderà alla tua prima domanda: no, non avrai username e password per la registrazione. Lo scopo della registrazione è di presentare il client al server come client registrato. Durante la registrazione, un utente fornirà alcuni mezzi per il server per verificare il client in futuro (autenticazione). Nello schema di autenticazione di username e password, questa sarebbe la password. Verrebbe in seguito utilizzato per dimostrare al server che il cliente è quello che ha registrato e la conoscenza della password ne è la prova. La registrazione in un protocollo di autenticazione a conoscenza zero sarebbe un po 'diversa.

A livello puramente teorico, senza entrare nei dettagli su alcun punto specifico, ecco i passaggi necessari per progettare un tale schema:

Registrazione

  1. Il Cliente genererà una coppia di chiavi pubblica e privata
  2. Il client presenterà la sua chiave pubblica al server (che assume anche il ruolo di autorità di fiducia)
  3. Il server renderà la chiave pubblica in un certificato e lo invierà al client
  4. Il Cliente è responsabile della memorizzazione sicura del certificato e della chiave privata corrispondenti a questo certificato. Il certificato è a sua volta il nome utente e la chiave privata sarebbe la password anche se non verrebbe mai trasmessa sul filo.

Autenticazione

  1. Il cliente presenterà il suo certificato al server
  2. Il server controllerà il certificato e lo rifiuterà se non è valido (non emesso dal server). Preso direttamente da articolo che hai collegato :
  1. Prover chooses random k ∈ Zn
  2. Prover sends verifier Cert(prover), γ = kb mod n
  3. Verifier checks certificate, rejecting if verTA(ID(prover) || v, s)≠true.
  1. Se la verifica ha esito positivo, il server continuerà con lo schema di autenticazione come descritto nella domanda.

Risposte alle tue domande

When the user register, the scheme said that the server select 2 primes p and q. Should I generate the 2 primes on each user registration? or should I generate the 2 prime numbers once and use those primes for every user?

Questi due numeri non vengono generati nella registrazione dell'utente ma nella configurazione iniziale. Li genereresti una volta e li userai per ogni registrazione utente.

Is there any PHP library that can compute z = vr yb mod n fast? because it takes up to 3 minutes when computing this equation (I tested with p=337 and q=357)

Dovrai porre questa domanda specifica su un altro SE, probabilmente su stackoverflow.SE. Dovrai anche eseguire calcoli matematici (RSA) sul lato client e ci sarà bisogno di strumenti simili. Anche se tutto ciò è puramente teorico, tieni presente che fare la crittografia nel browser è difficile al massimo . Inoltre, sarà necessario risolvere l'archiviazione delle credenziali del client (certificato e chiave privata) anche dal lato client. Non è banale!

In the registration scheme (the bold sentence), should I save the p and q value in the server database?

Poiché tutto questo è per la tua tesi, devi decidere l'ambito. Se la memorizzazione sicura di questi due numeri non rientra nell'ambito, è possibile dichiarare un database come spazio di archiviazione sufficientemente sicuro e salvarli lì. L'altro estremo è usare HSM .

    
risposta data 03.05.2017 - 12:27
fonte

Leggi altre domande sui tag