I miei pensieri vanno nella giusta direzione secondo me, anche se spero di poterti convincere a seguire un percorso leggermente diverso.
Analizziamo i tuoi requisiti:
-
Si desidera garantire richieste autenticate reciprocamente per l'elaborazione dei pagamenti, ovvero un client che avvia tale processo vorrebbe essere sicuro di parlare con il server giusto e un server che accetta una richiesta vorrebbe essere sicuro dell'identità del pari. Quindi la soluzione deve avere l'autenticazione del server più l'autenticazione del client
-
L'integrità delle richieste è un'altra: nessuno dovrebbe avere la possibilità di modificare qualcosa nella richiesta mentre è in corso
Questi erano i requisiti principali che hai elencato. Aggiungerei anche la privacy al mix: probabilmente non vorresti che nessuno ascoltasse nel traffico per poter imparare ciò che il cliente ha acquistato o la somma di denaro che paga.
E ora arriva la parte difficile. Puoi davvero raggiungere questi obiettivi con un mix di crittografia asimmetrica e simmetrica. Ma penso che uno schema manuale non sia appropriato qui, ed ecco i motivi per cui:
-
Stai provando a proteggere transport e la protezione è effimera - una volta completata la transazione, non devi più persistere i dati della richiesta (a meno che non provi a stabilire un audit trail)
-
Assicurando il trasporto, in questo momento stai progettando un protocollo di sicurezza. E farli bene è probabilmente uno dei problemi più difficili nella crittografia. Se hai letto il protocollo Needham-Schroeder : sono morti sul serio riguardo a questo protocollo per una coppia di anni, convinto che andava perfettamente bene. E avevano tutto il diritto di farlo, essendo decorati crittografi e tutto il resto. Ma tre anni dopo è stato presentato un attacco valido ... probabilmente sai dove sto andando e tu stesso hai già menzionato le varie cose di cui dovresti preoccuparti quando cerchi di rendere sicura questa cosa ...
Ma non tutto è perduto, perché c'è già un protocollo perfetto che fa tutto quanto sopra e molto altro per te. È TLS! Supporta tutte le tue esigenze ed è stato testato da milioni di persone, quindi è improbabile che la tua soluzione manuale non sarà in grado di competere comunque. E sul lato positivo, è anche già supportato in tutti i linguaggi di programmazione più diffusi, non è necessario inventare nulla.
PS : quando utilizzare le firme rispetto a quando utilizzare TLS: mi ha sempre aiutato ad analizzare la mia situazione facendomi questa domanda: "Vuoi proteggere il trasporto?" "Vuoi proteggere i dati / documenti?"