Condivisione di credenziali crittografate tra applicazioni sullo stesso sistema

0

Abbiamo un'applicazione web basata su Java che viene eseguita localmente sui computer client, come se fosse un'applicazione desktop. Dopo aver autenticato l'utente, crittografiamo e memorizziamo le loro credenziali nella sessione primaverile perché abbiamo una funzionalità che consente all'utente di aprire un'applicazione esterna (anch'essa sviluppata da noi) e ci si aspetta che vengano autenticate automaticamente.

Il nostro problema è sorto perché abbiamo disaccordi sul modo più sicuro per gestire questo processo di trasferimento.

Ecco un riepilogo del processo, che purtroppo è stato deciso senza il nostro contributo. Alla fine ho davvero intenzione di chiedere suggerimenti per un processo migliore, ma ti sto anche cercando di distruggerlo se merita. Per ora rimuoverò i nostri pensieri.

Lato client

  1. Quando un utente fa clic (un collegamento nella nostra app Web) per avviare un'app esterna, generiamo un valore salt da una data yyyMMddmm e lo passiamo al server.

Lato server (Java)

  1. L'hash java sha-1 ha una chiave segreta aes.
  2. Il java sha-1 esegue il hash del risultato del passaggio 2, con il sale basato sulla data.
  3. Utilizziamo i primi 128 bit come chiave di crittografia AES. Noi crittografiamo (e codifica esadecimale) il nome utente, la password e il sale.
  4. Il risultato viene quindi passato all'app esterna.

Lato applicazione (C)

  1. Eseguiamo un ciclo per "indovinare" cosa fosse il sale (attraverso un intervallo di minuti prima di "ora").
  2. Un sale viene generato nel formato yyyyMMddmm .
  3. Il C sha-1 ha l'hash della chiave segreta.
  4. Il sha sha di C-1 è il risultato del passaggio 8, con il sale basato sulla data.
  5. Utilizziamo i primi 128 bit come chiave di crittografia AES. Noi crittografiamo (e esadecimale) il sale.
  6. Se il sale non corrisponde al sale crittografato fornito da java, il ciclo continua.
  7. Se il sale corrisponde, proviamo a decifrare le credenziali dell'utente.

Al di fuori del fatto che tutto ciò avviene su un singolo sistema e se un utente ha accesso non autorizzato, avrà accesso a tutto il necessario per acquisire e decifrare le credenziali - riteniamo che ci sia molto che possa essere fatto per migliorare questo processo. "Indovinare" un sale sembra una scelta terribile e tutto ciò è troppo complesso e sembra molto più "sicuro" di quanto non sia in realtà.

Alcune domande specifiche:

  • C'è un modo migliore per crittografare e consegnare i dati quando succede tutto su un singolo sistema?
  • Usare un sale che è semplicemente la data è una pratica scadente, che cosa è una pratica migliore?
  • Ci sono problemi con la codifica di tutto con hex contro base64, specialmente quando si utilizzano URL di protocollo esterni?
  • È corrucciato per "salare un sale con se stesso"?
posta helion3 13.12.2016 - 20:30
fonte

0 risposte

Leggi altre domande sui tag