Errore password tollerante da quiztest

2

Voglio usare gpg con una password simmetrica per crittografare un messaggio. Come farlo è spiegato qui nel forum stesso, ma anche in internet. Sono consapevole che una chiave simmetrica ha il problema generale dello scambio di chiavi. Una possibile soluzione è fare un test a quiz. L'idea è di prendere 20 domande da un esame, che può essere risolto con a, b, c o d. E questa sarà la password per crittografare il messaggio. L'entropia della password è 4 ^ 20, che è abbastanza alta per un piccolo esame divertente.

Il problema è che il software PGP ha bisogno di una password corretta al 100%. Ma in realtà nessuno studente sarà in grado di rispondere a tutte le domande corrette. Quello di cui ho bisogno è qualcosa che è un po 'tollerante agli errori. Qual è l'algoritmo per generare una password, che è anche corretta se solo il 90% delle domande viene risposto correttamente? Questo può essere fatto con qualche tipo di funzione hash o salt?

L'idea dal punto di vista dell'istruzione è che gli studenti partecipano per la prima volta ad un quiz e, se hanno fatto tutto bene, possono leggere il messaggio segreto che contiene musica. Solo lo studente che ha avuto successo può ascoltare la canzone.

    
posta Manuel Rodriguez 26.04.2018 - 17:03
fonte

2 risposte

3

Un modo per farlo è con la condivisione segreta di Shamir . I tuoi dati di song sarebbero preceduti da un valore noto bene (es. "RIGHTKEY") quindi crittografati con un codice simmetrico come AES-CTR-128, e il segreto condiviso S sarebbe la chiave AES convertita in un numero intero a 128 bit.

Usando Shamir's genererai i tuoi 20 punti sulla curva, ognuno nella forma [x, f (x)] . Assegna ciascun punto a una domanda, aggiungendo il valore corretto della risposta (mappatura a, b, c, d a 1,2,3,4) alla parte f (x) , in modo tale da ottenere punti nella forma [x, f (x) + q] dove q è l'indice di risposta corretta 1, 2, 3 o 4. Se uno studente dovesse guardare il codice sorgente della pagina, vedrebbero solo un punto [x, y] e non saprebbero quale sia il valore di f (x) o q è.

Dopo l'invio del foglio delle risposte completato, si passa attraverso ciascuna risposta e si sottrae l'indice della risposta data dalla seconda parte del punto. Se la risposta è corretta, il loro valore sarà sottratto al valore originale di f (x) . Se abbastanza risposte sono corrette, avranno abbastanza punti [x, f (x)] per decifrare il segreto. Poiché alcune delle loro risposte potrebbero essere sbagliate, non puoi semplicemente utilizzare tutti i punti. Invece, si scorre su ogni possibile combinazione di risposte k e si tenta di calcolare il segreto condiviso, quindi utilizzare il segreto risultante per decrittografare i primi 8 byte della canzone crittografata e vedere se i dati sono "RIGHTKEY" . Se è così, sai di avere la chiave giusta. In caso contrario, si passa alla successiva iterazione e si riprova. Per un valore di k = 16 con 20 domande, devi solo eseguire al massimo 4845 tentativi; per un numero sufficiente di risposte corrette sarà molto più veloce in quanto è probabile che tu trovi una combinazione corretta nella fase iniziale del processo di decodifica.

Contro un approccio naive bruteforce, il sistema ha un limite di sicurezza di 4 k per una soglia di k risposte corrette. La principale debolezza è che se un utente è assolutamente sicuro di alcune risposte ma non ne conosce altre, può usare quelle che sa essere corrette per ridurre significativamente lo spazio a forza bruta. In definitiva, tuttavia, questo è un problema intrinseco per qualsiasi approccio di validazione lato client che utilizza le soglie. L'unico modo per evitare questo è di convalidare l'esame sul lato server rispetto a un insieme di risposte conosciute.

    
risposta data 26.04.2018 - 17:53
fonte
0

La soluzione più semplice che viene in mente è quella di utilizzare un codice di correzione degli errori come parte dell'output del quiz. Una variante ben nota sono i codici di Hamming. Dovresti usare Hamming (20,15) per questo.

Un'opzione alternativa che potrebbe essere più intuitiva per l'implementazione manuale da parte degli studenti è un codice rettangolare . Puoi organizzare le 20 domande in una griglia 5x4 alquanto impropria per il controllo, oppure estendere il questionario a 24 domande per una griglia 5x5-1 corretta.

In entrambi i casi, alcune domande diventano essenzialmente facoltative se si è perfetti sui "bit di dati". Non posso suggerire un modo semplice e scalabile (per garantire che 1 e solo 1 errore sia correggibile), a parte l'uso di un programma di controllo della scatola nera, anche se ciò non significa che non esista.

    
risposta data 26.04.2018 - 17:37
fonte

Leggi altre domande sui tag