Chiffrer en post-quantique depuis Java, Python, Node ou Go

La plupart des systèmes d'information ne sont pas écrits dans un seul langage. Une application Java traite les commandes, un service Python produit les rapports, un back-office Node échange des documents avec les partenaires. Rendre tout cela post-quantique en intégrant une bibliothèque cryptographique dans chacun, c'est autant de chantiers, de dépendances natives et de revues de sécurité.

Il y a plus simple. On peut sortir la cryptographie des applications.

Le principe du sidecar

Le sidecar de Feranor PQC Suite est un petit service qui tourne à côté de vos applications, dans le même pod Kubernetes, le même hôte ou la même composition Docker. Il détient les clés, fait la cryptographie, et expose une API HTTP. Vos applications lui envoient un fichier, et il renvoie un message chiffré ou signé.

  • Aucune bibliothèque cryptographique à intégrer. Un client HTTP suffit, et tous les langages en ont un.
  • Les clés ne quittent pas le sidecar. Les applications ne voient jamais une clé privée ; le secret du magasin de clés vient d'un fichier monté ou de votre coffre (Azure Key Vault, AWS Secrets Manager, Google Cloud Secret Manager, HashiCorp Vault).
  • Un socket Unix par défaut. Seuls les processus du groupe du sidecar peuvent l'appeler ; sur le réseau, un jeton d'accès est exigé.
  • Chaque opération journalisée. Un journal d'audit chaîné garde la trace de ce qui a été chiffré, déchiffré, signé ou vérifié, sans jamais y écrire le contenu.
  • Des fichiers de toute taille. Le contenu passe en flux, en mémoire constante.

Chiffrer et déchiffrer en deux appels

Depuis un shell, avec curl sur le socket, on récupère le certificat du destinataire, on chiffre, puis on déchiffre.

S=/run/feranor/sidecar.sock
RECIPIENT=$(curl -s --unix-socket $S http://localhost/v1/recipient | sed '1d;$d' | tr -d '\n')
curl -s --unix-socket $S -H "Feranor-Recipient: $RECIPIENT" --data-binary @report.pdf http://localhost/v1/encrypt -o report.pdf.p7m
curl -s --unix-socket $S --data-binary @report.pdf.p7m http://localhost/v1/decrypt -o report.pdf

Le message produit est un message CMS standard (RFC 5652), chiffré en hybride ML-KEM-1024 et ECDH P-384 sous le profil ANSSI. N'importe quel outil CMS conforme sait en lire la structure.

Depuis Python

Sur le réseau, le sidecar écoute en TCP avec un jeton d'accès. Le chiffrement signé d'un fichier pour un partenaire tient en quelques lignes.

import requests

SIDECAR = "http://feranor-sidecar:8080"
TOKEN = open("/run/secrets/feranor-token").read().strip()

# partner: the base64 of the partner's certificate (DER)
with open("report.pdf", "rb") as content:
    answer = requests.post(f"{SIDECAR}/v1/encrypt?sign=true", data=content,
                           headers={"Authorization": f"Bearer {TOKEN}", "Feranor-Recipient": partner})
answer.raise_for_status()
open("report.pdf.p7m", "wb").write(answer.content)

Depuis Java

Avec le client HTTP du JDK et sans dépendance, on déchiffre un message reçu en exigeant qu'il soit signé, puis on lit qui l'a signé dans les en-têtes de la réponse.

HttpRequest request = HttpRequest.newBuilder(URI.create("http://feranor-sidecar:8080/v1/decrypt?requireSignature=true"))
    .header("Authorization", "Bearer " + token)
    .POST(HttpRequest.BodyPublishers.ofFile(Path.of("report.pdf.p7m")))
    .build();
HttpResponse<Path> response = client.send(request, HttpResponse.BodyHandlers.ofFile(Path.of("report.pdf")));
if (response.statusCode() != 200) { /* a problem (RFC 9457) with a stable code */ }
String signer = response.headers().firstValue("Feranor-Signer").orElseThrow();

Node et Go s'écrivent de la même façon, avec fetch ou net/http. Les erreurs sont des réponses « problem details » (RFC 9457) avec un code stable, que vos applications peuvent traiter une fois pour toutes.

Ce qui reste sous votre contrôle

  • Votre infrastructure. Le sidecar tourne chez vous, sur site ou dans votre cloud, sans compte ni connexion à Feranor ; il fonctionne sur un réseau isolé.
  • Vos formats. Des messages CMS et des clés PKCS#8 normalisés, qui ne vous enferment dans rien.
  • Votre rythme. Les applications .NET peuvent utiliser directement le SDK dans le processus, les autres le sidecar, les scripts et les traitements par lots la ligne de commande fpqc, et tous lisent et produisent les mêmes messages.
La cryptographie la plus simple à maintenir est celle que vos applications n'ont pas à porter.

Le sidecar, le SDK, la ligne de commande et la console, leurs performances et leurs tarifs.

Chiffrer en post-quantique avec Feranor PQC Suite ➔