Séparation données / instructions
Touba encourage une séparation explicite entre contenu externe, données métier et instructions agentiques.
Cette séparation réduit une source classique de confusion dans les systèmes agentiques : traiter un texte reçu du monde extérieur comme s’il s’agissait d’une instruction autorisée.
Touba rend visibles les frontières directes de type et de trace. La détection de prompt injection et la classification du contenu naturel relèvent de couches de sécurité séparées.
Principe
Une donnée peut informer une décision. Elle ne devient pas une instruction sans frontière explicite.
contenu externe -> frontière explicite -> instruction agentique
Syntaxe de base
Déclarez des types nominaux distincts :
type SourceText
content is Text
type AgentInstruction
content is Text
Même si les deux types ont le même champ content, ils ne sont pas interchangeables.
Exemple accepté
Le contenu externe passe par une capacité dédiée avant d’être utilisé comme instruction.
module examples.di_boundary
type SearchRequest
query is Text
type SourceText
content is Text
type AgentInstruction
content is Text
type LLMResponse
summary is Text
tool FetchSource
takes request as SearchRequest
gives SourceText
requires network
tool BuildInstruction
takes source as SourceText
gives AgentInstruction
tool CallLLM
takes instruction as AgentInstruction
gives LLMResponse
requires network
skill ResearchWithBoundary
takes request as SearchRequest
gives LLMResponse
uses FetchSource
uses BuildInstruction
uses CallLLM
do
FetchSource
with request as request
into source
BuildInstruction
with source as source
into instruction
CallLLM
with instruction as instruction
into response
give response
Ce programme ne prouve pas que le contenu est sûr. Il montre que la transformation est visible dans le programme.
Le typage nominal n'est pas un suivi automatique de contamination. Le programme
peut reconstruire explicitement un autre record à partir d'un champ texte ; il
assume alors cette transformation. Cela ne donne pas au modèle le droit de
modifier uses, les scopes ou les grants. Ces autorisations restent vérifiées
indépendamment de la valeur et du nom du type construit.
Exemple refusé
Le compilateur refuse le passage direct de SourceText vers AgentInstruction.
CallLLM
with instruction as source
into response
Si source est de type SourceText et que CallLLM attend AgentInstruction, Touba produit un refus de type.
Ce que Touba rend visible
Touba peut rendre visibles :
- le type d’une entrée de tool ;
- le type d’une valeur passée avec
with; - le refus d’un passage direct entre types nominaux distincts ;
- les tools ou skills qui servent de frontière explicite ;
- les traces et refus déjà produits par le runtime, sans payload brut.
Périmètre
Touba fournit des frontières explicites de type et d’exécution pour la séparation données/instructions :
- types nominaux distincts ;
- capacités de conversion visibles ;
- refus runtime en cas de passage direct incohérent ;
- traces qui évitent l’exposition des prompts et payloads bruts.
La détection générale de prompt injection, l’analyse du contenu naturel, les
scores de risque, la sandbox de handler, les preuves de non-exfiltration, le
statut Verified / Unverified et la conversion automatique du contenu externe
en instruction relèvent de couches sécurité et assurance séparées.
Bonnes pratiques
- Utilisez des types différents pour contenu externe et instruction agentique.
- Faites passer toute conversion par une frontière nommée.
- Gardez les secrets comme handles opaques, jamais comme texte de prompt.
- Évitez de tracer ou afficher les prompts complets.
- Utilisez
human.reviewouhuman.approvequand la conversion demande un jugement humain.