3

J'ai réussi à chiffrer certaines données avec AES-GCM en utilisant IE 11 sous Windows 10 mais je n'arrive pas à faire fonctionner le décryptage. Exemple de code de chiffrement JS:Comment déchiffrer des données à partir du résultat d'une opération de chiffrement IE 11 en utilisant AES-GCM

let plainText = new Uint8Array([1]); 
let key; 
let keyBuf = window.msCrypto.getRandomValues(new Uint8Array(32)); 
let iv = window.msCrypto.getRandomValues(new Uint8Array(12)); 
let additionalData = window.msCrypto.getRandomValues(new Uint8Array(16)); 
let encResult; 
let importOp = window.msCrypto.subtle.importKey('raw', 
    keyBuf, 
    { name: 'AES-GCM' }, 
    false, 
    ['encrypt', 'decrypt']); 
importOp.oncomplete = function(e) { 
    key = e.target.result; 
    let encryptOp = window.msCrypto.subtle.encrypt({ 
     name: 'AES-GCM', 
     iv: iv, 
     tagLength: 128, 
     additionalData: additionalData 
    }, key, plainText); 
    encryptOp.oncomplete = function (e) { 
     encResult = e.target.result; 
    }; 
}; 

L'article résultant (encResult) est un AesGcmEncryptResult, qui a la valeur chiffrée et la balise en 2 propriétés différentes. Si je comprends bien, je dois concaténer ces derniers et les transmettre comme le texte chiffré à déchiffrer, comme dans:

let cipherText = new Uint8Array(plainText.length + 16); // tagLength/8 
cipherText.set(new Uint8Array(encResult.ciphertext), 0); 
cipherText.set(new Uint8Array(encResult.tag), plainText.length); 
let decryptOp = window.msCrypto.subtle.decrypt({ 
    name: 'AES-GCM', 
    iv: iv, 
    tagLength: 128, 
    additionalData: additionalData 
}, key, cipherText); 

câbler ensuite onComplete et onerror et onerror incendies. Malheureusement, l'objet Event d'IE n'a rien à me dire, autre que type = "error".

Il y a très peu d'informations sur le web sur l'utilisation de AES-GCM dans IE 11.

S'il vous plaît ne me dites pas d'utiliser un autre navigateur. Tout fonctionne bien (mais différemment) avec Chrome et Firefox. J'essaie spécifiquement d'obtenir ceci pour fonctionner dans IE 11.

Que suis-je manquant?

Répondre

3

J'ai trouvé ce shim qui (vaguement) montre que la valeur de l'étiquette va dans l'objet de l'algorithme et le texte de chiffrement seul va dans le troisième argument. Par exemple.

let decryptOp = window.msCrypto.subtle.decrypt({ 
    name: 'AES-GCM', 
    iv: iv, 
    additionalData: additionalData, 
    tag: new Uint8Array(encResult.tag) 
    }, key, new Uint8Array(encResult.ciphertext)); 

Pourquoi était-ce si difficile à trouver? Pourquoi n'y a-t-il aucun article de blog à propos de cette fonctionnalité? Pourquoi les documents de MS sont-ils si courts sur les détails?