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:
auditor commands:
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.
Overwrite audit files (-o), use blockSize 10MB and 'whirlpool' hash function
auditor hash input_path -o -b 10MB -a whirlpool
Overwrite audit files (-o), disable 'thash method' (-d), and use blake3 hash function (-a)
auditor hash input_path -o -d -a blake3
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
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
Just generate hashes, but don’t create any files
auditor hash input_path -l
Please notice that global parameters must be before the subcommand . See Manual section to details!
check is the second step of forensic auditing. It checks the the integrity of data using information in the audit files and can be used 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.
Check in quiet mode (-q) and stop on first error (-x), using default audit files.
auditor -q -x check input_path
Check F:\data_path using audit files with specific names. (-f to <Audit_FullList> and -s to <Audit_Stamp>)
auditor -q -x check F:\data_path -f C:\other_path\personal_fullList.txt -s C:\other_path\personal_stamp.txt
Check integrity of just one file in <input_path> against some audit file
auditor -q -x check F:\data_path\file1.txt -f C:\other_path\some_audit.txt
info does not perform hash integrity check. It only tests
the audit files and the content of
input_path
and shows useful
information. Can be used after hash was performed.
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
.
Usage: auditor.exe [GLOBAL_OPTIONS] <SUB_COMMAND>
GLOBAL_OPTIONS are options that can be applied to all subcommands. It needs come before the subcommand.
SUB_COMMAND is one of the following options:
Hash <input_path> and generates audit files (<Audit_FullList>/<Audit_Stamp>)
Usage: auditor.exe hash <INPUT_PATH> [OPTIONS]
Notice: Global parameters must be before the subcommand (gen, check). Parameters specifics to each subcommand must be after subcommand.
Checks the integrity of <input_path> against data in audit files (<Audit_FullList>/<Audit_Stamp>)
Usage: auditor.exe check <INPUT_PATH> [OPTIONS]
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 to sign the file online, such as freetsa.org (using Online Signature).
The format of audit files are simple. Each line contains:
hash_value ?algorithm[<thash-BlockSize>]|file_size[:hex]*relative_filepath
where [ ] are optional:
hash_value
: value of hash.
algorithm[<thash-BlockSize>]
: algorithm used to hash, stored in capital letters to mantain
compatibility with some others tools. The parameter with
<thash-BlockSize> is optional, indicating that thash method and
BlockSize were used. BlockSize must be in KB, MB, GB or TB. Ex: 10MB.
file_size
: FileSize of original
file when was hashed. Useful in check, to improve speed when size
doesnt match. Why hash a big file when already is known that its size
does not match with original?
[:hex]
: Optional flag to
indicate that filepaths is in hex format. This is necessary because
char as '\n', '\r' or '\0', are permitted in some OS, and the hex
avoid problems with formatting the results.
relative_filepath
: The relative
filepath of file hashed.
Example 1: using method thash with algorithm sha256 and BlockSize 50MB :
281d5d93464f1165ea7c403ca99d63ff4bf9a360864f8df4bd0e8e6c03774e98 ?SHA256<thash-50MB>|500000*file_hashed.bin
Example 2: using normal method, just with algorithm blake3.
7357b67824d086dc53f5e1ded565f500456bea1812783f1fbcddc08fddc3944c ?BLAKE3|2233:hex*1aCb344356e4e2b2b6
Others formats can be implemented in future.
Latest version of auditor
:
Disclaimer: auditor
is provided as a
software in development, without ANY kind of warranty or support. So,
use it at your own risk.
Using
hyperfine, tests between
auditor
, fsum and hashdeep64 were performed and results are shown 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: