Dataset fingerprinting library
Project description
Dataset fingerprinting
This repository contains our proof-of-concept for fingerprinting a dataset.
Local installation
git clone https://github.com/trailofbits/datasig && cd datasig
uv sync
Usage
Fingerprinting
The code below shows experimental usage of the library. This will be subject to frequent changes in early development stages.
from torchvision.datasets import MNIST
from datasig.dataset import TorchVisionDataset
from datasig.algo import KeyedShaMinHash, UID
torch_dataset = MNIST(root="/tmp/data", train=True, download=True)
# Wrap the dataset with one of the classes in `datasig.dataset`.
# These classes provide a uniform interface to access serialized data points.
dataset = TorchVisionDataset(torch_dataset)
# Pass the dataset to the fingerprinting algorithm.
print("Dataset UID: ", UID(dataset).digest())
print("Dataset fingerprint: ", KeyedShaMinHash(dataset).digest())
Manual serialization/deserialization
The dataset classes defined in datasig.dataset provide static serialization
and deserialization to convert datapoints between their usual representation
and bytes.
from torchvision.datasets import MNIST
from datasig.dataset import TorchVisionDataset
torch_dataset = MNIST(root="/tmp/data", train=True, download=True)
# Serializing data points to bytes
serialized = TorchVisionDataset.serialize_data_point(torch_dataset[0])
# Deserializing data points from bytes
deserialized = TorchVisionDataset.deserialize_data_point(serialized)
Development
Unit tests
Tests are in the datasig/test directory. You can run the tests with:
uv run python -m pytest # Run all tests
uv run python -m pytest -s datasig/test/test_csv.py # Run only one test file
uv run python -m pytest -s datasig/test/test_csv.py -k test_similarity # Run only one specific test function
Profiling
The profiling script generates a profile for dataset processing and fingerprint generation using cProfile. To profile the MNIST dataset from the torch framework, you can run:
uv run python profiling.py torch_mnist --full
The --full argument tells the script to include dataset canonization, UID generation, and fingerprint generation in the profile. If you want to profile only some of these steps you can cherry pick by using or omitting the following arguments instead:
uv run python profiling.py torch_mnist --canonical --uid --fingerprint
You can optionally specify the datasig config version to use (at the time of writing we have only v0) with:
uv run python profiling.py torch_mnist -v 0 --all
Currently we support only one target dataset: torch_mnist. To add another dataset, add a class in profiling.py similar to TorchMNISTV0, that implements the _setup() method which is responsible for loading the dataset.
Benchmarking
!!! This is currently broken !!!
Datasig has a built-in benchmark module that allows to run experiments to benchmark speed and accuracy of various fingerprinting methods with varying configurations and on several datasets.
Benchmarks are configured programmatically using the datasig library directly.
The benchmarking.py script gives a comprehensive overview of how to configure and run a benchmark, export results, as well as plot them on graph.
You can run the example benchmark with
uv run python benchmarking.py
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file datasig-0.0.7.tar.gz.
File metadata
- Download URL: datasig-0.0.7.tar.gz
- Upload date:
- Size: 88.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8f813a46569e9536ea54bb67a9656b76e143d6d1767dc907800bfb50080ce918
|
|
| MD5 |
b242bb9f34ea1f7c57f060bea0847428
|
|
| BLAKE2b-256 |
0f1336057c337c0468f60a18b56db72e9f312b979b233470fb13394607e7e794
|
Provenance
The following attestation bundles were made for datasig-0.0.7.tar.gz:
Publisher:
release.yml on trailofbits/datasig
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
datasig-0.0.7.tar.gz -
Subject digest:
8f813a46569e9536ea54bb67a9656b76e143d6d1767dc907800bfb50080ce918 - Sigstore transparency entry: 962516665
- Sigstore integration time:
-
Permalink:
trailofbits/datasig@84fe2434ad7547628df4fdffc695e13578b8ccc1 -
Branch / Tag:
refs/tags/v0.0.7 - Owner: https://github.com/trailofbits
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@84fe2434ad7547628df4fdffc695e13578b8ccc1 -
Trigger Event:
release
-
Statement type:
File details
Details for the file datasig-0.0.7-py3-none-any.whl.
File metadata
- Download URL: datasig-0.0.7-py3-none-any.whl
- Upload date:
- Size: 93.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b33e9732531063e2574adadddeed276b246d91215cccd01d4b078af045b6d30b
|
|
| MD5 |
e59ed56bbfe419e88a956c6711e5d1c1
|
|
| BLAKE2b-256 |
c4b47f543961449f5ff50712aab8442e6301f556e3e07bb96fc09a43a2854f99
|
Provenance
The following attestation bundles were made for datasig-0.0.7-py3-none-any.whl:
Publisher:
release.yml on trailofbits/datasig
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
datasig-0.0.7-py3-none-any.whl -
Subject digest:
b33e9732531063e2574adadddeed276b246d91215cccd01d4b078af045b6d30b - Sigstore transparency entry: 962516675
- Sigstore integration time:
-
Permalink:
trailofbits/datasig@84fe2434ad7547628df4fdffc695e13578b8ccc1 -
Branch / Tag:
refs/tags/v0.0.7 - Owner: https://github.com/trailofbits
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@84fe2434ad7547628df4fdffc695e13578b8ccc1 -
Trigger Event:
release
-
Statement type: