Challenge Ed25519
Nonce horodaté, signé par le serveur, valable 30 secondes, usage unique.
POST /api/v1/auth/challenge émet un nonce et un horodatage signés avec la clé privée Ed25519 du serveur. Le client vérifie la signature avant toute suite. Un challenge consommé ou hors fenêtre de 30 s est rejeté.
Liaison HWID
Empreinte machine SHA-256, liée à la licence au premier login réussi.
Le client Windows calcule une empreinte (CPUID + numéro de série du volume) puis un SHA-256. Au premier accès, la licence enregistre ce HWID. Un autre appareil reçoit hwid_mismatch jusqu’à réinitialisation.
Session AES-256-GCM
Jeton de session chiffré, enveloppe signée Ed25519.
Après vérif HMAC (clé d’intégrité + nonce + HWID + e-mail), le serveur renvoie un jeton enveloppé en AES-256-GCM. Le client ne parse le JSON qu’après contrôle de la signature Ed25519.
Heartbeat
Rotation du jeton et refus des instances concurrentes.
POST /api/v1/client/heartbeat valide la session, le HWID et l’horloge (±30 s). Un second instance_id sur la même licence est refusé (concurrent_execution). Le jeton est renouvelé à chaque battement.
SQLite en WAL
Licences, sessions, journaux d’accès et audit dans kult.db.
La base ./data/kult.db tourne en journal WAL. Tables utilisées : licenses, sessions, auth_challenges, hwid_tokens, hwid_reset_tokens, access_logs, audit_trail, users.