GNU/Linux >> Linux Esercitazione >  >> Linux

Un'introduzione all'hashing e ai checksum in Linux

È probabile che tu abbia visto riferimenti ad hash o checksum quando hai scaricato software da Internet. Spesso viene visualizzato il software e quindi vicino al collegamento c'è un checksum. Il checksum può essere etichettato come MD5, SHA o con un altro nome simile. Ecco un esempio che utilizza uno dei miei vecchi giochi preferiti degli anni '90 chiamato Nethack:

Molte persone non sanno esattamente cosa significano queste informazioni o come lavorarci. In questo articolo, discuto lo scopo dell'hashing e come usarlo.

[ I lettori hanno apprezzato anche: Introduzione a GPG (GnuPG) ]

Obiettivi della crittografia

In questa prima sezione, voglio che tu disimpari qualcosa. In particolare, voglio che tu rompa l'associazione nella tua testa tra la parola crittografia e la parola riservato . Molti di noi concepiscono queste due parole come sinonimi quando in realtà non è così. La crittografia, che include la crittografia, può fornire riservatezza, ma può anche soddisfare altri obiettivi.

La crittografia ha in realtà tre obiettivi:

  • Riservatezza - per impedire che il contenuto del file venga letto da utenti non autorizzati
  • Autenticità - per dimostrare l'origine di un file
  • Integrità - per dimostrare che un file non è stato modificato in modo imprevisto

È quel terzo concetto, integrità , che ci interessa qui. In questo contesto, integrità significa dimostrare che i dati non sono cambiati in modo imprevisto. Dimostrare l'integrità è utile in molti scenari:

  • Download da Internet come distribuzioni Linux, software o file di dati
  • Trasferimenti di file di rete tramite NFS, SSH o altri protocolli
  • Verifica delle installazioni software
  • Confronto di un valore memorizzato, come una password, con un valore inserito da un utente
  • Backup che confrontano due file per vedere se sono stati modificati

Cos'è l'hashing?

La crittografia utilizza l'hashing per confermare che un file è invariato. La semplice spiegazione è che lo stesso metodo di hashing viene utilizzato su un file a ciascuna estremità di un download da Internet. Il file viene sottoposto a hash sul server Web dall'amministratore Web e il risultato hash viene pubblicato. Un utente scarica il file e applica lo stesso metodo hash. I risultati hash o checksum , vengono confrontati. Se il checksum del file scaricato è uguale a quello del file originale, i due file sono identici e non ci sono state modifiche impreviste dovute a danneggiamento dei file, attacchi man-in-the-middle, ecc.

L'hashing è un processo a senso unico. Il risultato hash non può essere annullato per esporre i dati originali. Il checksum è una stringa di output di dimensioni prestabilite. Tecnicamente, ciò significa che l'hashing non è una crittografia perché la crittografia è destinata a essere invertita (decodificata).

Che tipo di crittografia hash potresti utilizzare con Linux?

Algoritmo Message Digest e Secure Hash

In Linux, è probabile che tu interagisca con uno dei due metodi di hashing:

  • MD5
  • SHA256

Questi strumenti di crittografia sono integrati nella maggior parte delle distribuzioni Linux, così come in macOS. Windows in genere non include queste utilità, quindi è necessario scaricarle separatamente da fornitori di terze parti se si desidera utilizzare questa tecnica di sicurezza. Penso che sia fantastico che strumenti di sicurezza come questi facciano parte di Linux e macOS.

Algoritmo di sintesi dei messaggi e algoritmo di hash sicuro

Qual è la differenza tra il message digest e gli algoritmi di hash sicuro? La differenza è nella matematica coinvolta, ma i due raggiungono obiettivi simili. Gli amministratori di sistema potrebbero preferire uno rispetto all'altro, ma per la maggior parte degli scopi funzionano in modo simile. Non sono, tuttavia, intercambiabili. Un hash generato con MD5 su un'estremità della connessione non sarà utile se SHA256 viene utilizzato all'altra estremità. Lo stesso metodo hash deve essere utilizzato su entrambi i lati.

SHA256 genera un hash più grande e il completamento potrebbe richiedere più tempo e potenza di calcolo. È considerato un approccio più sicuro. MD5 è probabilmente abbastanza buono per la maggior parte dei controlli di integrità di base, come i download di file.

Dove trovi l'hashing in Linux?

Linux usa gli hash in molti luoghi e situazioni. I checksum possono essere generati manualmente dall'utente. Vedrai esattamente come farlo più avanti nell'articolo. Inoltre, le funzionalità hash sono incluse in /etc/shadow , rsync e altre utilità.

Ad esempio, le password memorizzate in /etc/shadow i file sono in realtà hash. Quando accedi a un sistema Linux, il processo di autenticazione confronta il valore hash memorizzato con una versione hash della password digitata. Se i due checksum sono identici, la password originale e ciò che hai digitato sono identici. In altre parole, hai inserito la password corretta. Ciò è determinato, tuttavia, senza mai decifrare effettivamente la password memorizzata sul tuo sistema. Controlla i primi due caratteri del secondo campo per il tuo account utente in /etc/shadow . Se i due caratteri sono $1 , la tua password è crittografata con MD5. Se i caratteri sono $5 , la tua password è crittografata con SHA256. Se il valore è $6 , SHA512 è in uso. SHA512 è utilizzato sulla mia macchina virtuale Fedora 33, come mostrato di seguito:

Come generare manualmente i checksum

Usare le utility hash è molto semplice. Ti guiderò attraverso uno scenario molto semplice da realizzare su un computer di laboratorio o su qualsiasi sistema Linux tu abbia a disposizione. Lo scopo di questo scenario è determinare se un file è stato modificato.

Innanzitutto, apri il tuo editor di testo preferito e crea un file chiamato original.txt con una riga di testo che dice:Informazioni originali.

[damon@localhost ~]$ vim original.txt
[damon@localhost ~]$ cat original.txt
Original information.
[damon@localhost ~]$

Quindi, esegui il file tramite un algoritmo hash. Userò MD5 per ora. Il comando è md5sum . Ecco un esempio:

[damon@localhost ~]$ md5sum original.txt
80bffb4ca7cc62662d951326714a71be  original.txt
[damon@localhost ~]$

Notare il valore di checksum risultante. Questo valore è abbastanza grande da rendere difficile l'utilizzo. Archiviamo quel valore per un uso futuro reindirizzandolo in un file:

[damon@localhost ~]$ md5sum original.txt > hashes.txt
[damon@localhost ~]$ cat hashes.txt
80bffb4ca7cc62662d951326714a71be  original.txt
[damon@localhost ~]$

A questo punto, hai un file originale. Copia quel file in /tmp directory con il nome duplicate.txt . Copia il file usando il seguente comando (assicurati di copiare, non spostare):

[damon@localhost ~]$ cp original.txt /tmp/duplicate.txt
[damon@localhost ~]$

Eseguire il comando seguente per creare un checksum del file copiato:

[damon@localhost ~]$ md5sum /tmp/duplicate.txt
80bffb4ca7cc62662d951326714a71be  /tmp/duplicate.txt
[damon@localhost ~]$

Quindi, aggiungi il risultato dell'hash al nostro hashes.txt file e quindi confrontare i due. Fai molta attenzione a usare il >> aggiungi l'operatore di reindirizzamento qui, perché > sovrascriverà il valore hash di original.txt file.

Esegui il seguente comando:

[damon@localhost ~]$ md5sum /tmp/duplicate.txt >> hashes.txt
[damon@localhost ~]$ cat hashes.txt
80bffb4ca7cc62662d951326714a71be  original.txt
80bffb4ca7cc62662d951326714a71be  /tmp/duplicate.txt
[damon@localhost ~]$

I due risultati hash sono identici, quindi il file non è cambiato durante il processo di copia.

Quindi, simula un cambiamento. Digita il seguente comando per modificare il /tmp/duplicate.txt contenuto del file, quindi eseguire nuovamente md5sum comando con il >> operatore di aggiunta:

[damon@localhost ~]$ hostname >> /tmp/duplicate.txt
[damon@localhost ~]$ md5sum /tmp/duplicate.txt >> hashes.txt
[damon@localhost ~]$

Sai che il duplicate.txt il file non è più identico a original.txt file, ma proviamo che:

[damon@localhost ~]$ cat hashes.txt
80bffb4ca7cc62662d951326714a71be  original.txt
80bffb4ca7cc62662d951326714a71be  /tmp/duplicate.txt
1f59bbdc4e80240e0159f09ecfe3954d  /tmp/duplicate.txt
[damon@localhost ~]$

I due valori di checksum non sono identici, quindi i due file da cui sono stati generati i checksum non sono identici.

Nell'esempio precedente, hai confrontato manualmente i valori hash visualizzandoli con cat . Puoi utilizzare il --check opzione per avere md5sum fai il confronto per noi. Ho incluso entrambi i metodi di seguito:

[damon@localhost ~]$ cat hashes.txt
80bffb4ca7cc62662d951326714a71be  original.txt
80bffb4ca7cc62662d951326714a71be  /tmp/duplicate.txt
1f59bbdc4e80240e0159f09ecfe3954d  /tmp/duplicate.txt

[damon@localhost ~]$ md5sum --check hashes.txt
original.txt: OK
/tmp/duplicate.txt: FAILED
/tmp/duplicate.txt: OK
md5sum: WARNING: 1 computed checksum did NOT match
[damon@localhost ~]$

Puoi ripetere i passaggi precedenti sostituendo sha256sum per il md5sum comando per vedere come funziona il processo utilizzando l'algoritmo SHA. Il sha256sum il comando include anche un --check checksum opzione che confronta gli hash risultanti e visualizza un messaggio per verificare se i file differiscono.

Nota :se trasferisci file tra Linux, macOS e Windows, puoi comunque utilizzare l'hashing per verificare l'integrità dei file. Per generare un valore hash su macOS, esegui md5 comando. Per farlo in Windows, devi scaricare un programma di terze parti. Personalmente, utilizzo md5checker . Assicurati di comprendere le licenze per queste utilità. Potresti essere in grado di utilizzare il cmdlet di PowerShell get-filehash , a seconda della versione di PowerShell installata.

[ Corso gratuito:Panoramica tecnica di Red Hat Satellite. ] 

Concludi

L'hashing conferma che i dati non sono cambiati inaspettatamente durante un trasferimento di file, un download o un altro evento. Questo concetto è noto come integrità dei file. Hashing non ti dice cosa è cambiato, solo che qualcosa è cambiato. Una volta che l'hashing ti dice che due file sono diversi, puoi usare comandi come diff per scoprire quali differenze esistono.


Linux
  1. Permessi Linux:un'introduzione a chmod

  2. Un'introduzione al monitoraggio dell'account utente Linux

  3. Un'introduzione al file Linux /etc/fstab

  4. Cos'è NFS e come installarlo su Linux

  5. Metodi di compressione e archiviazione in Linux

Un'introduzione alle pipe e alle named pipe in Linux

Introduzione al file system Linux

Come montare e smontare i file system in Linux

Comando Ls in Linux (Elenca file e directory)

File host Linux:come modificarlo e utilizzarlo?

Come creare e utilizzare file di scambio su Linux