Ho problemi a progettare un sistema per contenuti autenticati dal mio sito distribuiti da altre persone. Sto lavorando su Ruby on Rails, ma non penso che a livello teorico la mia domanda non sia ristretta a quel framework. Per non dare troppo spazio, il mio sito (chiamiamolo www.site.com) aiuta le aziende a tenere l'inventario di chi ha acquistato l'articolo e consente ai clienti di visualizzare la cronologia degli acquisti.
Quindi, ho il seguente problema:
- Supponiamo che Alice venda cheeseburger. Alice fa un account su site.com e registra i suoi cheeseburger come un oggetto che vende. Di conseguenza, site.com memorizza il cheeseburger di Alice in un database SQL con l'ID 92314
- Bob è un cliente dello stand del cheeseburger di Alice e ha recentemente acquistato un cheeseburger.
- Alice vorrebbe dire a Bob di site.com e della sua capacità di monitorare gli acquisti. Quindi, Alice invia una richiesta a site.com per restituire
hashA
corrispondente all'elemento con ID 92314. - Bob visita
www.site.com/purchase/hashA
e viene richiesto di creare un account o di accedere per registrare il suo nuovo acquisto di cheeseburger da Cheeseburger deliziosi e deliziosi di Alice. - Charlie visita anche lo stand del cheeseburger di Alice e acquista un cheeseburger.
- Alice vorrebbe anche dire a Charlie di site.com e invia una richiesta che genera
hashB
per Charlie da utilizzare nello stesso modo.
La mia domanda è, come faccio a trovare uno schema che può generare hashA
e hashB
in modo che il mio server web possa cercare in modo efficiente gli articoli. Sospetto che hashB
possa essere generato da hashA
utilizzando un codice di ordinamento che utilizza hashA
come seme. Non so come, dopo aver ricevuto hashA
o hashB
, site.com saprà che corrisponde all'articolo 92314. Sospetto che usando un nonce ti aiuterà.
Le cose che vorrei evitare includono:
- Avere Charlie usa
hashA
dopo che è stato usato da Bob - Esposizione dell'id 92314 all'utente
- Avere un singolo punto di errore (vale a dire una singola chiave che crittografa gli hash per tutti gli ID)
- Le cose si interrompono se Charlie usa
hashB
prima che Bob usihashA
.
Dichiarazione di non responsabilità: la mia esperienza è più legata alla computer grafica e meno allo sviluppo web o alla crittografia, quindi indirizzarmi verso Google è utile. Se questo appartiene a uno degli altri siti di stackexchange (Cryptography, Programmers, ecc.). Sentiti libero di farmelo sapere e lo sposterò.