COMMENT FONCTIONNE LA VÉRIFICATION

Vérifié dans votre navigateur.
Scellé pour l’enclave.

Ce que votre navigateur vérifie, ce que notre relais voit, et ce pour quoi vous nous faites encore confiance.

Pas encore évalué de manière indépendante

  • L’enclave vérifiée d’abord

    Comment nous le savons

    Avant votre premier message, le vérificateur open source de Tinfoil contrôle dans votre navigateur le rapport signé par la puce. Un rapport qui ne se vérifie pas arrête tout.

  • Scellé dans votre onglet

    Comment nous le savons

    Chaque requête est chiffrée avec EHBP (HPKE, AES-256-GCM) pour la clé que nomme l’attestation, avant de partir.

  • Le relais voit des octets

    Comment nous le savons

    Notre relais vérifie votre compte et votre quota, puis transmet le texte chiffré aux hôtes de Tinfoil. Il voit les tailles, les heures et votre compte, et ne garde aucune copie.

  • Un reçu par réponse

    Comment nous le savons

    Votre navigateur vérifie l’enclave du modèle qui a répondu, là où son matériel le permet, et garde ce qu’il a trouvé avec la réponse.

Qui pourrait regarder, et ce qui l’en empêche.

  1. Le réseau

    Risque résiduel : Faible
    Obtient
    Octets scellés, tailles, heures
    Arrêté par
    HTTPS, puis le scellement pour l’enclave
    Reste ouvert
    La taille et le rythme du trafic
  2. Notre relais

    Risque résiduel : Moyenne
    Obtient
    Votre compte, IP, tailles, modèle
    Arrêté par
    Scellé dans votre onglet ; il ne peut pas l’ouvrir
    Reste ouvert
    Les métadonnées qu’il voit
  3. L’hébergeur cloud

    Risque résiduel : Moyenne
    Obtient
    Mémoire de l’enclave chiffrée
    Arrêté par
    AMD SEV-SNP ou Intel TDX, attesté
    Reste ouvert
    Failles matérielles ; les déclarations de Tinfoil
  4. Une fausse enclave

    Risque résiduel : Faible
    Obtient
    Rien : votre onglet la refuse
    Arrêté par
    L’attestation, vérifiée dans votre navigateur
    Reste ouvert
    Code vérifié n’est pas code relu
  5. Code du site modifié

    Risque résiduel : Moyenne
    Obtient
    Ce que vous tapez, avant le scellement
    Arrêté par
    Manifeste, signature, votre propre build
    Reste ouvert
    Une page ne peut pas entièrement se porter garante d’elle-même
  6. L’API pour développeurs

    Risque résiduel : Élevée
    Obtient
    Votre requête, en mémoire
    Arrêté par
    Ni stockage ni journaux, selon notre politique
    Reste ouvert
    Vous faites confiance à notre passerelle

DANS UN SERVEUR

Où commence l’enclave, et où elle s’arrête.

Faites défiler pour démonter un serveur GPU : ce qui se trouve à l’intérieur de la frontière de l’enclave, et ce qui reste dehors.

  1. Diffuseur thermiqueLe couvercle métallique au-dessus des puces du GPU.
  2. Puce du GPULà où tourne le modèle. La documentation de Tinfoil indique que ses GPU NVIDIA (H100, H200 et B200) fonctionnent en mode informatique confidentielle.
  3. Mémoire à large bande passanteContient les poids du modèle, et votre requête pendant qu’on y répond.
  4. Machine virtuelle confidentielleSur le processeur du serveur (AMD SEV-SNP ou Intel TDX) : le routeur de Tinfoil et le serveur du modèle, dans une mémoire que l’hôte ne peut pas lire. Sa puce signe le rapport que votre navigateur vérifie.
  5. La frontière de l’enclaveCe dont le matériel tient l’hôte à l’écart, et ce que décrit l’attestation. Votre requête n’est ouverte qu’à l’intérieur.
  6. L’hôteLa carte, son hyperviseur et ses pilotes, et quiconque l’exploite : hors de la frontière. Il fait entrer et sortir des octets scellés.

Une illustration du type de machine qu’exploite Tinfoil, pas l’image d’une machine précise. L’enregistrement de version signé de Tinfoil nomme les CPU, la mémoire et les GPU de chaque enclave ; le panneau Vérifié de l’espace de travail les affiche.

Lire le texte intégralMasquer le texte intégralEnviron 12 minutes, six schémas

En bref

Undergrove exécute des modèles à poids ouverts dans des enclaves matérielles opérées par Tinfoil. Une partie de ce que cela implique, votre navigateur la vérifie lui-même ; une partie relève de la déclaration de Tinfoil ; et une partie repose sur nous. Voici ce qui relève de quoi.

Votre navigateur vérifie

  • Que l’enclave est un matériel authentique qui exécute le code publié par Tinfoil.
  • Que chaque requête est scellée avec la clé de cette enclave avant de quitter votre onglet.
  • Pour le reçu de chaque réponse, l’enclave du modèle qui a répondu, quand son matériel le permet.

Tinfoil déclare

  • Qu’il ne peut pas accéder à ses enclaves et que rien de ce qu’elles contiennent ne subsiste entre deux redémarrages.
  • Que ses GPU pris en charge fonctionnent en mode informatique confidentielle.

Vous nous faites confiance pour

  • Le code que ce site envoie à votre navigateur, que vous pouvez comparer avec le build.
  • Ce que le relais fait de ce qu’il peut voir : tailles, heures et votre compte.
  • La passerelle de l’API développeurs, qui lit les requêtes en mémoire.

Rien de tout cela n’a encore été évalué de façon indépendante.

01 · Attestation

La puce se porte garante du code.

Une enclave matérielle est une partie d’un serveur dans laquelle son propre hôte ne peut pas regarder : le processeur chiffre la mémoire de l’enclave et en tient le logiciel de l’hôte à l’écart. À lui seul, ce ne serait qu’une promesse. Ce qui le rend vérifiable, c’est l’attestation. Au démarrage de l’enclave, le processeur mesure le code chargé et signe un rapport de cette mesure avec une clé dont le fabricant de la puce se porte garant. Le rapport nomme aussi la clé publique avec laquelle l’enclave déchiffrera.

Avant votre premier message, l’espace de travail récupère ce rapport pour l’enclave routeur de Tinfoil, en passant par notre serveur, et y applique le vérificateur open source de Tinfoil dans votre navigateur. Le faire passer par nous ne change rien : nous ne pouvons pas falsifier la signature de la puce, et un rapport qui ne se vérifie pas arrête tout.

Enclave de TinfoilRapport matérielLe processeur mesure le code avec lequel l’enclave a démarré et en signe un rapport, qui nomme la clé publique de l’enclave, avec une clé dont le fabricant de la puce se porte garant.
GitHub et SigstoreVersion publiéeTinfoil compile son code open source en public et inscrit la mesure de chaque version dans le journal de transparence public de Sigstore.
Votre navigateurVérificateur open source de TinfoilVérifie la signature du rapport avec les clés du fabricant de la puce, vérifie l’enregistrement de build signé de la version, et compare les deux mesures.

Elles correspondent : les requêtes sont scellées avec la clé nommée par le rapport.

Un contrôle échoue : rien n’est envoyé, et l’espace de travail dit pourquoi.

Figure 1. Votre navigateur compare deux choses qu’il peut vérifier sans nous faire confiance : le rapport signé de la puce sur le code qui s’exécute dans l’enclave, et la version que Tinfoil a publiée pour ce code. Il ne scelle quoi que ce soit que si elles correspondent.

Les contrôles du vérificateur, dans l’ordre

  1. Trouver la version que Tinfoil a publiée pour ce code.
  2. Vérifier le rapport d’attestation matérielle de l’enclave avec les clés de signature du fabricant de la puce.
  3. Vérifier l’enregistrement de build signé de la version (Sigstore, depuis GitHub).
  4. Comparer : le code mesuré dans l’enclave doit être exactement cette version.
  5. Vérifier que la clé de chiffrement est celle que nomme l’attestation de l’enclave.

Un rapport vérifié est réutilisé jusqu’à dix minutes, dans cet onglet ou un autre onglet de ce site, et seulement s’il est exactement le même, d’après son SHA-256. L’espace de travail montre chaque contrôle sous Vérifié, et la page d’architecture montre le code qui l’exécute.

02 · Scellement

Seule l’enclave peut l’ouvrir.

Une fois l’enclave vérifiée, chaque requête réelle est scellée dans votre onglet avant d’en sortir. Son corps est chiffré avec EHBP, le protocole de Tinfoil pour chiffrer les corps HTTP, avec la clé nommée par l’attestation. EHBP utilise HPKE, une norme pour chiffrer à destination de la clé publique de quelqu’un : votre onglet crée une nouvelle paire de clés pour la requête, la combine avec la clé de l’enclave en un secret partagé, et chiffre avec AES-256-GCM.

La nouvelle moitié publique voyage à côté du texte chiffré, comme clé encapsulée. Seule la clé privée de l’enclave, qui ne quitte jamais l’enclave, peut la retransformer en secret. La réponse revient de la même façon, en trames scellées que votre onglet ouvre au fil de leur arrivée.

Votre ongletUne nouvelle paire de clés, par requêteCombinée avec la clé publique vérifiée de l’enclave, elle donne un secret que personne d’autre ne peut calculer.
Texte chiffré + clé encapsulée
Relais UndergroveLe transmetNe détient aucune clé qui l’ouvre.
Les mêmes octets
Enclave de TinfoilL’ouvreAvec la clé privée qui ne quitte jamais l’enclave.
Figure 2. EHBP scelle le corps de chaque requête avec HPKE : X25519, HKDF-SHA256 et AES-256-GCM. La réponse revient scellée elle aussi et ne s’ouvre que dans votre onglet. Scellez vous-même un message et suivez chaque étape.

03 · Le relais

Des octets qu’il ne peut pas lire.

Les requêtes scellées passent par notre relais, une fonction sur Vercel, plutôt que d’aller directement chez Tinfoil. Il vérifie qui fait la demande et que son quota le permet, et place la clé Tinfoil d’Undergrove sur la requête, pour que vous n’ayez pas besoin d’un compte chez Tinfoil. Il refuse tout ce qui n’est pas adressé à l’un des hôtes de Tinfoil ou ne porte pas de clé encapsulée.

Il ne peut pas compter vos mots : il estime donc le coût de chaque requête à partir de la taille du texte chiffré, en arrondissant vers le haut. Il ne garde aucune copie, et ses journaux ne contiennent que des noms de routes, des codes d’état et des durées.

À l’extérieur : ce que voit le relais

  • Votre compte et votre adresse IP (via Vercel, notre hébergeur)
  • La taille, l’heure et le chemin de chaque requête
  • Le modèle qui a répondu, d’après un en-tête que fixe Tinfoil
  • Si la recherche web ou des images ont servi, comme le déclare votre navigateur, pour pouvoir les facturer

Scellé à l’intérieur : ce qu’il ne peut pas lire

  • Vos messages et fichiers
  • Les réponses
  • Vos instructions et notes de mémoire
Figure 3. Le relais refuse tout ce qui n’est pas scellé pour l’un des hôtes de Tinfoil, y place notre clé Tinfoil et transmet les octets. Il facture à la taille parce qu’il ne peut pas compter les mots. Voyez une requête telle que le relais l’a vue.

04 · Reçus

Deux enclaves, et un reçu pour chaque réponse.

L’enclave routeur vérifiée par votre navigateur n’exécute pas le modèle. Elle ouvre votre requête et la transmet à l’enclave où le modèle tourne avec ses GPU, que le routeur vérifie lui-même, selon son code publié, et nomme dans un en-tête de réponse.

Votre navigateur vérifie ensuite aussi cette enclave nommée, avec le même vérificateur, par rapport au dépôt que le routeur de Tinfoil fixe pour ce modèle. Ce qu’il trouve est conservé avec la réponse sous forme de reçu : l’enclave, le code mesuré dedans, la version correspondante et la clé avec laquelle la requête a été scellée. Un reçu est l’enregistrement propre de votre navigateur, signé ni par nous ni par Tinfoil ; l’attestation qui le fonde est signée par AMD et GitHub, donc chacun peut la vérifier à nouveau.

Enclave 1Le routeur de TinfoilVérifiée avant l’envoi. Ouvre la requête.
D’enclave à enclave
Enclave 2Le modèle et ses GPUNommée dans l’en-tête tinfoil-enclave.
Vérifiée à nouveau
Votre navigateurLe reçu de la réponseConservé avec la réponse : l’enclave, le code mesuré, la version et la clé.
Vérifié
Un matériel authentique, qui exécute une version publiée du dépôt que le routeur de Tinfoil fixe pour le modèle.
Non vérifiée
Un matériel que le vérificateur du navigateur ne sait pas encore lire : il lit les rapports AMD SEV-SNP, donc une enclave sur Intel TDX est notée comme non vérifiée.
Non confirmé
Le contrôle a tourné et une étape a échoué, par exemple pour une enclave déjà passée à une version plus récente que celle à laquelle le service de Tinfoil l’associe.
Figure 4. Le routeur de Tinfoil vérifie lui-même l’enclave du modèle, selon son code publié, et la nomme dans un en-tête de réponse. Votre navigateur vérifie à nouveau cette enclave pour le reçu de la réponse. L’en-tête n’est pas couvert par le chiffrement : cela montre donc que l’enclave nommée est authentique, pas que cette requête y est allée ; cette étape repose sur le code publié du routeur.

05 · L’API développeurs

Un autre chemin, dit franchement.

Le code qui appelle l’API développeurs envoie sa requête en HTTPS à notre passerelle, qui la lit : pour la vérifier, appliquer les limites et exécuter des outils. Elle la lit en mémoire et ne la stocke ni ne la journalise jamais. La passerelle fait ensuite ce que fait votre navigateur dans l’espace de travail : elle vérifie l’enclave avec le SDK de Tinfoil et scelle la requête pour elle.

Sur ce chemin, vous nous confiez donc la requête tant que la passerelle la détient. Ce que vous pouvez encore vérifier, c’est l’enclave : chaque réponse de la route Tinfoil porte des en-têtes qui nomment le paquet d’attestation vérifié par la passerelle, pour que vous le vérifiiez à nouveau. La documentation développeurs explique comment.

Espace de travail
Votre navigateurVérifie, puis scelle
RelaisNe peut pas la lire
EnclaveL’ouvre
API développeurs
Votre serveurEnvoie en HTTPS
Notre passerelleLa lit en mémoire pour la vérifier ; ne la stocke ni ne la journalise jamais
EnclaveVérifiée d’abord par la passerelle
Figure 5. Deux chemins vers les mêmes enclaves. Dans l’espace de travail, votre navigateur scelle ; par l’API, c’est notre passerelle, après avoir lu la requête en mémoire pour la vérifier. Chaque réponse de l’API venant des enclaves de Tinfoil nomme le paquet d’attestation vérifié par la passerelle, que GET /v1/attestation?sha256= renvoie pour que vous le vérifiiez à nouveau.

06 · Cette page

Vérifier le code qui vérifie.

Tout ce qui précède tourne dans du code que ce site envoie à votre navigateur, donc ce code compte aussi. Chaque build écrit un manifeste : le SHA-256 de chaque fichier servi par le site, et le commit dont il est issu.

Une page ne peut pas entièrement se porter garante d’elle-même : un contrôle qui s’exécute dans la page n’est honnête que si la page l’est. Le contrôle le plus solide se passe entièrement de nous : refaites vous-même le build du commit dans l’environnement figé et comparez les manifestes.

Le buildUn manifesteLe SHA-256 de chaque fichier servi par le site, et le commit dont il vient.
Publié avec le site
Votre navigateurCalcule l’empreinte de ce qu’il a chargéChaque fichier qui diffère est nommé.
Ou, sur votre machine
N’importe quiRefait le build du commitEt compare les deux manifestes.
Figure 6. Vérifier cette page calcule l’empreinte des fichiers chargés par votre navigateur et les compare au manifeste du build et à son commit. Refaire le build de ce commit dans l’environnement figé (npm run rebuild:site) devrait donner le même manifeste, octet pour octet ; chacun peut le lancer et comparer, sans rien nous demander.

07 · Limites

Ce que cela ne prouve pas.

  • Les déclarations de Tinfoil restent celles de Tinfoil. Qu’il ne peut pas accéder à ses enclaves, que rien de ce qu’elles contiennent ne subsiste entre deux redémarrages et que ses GPU fonctionnent en mode informatique confidentielle, c’est ce que dit Tinfoil. Votre navigateur vérifie que le matériel est authentique et exécute le code publié.
  • Le matériel fait partie de ce à quoi vous faites confiance. La protection vaut ce que valent les processeurs, leur firmware et les clés des fabricants de puces, et des vulnérabilités d’enclaves matérielles ont déjà été publiées.
  • Une étape repose sur du code publié. Que votre requête soit passée du routeur à l’enclave du modèle repose sur le code publié du routeur. Votre navigateur ne peut vérifier l’enclave du modèle que sur AMD SEV-SNP ; sur Intel TDX, elle est notée comme non vérifiée.
  • Le relais voit l’extérieur. Votre compte, votre adresse IP, les tailles, les heures et le modèle qui a répondu.
  • Publié n’est pas synonyme de relu. Le vérificateur montre quel code s’exécute, pas que ce code est sans défaut.
  • Pas encore d’évaluation indépendante. Aucun auditeur n’a examiné cette conception ni son code jusqu’ici.

Pour savoir qui pourrait voir quoi, observateur par observateur, lisez le modèle de menace.

08 · Aller plus loin

Voir chaque partie à l’œuvre.