Domanda

Sto usando il modulo PHP mcrypt per crittografare i dati sensibili nella mia azienda. Questo ha funzionato bene. Tuttavia, mi è stato chiesto di creare una nuova password principale che dovrebbe essere in grado di decrittografare qualsiasi dato. Il problema è che questa password principale dovrebbe essere codificata in un file di script. Per favore, correggimi se sbaglio, ma l'unico modo sicuro sembra essere quello di codificare una chiave pubblica nello script e usarla per crittografare i dati mantenendo la chiave privata sicura e usarla per decrittografare solo quando necessario.

mcrypt non sembra avere un'implementazione per un tale schema. Qualcuno sa di una libreria (modulo PHP o PHP puro) che lo farebbe?

È stato utile?

Soluzione

Suggerisco di dare un'occhiata ai collegamenti OpenSSL di PHP, e in particolare alla openssl_public_encrypt () . Potresti davvero incorporare una chiave pubblica principale nello script e far sì che lo script crittografi la chiave AES di ogni utente con questa chiave pubblica. Tieni al sicuro la chiave privata principale corrispondente nella società.

Se hai bisogno della funzione master decrypt, dovresti estrarre la chiave utente crittografata, decrittografarla con la chiave privata master e quindi decrittografare i dati originali.

Altri suggerimenti

C'è un'estensione PECL per questo. http://us2.php.net/manual/en/book.gnupg. php

Puoi anche usare lo strumento da riga di comando gnupg da php, se non deve essere molto veloce: http://devzone.zend.com/article/1265

Non ho provato nessuno dei due metodi.

Non vedo come funzionerebbe. Qualsiasi funzione di crittografia bidirezionale verrà decrittografata solo quando viene immessa la password specifica utilizzata per crittografare (a meno che tu non sia l'NSA e rimetti le porte negli algoritmi). Non puoi avere due password per decrittografare lo stesso file (a meno che non ci siano collisioni di hash, ma non è qualcosa che puoi fare accadere facilmente).

Per quanto riguarda l'archiviazione della password principale nel programma, sarebbe molto meglio archiviarla in un file separato in cui il programma legge, in modo da poter utilizzare una sicurezza più stretta a livello di sistema operativo su quel file.

Tieni presente che mcrypt non è una crittografia a chiave pubblica. Con la crittografia a chiave pubblica, potresti essere in grado di fare ciò che desideri. Ad esempio, con PGP / GPG, è possibile crittografare un file in modo tale che tre diversi utenti possano decrittografarlo utilizzando le proprie chiavi private, senza conoscere le rispettive chiavi private. Quindi puoi avere un utente virtuale con la password principale che può decrittografare tutto.

Un'altra opzione sarebbe quella di conservare due copie di tutti i dati crittografati; uno crittografato con la password dell'utente e uno crittografato con la password principale.

Solo per essere sicuri del tuo requisito di questa password principale ,

  1. Si prevede che venga utilizzato solo come comando " crittografa questo 'che" sigillerà "qualcosa
    quale può quindi essere aperto solo da qualcuno che conosce la chiave privata in questione? O,
    • È qualcosa che ti aspetti di aprire qualsiasi crittografia eseguita nell'azienda?
    • Voglio solo essere sicuro che il tuo fraseggio non debba essere interpretato in questo secondo modo
    • la tua frase ' decodifica qualsiasi dato ' sembra pericolosa
      (e non fattibile / pratico con crittografia a chiave asimmetrica)

Aggiornamento basato sul commento.

  • Stai pianificando due copie dei dati ciascuna crittografata con chiavi diverse
    • una copia deve essere crittografato con la chiave pubblico principale
      • può essere decrittografato con chiunque disponga della chiave principale privata
        la chiave privata principale deve quindi essere protetta (la chiave pubblica non è critica)
    • la seconda copia deve essere crittografata con la chiave Rijndael 256
  • ha lo scopo di consentire al master di decrittografare i dati ogni volta che è richiesto
    in particolare, in assenza dell'individuo che l'ha crittografato

Questo approccio funzionerà per, facile accesso ai dati da parte dell'individuo con la chiave Rijndael,
senza l'intervento del proprietario della chiave privata principale.
E, quando il proprietario della chiave privata principale si fida della segretezza dei dati.

Il tuo schema dovrà aggiornare la copia principale (eliminando quella precedente e crittografandone una nuova) ogni volta che l'utente aggiorna la sua copia.


Tuttavia, se i dati dell'utente sono considerati affidabili con il master (come è chiaramente il caso qui),

  • un approccio più semplice sarebbe quello di rilasciare la chiave Rijndael dal master
  • Il master potrebbe mantenerlo crittografato con la chiave pubblica-master stessa
  • I dati possono quindi essere crittografati solo con la chiave Rijndael emessa
    • sarà sempre accessibile con la chiave master-privata
      che può aprire la chiave Rijndael dell'utente

Se l'utente deve firmare i dati, ciò può essere realizzato separatamente nel processo.
Ti eviterà di conservare copie doppie e conservarle.


Per firmare i dati , l'utente potrebbe avere una coppia di chiavi generata da loro.

  • Prima di crittografare i dati con la chiave privata Rijndael
  • la chiave master-pubblica crittografata con la chiave utente-privata può essere aggiunta ad essa
  • la chiave pubblica dell'utente condivisa con il master (almeno)
    sarà sufficiente per autenticare che l'utente ha fornito i dati
  • Nel peggiore dei casi, se l'utente non è disponibile e la conferma della chiave fallisce,
    il master può essere considerato attendibile sull'autenticità dei dati, che possono ancora essere decifrati
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top