Score:0

อัลกอริทึมการเข้ารหัสแบบอสมมาตร (เช่น RSA) ไม่เพียงพอสำหรับความต้องการขั้นพื้นฐานทั้งหมดหรือไม่ เมื่อความเร็วไม่เกี่ยวข้อง

ธง br

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

การคาดเดา/คำถามของฉัน: ส่วนที่น่าสนใจเกิดขึ้นเมื่อฉันตระหนักว่ามีการเข้ารหัสแบบอสมมาตรเพียงอันเดียว (บล็อกหรือสตรีม) เรียกมันว่า $X$เพียงพอสำหรับความต้องการการเข้ารหัสขั้นพื้นฐานทั้งหมดกล่าวอีกนัยหนึ่ง หมวดหมู่การเข้ารหัสพื้นฐานอื่นๆ ทั้งหมด (การเข้ารหัสประเภทอื่นๆ ฟังก์ชันแฮช และลายเซ็น ไม่ใช่อื่นๆ) สามารถลดลงเป็นอัลกอริทึมนี้ คุณสามารถสร้างอัลกอริทึมการแฮชโดยใช้เท่านั้น $X$และอัลกอริทึมการเซ็นชื่อโดยใช้เท่านั้น $X$. นี่หมายความว่าการรวมอัลกอริธึมเช่น RSA+ChaCha+Poly1305 หรืออะไรก็ตามที่ไม่ล้าสมัยเมื่อความเร็วไม่เกี่ยวข้อง ฉันไม่ได้ตั้งเป้าหมายสูงไปกว่าการสื่อสารทางอินเทอร์เน็ต FHE และสิ่งที่คล้ายกันอยู่นอกขอบเขต ถ้าอย่างนั้นแค่ปฏิบัติอย่างเดียวไม่พอหรือ $X$ เมื่อเวลาและความเร็วไม่สัมพันธ์กัน? เหตุใดผู้คนจึงคิดค้นอัลกอริทึมเหล่านี้ นอกเหนือไปจากเหตุผลด้านความเร็ว

หลักฐานของฉัน:

เปลี่ยนรหัสสตรีมเป็นรหัสบล็อก:

เพียงประมวลผลสตรีมที่มีความยาวคงที่ด้วยรหัสสตรีมและเรียกมันว่ารหัสบล็อก

การเปลี่ยนรหัสลับบล็อกที่กระทำกับชุดของขนาดตามอำเภอใจเป็นรหัสบล็อกที่กระทำกับชุดของขนาดกำลังของ $2$.

อนุญาต $A$ เป็นตัวตั้ง $\{1,\จุด,N\}$. อนุญาต $X$ เป็นรหัสบล็อกที่มีสองฟังก์ชัน $E$ และ $D$ (ฟังก์ชันการเข้ารหัสและถอดรหัส) ที่แมปองค์ประกอบจาก $A$ ถึง $A$. อนุญาต $2^k$ เป็นพลังอันยิ่งใหญ่ของ $2$ น้อยกว่าหรือเท่ากับ $N$. อนุญาต $B$ เป็นตัวตั้ง $\{1,\dots,2^k\}$. อนุญาต $x$ เป็นตัวเลขจาก $A$. ลำดับ $x,E(x),E(E(x)),...$ จะถือว่าสุ่มและกระจายอย่างสม่ำเสมอในชุด $A$ (ยังเป็นวัฏจักรที่ยาวนานเนื่องจากเป็นรหัสที่ไม่สมมาตร) ซึ่งให้ตัวเลขนั้นมาจาก $B$ เกิดขึ้นโดยเฉลี่ยทุกครั้ง $\frac{|B|}{|A|}$ องค์ประกอบ เราสามารถนำเหตุการณ์ที่เกิดขึ้นครั้งแรกเป็นภาพของฟังก์ชันใหม่ได้ $E'$ ที่ตอนนี้แผนที่จาก $B$ ถึง $B$. กำหนด $D'$ ที่จะตรงกันข้ามกับ $E'$. คู่ $(อี',ด')$ เป็นรหัสบล็อกใหม่ที่ทำหน้าที่ชุดของขนาด $2^k$กล่าวอีกนัยหนึ่งบนบล็อกของ $k$ บิต มันปลอดภัยพอๆ $X$ เพราะหากเราสามารถถอดรหัสรหัสลับนี้ได้ ก็หมายความว่าเราสามารถค้นหาผลลัพธ์ของรหัสเดิมที่ใช้ไม่กี่ครั้ง พูด $m$ ครั้ง.จากนั้นเราก็สามารถนำรหัสกลับมาใช้ใหม่ได้ $m-1$ หลายครั้งในข้อความที่เข้ารหัส จากนั้นใช้แคร็กนี้เพื่อเลิกทำ $m$ ครั้ง. เนื่องจาก $m$ คาดว่าจะน้อยกว่า $k$สิ่งนี้เป็นไปได้

การเปลี่ยนรหัสขนาดบล็อก $2^k$ เป็นรหัสสตรีม

สมมติว่า $k$ เท่ากัน (อธิบายแนวคิดได้ง่ายกว่า) ในทางเทคนิคแล้ว ฉันแค่เข้ารหัสและถอดรหัสข้อความที่มีขนาดตามอำเภอใจเท่านั้น ซึ่งไม่ใช่รหัสสตรีม ประการแรก ขยายข้อความให้มีความยาวหลายเท่าของ $\frac{k}{2}$. คิดว่าข้อความนี้เป็นลำดับของบล็อกที่มีขนาด $\frac{k}{2}$. เราสามารถเข้ารหัสคู่ของบล็อกเหล่านี้แบบแทนที่: บล็อกแรกและบล็อกที่สองรวมกัน จากนั้นบล็อกที่สองและสาม และอื่น ๆ... จนจบ จนถึงตอนนี้ สิ่งนี้คล้ายกับรหัสสตรีม เราสามารถเลือกเพิ่มจุดเริ่มต้นแบบสุ่มให้กับข้อความได้หากเดิมทีข้อความนั้นสั้นเกินไป เรายังสามารถเลือกย้อนกลับลำดับของบล็อกเหล่านี้และใช้ลำดับการเข้ารหัสเดียวกันได้ ตอนนี้ เราสามารถถอดรหัสข้อความทั้งหมดหรือไม่ก็ได้: หากเราสูญเสียส่วนหนึ่งของข้อความ เราจะไม่สามารถถอดรหัสอะไรได้อีก เช่นเดียวกับการเข้ารหัสบล็อกเริ่มต้นที่มีไว้เพื่อให้ทำงาน วิธีนี้ปลอดภัยพอๆ กับการเข้ารหัสบล็อกดั้งเดิม เพราะหากเราสามารถถอดรหัสข้อความทั้งหมดได้ เราจะเรียกใช้การเข้ารหัสซ้ำและสร้างผลิตภัณฑ์ระหว่างกันทั้งหมดได้ รวมถึงการถอดรหัสของ 2 บล็อกล่าสุดที่ตัวเข้ารหัสเข้ารหัสไว้

เปลี่ยนรหัสบล็อกให้เป็นฟังก์ชันแฮช

ฉันแก้ไขส่วนนี้เนื่องจากความคิดแรกผิด ...
สร้างคู่คีย์สองคู่แล้วโยนคีย์ส่วนตัวทิ้งไป และฮาร์ดโค้ดคีย์สาธารณะในอัลกอริทึม เช่นเดียวกับ int ส่วนก่อนหน้า เตรียมบล็อก ตอนนี้เข้ารหัสแรก $k$ บิตเข้าที่ก่อนด้วยคีย์เดียว จากนั้นลบด้วยอีกคีย์หนึ่ง $l<<k$, $l|k$ "สุ่ม" (หลอกสุ่มเพาะโดยแฮชง่ายๆของข้อความ) บิตจากสิ่งนี้สร้างขึ้น $k$ บิตและเชื่อมต่อส่วนที่เหลือของบิต ทำไปเรื่อยๆจนกว่าจะมีเท่านั้น $k$ เหลือบิตแล้วเรียกมันว่าแฮชที่แข็งแกร่งสิ่งนี้ปลอดภัยพอๆ กับรหัส เพราะหากเราสมมติว่าเราพบข้อความอื่นที่มีเอาต์พุตเดียวกัน ในขณะที่เรากำลังทำการปรับปรุงใหม่ทั้งสองรายการพร้อมกัน ในช่วงเวลาหนึ่ง เราจะสร้างข้อมูลเดียวกัน $k-l$ บิต (หลังจากลบไฟล์สุ่ม $l$ บิต) นี่คือสาเหตุที่มันยาก: นั่นคือ $k-l$ สามารถเติมบิตได้ $k$ บิตในมากที่สุด $2^l\binom{k}{l}$ (ซึ่งเราจะมัดได้จำนวนน้อย) แล้วส่วนใหญ่จะผลิตไม่เหมือนกัน $k-l$ บิตที่ช่วยในการ จำกัด แม้ว่าเราจะสามารถถอดรหัสชุดค่าผสมอื่นได้ $k$ บิต (ซึ่งอาจเป็นไปได้เพราะมีลักษณะคล้ายกับต้นฉบับ $k$ บิต) ที่ถอดรหัส $k$ บิตจะต้องถูกถอดรหัสอีกครั้ง แต่ตอนนี้มันไม่เหมือนกับต้นฉบับ $k$ บิต ดังนั้นโดยพื้นฐานแล้วเราจะต้องถอดรหัสรหัส ณ จุดนี้ เราใช้การเข้ารหัสที่แตกต่างกันสองรหัส (คีย์สาธารณะที่แตกต่างกันสองคีย์) เนื่องจากเราต้องการขจัดความอ่อน

เปลี่ยนรหัสบล็อกเป็นฟังก์ชันลายเซ็น

เราสามารถคำนวณแฮชของข้อความก่อนแล้วจึงเข้ารหัสแฮช เห็นได้ชัดว่าปลอดภัย เนื่องจากเป็นวิธีการทำงานของอัลกอริทึมในปัจจุบัน

ฉันขอโทษที่ใช้แท็กต่างกัน ฉันแค่ไม่รู้ว่าจะใช้แท็กอะไรดี

Maarten Bodewes avatar
in flag
แบบดั้งเดิมที่ไม่สมมาตรโดยทั่วไปยังมีค่าใช้จ่ายในการเข้ารหัสด้วย นับรวมหรือไม่? นอกจากนี้ RSA / OAEP ยังขึ้นอยู่กับแฮชโดเมนแบบเต็ม ประการสุดท้าย RSA ต้องการขนาดคีย์ที่สูงมากในการรักษาความปลอดภัยมากกว่า 128 บิต และไม่ได้รับการป้องกันจากคอมพิวเตอร์ควอนตัม
donaastor avatar
br flag
@MaartenBodewes ฉันไม่รู้เกี่ยวกับสิ่งเหล่านี้เมื่อฉันพูดถึง "บล็อกรหัสอสมมาตร" ฉันถือว่าฟังก์ชันคู่หนึ่ง (E,D) ซึ่งโดเมนและโดเมนร่วมเป็นชุดเดียวกัน คุณอาจคิดว่า E และ D เป็นคีย์สาธารณะและคีย์ส่วนตัว หากมีการนำไปใช้โดยใช้พื้นฐานอื่น ๆ ฉันไม่สนใจ ฉันแค่ต้องการลดทุกอย่างที่เหลือเป็น X เพื่อให้ฉันสามารถเรียนรู้วิธีใช้เท่านั้น พูด RSA แล้วเล่นกับโค้ดของฉัน แทนที่จะอ่านเพิ่มเติมเกี่ยวกับไลบรารี ฉันไม่รู้ว่าโอเวอร์เฮดและแฮชโดเมนแบบเต็มคืออะไร RSA ต้องการคีย์ขนาดใหญ่ไม่ใช่เรื่องใหญ่สำหรับฉัน อัลกอริทึมอื่นๆ บางอันอาจไม่ใช่
cn flag
"ทุกความต้องการ" เป็นเป้าหมายที่สูงเกินไปอย่างแน่นอน เพราะมันมีมากกว่าแค่สิ่งพื้นฐาน ตัวอย่างเช่น แผนการเข้ารหัสแบบอสมมาตรโดยพลการไม่สามารถใช้เพื่อให้ได้การเข้ารหัสแบบโฮโมมอร์ฟิคอย่างสมบูรณ์
donaastor avatar
br flag
@tylo ตกลง ใช่ เป็นเรื่องจริง ฉันรู้เกี่ยวกับ FHE ฉันสนใจมัน ฉันยังคงลืมมัน ตอนนี้ฉันจะแก้ไขให้เจาะจงมากขึ้นเกี่ยวกับสิ่งที่ฉันหมายถึง
Maarten Bodewes avatar
in flag
ปัญหาคือตำรา RSA ไม่ปลอดภัยด้วยซ้ำ ตอนนี้คุณพูดว่า: เฮ้ ฉันมีอัลกอริทึมที่ไม่ปลอดภัย ทำไมทุกอย่างถึงไม่อิงตามมันคุณยังเพิกเฉยต่อประสิทธิภาพและกรณีการใช้งานเฉพาะกลุ่ม ซึ่ง *ไม่ควร* ถูกละเลย แน่นอนว่าการพยายามให้อัลกอริทึมพอดีกับช่องโหว่มากที่สุดเท่าที่จะเป็นไปได้นั้นมีประโยชน์ โปรดดูที่ Keccak ซึ่งครอบคลุมถึงการแฮช การได้มาของคีย์ การสร้างตัวเลขสุ่ม (ในระดับหนึ่ง) การเข้ารหัสที่รับรองความถูกต้อง ฯลฯ โปรดทราบว่าการสร้างลายเซ็นและการเข้ารหัสจำเป็นต้องมี คู่หลักที่แตกต่างกันของผู้เข้าร่วมทั้งสองจึงมีเช่นกัน
Maarten Bodewes avatar
in flag
พูดตามตรง การตอบคำถามนี้ดูเหมือนจะต้องการคำอธิบายเกี่ยวกับการเข้ารหัสเกือบทั้งหมด ซึ่งกว้างไปหน่อยสำหรับคำถามนี้
Score:2
ธง ng

ระวังว่านอกจาก RSA แล้ว เราไม่รู้จัก "รหัสบล็อกอสมมาตร" จำนวนมากตามคำจำกัดความของคำถาม (การเรียงสับเปลี่ยนประตูกลเป็นหลัก) ดังนั้นการสร้างสิ่งนี้ขึ้นมาจะไม่อนุญาตให้มีการแทนที่ด้วยสิ่งที่เร็วกว่าหรือต้านทานสมมุติฐาน คอมพิวเตอร์ควอนตัมที่เกี่ยวข้องกับการเข้ารหัสลับ.

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

  • การถอดรหัสและลายเซ็น RSA แบบตำราเป็นลำดับทศนิยมหลายลำดับที่มีขนาดช้ากว่าการเข้ารหัสแบบสมมาตร ดังนั้นคุณจะต้องใช้การเข้ารหัสแบบไฮบริดเพื่อความเร็วที่พอผ่านได้
  • การสร้างคีย์ RSA เป็นอีกครั้งที่มีลำดับทศนิยมช้ากว่าตัว RSA และการสร้างคีย์ที่มีการรักษาความปลอดภัยล่วงหน้า (คุณลักษณะมาตรฐานของ SSL/TLS สมัยใหม่ที่หลายคนอาจบอกว่ากลายเป็นพื้นฐานไปแล้ว) โดยใช้ RSA (หรือสร้างขึ้นบนโครงร่างการเข้ารหัสแบบอสมมาตร ) ดูเหมือนว่าจะต้องมีการสร้างคีย์ในแต่ละเซสชัน

ประการสุดท้าย การเรียงสับเปลี่ยนประตูกลของ RSA นั้นยังห่างไกลจากอุดมคติ มันมีจุดคงที่ ${0,1,n-1}$และโดยทั่วไปแล้วเป็นคุณสมบัติการคูณ การคิดว่ามันเป็นการแทนที่รหัสแบบอสมมาตรของรหัสบล็อกขนาดใหญ่เป็นสูตรสำเร็จที่นำไปสู่ความหายนะ ซึ่งได้ทดลองและทดสอบแล้วในช่วงทศวรรษแรกของ RSA และนับเป็น พงศาวดาร ในบางจุดโดย Dan Boneh โซลูชันมีมากมาย แต่อย่างน้อยโซลูชันทั่วไปหรือที่มีหลักฐานการรักษาความปลอดภัยถือว่าเป็นแฮช ดังนั้น "คุณสามารถสร้างอัลกอริทึมแฮชโดยใช้เท่านั้น" (ประตูกล RSA) แม้ว่าจะเป็นไปได้ แต่ก็ผจญภัยไปพร้อมกับความช้า

Score:1
ธง cm

สำหรับขนาดคีย์เดียวกัน โปรโตคอลการเข้ารหัสแบบสมมาตรจะปลอดภัยกว่าโปรโตคอลแบบอสมมาตร

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

ความแตกต่างในความปลอดภัยของอัลกอริทึมเหล่านี้คือการเข้ารหัส AES ที่มีขนาดคีย์ 128 บิตนั้นยากต่อการถอดรหัสพอๆ กับคีย์ RSA ที่มีขนาดคีย์ 2048 บิต

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

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

คุณสามารถตอบโต้ได้ด้วยการมีขนาดคีย์ขนาดใหญ่ อีกครั้งเป็นเรื่องของประสิทธิภาพ

โพสต์คำตอบ

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