Baseline Widely available
å®å ¨ãªã³ã³ããã¹ãç¨: ãã®æ©è½ã¯ä¸é¨ã¾ãã¯ãã¹ã¦ã®å¯¾å¿ãã¦ãããã©ã¦ã¶ã¼ã«ããã¦ãå®å ¨ãªã³ã³ããã¹ã (HTTPS) ã§ã®ã¿å©ç¨ã§ãã¾ãã
encrypt()
㯠SubtleCrypto
ã¤ã³ã¿ã¼ãã§ã¤ã¹ã®ã¡ã½ããã§ããã¼ã¿ãæå·åãã¾ãã
弿°ã¨ãã¦ãæå·åãã key ãã¢ã«ã´ãªãºã åºæã®å¼æ°ãæå·åãããã¼ã¿ï¼ãå¹³æãã¨ãå¼ã°ãã¾ãï¼ãåãã¾ãã æå·åããããã¼ã¿ï¼ãæå·æãã¨ãå¼ã°ãã¾ãï¼ã§å±¥è¡ããã Promise
ãè¿ãã¾ãã
encrypt(algorithm, key, data)
弿°
algorithm
使ç¨ããã¢ã«ã´ãªãºã ã¨ãå¿ è¦ã«å¿ãã¦è¿½å ã®å¼æ°ãæå®ãããªãã¸ã§ã¯ãã§ãã
RsaOaepParams
ãæ¸¡ãã¦ãã ãããAesCtrParams
ãæ¸¡ãã¦ãã ãããAesCbcParams
ãæ¸¡ãã¦ãã ãããAesGcmParams
ãæ¸¡ãã¦ãã ãããkey
æå·åã«ä½¿ç¨ãããã¼ãæ ¼ç´ãã CryptoKey
ã§ãã
data
ArrayBuffer
ãTypedArray
ãDataView
ã®ããããã§ãæå·åãããã¼ã¿ï¼å¹³æ ã¨ãå¼ã°ãã¾ãï¼ãæ ¼ç´ãã¾ãã
ãæå·æããæ ¼ç´ãã ArrayBuffer
ã§å±¥è¡ããã Promise
ã§ãã
以ä¸ã®ä¾å¤ãçºçããå ´åããããã¹ã¯æå¦ããã¾ãã
InvalidAccessError
DOMException
ãªã¯ã¨ã¹ããããå¦çãæå®ãããéµã«å¯¾ãã¦æå¹ã§ãªãå ´åã«çºçãã¾ãï¼ç¡å¹ãªæå·åã¢ã«ã´ãªãºã ãã¾ãã¯æå®ããæå·åã¢ã«ã´ãªãºã ã«å¯¾ãã¦ç¡å¹ãªéµãªã©ï¼ã
OperationError
DOMException
å¦çåºæã®çç±ã§å¦çã«å¤±æããå ´åã«çºçãã¾ãï¼ã¢ã«ã´ãªãºã 弿°ã䏿£ãªãµã¤ãºã§ãã£ããã AES-GCM ã®å¹³æã 239â256 ãã¤ããããé·ããªã©ï¼ã
ã¦ã§ãæå· API 㯠encrypt()
㨠decrypt()
ã®å¦çã«å¯¾å¿ãã 4 ã¤ã®ã¢ã«ã´ãªãºã ãæä¾ãã¾ãã
ãããã®ã¢ã«ã´ãªãºã ã® 1 ã¤ã§ãã RSA-OAEP ã¯å ¬é鵿å·ã·ã¹ãã ã§ãã
ããã«ããä»ã®3ã¤ã®æå·åã¢ã«ã´ãªãºã ã¯ãã¹ã¦å¯¾ç§°éµã¢ã«ã´ãªãºã ã§ããã¹ã¦åãåºç¤ã§ãã AES (Advanced Encryption Standard) ããã¼ã¹ã«ãã¦ãã¾ãã ãããã®éãã¯ã¢ã¼ãã§ãã ã¦ã§ãæå· API 㯠3 ã¤ã®ç°ãªã AES ã¢ã¼ãã«å¯¾å¿ãã¦ãã¾ãã
æå·æãæ»æè ã«ãã£ã¦å¤æ´ããã¦ããªããã¨ã調ã¹ãããã«ããèªè¨¼ãããæå·åãã使ç¨ãããã¨ãå¼·ãæ¨å¥¨ãã¾ãã èªè¨¼ã¯ãæ»æè ãã·ã¹ãã ã«ä»»æã®ã¡ãã»ã¼ã¸ã®å¾©å·ãä¾é ¼ãããã®çµæã使ç¨ãã¦ç§å¯éµã«é¢ããæ å ±ãæ¨æ¸¬ãããã¨ãã§ãããchosen-ciphertext æ»æããã®é²å¾¡ãæ¯æ´ãã¾ãã CTR ã¢ã¼ã㨠CBC ã¢ã¼ãã«èªè¨¼ã追å ãããã¨ã¯å¯è½ã§ãããæ¢å®å¤ã§ã¯æä¾ããã¦ããããæåã§å®è£ ããããã«äºç´°ãªããããé大ãªééããç¯ãå¯è½æ§ãããã¾ãã GCM ã¯çµã¿è¾¼ã¿ã®èªè¨¼ãæä¾ãããã®ããä»ã® 2 種é¡ã® AES ã¢ã¼ããããæ¨å¥¨ããããã¨ãå¤ãã§ãã
RSA-OAEPRSA-OAEP å ¬é鵿å·ã·ã¹ãã ã¯ã RFC 3447 ã§å®ç¾©ããã¦ãã¾ãã
AES-CTRãã㯠AES ã®ã«ã¦ã³ã¿ã¼ã¢ã¼ãã®è¡¨ç¾ã§ããã NIST SP800-38A ã§å®ç¾©ããã¦ãã¾ãã
AES ã¯ãããã¯æå·ã§ãããã¡ãã»ã¼ã¸ããããã¯ã«åå²ããä¸åº¦ã« 1 ãããã¯ãã¤æå·åãããã¨ãæå³ãã¦ãã¾ãã CTR ã¢ã¼ãã§ã¯ãã¡ãã»ã¼ã¸ã®ãããã¯ãæå·åããããã³ã«ããã¼ã¿ã®ä½åãªãããã¯ãæ··åããã¾ãããã®ä½åãªãããã¯ã¯ãã«ã¦ã³ã¿ã¼ãããã¯ãã¨å¼ã°ãã¾ãã
æå®ãããã«ã¦ã³ã¿ã¼ãããã¯ã®å¤ã¯ãåãéµã§è¤æ°å使ç¨ãã¦ã¯ããã¾ããã
é常ããã¯ãã«ã¦ã³ã¿ã¼ãããã¯ã®åæå¤ã 2 ã¤ã®é£çµé¨åã«åå²ãããã¨ã§å®ç¾ããã¾ãã
åºæ¬çã«ã¯ããã³ã¹ã¯ã«ã¦ã³ã¿ã¼ãããã¯ãä¸ã¤ã®ã¡ãã»ã¼ã¸ããæ¬¡ã®ã¡ãã»ã¼ã¸ã«åå©ç¨ãããªããã¨ãä¿è¨¼ããã«ã¦ã³ã¿ã¼ã¯ã«ã¦ã³ã¿ã¼ãããã¯ãåä¸ã®ã¡ãã»ã¼ã¸å ã§åå©ç¨ãããªããã¨ãä¿è¨¼ãã¾ãã
ã¡ã¢: 詳ãã㯠Appendix B of the NIST SP800-38A standard ãåç §ãã¦ãã ããã
AES-CBCãã㯠AES ã®æå·åãããã¯ãã§ã¼ã³ã¢ã¼ãã«ããã表ç¾ã§ããã NIST SP800-38A ã§å®ç¾©ããã¦ãã¾ãã
AES-GCMãã㯠AES ã® ã¬ãã¢/ã«ã¦ã³ã¿ã¼ã¢ã¼ãã«ããã表ç¾ã§ããã NIST SP800-38D ã§å®ç¾©ããã¦ãã¾ãã
ãã®ã¢ã¼ãã¨ä»ã®ã¢ã¼ãã¨ã®å¤§ããªéãã®ä¸ã¤ã¯ãGCM ããèªè¨¼ããããã¢ã¼ãã§ãããæå·æãæ»æè ã«ãã£ã¦å¤æ´ããã¦ããªããã¨ã®ãã§ãã¯ãå«ã¾ãã¦ãããã¨ãæå³ãã¦ãã¾ãã
ä¾ã¡ã¢: GitHub ã®åä½ä¾ã試ãã¦ã¿ããã¨ãã§ãã¾ãã
RSA-OAEPãã®ã³ã¼ãã¯ããã¹ãããã¯ã¹ã®ã³ã³ãã³ããèªã¿åããæå·åã®ããã«ã¨ã³ã³ã¼ãããRSA-OAEPã使ç¨ãã¦æå·åãã¾ãã GitHub ã§å®å ¨ãªã³ã¼ãã確èªãã¦ãã ããã
function getMessageEncoding() {
const messageBox = document.querySelector(".rsa-oaep #message");
let message = messageBox.value;
let enc = new TextEncoder();
return enc.encode(message);
}
function encryptMessage(publicKey) {
let encoded = getMessageEncoding();
return window.crypto.subtle.encrypt(
{
name: "RSA-OAEP",
},
publicKey,
encoded,
);
}
AES-CTR
ãã®ã³ã¼ãã¯ããã¹ãããã¯ã¹ã®ã³ã³ãã³ããèªã¿åããæå·åã®ããã«ã¨ã³ã³ã¼ããã CTR ã¢ã¼ãã§ AES ã使ç¨ãã¦æå·åãã¾ãã GitHub ã§å®å ¨ãªã³ã¼ãã確èªãã¦ãã ããã
function getMessageEncoding() {
const messageBox = document.querySelector(".aes-ctr #message");
let message = messageBox.value;
let enc = new TextEncoder();
return enc.encode(message);
}
function encryptMessage(key) {
let encoded = getMessageEncoding();
// counter will be needed for decryption
counter = window.crypto.getRandomValues(new Uint8Array(16));
return window.crypto.subtle.encrypt(
{
name: "AES-CTR",
counter,
length: 64,
},
key,
encoded,
);
}
let iv = window.crypto.getRandomValues(new Uint8Array(16));
let key = window.crypto.getRandomValues(new Uint8Array(16));
let data = new Uint8Array(12345);
// crypto functions are wrapped in promises so we have to use await and make sure the function that
// contains this code is an async function
// encrypt function wants a cryptokey object
const key_encoded = await crypto.subtle.importKey(
"raw",
key.buffer,
"AES-CTR",
false,
["encrypt", "decrypt"],
);
const encrypted_content = await window.crypto.subtle.encrypt(
{
name: "AES-CTR",
counter: iv,
length: 128,
},
key_encoded,
data,
);
// Uint8Array
console.log(encrypted_content);
AES-CBC
ãã®ã³ã¼ãã¯ããã¹ãããã¯ã¹ã®ã³ã³ãã³ããèªã¿åããæå·åã®ããã«ã¨ã³ã³ã¼ããã CBC ã¢ã¼ãã§ AES ã使ç¨ãã¦æå·åãã¾ãã GitHub ã§å®å ¨ãªã³ã¼ãã確èªãã¦ãã ããã
function getMessageEncoding() {
const messageBox = document.querySelector(".aes-cbc #message");
let message = messageBox.value;
let enc = new TextEncoder();
return enc.encode(message);
}
function encryptMessage(key) {
let encoded = getMessageEncoding();
// iv will be needed for decryption
iv = window.crypto.getRandomValues(new Uint8Array(16));
return window.crypto.subtle.encrypt(
{
name: "AES-CBC",
iv: iv,
},
key,
encoded,
);
}
AES-GCM
ãã®ã³ã¼ãã¯ããã¹ãããã¯ã¹ã®ã³ã³ãã³ããèªã¿åããæå·åã®ããã«ã¨ã³ã³ã¼ããã GCM ã¢ã¼ãã§ AES ã使ç¨ãã¦æå·åãã¾ãã GitHub ã§å®å ¨ãªã³ã¼ãã確èªãã¦ãã ããã
function getMessageEncoding() {
const messageBox = document.querySelector(".aes-gcm #message");
const message = messageBox.value;
const enc = new TextEncoder();
return enc.encode(message);
}
function encryptMessage(key) {
const encoded = getMessageEncoding();
// iv will be needed for decryption
const iv = window.crypto.getRandomValues(new Uint8Array(12));
return window.crypto.subtle.encrypt(
{ name: "AES-GCM", iv: iv },
key,
encoded,
);
}
仿§æ¸ ãã©ã¦ã¶ã¼ã®äºææ§ é¢é£æ
å ±
SubtleCrypto.decrypt()
.RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4