Score:1

วิธีเขียน (H)KDF การเข้ารหัส และ (H)MAC

ธง mk

ด้วยเหตุผลด้านระบบเดิม ระบบของฉันไม่มีตัวเลือกในการใช้โหมด AEAD เราจึงถูกจำกัดไว้ที่ AES ในโหมด CBC หรือ CTR ธรรมดา บวกกับ MAC

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

  • CSPRNG เพื่อสร้างความลับของบูตสแตรป
  • KDF เพื่อรับคีย์สำหรับการเข้ารหัสและ MAC - ฉันใช้ HKDF
  • CSPRNG อีกครั้งได้รับ iv
  • โหมด CTR เพื่อเข้ารหัสข้อมูล
  • MAC ผ่าน bootstrap secret, iv, cipherspec และ ciphertext - ฉันใช้ HMAC

ดังนั้นฉันจึงทำการเข้ารหัสจากนั้นใช้ MAC และฉันกำลังตรวจสอบอินพุตทั้งหมดเพื่อคำนวณไซเฟอร์เท็กซ์ แต่ฉันคิดว่าองค์ประกอบนี้ปลอดภัย ฉันไม่เคยเห็นองค์ประกอบเต็มรูปแบบนี้จริง ๆ รวมถึง KDF ที่อธิบายว่าเป็นแบบดั้งเดิมที่ใช้ซ้ำได้

TLS ทำสิ่งที่คล้ายกันมาก แต่ก็ไม่เหมือนกันเสียทีเดียว (เช่น ใช้ HKDF ต่างกัน)

แบบแผน IES เช่น ECIES และ DLIES ดูมีแนวคิดคล้ายกัน แต่แตกต่างกันในรายละเอียด โดยเฉพาะอย่างยิ่งในวิธีการรับอินพุตไปยัง KDF

ดังนั้นคำถามของฉันคือ: ปัญหานี้ไม่ทั่วถึงพอที่จะรับประกันวิธีแก้ปัญหาตำราอาหารหรือไม่? หรืออาจจะมีบางอย่างที่ฉันมองข้ามไป? มิฉะนั้น ฉันจะมั่นใจในวิธีแก้ปัญหาได้อย่างไร (เมื่อพูดถึง crypto ฉันมักจะระมัดระวังอยู่เสมอ)

ในกรณีที่รายละเอียดมีประโยชน์ โฟลว์คือ:

โหนดส่งดำเนินการต่อไปนี้:

  1. รับ 256 บิตลับ เมล็ดพันธุ์ จาก CSPRNG
  2. เข้ารหัส เมล็ดพันธุ์ สำหรับโหนดอื่นโดยใช้รหัสสาธารณะเป็น encrypted_seed
  3. แยก เมล็ดพันธุ์ เป็น 128 บิต เกลือ และ 128 บิต คีย์_วัสดุ
  4. รับ 384 บิตลับโดยการโทร HKDF-HMAC-SHA-256(ความยาว=384b, ikm=key_material, เกลือ=เกลือ, ข้อมูล=<รหัสโหนดต้นทาง || รหัสโหนดปลายทาง>)
  5. แยกออกเป็น 128 บิต encryption_key, 256 บิต HMAC_key

สำหรับแต่ละข้อความที่จะส่ง:

  1. รับ 128 บิตจาก CSPRNG เป็น encryption_iv
  2. เข้ารหัสข้อความธรรมดาโดยใช้ AES-128-CTR(iv=encryption_iv, key=encryption_key)
  3. คำนวณแท็กเป็น HMAC-SHA-256(key=HMAC_key, data=encrypted_seed || encryption_iv || cipherspec=AES-128-CTR || ciphertext)
  4. ส่งไปยังโหนดอื่น: encrypted_seed || encryption_iv || ไซเฟอร์สเปค || ไซเฟอร์เท็กซ์ || แท็ก

โหนดรับดำเนินการต่อไปนี้:

  1. แยกข้อความที่ได้รับออกเป็นส่วนประกอบ encrypted_seed เป็นต้น
  2. ถอดรหัส encrypted_seed โดยใช้ไพรเวตคีย์ของโหนดรับ เมล็ดพันธุ์
  3. แยก เมล็ดพันธุ์ เป็น 128 บิต เกลือ และ 128 บิต คีย์_วัสดุ
  4. รับ 384 บิตลับโดยการโทร HKDF-HMAC-SHA-256(ความยาว=384b, ikm=key_material, เกลือ=เกลือ, ข้อมูล=<รหัสโหนดต้นทาง || รหัสโหนดปลายทาง>)
  5. แยกออกเป็น 128 บิต encryption_key, 256 บิต HMAC_key
  6. คำนวณแท็กเป็น HMAC-SHA-256(key=HMAC_key, data=<ข้อความที่ได้รับจากการส่งโหนดโดยไม่มีแท็ก>)
  7. กำหนด tag_valid := จริง หากแท็กตรงกับข้อความที่ได้รับ เท็จ มิฉะนั้น
  8. กำหนด k := encryption_key ถ้า tag_validมิฉะนั้นมอบหมาย k := <ค่าคงที่สุ่มบางตัว>
  9. ถอดรหัสข้อความเข้ารหัสเป็น [cipherspec](iv=encryption_iv, คีย์=k)
  10. ส่งออกทูเพิล (tag_valid, ข้อความธรรมดา) - ผู้โทรมีหน้าที่ตรวจสอบ tag_valid ก่อนใช้ข้อความธรรมดา

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

kelalaka avatar
in flag
หากคุณมีระบบคีย์สาธารณะที่เชื่อถือได้ ทำไมคุณไม่สร้างเนื้อหาคีย์สุ่มแบบเดียวกัน 512 บิตและใช้ AES-256 256 บิตและ 256 บิตสำหรับ HMAC และส่งผ่านกลไกคีย์สาธารณะเพื่อลดความซับซ้อนของโปรโตคอล
eddydee123 avatar
mk flag
แน่นอนฉันทำให้สถานการณ์จริงง่ายขึ้น - ในความเป็นจริงมีกุญแจเพิ่มเติมสำหรับวัตถุประสงค์อื่นที่ต้องส่ง นั่นเป็นเหตุผลที่ฉันส่งเมล็ด KDF แทนคีย์เอง คำถามของฉันพยายามที่จะสรุปองค์ประกอบทั่วไปของ KDF+Enc+MAC
kelalaka avatar
in flag
ในกรณีนี้ คุณอาจต้องการ DRBG เพื่อให้การประนีประนอมในสถานะปัจจุบันไม่รั่วไหลในขั้นตอนก่อนและหลัง
eddydee123 avatar
mk flag
@kelalaka ฉันสับสน - คุณหมายถึง DRBG แทนที่จะเป็น HKDF หรือไม่ ฉันไม่ปฏิบัติตามเหตุผล
kelalaka avatar
in flag
ไม่แน่นอน ขึ้นอยู่กับกรณีการใช้เมล็ดพันธุ์ของคุณ คุณอาจจำเป็นต้องเรียกมันว่าไม่ประนีประนอมอะไรเลย $seed_1 = DRGB(seed_0),HKDF(seed_1), seed_2 = DRGB(seed_1),HKDF(seed_2), ...)$

โพสต์คำตอบ

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