ฉันต้องการสร้างบันทึกที่ปลอดภัยผ่าน javascript และ webcrypto
ฉันพบความเป็นไปได้ในการสร้างคีย์ที่แข็งแกร่งผ่าน PBKDF2
และเข้ารหัสข้อมูลผ่าน เออีเอส
.
นี่คือตัวอย่างวิธีสร้างคีย์ผ่าน PBKDF2 ใน webcrypto ซึ่งจำเป็นต้องใช้เกลือ:
ฟังก์ชั่น getKey (keyMaterial, เกลือ) {
ส่งคืน window.crypto.subtle.deriveKey(
{
"ชื่อ": "PBKDF2",
เกลือ: เกลือ,
"การวนซ้ำ": 100,000,
"แฮช": "SHA-256"
},
วัสดุหลัก,
{ "ชื่อ": "AES-GCM", "ความยาว": 256},
จริง,
[ "เข้ารหัส", "ถอดรหัส" ]
);
}
https://github.com/mdn/dom-examples/blob/master/web-crypto/derive-key/pbkdf2.js#L37-L50
คีย์นี้ใช้สำหรับเข้ารหัสข้อมูล:
ให้ keyMaterial = รอ getKeyMaterial();
เกลือ = window.crypto.getRandomValues (ใหม่ Uint8Array (16));
ให้คีย์ = รอ getKey (keyMaterial, เกลือ);
iv = window.crypto.getRandomValues (ใหม่ Uint8Array (12));
ให้เข้ารหัส = getMessageEncoding();
ciphertext = กำลังรอ window.crypto.subtle.encrypt(
{
ชื่อ: "AES-GCM",
iv: iv
},
กุญแจ,
เข้ารหัส
);
ฉันต้องการข้อมูลนี้สำหรับการถอดรหัสในอนาคต ฉันต้องการส่งออกข้อมูลนี้จากเบราว์เซอร์และถอดรหัสข้อมูลนี้ในภายหลังด้วยรหัสผ่านที่ให้มา
ฉันต้องการมีรูปแบบ JSON ต่อไปนี้:
ข้อมูล: {
หมายเหตุ:[
{
เข้ารหัสหมายเหตุ: '..',
iv: '..',
}
]
เกลือ: '..'
}
ตอนนี้ฉันไม่แน่ใจว่าจะจัดเก็บเวกเตอร์เกลือและการเริ่มต้นอย่างปลอดภัยได้อย่างไร สามารถเก็บข้อมูลได้เหมือนด้านบนหรือไม่?