L'assicurazione del file è in sola scrittura per il programma specifico

2

Quindi in questo scenario ci sono diversi programmi che possono aprire e leggere un file binario, ma il mio programma deve essere l'arbitro finale nella creazione e scrittura di questi file.

In questo programma che sto scrivendo, vorrei rilevare se il file è stato manomesso al di fuori del controllo del mio programma. È importante che gli altri programmi possano ancora leggere il file, ma che il mio programma possa rifiutarsi di aprirlo per motivi di modifica del mio programma.

La mia soluzione è di distribuire i file con una lista di checksum. Se il checksum corrispondente dall'elenco di checksum non corrisponde al file di accompagnamento, o l'elenco non esiste, allora quel file viene rifiutato.

La mia soluzione sarebbe di calcolare l'hash usando il seguente metodo:

sha256(HIDDEN_SALT + FILE_CONTENTS)

La HIDDEN_SALT è la proprietà chiave che garantisce che le fonti esterne non possano spoofare l'hash.

In questa situazione, dato che il sale è applicato a più file (1000+), sarebbe facile decifrare lavorando all'indietro rispetto ai checksum a cui era applicato? (Considera che hanno sia il checksum che il file.) Ci sarebbe una soluzione migliore a questo problema?

    
posta A Mac 17.08.2016 - 13:14
fonte

2 risposte

2

In realtà ci sono due problemi da risolvere:

  • che il file non è stato manomesso dalla creazione da parte di un utente attendibile
  • che una parte attendibile ha effettivamente creato il file in primo luogo

Questo è esattamente lo scenario in cui i distributori di software open source, RedHat, Ubuntu, MySQL, ecc., devono garantire l'integrità dei pacchetti binari che rilasciano.

Il loro software, in esecuzione sul computer di un consumatore, deve garantire sia che un pacchetto che l'utente ha richiesto di installare non sia stato manomesso da un utente malintenzionato e che sia originato da una fonte attendibile.

L'hashing aiuterà con il primo, ma per quest'ultimo è necessaria la crittografia a chiave pubblica. Il distributore - voi e / o i vostri delegati - pubblicano la loro chiave pubblica e quindi firmano crittograficamente il software distribuito utilizzando la loro chiave privata.

Il modo in cui di solito viene fatto è la creazione di un hash crittografico del contenuto del file, che può essere solo del contenuto, e non deve includere un salt o qualsiasi cosa- e quindi firmare l'hash e distribuire la firma, l'hash e il file, insieme alla chiave pubblica.

Quindi chiunque può utilizzare la chiave pubblica e la firma per verificare che l'hash sia originato dal titolare della chiave privata e che l'hash corrisponda al file.

Dai un'occhiata alla documentazione sulla "firma del pacchetto" da RedHat o Ubuntu usando le chiavi PGP per maggiori informazioni.

    
risposta data 21.08.2016 - 20:32
fonte
0

Il sistema operativo può aiutarti e devi sfruttarlo. Chiamiamo il tuo programma "ProgramA"

Crea un nuovo UID per ProgramA. Utilizzare le autorizzazioni del sistema operativo per consentire a quel programma di essere eseguito solo da tale UID. Impostare le autorizzazioni in modo che solo ProgramA-UID possa scrivere. Imposta le autorizzazioni in modo che altri possano leggere.

(Lo stesso vale se sei su Windows, ma con un SID e le etichette di autorizzazione sono un po 'diverse.)

    
risposta data 22.08.2016 - 23:22
fonte

Leggi altre domande sui tag