Remote Storage¶
blazehash reads and writes evidence directly from remote storage via
Apache OpenDAL, scoped to the backends where
forensic evidence actually lives and where DFIR collectors (Velociraptor, KAPE)
deposit it: object storage, SFTP/FTP, Hadoop, SQL stores, and WebDAV/HTTP. Any
URI that resolves to file-like data is a valid input path or -o output target —
no plugins, no adapters, no staging.
# Read from remote, write manifest to remote — entirely off-disk
blazehash s3://dfir-bucket/case-001/ -o gcs://evidence-archive/case-001.hash
The remote stack is an opt-in build feature (--features remote); the release
binaries enable it. ADR-0002 records why it is opt-in and ADR-0012 why the
backend set is scoped to evidence-transfer targets (both in the project's
docs/decisions/).
Cloud Object Storage¶
The most common backends for evidence archiving.
| Scheme | Backend | Auth env vars |
|---|---|---|
s3://bucket/key |
AWS S3, MinIO, Cloudflare R2, Wasabi, Backblaze B2 (S3-compat) | AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_DEFAULT_REGION |
gcs://bucket/key |
Google Cloud Storage | GOOGLE_APPLICATION_CREDENTIALS |
azblob://container/key |
Azure Blob Storage | AZURE_STORAGE_ACCOUNT, AZURE_STORAGE_ACCESS_KEY |
azdls://filesystem/path |
Azure Data Lake Storage Gen2 | AZURE_STORAGE_ACCOUNT, AZURE_STORAGE_ACCESS_KEY |
azfile://share/path |
Azure Files | AZURE_STORAGE_ACCOUNT, AZURE_STORAGE_ACCESS_KEY |
b2://bucket/key |
Backblaze B2 (native API, not S3-compat) | BACKBLAZE_APPLICATION_KEY_ID, BACKBLAZE_APPLICATION_KEY |
cos://bucket/key |
Tencent Cloud COS | TENCENTCLOUD_SECRET_ID, TENCENTCLOUD_SECRET_KEY, TENCENTCLOUD_REGION |
obs://bucket/key |
Huawei Cloud OBS | HUAWEI_ACCESS_KEY_ID, HUAWEI_SECRET_ACCESS_KEY, HUAWEI_REGION |
oss://bucket/key |
Alibaba Cloud OSS | ALIBABA_CLOUD_ACCESS_KEY_ID, ALIBABA_CLOUD_ACCESS_KEY_SECRET, ALIBABA_CLOUD_REGION |
swift://container/path |
OpenStack Swift | SWIFT_ENDPOINT, SWIFT_TOKEN |
S3-compatible endpoints¶
MinIO, Cloudflare R2, Wasabi, and Backblaze B2 (S3-compat mode) all use s3://. Point to the right endpoint via AWS_ENDPOINT_URL:
# MinIO
export AWS_ENDPOINT_URL=http://localhost:9000
blazehash s3://evidence-bucket/case-001/
# Cloudflare R2
export AWS_ENDPOINT_URL=https://<account>.r2.cloudflarestorage.com
blazehash s3://dfir-bucket/image.dd
# Backblaze B2 (S3-compat)
export AWS_ENDPOINT_URL=https://s3.us-west-004.backblazeb2.com
blazehash s3://my-bucket/evidence/
Google Drive¶
Useful when evidence is a file shared from a suspect's or custodian's account. blazehash uses the Drive API to hash without staging the file locally:
| Scheme | Backend | Auth |
|---|---|---|
gdrive://file-id |
Google Drive | Run blazehash gdrive auth login once to cache the OAuth2 token |
# By file ID
blazehash gdrive://1Ykbd9fDXxWnD1-MTag_-8-Wh_Wnd28q0
# By share URL
blazehash https://drive.google.com/file/d/1Ykbd9fDXxWnD1-MTag_-8-Wh_Wnd28q0/view
# First-time auth (browser OAuth2 flow, token cached in ~/.config/blazehash/)
blazehash gdrive auth login
Hadoop / HDFS¶
Two schemes, depending on your cluster setup — both pure-Rust, no JVM and no libhdfs:
| Scheme | Backend | Notes |
|---|---|---|
hdfs://namenode:port/path |
HDFS (pure-Rust native client) | Speaks Hadoop RPC via the hdfs-native crate |
webhdfs://host:port/path |
WebHDFS REST API | Works with any Hadoop 2.x+ namenode; WEBHDFS_USER for the user name |
# Pure-Rust HDFS native client (no Java required)
blazehash hdfs://namenode.corp:8020/user/evidence/case-001/
# WebHDFS REST (also no Java required)
blazehash webhdfs://namenode.corp:50070/user/evidence/case-001/
hdfs:// is preferred when the cluster exposes the native Hadoop RPC port (default 8020/9000). webhdfs:// is the fallback when only the HTTP REST endpoint is reachable.
SQL Databases¶
Useful when evidence artifacts are stored in operational datastores rather than file systems.
| Scheme | Backend | Auth / connection |
|---|---|---|
mysql://host/db/key |
MySQL / MariaDB | Standard DSN |
postgresql://host/db/key |
PostgreSQL | Standard DSN |
sqlite://path/to.db/key |
SQLite (file on disk) | File path |
# Hash a value stored in a PostgreSQL row
blazehash postgresql://user:pass@localhost/forensics/artifacts
Filesystem & Protocols¶
| Scheme | Backend | Auth |
|---|---|---|
sftp://user@host/path |
SFTP / SSH | SSH agent, BLAZEHASH_SFTP_KEY_PATH, or BLAZEHASH_SFTP_KNOWN_HOSTS_STRATEGY |
ftp://user:pass@host/path |
FTP | Credentials in URI |
ftps://user:pass@host/path |
FTPS (FTP over TLS) | Credentials in URI |
webdav://host/path |
WebDAV (Nextcloud, Box, SharePoint on-prem) | Server-specific |
http://host/path |
HTTP (read-only) | — |
https://host/path |
HTTPS (read-only) | — |
file:///abs/path |
Explicit local filesystem | — |
SFTP usage¶
# SSH agent (default — no config needed if your key is loaded)
blazehash sftp://admin@192.168.1.10/evidence/disk.dd
# Explicit key file
export BLAZEHASH_SFTP_KEY_PATH=~/.ssh/forensic_rsa
blazehash sftp://admin@192.168.1.10/evidence/disk.dd
# Known hosts strategy (add | strict | accept_new)
export BLAZEHASH_SFTP_KNOWN_HOSTS_STRATEGY=strict
blazehash sftp://admin@192.168.1.10/evidence/disk.dd
In-Memory / Embedded (testing & pipelines)¶
| Scheme | Backend | Notes |
|---|---|---|
mem://bucket/key |
In-process memory | Ephemeral; useful in tests and pipeline stages |
sqlite://path/db/key |
SQLite file | Lightweight embedded store; good for offline pipelines |
Writing manifests to remote storage¶
Any -o output path accepts a remote URI:
# Write manifest to S3
blazehash -r /mnt/evidence -c blake3,sha256 -o s3://dfir-bucket/case-001.hash
# Sign a remote manifest in-place
blazehash sign s3://dfir-bucket/case-001.hash
# Audit remotely — no local copy of the manifest needed
blazehash -a -k s3://dfir-bucket/case-001.hash -r /mnt/evidence
Environment variable reference¶
| Variable | Used by |
|---|---|
AWS_ACCESS_KEY_ID |
S3 |
AWS_SECRET_ACCESS_KEY |
S3 |
AWS_DEFAULT_REGION |
S3 |
AWS_ENDPOINT_URL |
S3 (custom endpoints: MinIO, R2, Wasabi, etc.) |
GOOGLE_APPLICATION_CREDENTIALS |
GCS |
AZURE_STORAGE_ACCOUNT |
azblob, azdls, azfile |
AZURE_STORAGE_ACCESS_KEY |
azblob, azdls, azfile |
BACKBLAZE_APPLICATION_KEY_ID |
b2 |
BACKBLAZE_APPLICATION_KEY |
b2 |
TENCENTCLOUD_SECRET_ID |
cos |
TENCENTCLOUD_SECRET_KEY |
cos |
TENCENTCLOUD_REGION |
cos |
HUAWEI_ACCESS_KEY_ID |
obs |
HUAWEI_SECRET_ACCESS_KEY |
obs |
HUAWEI_REGION |
obs |
ALIBABA_CLOUD_ACCESS_KEY_ID |
oss |
ALIBABA_CLOUD_ACCESS_KEY_SECRET |
oss |
ALIBABA_CLOUD_REGION |
oss |
SWIFT_ENDPOINT |
swift |
SWIFT_TOKEN |
swift |
WEBHDFS_USER |
webhdfs |
BLAZEHASH_SFTP_KEY_PATH |
sftp |
BLAZEHASH_SFTP_KNOWN_HOSTS_STRATEGY |
sftp (add | strict | accept_new) |