Score:1

คีย์ที่ใช้ในการเข้ารหัสถูกสร้างขึ้นอย่างไร?

ธง ng

ดูเหมือนว่ามีกุญแจอยู่ทุกที่ในการเข้ารหัส ตั้งแต่สิ่งต่างๆ เช่น HMAC ไปจนถึงการเข้ารหัส (ทั้งแบบอสมมาตรและสมมาตร)

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

วิธีการสร้างแตกต่างกันไปตามกรณีการใช้งานหรือไม่? ตัวอย่างเช่น วิธีการสร้างคีย์ที่ใช้ใน HMAC กับคีย์ที่ใช้เป็นส่วนหนึ่งของลายเซ็นแตกต่างกันหรือไม่

ฉันเจอคำศัพท์สองสามคำที่เกี่ยวข้องกับคีย์และตัวเลขสุ่ม เช่น PRNG, RNG, HKDF, VRF, PRPs, PRFs เป็นต้น

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

kelalaka avatar
in flag
คีย์เวิร์ดคือต้องเลือกใน 'Uniform Random' อนิจจากว้างเกินไปและไม่มีคำตอบง่ายๆ [มีปัญหาอะไรบ้างขณะใช้ /dev/urandom ของ Linux ในการสร้างคีย์การเข้ารหัส](https://crypto.stackexchange.com/q/85533/18298) ฉันขอแนะนำให้คุณค้นหาเว็บไซต์ของเราและตั้งสมาธิทีละรายการ
kelalaka avatar
in flag
ฉันค้นหา [การสร้างคีย์](https://crypto.stackexchange.com/search?q=key+generation) และพบผลลัพธ์ 1,551 รายการ
Score:4
ธง ng

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

ในระบบเข้ารหัสลับบางระบบ รวมถึงระบบสมมาตรส่วนใหญ่ ชุดของคีย์ที่ถูกต้องเป็นเพียงชุดของบิตสตริงที่มีขนาดเท่ากับคีย์ เช่น 192 บิตสำหรับ AES-192

สิ่งต่าง ๆ มีความซับซ้อนมากขึ้นในการเข้ารหัสแบบอสมมาตร เหตุผลหนึ่งคือมันสร้างคู่คีย์ซึ่งประกอบด้วยคีย์ลับส่วนตัวและคีย์สาธารณะที่ตรงกัน อีกเหตุผลหนึ่งก็คือ มักจะมีข้อจำกัดทางคณิตศาสตร์บางประการ ตัวอย่างเช่น ในกรณีค่อนข้างง่ายของ ECDSAคีย์ส่วนตัวที่ถูกต้องในจำนวนเต็ม $d$ อยู่ในช่วง $[1,n-1]$ ที่ไหน $n$ เป็นคำสั่งของเครื่องกำเนิดไฟฟ้า $G$ ของกลุ่มเส้นโค้งวงรี และคีย์สาธารณะที่ตรงกันจะได้รับเป็นจุดเส้นโค้งวงรี $Q:=d\,G$. สิ่งต่าง ๆ มีความซับซ้อนมากขึ้นสำหรับ RSA

เมื่อกำหนดโดเมนคีย์แล้ว ยังต้องอธิบายถึงวิธีการสร้างคีย์สุ่มแบบสม่ำเสมอ วิธีที่ง่ายที่สุดคือการโยนเหรียญอย่างยุติธรรม ทำซ้ำเท่าที่จำเป็น (เช่น 192 ครั้งสำหรับ AES-192) หากเราต้องสร้างจำนวนเต็มในช่วง $[ก,ข]$มีหลายวิธีในการทำเช่นนี้ตั้งแต่การโยนเหรียญอย่างยุติธรรม วิธีที่ง่ายที่สุดคือการสร้าง $\left\lceil\log_2(b-a+1)\right\rceil$ บิตโดยการโยนเหรียญยุติธรรม รวบรวมบิตเป็นจำนวนเต็ม $x$ ตามการประชุมไบนารีของ big-endian คำนวณ $y=a+x$ให้ใช้สิ่งนั้นถ้า $y\le ข$มิฉะนั้นให้ทำซ้ำขั้นตอน

วิธีนี้ทำให้เป็นอัตโนมัติได้โดยใช้ตัวสร้างตัวเลขสุ่มที่รัดกุมในการเข้ารหัส เช่น /dev/urandom ในรสชาติยูนิกซ์ส่วนใหญ่

มีสิ่งทดแทนที่ใช้ฟังก์ชันการหาค่าคีย์แทน เพื่อคำนวณคีย์จากคีย์อื่น หรือบางครั้งจากวลีรหัสผ่านที่น่าจดจำ

Score:1

ฉันรู้ว่าพวกเขาต้องสุ่ม

ชนิดของ แม่นยำยิ่งขึ้น พวกเขาต้องเป็น แยกไม่ออกจากการสุ่ม.

เป้าหมายในการเลือกคีย์คือฝ่ายตรงข้าม ("ตัวร้าย") จะไม่สามารถหาคีย์ได้ เนื่องจากฝ่ายตรงข้ามอาจรู้ว่าระบบของเราทำงานอย่างไร (หลักการของเคิร์กฮอฟฟ์) เราต้องหาวิธีสร้างคีย์ที่ไม่ได้ขึ้นอยู่กับการคำนวณเชิงกำหนดเท่านั้น (ซึ่งฝ่ายตรงข้ามสามารถทำซ้ำได้) ดังนั้นกุญแจทั้งหมดต้องขึ้นอยู่กับบางสิ่งที่ฝ่ายตรงข้ามไม่รู้ สิ่งนี้เรียกว่าค่าสุ่ม âจริงâ

สามารถสร้างค่าสุ่มได้โดยใช้กระบวนการทางกายภาพที่คาดเดาไม่ได้ต่างๆ อุปกรณ์ที่ใช้กระบวนการดังกล่าวเรียกว่า ฮาร์ดแวร์หรือตัวสร้างตัวเลขสุ่ม âtrueâ (HRNG หรือ TRNG). สมาร์ทโฟนและพีซีสมัยใหม่เกือบทุกชนิด และอุปกรณ์ฝังตัวที่เพิ่มจำนวนขึ้น รวมถึง HRNG

เมื่อระบบได้รับ 'seeded' ด้วยค่าสุ่มจริงแล้ว ระบบจะสามารถใช้การคำนวณเชิงกำหนดที่เรียกว่า ตัวสร้างสุ่มหลอกที่ปลอดภัยแบบเข้ารหัส (CSPRNG) (เรียกสั้น ๆ ว่าตัวสร้างสุ่มเทียม) เพื่อสร้างกระแสค่าสุ่มที่ไม่มีที่สิ้นสุดในทางปฏิบัติ ค่าเหล่านี้เป็นค่าสุ่มในแง่ที่ว่าศัตรูที่มีพลังการประมวลผลจำกัดไม่สามารถแยกค่าเหล่านี้ออกจากค่าสุ่ม "จริง" ในบริบทการเข้ารหัส ตัวสร้างแบบสุ่ม (RNG) คือ CSPRNG ที่เพาะโดย HRNG

นั่นคือคุณสมบัติทั้งหมดที่จำเป็นหรือไม่?

แต่ละคีย์ต้องแยกไม่ออกจากการสุ่ม จากมุมมองของผู้ที่อาจเป็นปฏิปักษ์ นี่อาจหมายความว่าคีย์ถูกสร้างขึ้นแบบสุ่ม (ตามที่อธิบายไว้ด้านบน) แต่ไม่ใช่ว่าคีย์ทั้งหมดจะถูกสร้างขึ้นแบบสุ่ม: บางคีย์จะถูกคำนวณตามระดับที่กำหนดจากส่วนผสมของคีย์และอินพุตอื่นๆ กระบวนการดังกล่าวเรียกว่า ที่มาของคีย์. HKDF เป็นตัวอย่างของฟังก์ชันการได้มาของคีย์ ฟังก์ชันสุ่มเทียม (PRF) สามารถเป็นแบบเอกสารสำเร็จรูปสำหรับ KDF ตัวอย่างเช่น เมื่อคอมพิวเตอร์สองเครื่องสื่อสารผ่านช่องสัญญาณที่เข้ารหัส โดยทั่วไปแล้วจะได้รับคีย์เดียวกันจากความลับที่ใช้ร่วมกัน

“การสุ่ม” สำหรับคีย์ หมายถึงใกล้เคียงที่สุดเท่าที่จะเป็นไปได้ในการสุ่มแบบสม่ำเสมอระหว่างชุดคีย์ที่เป็นไปได้ ความหมายนี้ขึ้นอยู่กับประเภทของคีย์

โดยทั่วไป การเข้ารหัสแบบสมมาตรจะใช้คีย์ที่เป็นเพียงอาร์เรย์ของไบต์ และทำให้เกิด $n$คีย์ -bit หมายถึงการสร้าง $n$ บิตสุ่มและเรียกสิ่งนั้นว่าคีย์ สิ่งนี้เป็นจริง ตัวอย่างเช่น ของรหัสบล็อกเช่น AES และ Camellia ของรหัสสตรีม เช่น Chacha20 ของอัลกอริทึม MAC เช่น HMAC และ Poly1305 เป็นต้น

การเข้ารหัสแบบอสมมาตรแบบคลาสสิกใช้คีย์ที่เป็นตัวเลขที่มีคุณสมบัติบางอย่าง ดังนั้นการสร้างคีย์ดังกล่าวจึงต้องมีการคำนวณเพิ่มเติม วิธีทั่วไปในการสร้างคีย์ที่สามารถแสดงโดย $n$สตริงบิตคือการสร้าง $n$ บิตสุ่ม ตรวจสอบว่านี่แสดงถึงคีย์ที่ถูกต้องหรือไม่ และถ้าไม่ลองอีกครั้ง (ซึ่งถือว่าการแทนค่านั้นไม่ซ้ำกัน นั่นคือไม่มีคีย์ที่เหมือนกันสองคีย์ที่มีการแทนค่าแบบเดียวกัน) วิธีการนี้ใช้ได้ดีกับแบบทั่วไป อี.ซี.ซี คีย์ โดยที่คีย์ส่วนตัวคือตัวเลขระหว่าง $1$ และ $2^n - a$ กับ $a \ll 2^n$ดังนั้นจึงทำงานได้ดีในการสร้างการสุ่ม $n$บิตสตริงและตีความเป็นตัวเลขระหว่าง $0$ และ $2^n-1$ และลองอีกครั้งหากคุณพบหนึ่งในค่าที่ไม่ถูกต้อง cryptosystems อื่น ๆ เช่น อาร์.เอส.เอซึ่งเกี่ยวข้องกับกระบวนการสร้างคีย์ที่ซับซ้อนกว่ามาก แต่ถึงอย่างนั้น ก็ยังใช้ “สร้างสตริงบิตแบบสุ่ม” และ “ลองอีกครั้งหากค่าไม่เหมาะสม” เป็นส่วนประกอบ

Score:-2
ธง cn

ดูเหมือนว่ามีกุญแจอยู่ทุกที่ในการเข้ารหัส

และดูเหมือนว่า ฉันมีจำนวนมากจนต้องวางไว้บน Post-it ติดอยู่กับจอภาพของฉัน

แต่ถ้าคุณต้องการมากกว่าที่จะทำได้โดยการโยนเหรียญ มีเครื่องที่สามารถทำได้ มีหลายอย่างเช่น นี้, นี้ และ นี้. พวกเขาพ่นโฆษณาที่ไม่มีที่สิ้นสุดแบบสุ่ม

ทำไมคุณถึงต้องการกุญแจมากมาย? คำถามที่ดี. และมีเหตุ ๓ ประการ คือ:-

  1. เห็นได้ชัดว่าหากคุณต้องเข้าใช้บริการหลายรายการ คุณจะต้องใช้รหัสผ่าน/คีย์หลายตัว ผู้เชี่ยวชาญด้านไอทีมักมีรหัสผ่าน/คีย์เป็น 100 รหัส โดยทั่วไป คุณจะเลือกรหัสผ่านจากประสบการณ์ชีวิตของคุณ ดังนั้นชื่ออีกัวน่าของฉันจึงมีอยู่ในส่วนใหญ่ (Trevor) สเปรดชีตมีประโยชน์ในการจัดการสิ่งนี้

  2. คุณไม่ไว้วางใจรัฐบาลว่าการเข้ารหัสแบบธรรมดาไม่ได้ถูกทำลาย เวลาพหุนาม. คุณอาจต้องการหมุนกุญแจทุกๆ 15 นาที นั่นเป็นเอนโทรปีเพียง ~ 0.1 บิต / วินาทีเท่านั้นซึ่งสร้างได้ง่ายด้วยทรัพยากรเพียงเล็กน้อย

  3. คุณไม่ไว้วางใจรัฐบาลว่าการเข้ารหัสแบบธรรมดาไม่ได้ถูกทำลาย เวลาพหุนาม. ดังนั้น (เช่นเดียวกับบริการทางการทูต [ทำไม?]) ที่คุณใช้ แผ่นครั้งเดียวส. ซึ่งต้องใช้สัญลักษณ์คีย์แบบสุ่มอย่างแท้จริงสำหรับทุกสัญลักษณ์ข้อความธรรมดาที่คุณส่ง สถิตินี้ไม่แตกต่างจากจุดที่ 2

พวกเขาเป็นมากกว่าแค่ตัวเลขสุ่ม?

ไม่ พวกมันเป็นเพียงตัวเลขสุ่มที่มีการแจกแจงแบบสม่ำเสมอ แต่มีแนวคิดของ ความซับซ้อนของ Kolgomorov. นั่นหมายถึงแหล่งที่มาของตัวเลขไม่ได้ถูกกำหนดขึ้น เป็นเอกลักษณ์สากล อีกครั้ง สำเร็จได้ง่าย แต่ต้องใช้ความคิดบางอย่าง \dev\urandom เป็นตัวกำหนดดังนั้นจึงไม่สามารถใช้กับจุดที่ 3 ได้


นอกจากนี้ยังเห็น การกระจายคีย์ควอนตัม ซึ่งอำนวยความสะดวกในการแลกเปลี่ยนคีย์อย่างปลอดภัยระหว่างหลายฝ่าย

โพสต์คำตอบ

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