Questa è una domanda potenzialmente ipotetica in quanto non è stato determinato se ci sarà richiesto di farlo, ma immagino che sia una domanda che si presenterà più spesso.
Sfondo
Quando si implementano servizi RESTful l'approccio standard è che l'URI contiene le informazioni richieste per identificare resource in questione. Anche se non sono un restafarian ci sono molti vantaggi rispetto a questo approccio di cui desideriamo approfittare.
Problema
Siamo soggetti ai requisiti normativi relativi alla protezione di determinati tipi di informazioni. Alcuni di questi elementi protetti finiranno nei percorsi delle risorse se seguiamo la formula REST di base.
TLS coprirà la maggior parte delle preoccupazioni perché gli URL sono crittografati. Tuttavia, ci sono alcuni posti in cui possono essere conservati in chiaro. In particolare, vengono spesso scritti per accedere ai registri (che è utile) per impostazione predefinita e se le persone utilizzano i browser per questo, possono essere archiviati in chiaro nella loro cronologia di navigazione.
Approccio
Supponendo che questo sia un problema e vogliamo utilizzare un approccio del genere sembra che ci sia un contendente principale per la soluzione, che è quello di crittografare parti dell'URI o di tutto ciò. L'hashing non sembra essere un'opzione in quanto i dati sono altamente prevedibili e il calcolo dell'intero insieme di valori è semplice. La crittografia dell'intero URI limiterà molti dei vantaggi dell'approccio. La crittografia simmetrica richiede la distribuzione di una chiave segreta ampiamente e quindi sconfigge lo scopo. L'opzione che sembra la migliore è crittografare i dati sensibili con una chiave pubblica.
A quanto ho capito, il tuo output crittografato deve essere lungo almeno quanto il modulo . Quindi se andiamo con una chiave da 2048 bit, ognuno dei dati dovrà avere almeno 256 byte. Ciò si tradurrà in alcuni URI piuttosto lunghi, ma penso che dovrebbe essere OK per un po 'di tempo e quel limite potrebbe non essere applicabile alla nostra soluzione.
Questo approccio sembra valido e / o c'è qualcos'altro che mi manca? Sarebbe valido utilizzare la stessa coppia di chiavi che verrebbe utilizzata per TLS? Probabilmente ci devono essere altre informazioni nella porzione crittografata per evitare attacchi di replay o il mapping di un valore crittografato alla chiave data, corretto?
NOTA : dovrei menzionare che per il mio problema specifico, solo le parti autenticate sarebbero in grado di chiamare. Questo non è qualcosa che intendiamo esporre su internet, anche se possono capitare errori. Tutte le parti coinvolte sono legalmente obbligate a proteggere i dati. Penso che valga la pena esplorare un uso più generale di tale idea a causa della crescente popolarità dei servizi RESTful.