Si solo le interesa detectar la corrupción, puede usar una *sum
utilidad, como sha256sum
.
Desde el directorio para proteger, ejecute lo siguiente. Tenga en cuenta el uso de find ... -print0
y xargs -0
para acomodar rutas con espacios u otros caracteres especiales.
find . -type f -print0 \
| xargs -0 sha256sum \
> manifest.sum
Luego use lo siguiente para validar el contenido del archivo.
sha256sum -c manifest.sum
La salida mostrará una lista de archivos con OK
o FAILED
, y el valor de retorno será 0
(cero) si todos los archivos salieron bien, o no cero si hubo errores.
Este proceso validará todos los archivos del directorio actual y los dejará manifest.sum
atrás.
Idealmente, generaría manifest.sum
en la fuente (por ejemplo: en el momento de la compilación) y lo distribuiría con los archivos, solo ejecutando la verificación ( sha256sum -c
) en el dispositivo de destino.
Como ha mencionado que esto es para un proceso de actualización de firmware, le recomendaría que busque más que solo verificar los datos en busca de corrupción.
En muchos casos, es beneficioso asegurarse de que la actualización que se está aplicando es genuina, y ha sido proporcionada por la fuente prevista ... Si permite que se aplique alguna actualización a un sistema, la abre por accidente (y potencialmente dañinas) actualizaciones así como actualizaciones maliciosas.
Para solucionar este problema, debe considerar firmar criptográficamente la actualización.
- Usted podría salirse con la firma sólo la
manifest.sum
producida anteriormente (menos sobrecarga de procesamiento). Al firmar las sumas de verificación, puede verificar el contenido de cada archivo ... suponiendo que el resumen es seguro, por supuesto ... ( MD5 no sería una buena opción)
- Sin embargo, podría ser mejor distribuir un archivo que esté firmado (y posiblemente encriptado) en su totalidad y verificado antes de que se extraiga.
Como la salida de las *sum
utilidades es texto ASCII, puede usar gpg --clearsign
para firmar los datos:
find . -type f -print0 \
| xargs -0 sha256sum \
| gpg --clearsign --default-key 7826F053 \
> manifest.asc
En el destino, puede verificar la firma:
gpg --verify manifest.asc
Entonces, si, y solo si , la firma es válida y proviene del origen esperado (deberá usarla --status-fd
para verificar esto), puede continuar para verificar el contenido del archivo:
gpg --decrypt manifest.asc \
| sha256sum -c -
Tenga en cuenta que *sum
debe estar al " final " de la tubería para asegurarse de que vea el código de retorno ... alternativamente, puede usarset -o pipefail
Mencioné el uso --status-fd
anterior ... se vuelve desordenado en el shell, por lo que probablemente desee escribir una aplicación para manejar esto de manera más sensata ... Algo como esto " funcionará " (es decir, probar un punto).
La huella de la clave utilizada para firmar el manifiesto es: A5C929D6A230C02067720F1DB2B38B43C2ABEB33
.
gpg --status-fd 3 --verify manifest.asc 3>&1 1>/dev/null \
| grep -Eq '^\[GNUPG:\] VALIDSIG A5C929D6A230C02067720F1DB2B38B43C2ABEB33 '