Ho un oggetto che ho bisogno di trasmettere ai client e ho bisogno che i client sappiano che ho effettivamente creato l'oggetto. Ovviamente, questo processo coinvolge in me la firma dell'oggetto con la mia chiave privata, quindi i client possono quindi verificarlo utilizzando la mia chiave pubblica. L'unico problema che ho è che c'è qualche elaborazione in un'altra applicazione che cambia alcune proprietà all'interno di questo oggetto. Ciò significa che non posso firmare l'intero oggetto poiché la verifica fallirà. Tuttavia, quello che ho davvero bisogno di verificare è il Payload, che non cambia. Il processo che ho seguito è il seguente. Per favore fatemi sapere se questo è il modo corretto di farlo e segnalare eventuali difetti di sicurezza che potrebbero esserci.
- Ho aggiunto 2 proprietà nell'oggetto (SignedPayload e PublicKey)
- Crea una coppia di chiavi pubblica / privata
- Firmato il payload utilizzando la chiave privata e imposta SignedPayload
- Aggiunta la chiave pubblica alla proprietà PublicKey
L'applicazione centrale verrà colpita e alcune proprietà cambieranno, ma il Payload non lo farà. In definitiva, i passaggi successivi verranno eseguiti una volta ricevuto il messaggio sul client:
- Deserializza il messaggio
- Verifica il messaggio utilizzando le proprietà PublicKey, Payload e SignedPayload. Se il Payload è cambiato, o la chiave pubblica non ha origine dalla mia organizzazione, il messaggio viene ignorato. Ciò significa che devo firmare la chiave pubblica.
Le mie domande principali sono:
- Questo approccio è sicuro?
- Come posso firmare la chiave pubblica in modo che il cliente possa verificare che io sia il proprietario della chiave?
- Da quello che ho letto, è una pratica comune per trasmettere la chiave pubblica al momento della firma e della verifica dei dati. È questo corretta?
- C'è qualcosa di sbagliato nell'approccio alla creazione di una coppia di chiavi per ogni messaggio, poiché trasmetto sempre la chiave pubblica? La ragione di ciò è evitare di dover memorizzare la chiave privata sul server, che può essere dirottata.
Molte grazie in anticipo.