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 :

  1. En-tête fixe de 32 octets commençant par les octets magiques GKSE (4 octets : 0x47 0x4B 0x53 0x45).
  2. Manifeste d'envoi (SendManifest) encodé en CBOR canonique.
  3. Charge utile chiffrée par AES-256-GCM.

En-tête fixe (32 octets)

OffsetTailleChamp
04Magic GKSE
42Version majeure
62Version mineure
88Taille du manifeste (uint64 little-endian)
168Taille de la charge chiffrée (uint64 little-endian)
248Horodatage 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é.