Score:4

สามารถใช้ลายเซ็นดิจิทัลเพื่อสร้างคีย์สำหรับการเข้ารหัส AES ได้หรือไม่

ธง gf
cjd

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

ในการไหลจะเป็นดังนี้:

ผู้ใช้ลงนามในข้อความ ด้วยรหัสส่วนตัวของพวกเขา พวกเขาลงชื่อแฮชของ แต่สิ่งนี้ได้รับการดูแลโดยเป็นส่วนหนึ่งของฟังก์ชันการสร้างลายเซ็นดิจิทัล ซึ่งจะส่งคืนลายเซ็นดิจิทัล .

ให้ ยังคงเป็นความลับอยู่ สรุปที่ปลอดภัยเพื่อใช้ในการสร้างคีย์ เค สำหรับเออีเอส

พวกเขาสำคัญ เค จะถูกสร้างขึ้นดังนี้:

const crypto = ต้องการ ('crypto');

crypto.scrypt(s, 'unique-salt', keyLength, (err, key) => {
    console.log(key.toString('เลขฐานสิบหก')); //12dd454fb...
});

โดยที่พารามิเตอร์ตัวแรกของฟังก์ชัน เป็นลายเซ็นดิจิทัลที่ผู้ใช้สร้างขึ้น

เอกสารประกอบสำหรับ Node crypto package ไม่ได้ระบุข้อกำหนดใดๆ สำหรับพารามิเตอร์นี้

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

ดังนั้นคำถามสองข้อคือ:

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

  2. ความปลอดภัยขึ้นอยู่กับข้อความหรือไม่ ที่ลงนาม? สิ่งนี้จำเป็นต้องเก็บเป็นความลับด้วยหรือไม่? ข้อสันนิษฐานของฉันคือไม่สำคัญว่าข้อความจะเป็นเช่นไร แม้ว่า Mallet จะรู้ข้อความนี้ พวกเขาก็ไม่สามารถสร้างลายเซ็นดิจิทัลที่ถูกต้องได้เนื่องจากไม่มีคีย์ส่วนตัว

ขอขอบคุณ

poncho avatar
my flag
คุณจะต้องแชร์คีย์ AES นั้นกับบุคคลที่ไม่รู้จักคีย์ส่วนตัวของลายเซ็นหรือไม่ (หรือระบบลายเซ็นไม่สามารถกำหนดได้ นั่นคือ ลายเซ็นที่สร้างขึ้นจะแตกต่างกันไปในแต่ละครั้งที่คุณสร้าง แม้กระทั่งสำหรับข้อความเดียวกัน) หากคุณทำเช่นนั้น และคุณมีการขนส่งที่ปลอดภัยที่เหมาะสม ทางเลือกอื่นเพียงแค่เลือกคีย์ AES แบบสุ่มทั้งหมดจะทำงานได้หรือไม่
Maarten Bodewes avatar
in flag
@poncho สำหรับ (EC)DSA ฉันเดาว่าคุณมี $r$ แบบสุ่มที่สามารถแชร์แบบสาธารณะได้ ในทำนองเดียวกัน คุณสามารถแบ่งปันเมล็ดพันธุ์หรือการสุ่มที่สร้างขึ้นสำหรับ RSA-PSS ซึ่งเป็นเกลือสำหรับ KDF ดังนั้นฉันจึงไม่แน่ใจว่าฟังก์ชันเชิงกำหนดเป็นข้อกำหนดหรือไม่ มีเพียงคุณเท่านั้นที่สามารถค้นหาการใช้งานที่ให้คุณใส่ค่าสุ่มได้
Maarten Bodewes avatar
in flag
ฉันคิดว่าคำถามมาจาก: สามารถใช้การสร้างลายเซ็นเป็นฟังก์ชันการสืบทอดคีย์ (KDF) ได้หรือไม่
poncho avatar
my flag
@MaartenBodewes: สำหรับ (EC)DSA การเผยแพร่ลายเซ็นที่แตกต่างกันสองรายการด้วย $r$ เดียวกันเป็นแนวคิดที่ **ไม่ดี** ฉันจะอยู่ห่างจากสิ่งนั้น ในทางกลับกัน มี (EC)DSA เวอร์ชันที่กำหนดขึ้นได้อย่างปลอดภัย
Maarten Bodewes avatar
in flag
@poncho ฉันไม่ได้แนะนำว่า ฉันกำลังบอกว่าคุณสามารถใช้ค่าสุ่มสำหรับการได้มาของลายเซ็น/คีย์เดียว แล้วใช้ $r$ (ขออภัย อาจเป็น $k$) เพื่อสร้างค่าเดียวกันโดยใช้คีย์ส่วนตัว *และข้อความเดียวกัน* เห็นได้ชัดว่าคุณควรเก็บมูลค่าของ $s$ ไว้เป็นความลับหากข้อความสามารถเปลี่ยนแปลงได้ (นั่นเป็นแนวคิดนี้มาตลอดหากฉันจำไม่ผิด) แต่เมื่อคุณมีคีย์สมมาตรแล้ว คุณสามารถใช้ค่า MAC เพื่อให้แน่ใจว่าทั้งสองฝ่ายมีคีย์เดียวกัน
cjd avatar
gf flag
cjd
@poncho ไม่เลย คนเดียวที่จะถอดรหัสข้อมูลได้จะเป็นผู้ใช้ที่เข้ารหัสและเป็นเจ้าของรหัสส่วนตัว ตกลงไหม?
cjd avatar
gf flag
cjd
@MaartenBodewes คีย์จะยังคงได้มาจากฟังก์ชัน scryprt แต่ลายเซ็นจะถูกใช้เป็นรหัสผ่านลับในการทั่วไปของคีย์
Maarten Bodewes avatar
in flag
ฉันเห็นว่าการทำงานของฟังก์ชันการสร้างลายเซ็น RSA โดยใช้การเติม PKCS#1 v1.5 ในตัวของมันเองไม่ได้หมายความว่าปลอดภัยแน่นอน ;) ข้อเสีย: หากคุณต้องการจดสิทธิบัตรโครงการของคุณ คุณช้าไป 20 ปีเป็นอย่างต่ำ...
Score:3
ธง in

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

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

อย่างไรก็ตาม หากคุณใช้ RSA เวอร์ชันที่กำหนดขึ้น (PKCS#1 v1.5 padding) หรือ ECDSA ที่กำหนดขึ้น คุณก็ไม่เป็นไร


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

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

หากคุณมีสิทธิ์เข้าถึงค่าคีย์ส่วนตัว คุณอาจใช้ KDF ได้เช่นกัน


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

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


บันทึกการใช้งานอื่น: ฟังก์ชันการสร้างลายเซ็นไม่ได้คาดหวังให้คุณเก็บความลับของลายเซ็น ตัวอย่างเช่น โมดูลฮาร์ดแวร์อาจสามารถเก็บคีย์สมมาตรที่ได้รับตามปกติไว้ใน HSM ในทางกลับกัน มันอาจส่งออกลายเซ็นโดยไม่ต้องยุ่งยากเหมือนค่าลายเซ็น ที่ควร ให้เป็นสาธารณะ

การโจมตีช่องทางด้านข้างในค่าลายเซ็นอาจเป็นไปได้เช่นกัน เป็นการยากที่จะบอกล่วงหน้า ดังนั้น แม้ว่าแผนการนี้ควรจะฟังดูดีในทางทฤษฎี แต่ก็ยังไม่ควรอย่างยิ่งที่จะทำเช่นนั้น เว้นแต่จะไม่มีวิธีอื่น

cjd avatar
gf flag
cjd
เป็นสิ่งที่ดี! ขอบคุณคำตอบโดยละเอียดจริงๆ ขอขอบคุณ.

โพสต์คำตอบ

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