auditor
is a forensic tool for fast
integrity auditing that uses
cryptographic hash functions
.
It is similar to other popular tools (fsum, hashdeep, sha256sum, etc.), but with features to make digital data auditing simpler and faster.
auditor
has support to several hash
algorithms. The default is sha256
, that
is recommended by NIST since 2015 ( see
NIST Policy on Hash Functions). By default,
thash method
is enabled, but this mode can be disabled.
With auditor
installed in your
system, you can use it as follows:
hash is the first step of forensic auditing. It generates audit files that allow verifying file integrity.
auditor hash input_path
This will:
input_path
with default algorithm
(sha256
)
Audit_FullList
: contains the
hash list of file(s) in
input_path
. Default name:
hashes.txt
Audit_Stamp
: contains only
the hash of Audit_FullList
.
Default name:
hashes_stamp.txt
.This is the
file that needs to be printed or digitally signed to ensure
check of all integrity chain.
check
command to verify
integrity.
auditor hash :
auditor hash -d :
(disable thash
mode,to compare with proof.sh in section
Proof)
Example 1: Overwrite audit files (-o), use blockSize 10MB and 'whirlpool' hash function
auditor hash input_path -o -b 10MB -a whirlpool
Example 2: Overwrite audit files (-o), disable 'thash method' (-d), and using blake3 hash function (-a)
auditor hash input_path -o -d -a blake3
Example 3: Use 100 workers (-w 100), overwrite audit files (-o), use blockSize 10MB (-b 10MB) and 'whirlpool' hash function (-a whirlpool)
auditor -w 100 hash input_path -o -b 10MB -a whirlpool
Example 4: Overwrite audit files (-o), include only txt files (-i "**/*.txt" ) only in root folder (-u 1),
auditor hash input_path -o -i "**/*.txt" -u 1
Example 5: Just generates hashes, but don´t create any files
auditor hash input_path -l
Others examples with global parameters. Please notice that global parameters must be before the subcommand . See parameters section to details!
check is the second step of forensic auditing. It checks the the integrity of the audit files after hash was performed.
auditor check input_path
This will:
Audit_Stamp
against audit file
Audit_FullList
Audit_FullList
against all
original files in input_path
input_path
also exists in
Audit_FullList
and vice versa.
auditor check :
Example 1: Check in quiet mode (-q) and stop on first error (-s)
auditor -q -s check input_path
info does not perform hash integrity check. It only tests
the audit files and the content of
input_path
and shows useful
information.
auditor info input_path
This will:
Audit_Stamp
and
Audit_FullList
exists.
Audit_Stamp
and
Audit_FullList
exists and listed
size is the same that in
input_path
.
input_path
are listed in
Audit_FullList
.
auditor info:
Usage: auditor.exe [OPTIONS] <COMMAND>
Hash <input_path> and generates audit files (<Audit_FullList>/<Audit_Stamp>)
Usage: auditor.exe hash [OPTIONS] <INPUT_PATH>
Notice: Global parameters must be before the subcommand (gen, check). Parameters specifics to each subcommand must be after subcommand.
Checks the integrity of audit files (<Audit_FullList>/<Audit_Stamp>) and <input_path>
Usage: auditor.exe check [OPTIONS] <INPUT_PATH>
Only tests if audit files and <input_path> are synchronized. This doesn't check the integrity!
Usage: auditor.exe info [OPTIONS] <INPUT_PATH>
To securely ensure future check of all chain of integrity, you should:
Audit_Stamp
or
digitally sign this file. If you don´t do this, someone can simply
change the data an generate new audit files.
Audit_Stamp
MUST BE the same of the printed or digitally signed
version
done in step 1. If does not match, the integrity check is not
valid.
If you don't have a digital certificate, you can use a free timestamping authority, such as freetsa.org.
The format of audit files are simple. Each line contains:
hash_value ?algorithm|file_size[:hex]*relative_filepath
Example 1:
281d5d93464f1165ea7c403ca99d63ff4bf9a360864f8df4bd0e8e6c03774e98 ?tsha256-50MB|500000*file_hashed.bin
Obs 1. Example of simple format, one using thash with algorithm sha256 and BlockSize 50MB, and other using normal method, just with algorithm sha256.
Obs 2. The size of file is important, because with it we can minimize check verification time. Why hash a big file when already is known that its size does not match with original?
Example 2:
7357b67824d086dc53f5e1ded565f500456bea1812783f1fbcddc08fddc3944c ?sha256|2233:hex*1aCb344356e4e2b2b6
Obs 3. To filepaths with characters like '\n', '\r' or '\0', permitted in some OS, auditor convert them to hex to avoid problems.
Others formats can be implemented in future.
Using
hyperfine, tests between
auditor
, fsum and hashdeep64 were performed. The tests were performed on a
Comparisons are presented below.
Machine configs:
S.O.: Windows 11 Home 64bits
Processor: AMD Ryzen 7 (7800X3D 4.20 GHz)
RAM: 64 GB of RAM (Corsair Vengeance DDR5 64GB - 5200MHz)
Disk: SSD M.2 2TB (Corsair MP600 Pro NVMe)
Data Source:
Benchmarks: