• Aucun résultat trouvé

2.3 Préliminaires techniques

2.3.1 Réduction forcée

Cette section introduit la réduction forcée et sa forme normale associée u pour un terme u quelconque. Il s’agit de la réduction obtenue en tenant compte seulement des destructeurs et des constructeurs, par exemple en déchiffrant un message chiffré, même si la clé utilisée n’est pas la bonne. La définition suivante formalise cette idée, pour toute théorie quasi-linéaire (Σ, R). Définition 2.4. Soit (Σ, R) une théorie quasi-linéaire. Soit `des → rdes ∈ R et des = root(`des). La règle de réduction forcée associée est `0des rdes, où `0des est obtenue à partir de `des en gardant seulement le chemin vers r dans `des. Formellement, `0des est définie par :

1. `0des= des(x1, . . . , xn) quand r est un terme clos ;

2. Sinon, notons p0 l’unique position de `des telle que `des|p0 = r et p0= 1.p00, `0des est le terme linéaire tel que :

— pour chaque préfixe p0 de p0, root(`0des|p0) = root(`des|p0) — `0des|p0 = r = `des|p0

— Pour toute autre position p0 de `0des, `0des|p0 est une variable.

Rappelons que l’unicité de la position p0 telle que rdes = `des|p0 est garantie par la linéarité du terme t1. De plus, l’unicité de la règle associée à chaque destructeur impose que le système de réécriture forcée soit confluent ; il ne serait pas suffisant d’interdire les paires critiques, car la transformation qui associe les règles forcées aux règles de départ ne préserve pas cette propriété. Exemple 2.5. Reprenons la théorie standard (Σstdn , Rstdn ) de la section 1.1.7. Pour tous entiers i 6 n, les règles de réécriture forcée associées aux projections des tuples `projn

i → rprojn

i sont identiques à ces règles : `0projn

i = `projn

i. Les autres règles donnent :

adec(aenc(x, y), z)  x sdec(senc(x, y), z)  x getmsg(sign(x, y), z)  x check(x, y)  ok

Étant donné un ensemble Rf de règles de réécriture forcée, un terme u peut être réécrit par Rf s’il existe un sous-terme de u qui s’unifie avec le membre gauche de la règle. Formellement, on note u  v s’il existe une règle `  r ∈ Rf, une position p et une substitution σ tels que u|p = `σ et v = u[rσ]p. En particulier, contrairement à la réduction définie au chapitre précédent, la réduction forcée se produit même lorsque les sous-termes ne sont pas des messages. Comme toujours, nous noterons  la clôture réflexive-transitive de . Ce système de réécriture est convergent car il termine (chaque réduction supprime un destructeur) et n’a pas de paires critiques. La forme normale associée est notée u

.

Nous l’appliquerons aux recettes pour les simplifier et éviter les détours. Le lemme suivant démontre qu’un terme déduit par la recette R dans une trame φ donnée est identique à celui qui serait obtenu par la recette R

, pourvu que Rφ↓ soit un message.

Lemme 2.2. Soient φ une Σ0-trame et R une Σ0-recette telles que Rφ↓ est un Σ0-message. Si R0 vérifie R R0, alors R0 est une Σ0-recette, et R0φ↓ = Rφ↓.

Démonstration. Comme R  R0, il existe une position p dans R, une règle de réécriture forcée `0  r associée à une règle ` → r ∈ R, et une substitution σ telle que R|p = `0σ et R0 = R[rσ]p. Comme Rφ↓ est un Σ0-message, (`0σ)φ↓ est un Σ0-message. Soient t01, . . . , t0k et des ∈ Σd

tels que `0 = des(t01, . . . , t0k). On a (`0σ)φ = des((t01σ)φ, . . . , (t0kσ)φ). Comme (`0σ)φ↓ est un Σ0 -message, ` → r s’applique, puisqu’il n’existe qu’une seule règle qui réduise des. On en déduit que des((t01σ)φ↓, . . . , (t0kσ)φ↓) → (rσ)φ↓ et donc que (`0σ)φ↓ = (rσ)φ↓, d’où Rφ↓ = R0φ↓.

Dans les développements techniques, une partie du travail consistera à montrer qu’il est suffisant de considérer des recettes sous une forme simple, où la phase d’analyse (déduction de messages, essentiellement par des destructeurs) est séparée de la synthèse (ajout de termes constructeurs). Définition 2.5. Soit R une Σ0-recette. R est une recette de sous-terme si Rφ↓ ∈ St (φ) pour toute Σ0-trame φ telle que Rφ↓ est un Σ0-message. R est simple si R = C[R1, . . . , Rk], où C est un contexte (c’est-à-dire un terme à trous) construit sur Σc] Σ0, et chaque Ri est une Σ0-recette de sous-terme telle que root(Ri) /∈ Σc.

L’exemple suivant présente des recettes simples et des recettes de sous-terme, et illustre la différence entre ces dernières et des recettes composées de destructeurs.

Exemple 2.6. Si nous considérons la signature standard (Σstd n , Rstd

n ) définie dans la section 1.1.7, R = adec(w1, w2) est une Σ0-recette de sous-terme, car adec(w1, w2)φ↓ est un sous-terme de w1φ pour toute Σ0-trame φ telle que Rφ↓ est un Σ0-message. Comme adec n’est pas un constructeur, senc(R, w3) est une Σ0-recette simple. La recette check(w1, w2) n’est pas non plus une recette de sous-terme, et la recette ok est une recette équivalente du point de vue de la déduction de l’attaquant. Considérons maintenant la signature Σ = Σd] Σc avec Σd = {des} et Σc= {f ; g} et la règle

des(f(g(x))) → x

R0 = des(f(w1)) n’est pas composée uniquement de destructeurs, mais pour toute Σ0-trame φ telle que R0φ↓ est un Σ0-message, R0φ↓ est un sous-terme de w1φ. Donc R0 est une recette de sous-terme.

Il existe un lien entre la réduction forcée et les recettes simples : lorsqu’une recette est la recette d’un message, sa forme normale forcée est simple, comme le montre le lemme suivant, où les constantes de Σfresh sont remplacées par des Σ0-recettes.

Lemme 2.3. Soit θ une substitution avec dom(θ) ⊆ Σfresh et dont l’image est constituée de Σ0 -recettes. Soit R une Σ+0-recette en forme normale forcée telle que (Rθ)φ↓ est un Σ+0-message pour une certaine Σ0-trame φ. Toute Σ+0-recette R0∈ St (R) est simple.

Démonstration. Ce résultat se démontre par récurrence sur R.

Initialisation. R ∈ W ] Σ+0. Le résultat est vrai car R est une Σ+0-recette simple.

Hérédité. R = f(R1, . . . , Rk) pour un certain f ∈ Σ. R1, . . . , Rk sont en forme normale pour. — Cas f ∈ Σc. On a (Rθ)φ↓ = f((R1θ)φ↓, . . . , (Rkθ)φ↓), et (Rθ)φ↓ est un Σ+0-message pour

une certaine Σ0-trame φ, donc (Riθ)φ↓ est un Σ+0-message pour chaque i ∈ {1; . . . ; k}. La conclusion découle directement de l’application de l’hypothèse de récurrence à Ripour chaque i.

— Cas f = des ∈ Σd. Soient `des → rdes la règle de R telle que root(`des) = des, et `0des  rdes

la règle de réduction forcée associée. Si rdes∈ T0c, ∅), alors R  rdes, ce qui est impossible car R est en forme normale pour. Donc il existe une unique position p0 de `des telle que `des|p0 = rdeset p0= 1.p00. Rappelons que chaque Riest en forme normale pour, et (Riθ)φ↓ est un Σ+0-message (pour 1 6 i 6 k) puisque (Rθ)φ↓ est un Σ+0-message. L’hypothèse de récurrence s’applique donc : tout sous-terme de Riest une Σ+0-recette simple (pour 16 i 6 k). Supposons que R1est une Σ+0-recette de sous-terme. Soit ψ une Σ+0-trame telle que Rψ↓ est un Σ+0-message. Comme rdes = `des|p0, Rψ↓ ∈ St (R1ψ↓) ⊆ St (ψ). On en déduit que R est une Σ+0-recette de sous-terme, et donc une recette simple.

Nous avons traité le cas où R1 est une recette de sous-terme. Supposons donc maintenant que R1= C[R01, . . . , R0k0] pour un certain contexte C construit sur les symboles de Σc] Σ+

0, où chaque R0j (avec 16 j 6 k0) est une Σ+0-recette de sous-terme telle que root(R0j) /∈ Σc. Dans ce cas, R = des(C[R01, . . . , R0k0], R2, . . . , Rk), et p0ne correspond pas à une position du contexte C puisque R est en forme normale pour . Soit p0 le plus long préfixe de p00 qui corresponde à une position de C. On a C[R01, . . . , Rk00]|p0 = R0|jpour un certain j. Soit ψ une Σ+0-trame telle que Rψ↓ est un Σ+0-message. Alors Rψ↓ ∈ St (R0jψ↓) ⊆ St (ψ) car Rj0 est une Σ+0-recette de sous-terme. On en déduit que R est une Σ+0-recette de sous-terme, et donc une recette simple.

Associé au lemme 2.2, le lemme 2.3 montre que l’on peut remplacer les recettes arbitraires par des recettes simples sans changer les capacités de déduction de l’attaquant, et que la réduction forcée nous permet de calculer la recette simple correspondant à la recette de départ.