Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
didattica:triennale:so:ay_1819:progettosettembre [2019/08/02 12:14] michele created |
didattica:triennale:so:ay_1819:progettosettembre [2020/09/17 16:55] (current) |
||
---|---|---|---|
Line 5: | Line 5: | ||
Una funzione crittografica di hash è progettata per essere //unidirezionale// (//one-way//), ossia una funzione difficile da invertire: l'unico modo per ricreare i dati di input dall'output di una funzione di hash ideale è quello di tentare una ricerca di forza-bruta di possibili input per vedere se vi è corrispondenza (match). | Una funzione crittografica di hash è progettata per essere //unidirezionale// (//one-way//), ossia una funzione difficile da invertire: l'unico modo per ricreare i dati di input dall'output di una funzione di hash ideale è quello di tentare una ricerca di forza-bruta di possibili input per vedere se vi è corrispondenza (match). | ||
- | Con SHA (Secure Hash Algorithm) si indica una famiglia di funzioni crittografiche di hash sviluppate a partire dal 1993 dalla National Security Agency (NSA). Gli algoritmi della famiglia sono denominati **SHA-1**, **SHA-224**, **SHA-256**, **SHA-384** e **SHA-512**: le ultime 4 varianti sono spesso indicate genericamente come SHA-2, per distinguerle dal primo. Il primo produce un digest del messaggio di soli 160 bit, mentre gli altri producono digest di lunghezza in bit pari al numero indicato nella loro sigla (ad esempio SHA-256 produce un digest di 256 bit). Nelle //GNU Core Utilities// sono disponibili i programmi (da shell) ''sha1sum'', ''sha224sum'', ''sha256sum'', ''sha384sum'' e ''sha512sum'' che consentono di calcolare (e verificare) il //digest// associato ad un file. Una descrizione (con pseudocodice) degli algoritmi SHA sono disponibili ai seguenti link: [[https://it.wikipedia.org/wiki/Secure_Hash_Algorithm#Pseudocodice_di_SHA-1|link1]], [[https://it.wikipedia.org/wiki/Secure_Hash_Algorithm#Pseudocodice_di_SHA-256_(una_variante_di_SHA-2)|link2]], e | + | Con SHA (Secure Hash Algorithm) si indica una famiglia di funzioni crittografiche di hash sviluppate a partire dal 1993 dalla National Security Agency (NSA). Gli algoritmi della famiglia sono denominati **SHA-1**, **SHA-224**, **SHA-256**, **SHA-384** e **SHA-512**: le ultime 4 varianti sono spesso indicate genericamente come SHA-2, per distinguerle dal primo. Il primo produce un digest del messaggio di soli 160 bit, mentre gli altri producono digest di lunghezza in bit pari al numero indicato nella loro sigla (ad esempio SHA-256 produce un digest di 256 bit). Nelle //GNU Core Utilities// sono disponibili i programmi (da shell) ''sha1sum'', ''sha224sum'', ''sha256sum'', ''sha384sum'' e ''sha512sum'' che consentono di calcolare (e verificare) il //digest// associato ad un file. Una descrizione (con pseudocodice) degli algoritmi SHA sono disponibili ai seguenti link: [[https://it.wikipedia.org/wiki/Secure_Hash_Algorithm#Pseudocodice_di_SHA-1|link1]], [[https://it.wikipedia.org/wiki/Secure_Hash_Algorithm#Pseudocodice_di_SHA-256_(una_variante_di_SHA-2)|link2]]. |
+ | <wrap em>**Non è possibile usare librerie C (o richiamare applicazioni) che computino i valori sha**</wrap> | ||
==== Descrizione ==== | ==== Descrizione ==== | ||
Nel progetto occorre sviluppare l'applicazione ''shadb'' che consente di archiviare i valori dei //digest// associati ai diversi file in un file apposito allo scopo di verificare se un dato file è già presente o meno nel proprio archivio. Le informazioni raccolte dal programma vengono salvate all'interno di un file la cui struttura è la seguente: | Nel progetto occorre sviluppare l'applicazione ''shadb'' che consente di archiviare i valori dei //digest// associati ai diversi file in un file apposito allo scopo di verificare se un dato file è già presente o meno nel proprio archivio. Le informazioni raccolte dal programma vengono salvate all'interno di un file la cui struttura è la seguente: | ||
Line 35: | Line 36: | ||
il parametro (opzionale) ''<dbfile>'' indica il file dove viene salvato il repository. Se omesso viene utilizzato il file ''sahdb.out''. A seguito di questa invocazione il programma: | il parametro (opzionale) ''<dbfile>'' indica il file dove viene salvato il repository. Se omesso viene utilizzato il file ''sahdb.out''. A seguito di questa invocazione il programma: | ||
- | - Calcolerà il //digest// associato al file ''<pathtoafile>'' usando l'algoritmo passato come parametro (se omesso, verrà usato ''SHA1''); | + | - Calcolerà il //digest// associato al **contenuto** del file ''<pathtoafile>'' usando l'algoritmo passato come parametro (se omesso, verrà usato ''SHA1''); |
- Se non sono presenti altri file nell'archivio con il medesimo valore di hash l'informazione viene aggiunta nel repository; | - Se non sono presenti altri file nell'archivio con il medesimo valore di hash l'informazione viene aggiunta nel repository; | ||
- Se un file è già presente nel repository viene stampato a video un messaggio di errore (inviato su ''stderr''). | - Se un file è già presente nel repository viene stampato a video un messaggio di errore (inviato su ''stderr''). | ||
Line 41: | Line 42: | ||
E' importante osservare che il parametro ''<pathtoafile>'' può essere un path relativo, mentre quello salvato nel repository deve essere un path **assoluto**. | E' importante osservare che il parametro ''<pathtoafile>'' può essere un path relativo, mentre quello salvato nel repository deve essere un path **assoluto**. | ||
- | === Aggiunta di Informazioni === | + | == Esempio == |
+ | |||
+ | Consideriamo ad esempio il file ''lorem.txt'' accessibile con path assoluto ''/home/utente/lorem.txt'' il cui contenuto è il seguente: | ||
+ | |||
+ | <code> | ||
+ | Lorem ipsum dolor sit amet, consectetur adipisci elit, sed do eiusmod tempor incidunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrum exercitationem ullamco laboriosam, nisi ut aliquid ex ea commodi consequatur. Duis aute irure reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint obcaecat cupiditat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. | ||
+ | </code> | ||
+ | |||
+ | Supponiamo che che venga invocato da shell il programma ''shadb'' all'interno della directory ''/home/utente/'' con i seguenti parametri: | ||
+ | |||
+ | <code> | ||
+ | shadb add SHA1 ./lorem.txt | ||
+ | </code> | ||
+ | |||
+ | Ne file ''sahdb.out'' (che assumiamo non aver indicizzato nessun file con analogo contenuto) verrà aggiunta la seguente porzione di dati: | ||
+ | |||
+ | <code> | ||
+ | /home/utente/loretm.txt\r\n | ||
+ | SHA1\r\n | ||
+ | e30e23b314c61b150ff5202d5aa30f87911893d1\r\n | ||
+ | </code> | ||
+ | |||
+ | === Ricerca === | ||
Per verificare se un file è già presente nel repository occorre invocare ''shadb'' con i seguenti parametri: | Per verificare se un file è già presente nel repository occorre invocare ''shadb'' con i seguenti parametri: | ||
Line 52: | Line 75: | ||
- Viene stampato sullo standard output il file assoluto del file con il medesimo hash calcolato (se esiste); | - Viene stampato sullo standard output il file assoluto del file con il medesimo hash calcolato (se esiste); | ||
- Se tale file non esiste, viene stampato sullo standard error un messaggio di errore. | - Se tale file non esiste, viene stampato sullo standard error un messaggio di errore. | ||
- | |||
====== Addendum per 12 CFU ====== | ====== Addendum per 12 CFU ====== | ||