C'è un modo per distribuire biglietti sicuri senza archiviarli?

0

Sto costruendo un sito web sul quale voglio rendere molto facile agli utenti la creazione di pagine anonime e successivamente la possibilità di tornare e modificare quelle pagine. Un modo per farlo è distribuire i biglietti riservati che derivano dall'ID della pagina a quegli utenti quando creano la pagina. Più tardi sarei in grado di ricavare l'ID della pagina dal ticket e consentire a un utente in possesso del ticket di modificare quella pagina.

Naturalmente questo deve essere sicuro, quindi : 1) le terze parti non dovrebbero essere in grado di ricavare l'ID della pagina da un determinato ticket, e ancora più importante: 2) terze parti non dovrebbero essere in grado di prevedere il biglietto per un dato ID di pagina.

Potrei ovviamente farlo facilmente generando casualmente i ticket e archiviandoli in un database, tuttavia vorrei provare a fare questo senza dover memorizzare i ticket.

In altre parole, sto cercando qualcosa di simile a questo:

  1. Sia A un ID pagina pubblico univoco.
  2. Sia S una specie di chiave master immutabile o altro segreto che possiedo e non me ne frega.
  3. Usando S, trasforma A in B, in modo tale che in seguito possa trasformare B in A, ma qualcuno che non è in possesso di S non può.
  4. Non dovrebbe essere possibile, o essere molto difficile, derivare S anche se hai una vasta collezione di coppie A-B.

Esiste un tale processo? Una cosa che ho pensato è un semplice XOR, tuttavia sarebbe facile craccare con solo alcuni esempi di coppie A-B. Non posso usare un hash, perché sono intenzionalmente irreversibili; Non posso derivare A da B se B è un hash di A.

    
posta Pepijn Schmitz 10.06.2015 - 17:03
fonte

2 risposte

3

Sembra l'uso perfetto di un HMAC . Crei un segreto casuale sicuro S . Quindi il ticket per ogni pagina sarà ID + HMAC(S, ID) . Quando ottieni un ticket, estrai ID , ripeti l'HMAC e poi confronta il risultato con quello nel ticket.

Sebbene sia probabile che sia più semplice e più veloce di una soluzione di crittografia, funzionerà solo se non ti dispiace che ID sia in chiaro nel ticket.

    
risposta data 10.06.2015 - 18:01
fonte
1

Mi sembra come dovrebbe funzionare la crittografia a chiave pubblica standard. Ad esempio, utilizzando RSA (con chiave pubblica N = p * q ed e, chiave privata d):

  • S sarebbe la tua chiave privata d.
  • Trasformazione: B = A ^ e mod N.
  • Trasforma indietro: B ^ d = B mod N.

I tuoi requisiti sembrano quindi adattarsi naturalmente alle ipotesi di sicurezza di RSA. L'unica ruga qui è che chiunque può calcolare B da una data A (che viola la tua dichiarazione originale, ma non i requisiti formali che seguono). Penso che questo possa essere risolto mantenendo anche private (e sufficientemente grandi e casuali), ma ciò richiederebbe un'analisi più accurata.

    
risposta data 10.06.2015 - 17:51
fonte

Leggi altre domande sui tag