CryptoKey: extractable ããããã£
Baseline
åºãå©ç¨å¯è½
ãã®æ©è½ã¯åºãå®è£ ããã¦ãããå¤ãã®ãã¼ã¸ã§ã³ã®ç«¯æ«ããã©ã¦ã¶ã¼ã§åä½ãã¾ãã2015å¹´7æä»¥éããã¹ã¦ã®ãã©ã¦ã¶ã¼ã§å©ç¨å¯è½ã§ãã
å®å ¨ãªã³ã³ããã¹ãç¨: ãã®æ©è½ã¯ä¸é¨ã¾ãã¯ãã¹ã¦ã®å¯¾å¿ãã¦ãããã©ã¦ã¶ã¼ã«ããã¦ãå®å ¨ãªã³ã³ããã¹ã (HTTPS) ã§ã®ã¿å©ç¨ã§ãã¾ãã
extractable 㯠CryptoKey ã¤ã³ã¿ã¼ãã§ã¤ã¹ã®èªã¿åãå°ç¨ããããã£ã§ãSubtleCrypto.exportKey() ã¾ã㯠SubtleCrypto.wrapKey() ã使ç¨ãã¦ãã¼ãæ½åºã§ãããã©ããã示ãã¾ãã
ãã¼ãã¨ã¯ã¹ãã¼ãã§ããªãå ´åã¯ã exportKey() ã wrapKey() ã§ã¯æ½åºãããã¨ãã¦ä¾å¤ãçºçãã¾ãã
å¤
è«çå¤ã§ããã¼ãã¨ã¯ã¹ãã¼ãå¯è½ã§ããã° trueãä¸å¯è½ã§ããã° false ã¨ãªãã¾ãã
ä¾
ãã®ä¾ã§ã¯ããã¼ãã¨ã¯ã¹ãã¼ãã§ããªãå ´åããã¨ã¯ã¹ãã¼ãããã¿ã³ã¯ç¡å¹ã«ãªããå¾ ã¡åããããªã¹ãã¼ã追å ããã¾ããã
// æå®ããããã¼ãã¨ã¯ã¹ãã¼ããã"exported-key" 空éã«æ¸ãè¾¼ã¿ã¾ãã
async function exportCryptoKey(key) {
const exported = await window.crypto.subtle.exportKey("raw", key);
const exportedKeyBuffer = new Uint8Array(exported);
const exportKeyOutput = document.querySelector(".exported-key");
exportKeyOutput.textContent = `[${exportedKeyBuffer}]`;
}
// ãã¼ãæ½åºå¯è½ãã©ããã«ãã£ã¦ãexportButton ãæå¹ã¾ãã¯ç¡å¹ã«ãã¾ãã
function setExportButton(key) {
const exportButton = document.querySelector(".raw");
// ãã¼ãæ½åºã§ããªãå ´åã¯ããã¿ã³ãç¡å¹ã«ãã
exportButton.disabled = !key.extractable;
if (key.extractable) {
// ã¤ãã³ããªã¹ãã¼ã追å ãã¦ãã¼ãæ½åºãã
exportButton.addEventListener("click", () => {
exportCryptoKey(key);
});
}
}
// æå·å/復å·ããç§å¯éµãçæããã
// 次ã«ããã¨ã¯ã¹ãã¼ãããã¿ã³ã§ã¤ãã³ããªã¹ãã¼ãæå¹ã«ããè¨å®ããã
window.crypto.subtle
.generateKey(
{
name: "AES-GCM",
length: 256,
},
true,
["encrypt", "decrypt"],
)
.then(setExportButton(key));
仿§æ¸
| 仿§æ¸ |
|---|
| Web Cryptography Level 2 > # dom-cryptokey-extractable > |