Score:1

ตำแหน่งที่จะเก็บเกลือสำหรับ PBKDF2 และเวกเตอร์การเริ่มต้นสำหรับ AES ผ่าน WebCrypto

ธง in

ฉันต้องการสร้างบันทึกที่ปลอดภัยผ่าน 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: '..',
        }
        ]
  เกลือ: '..'
}

ตอนนี้ฉันไม่แน่ใจว่าจะจัดเก็บเวกเตอร์เกลือและการเริ่มต้นอย่างปลอดภัยได้อย่างไร สามารถเก็บข้อมูลได้เหมือนด้านบนหรือไม่?

Score:1
ธง in

แน่นอนว่าเกลือและ IV สามารถจัดเก็บเป็นข้อความธรรมดาได้

โปรดทราบว่าบางครั้ง IV เป็นแบบคงที่หรือคำนวณจาก PBKDF2 (หากคีย์ + IV ไม่เกินขนาดเอาต์พุตแฮช) รหัสจะไม่ซ้ำกันสำหรับชุดค่าเกลือ + รหัสผ่านแต่ละชุด อย่างไรก็ตาม ดูเหมือนว่าคุณต้องการเก็บบันทึกหลายรายการโดยใช้รหัสผ่าน/คีย์เดียว ดังนั้นในกรณีนี้ IV แยกต่างหากจึงเหมาะสม

ฉันจะเพิ่มหมายเลขเวอร์ชันในโปรโตคอลของคุณและตรวจสอบให้แน่ใจว่าสามารถปรับจำนวนการวนซ้ำได้โดยส่วนตัวแล้ว ฉันจะคำนวณค่าตรวจสอบคีย์เพื่อตรวจสอบความถูกต้องของรหัสผ่านด้วย มิฉะนั้น คุณจะต้องถอดรหัสโน้ตเพื่อตรวจสอบว่ารหัสผ่านถูกต้องหรือไม่

ระวังว่าข้อความสามารถถูกลบหรือจัดเรียงใหม่ได้แม้จากบล็อกข้อมูลหลายบล็อก (สมมติว่าใช้รหัสผ่านเดียวกัน) ในรูปแบบปัจจุบันของคุณ การเข้ารหัสจะปกป้องเฉพาะข้อความแต่ละข้อความเท่านั้น


โดยส่วนตัวแล้วฉันต้องการการเข้ารหัสแบบอสมมาตรสำหรับโปรโตคอลเช่นนี้ แต่ฉันไม่รู้ว่าเป็นไปได้หรือไม่ในบริบทของคุณ การเข้ารหัสด้วยรหัสผ่านไม่ใช่รูปแบบการป้องกันที่แข็งแกร่งที่สุด

knaccc avatar
es flag
คุณช่วยอธิบายข้อดีของการเข้ารหัสแบบอสมมาตรสำหรับกรณีการใช้งานนี้ได้ไหม

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา