ascad-training-pipeline / src /constants.py
lemousehunter
feat: unified V1 model repo (ascad-v1-models)
d238c12
raw
history blame contribute delete
5.23 kB
"""
Centralized constants for the ASCAD training pipeline.
All magic numbers, lookup tables, and configuration defaults are defined here
to avoid duplication and ensure consistency across modules.
"""
import numpy as np
# ---------------------------------------------------------------------------
# AES S-Box lookup table (used for label computation and key-rank evaluation)
# ---------------------------------------------------------------------------
AES_SBOX = np.array([
0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5,
0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76,
0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0,
0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0,
0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC,
0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15,
0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A,
0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75,
0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0,
0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84,
0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B,
0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF,
0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85,
0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8,
0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5,
0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2,
0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17,
0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73,
0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88,
0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB,
0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C,
0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79,
0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9,
0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08,
0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6,
0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A,
0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E,
0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E,
0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94,
0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF,
0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68,
0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16,
], dtype=np.uint8)
# ---------------------------------------------------------------------------
# Per-byte POI windows derived from masked SNR analysis on raw traces.
# Each window is 700 samples extracted from ATMega8515_raw_traces.h5.
# Byte 2 window [45400, 46100) validated against official ASCAD extraction.
# ---------------------------------------------------------------------------
BYTE_POI_WINDOWS = {
0: (30838, 31538),
1: (24525, 25225),
2: (45400, 46100),
3: (32824, 33524),
4: (47508, 48208),
5: (41258, 41958),
6: (37094, 37794),
7: (35018, 35718),
8: (26631, 27331),
9: (39145, 39845),
10: (28766, 29466),
11: (43333, 44033),
12: (20418, 21118),
13: (22499, 23199),
14: (49571, 50271),
15: (18363, 19063),
}
# Per-byte peak SNR values from our SNR analysis (10,000 profiling traces)
BYTE_PEAK_SNR = {
0: 1.72, 1: 1.44, 2: 2.99, 3: 1.82,
4: 2.24, 5: 2.22, 6: 2.10, 7: 1.95,
8: 1.28, 9: 1.68, 10: 1.15, 11: 2.48,
12: 0.78, 13: 0.94, 14: 2.55, 15: 0.83,
}
# Global window covering all 16 POI regions (for multi-task models)
GLOBAL_WINDOW_START = 18000
GLOBAL_WINDOW_END = 50272
GLOBAL_WINDOW_SIZE = GLOBAL_WINDOW_END - GLOBAL_WINDOW_START # 32,272
# ---------------------------------------------------------------------------
# Dataset configuration
# ---------------------------------------------------------------------------
NUM_CLASSES = 256
WINDOW_SIZE = 700
NUM_PROFILING_TRACES = 50000
NUM_ATTACK_TRACES = 10000
DEFAULT_PROFILING_RANGE = (0, 50000)
DEFAULT_ATTACK_RANGE = (50000, 60000)
# Map desync level to HDF5 filename (pre-extracted, byte 2 only)
DESYNC_FILES = {
0: "ASCAD.h5",
50: "ASCAD_desync50.h5",
100: "ASCAD_desync100.h5",
}
ASCAD_DOWNLOAD_URL = (
"https://www.data.gouv.fr/api/1/datasets/r/"
"e7ab6f9e-79bf-431f-a5ed-faf0ebe9b08e"
)
ASCAD_ZIP_FILENAME = "ASCAD_data.zip"
ASCAD_DB_SUBDIR = "ASCAD_data/ASCAD_databases"
ASCAD_RAW_FILENAME = "ATMega8515_raw_traces.h5"
# ---------------------------------------------------------------------------
# Training defaults
# ---------------------------------------------------------------------------
MLP_DEFAULTS = {
"epochs": 200,
"batch_size": 100,
"learning_rate": 1e-5,
"num_hidden_layers": 5,
"hidden_units": 200,
}
CNN_DEFAULTS = {
"epochs": 150,
"batch_size": 200,
"learning_rate": 1e-5,
"conv_filters": [64, 128, 256, 512, 512],
"kernel_size": 11,
"pool_size": 2,
"fc_units": 4096,
"num_fc_layers": 2,
}
# ---------------------------------------------------------------------------
# HuggingFace repository IDs
# ---------------------------------------------------------------------------
HF_MLP_REPO = "lemousehunter/ascad-mlp-rank0-models" # Legacy
HF_CNN_REPO = "lemousehunter/ascad-cnn-rank0-models" # Legacy
HF_MTAN_REPO = "lemousehunter/ascad-mtan-rank0-models" # Legacy
HF_PIPELINE_REPO = "lemousehunter/ascad-training-pipeline"
HF_V1_REPO = "lemousehunter/ascad-v1-models" # Unified repo for final runs