Spécification du format .gksend.
Le format .gksend est une enveloppe chiffrée qui transporte un ou plusieurs documents — typiquement des fichiers .gkp — vers un destinataire identifié par une clé publique.
Structure générale
Un fichier .gksend se compose de trois blocs :
- En-tête fixe de 32 octets commençant par les octets magiques
GKSE(4 octets :0x47 0x4B 0x53 0x45). - Manifeste d'envoi (SendManifest) encodé en CBOR canonique.
- Charge utile chiffrée par AES-256-GCM.
En-tête fixe (32 octets)
| Offset | Taille | Champ |
|---|---|---|
| 0 | 4 | Magic GKSE |
| 4 | 2 | Version majeure |
| 6 | 2 | Version mineure |
| 8 | 8 | Taille du manifeste (uint64 little-endian) |
| 16 | 8 | Taille de la charge chiffrée (uint64 little-endian) |
| 24 | 8 | Horodatage d'émission (uint64 little-endian, secondes Unix) |
Manifeste d'envoi
Le SendManifest contient :
from: identifiant de l'émetteur et clé publique de signature.to: identifiant du destinataire et clé publique de chiffrement X25519.alg: algorithme d'enveloppe (par défaut"X25519+HKDF+AES-256-GCM").nonce: nonce AES-GCM (12 octets).items: liste des éléments transportés, avec pour chacun : nom, type MIME, taille en clair, empreinte BLAKE3.sig: signature Ed25519 de l'émetteur sur le manifeste.
Dérivation de clé
La clé de chiffrement de la charge utile est dérivée par HKDF-SHA-256 à partir du secret partagé X25519 entre l'émetteur et le destinataire, avec un contexte incluant l'identifiant de l'enveloppe et le type d'opération.
Charge utile
La charge utile chiffrée est une archive concaténant les éléments déclarés dans items. Après déchiffrement, le destinataire peut séparer les éléments et vérifier leur empreinte BLAKE3 individuelle.
Révocation
Une enveloppe .gksend ne supporte pas la révocation au niveau du format. La révocation est portée par les documents .gkp transportés, chacun selon son propre modèle de révocation.
Compatibilité
Un client de réception conforme DOIT :
- rejeter un fichier dont les octets magiques ne sont pas
GKSE; - vérifier la signature Ed25519 du manifeste avant toute tentative de déchiffrement ;
- vérifier l'empreinte BLAKE3 de chaque élément après déchiffrement ;
- rejeter silencieusement les éléments dont l'empreinte ne correspond pas.
→ Voir les vecteurs de conformité.
