Performances
Le chiffrement des valeurs et des tableaux échange un faible coût à l’exécution contre l’assurance que vos constantes et les données de vos tableaux n’apparaissent pas dans le code décompilé.
- Déchiffrement à chaque accès. Chaque constante chiffrée est obtenue par un appel de déchiffrement au lieu d’être chargée directement : la lecture d’une valeur coûte donc plus cher qu’un simple
ldc. Dans l’immense majorité du code, la différence est imperceptible, mais elle peut s’accumuler lorsqu’une boucle critique pour les performances lit des constantes chiffrées des millions de fois. - Reconstruction du tableau à la première utilisation. Un tableau en ligne chiffré est reconstruit à partir de ses données déchiffrées la première fois qu’il est initialisé.
Comme le coût est proportionnel à la fréquence de lecture des valeurs chiffrées, appliquez le chiffrement là où il protège quelque chose qui en vaut la peine plutôt qu’à chaque littéral de l’assembly. Si une boucle serrée présente un surcoût mesurable, envisagez de placer la constante dans une variable en dehors de la boucle, ou de n’activer le chiffrement que pour les types de données qui contiennent réellement des données sensibles (voir Configuration).
Comme pour tout paramètre de protection, exécutez votre suite de tests et, le cas échéant, vos tests de performances sur l’assembly obfusqué pour vérifier que le compromis est acceptable pour votre application.