Absence de désenveloppage pour le déchiffrement EnvelopedCms
Dans .NET Core 2.0 sur macOS et Linux, l’implémentation EnvelopedCms a incorrectement encapsulé le contenu dans une valeur supplémentaire ASN.1 OCTET STRING. Pour maintenir la compatibilité lors du traitement du contenu créé avec cette erreur, la classe EnvelopedCms a toujours examiné le contenu déchiffré et a essayé de supprimer les données supplémentaires. EnvelopedCms a supprimé les données supplémentaires sur Windows lors de l’utilisation d’une clé privée externe et sur tous les autres systèmes d’exploitation pour tout déchiffrement.
Malheureusement, ce code de compatibilité opportuniste ne peut pas faire la distinction entre les documents qui ont été créés de manière incorrecte et les documents qui ont été créés correctement, mais qui ont la même forme de données.
Comportement précédent
Auparavant, si le contenu déchiffré commençait avec la valeur d’octets 0x04
et une valeur de longueur BER ASN.1 légalement codée qui était inférieure ou égale au nombre d’octets restant dans le contenu, les données fournies dans la propriété envelopedCms.ContentInfo.Content
recevaient uniquement les données associées à la partie octets de contenu de la valeur lorsqu’elles étaient traitées comme une valeur ASN.1 OCTET STRING.
Par exemple, si le contenu initialement déchiffré était la série d’octets { 0x04, 0x03, 0x01, 0x02, 0x03 }
ou { 0x04, 0x03, 0x01, 0x02, 0x03, [continued content] }
, la valeur de envelopedCms.ContentInfo.Content
était la série d’octets { 0x01, 0x02, 0x03 }
.
Les valeurs qui n’ont pas commencé par 0x04
, ou qui ont commencé par 0x04
, mais qui n’ont pas été suivies d’une valeur de longueur encodée de manière acceptable, ont été entièrement signalées.
Pour certaines surcharges de EnvelopedCms.Decrypt, ce comportement ne s’est produit que sur les systèmes d’exploitation autres que Windows. Pour plus d’informations, consultez API affectées.
Nouveau comportement
La classe EnvelopedCms ne tente plus de contourner le problème précédent et signale toujours fidèlement le contenu déchiffré.
Si vous traitez des documents créés par la version .NET Core 2.0 de la classe EnvelopedCms sur macOS ou Linux, vous verrez des données supplémentaires au début du contenu.
Version introduite
.NET 7
Type de changement cassant
Ce changement peut affecter la compatibilité binaire.
Raison du changement
Le code de compatibilité n’a pas pu faire la différence entre les documents créés de manière incorrecte et les documents qui transportaient légitimement des données qui ressemblaient à une valeur ASN.1 OCTET STRING codée sur BER.
En raison de la nature de l’encodage BER, les appelants qui ont été affectés négativement par ce code de compatibilité n’ont pas pu facilement récupérer leurs données manquantes.
Action recommandée
Les appelants qui lisent les documents créés avec EnvelopedCms sur .NET Core 2.0 pour macOS ou Linux peuvent ajouter du code pour supprimer les données supplémentaires. Pour les supprimer, utilisez la classe AsnDecoder du package NuGet System.Formats.Asn1, qui est déjà une dépendance de la classe EnvelopedCms.
envelopedCms.Decrypt(...);
byte[] content = envelopedCms.ContentInfo.Content;
if (envelopedCms.ContentInfo.Oid.Value == "1.2.840.113549.1.7.1")
{
if (content?.Length > 0 && content[0] == 0x04)
{
try
{
content = AsnDecoder.ReadOctetString(content, AsnEncodingRules.BER, out _);
}
catch (AsnContentException)
{
}
}
}
API affectées
- System.Security.Cryptography.Pkcs.EnvelopedCms.Decrypt(RecipientInfo, AsymmetricAlgorithm)
- System.Security.Cryptography.Pkcs.EnvelopedCms.Decrypt(RecipientInfo, X509Certificate2Collection) (non Windows uniquement)
- System.Security.Cryptography.Pkcs.EnvelopedCms.Decrypt(RecipientInfo) (non Windows uniquement)
- System.Security.Cryptography.Pkcs.EnvelopedCms.Decrypt(X509Certificate2Collection) (non Windows uniquement)
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour