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
- Il Cliente genererà una coppia di chiavi pubblica e privata
- Il client presenterà la sua chiave pubblica al server (che assume anche il ruolo di autorità di fiducia)
- Il server renderà la chiave pubblica in un certificato e lo invierà al client
- 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
- Il cliente presenterà il suo certificato al server
- Il server controllerà il certificato e lo rifiuterà se non è valido (non emesso dal server).
Preso direttamente da articolo che hai collegato :
- Prover chooses random k ∈ Zn∗
- Prover sends verifier Cert(prover), γ = kb mod n
- Verifier checks certificate, rejecting if verTA(ID(prover) || v, s)≠true.
- 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 .