Le format GKP (Gankpo) est un conteneur d'archives sécurisé conçu pour encapsuler un document source (payload) ainsi que l'ensemble des preuves cryptographiques (signatures, certificats, empreintes) permettant de garantir son intégrité, son authenticité de bout en bout, et sa traçabilité de cycle de vie. Le format actuel est la version 4.0.0.
Le fichier .gkp est une archive (basée sur ZIP) dont la structure interne est organisée comme suit :
document.gkp/
├── payload/
│ └── source_file.pdf # Le fichier original haché et scellé.
├── manifest.json # Résumé des informations en clair pour Reader/UI.
├── metadata.json # Schema complet des attributs (Auteur, Rôle, GKP Number).
├── signatures/
│ ├── primary.sig # Signature cryptographique initiale (Ed25519 / PKI).
│ └── append_*.sig # Signatures de validation (Multisig ou Seals).
├── policy/
│ └── rules.json # Stratégie de workflow (Threshold, Ordered, etc.).
└── share/
└── envelope.json # (Optionnel) Configurations de partage sécurisé.
metadata.json)Le fichier de métadonnées est le cœur logique du GKP. Ses attributs sont liés cryptographiquement :
{
"version": "4.0.0",
"kind": "Original",
"content_id": "UUID-X",
"hash_hex": "blake3_hash_of_payload_file...",
"gkp_number": "GKP-1-A1B2C3D4-202603-0001",
"issuer": {
"actor_type": "person",
"name": "Jean Dupont",
"role": "Directeur (Binding V3)",
"public_key": "ed25519_pub_key_hex"
},
"flags": {
"is_encrypted": false
}
}
Toute altération de ces valeurs invalide le sceau cryptographique du conteneur.
payload/)Il contient le document source exact tel qu'il a été inséré. L'empreinte cryptographique de ce fichier (hash_hex) est calculée via la fonction de hachage Blake3 avec un stream invariant.
signatures/)Chaque document est scellé par un bloc primaire. Le système autorise l'ajout de Records Multi-signatures (Trailing Records) pour matérialiser :
Structure typique : [Magic (4)][Version (2)][PayloadLen (4)] + CBOR_Payload
policy.json)S'il s'agit d'un circuit de validation, le bloc policy indique :
{
"mode": "ordered",
"required_steps": [
{ "role": "Financial Officer", "status": "pending" },
{ "role": "CEO", "status": "pending" }
]
}
Les événements du cycle de vie (création, ajouts de signatures, partages) sont chaînés. Chaque signature record ajoutée possède un pointeur prev_record_hash pointant vers l'événement parent (le hachage local du conteneur précédent).
Lorsqu'un GKP passe en statut partagé, la nature du fichier passe de Original à PublicShare ou ProtectedShare. Un bloc share/envelope.json liste les clés dérivées (via passe-mot HKDF Versioning V4) pour rendre l'archive consultable uniquement par ses destinataires valides.