อ่าน 15 นาที
ตัวผกผันการคูณแบบโมดูลาร์
ใน คณิตศาสตร์ โดยเฉพาะในสาขา เลขคณิต ตัว ผกผันการคูณแบบมอดูลาร์ ของ จำนวนเต็ม a คือจำนวนเต็ม x ที่ผลคูณ ax สอดคล้อง กับ 1 เมื่อ เทียบกับมอดูลัสm [ 1 ] ใน สัญลักษณ์มาตรฐานของ...
ตัวผกผันการคูณแบบโมดูลาร์
ในคณิตศาสตร์โดยเฉพาะในสาขาเลขคณิตตัวผกผันการคูณแบบมอดูลาร์ของจำนวนเต็มaคือจำนวนเต็มxที่ผลคูณaxสอดคล้อง กับ 1 เมื่อเทียบกับมอดูลัสm [ 1 ] ในสัญลักษณ์มาตรฐานของเลขคณิตแบบมอดูลาร์ ความสอดคล้องนี้เขียนได้ดังนี้
ซึ่งเป็นวิธีเขียนย่อของประโยคที่ว่าmหาร (ลงตัว) ปริมาณax − 1หรือกล่าวอีกนัยหนึ่งคือ เศษเหลือหลังจากหารaxด้วยจำนวนเต็มmคือ 1 ถ้าaมีตัวผกผันมอดูลัสmแล้วจะมีคำตอบอนันต์ของสมการนี้ ซึ่งก่อให้เกิดชั้นสมการ ที่ สัมพันธ์กับมอดูลัสนี้ ยิ่งไปกว่านั้น จำนวนเต็มใดๆ ที่สมมูลกับa (กล่าวคือ อยู่ใน ชั้นสมการของ a ) จะมีสมาชิกใดๆ ใน ชั้นสมการของ xเป็นตัวผกผันการคูณมอดูลัส การใช้สัญลักษณ์เพื่อระบุชั้นสมการที่ประกอบด้วยwสามารถแสดงได้โดยกล่าวว่าตัวผกผันการคูณมอดูลัสของชั้นสมการคือชั้นสมการที่:
โดยที่สัญลักษณ์แสดงถึงการคูณของชั้นสมมูลโมดูลm [ 2 ] เมื่อเขียนในลักษณะ นี้ ความคล้ายคลึงกับแนวคิดปกติของตัวผกผันการคูณในเซตของจำนวนตรรกยะหรือจำนวนจริงจะถูกแสดงอย่างชัดเจน โดยแทนที่ตัวเลขด้วยชั้นความสอดคล้องและเปลี่ยนแปลงการดำเนินการทวิภาคให้เหมาะสม
เช่นเดียวกับการดำเนินการที่คล้ายคลึงกันบนจำนวนจริง การใช้งานพื้นฐานของการดำเนินการนี้คือการแก้สมการเชิงเส้นในรูปแบบต่างๆ เมื่อเป็นไปได้
การค้นหาตัวผกผันการคูณแบบโมดูลาร์ยังมีการประยุกต์ใช้ในทางปฏิบัติในด้านการเข้ารหัสลับเช่น การเข้ารหัส ลับแบบกุญแจสาธารณะและอัลกอริทึม RSA [ 3 ] [ 4 ] [ 5 ]ข้อดีสำหรับการนำแอปพลิเคชันเหล่านี้ไปใช้ในคอมพิวเตอร์คือมีอัลกอริทึมที่เร็วมาก ( อัลกอริทึมยุคลิดแบบขยาย ) ที่สามารถใช้ในการคำนวณตัวผกผันการคูณแบบโมดูลาร์ได้
เลขคณิตแบบโมดูลาร์
สำหรับจำนวนเต็มบวกm ที่กำหนดให้ จำนวนเต็มสองจำนวนaและbจะเรียกว่าสมมูลกันมอดูลmถ้าmหารผลต่างของจำนวนเต็ม ทั้งสองลงตัว ความสัมพันธ์ทวิภาค นี้ เขียนแทนด้วย
นี่คือความสัมพันธ์สมมูลบนเซตของจำนวนเต็มและชั้นสมมูลเรียกว่าชั้นความสอดคล้องมอดูลmหรือชั้นเศษเหลือมอดูลmให้แทนชั้นความสอดคล้องที่มีจำนวนเต็มa [ 6 ]แล้ว
ความสอดคล้องเชิงเส้นคือความสอดคล้องแบบมอดูลาร์ในรูปแบบ
ต่างจากสมการเชิงเส้นบนจำนวนจริง ความสอดคล้องเชิงเส้นอาจมีคำตอบเป็นศูนย์ หนึ่ง หรือหลายคำตอบ ถ้าxเป็นคำตอบของความสอดคล้องเชิงเส้นแล้ว ทุกองค์ประกอบในก็เป็นคำตอบเช่นกัน ดังนั้น เมื่อพูดถึงจำนวนคำตอบของความสอดคล้องเชิงเส้น เราจึงหมายถึงจำนวนชั้นความสอดคล้องที่แตกต่างกันซึ่งมีคำตอบอยู่
ถ้าdเป็นตัวหารร่วมมากที่สุดของaและmแล้วสมการเชิงเส้นax ≡ b (mod m )จะมีคำตอบก็ต่อเมื่อdหารb ลงตัว ถ้าdหารb ลงตัว จะมี คำตอบอยู่ dคำตอบ พอดี [ 7 ]
ตัวผกผันการคูณแบบโมดูลาร์ของจำนวนเต็มaเทียบกับโมดูลัสmคือคำตอบของสมการความสอดคล้องเชิงเส้น
ผลลัพธ์ก่อนหน้านี้ระบุว่ามีคำตอบอยู่ก็ต่อเมื่อgcd( a , m ) = 1 เท่านั้น นั่นคือaและmต้องเป็นจำนวนเฉพาะสัมพัทธ์ (กล่าวคือเป็นจำนวนเฉพาะสัมพัทธ์) ยิ่งไปกว่านั้น เมื่อเงื่อนไขนี้เป็นจริง จะมีคำตอบเพียงหนึ่งเดียวเท่านั้น กล่าวคือ เมื่อมีคำตอบอยู่ ตัวผกผันการคูณแบบโมดูลาร์จะมีเพียงหนึ่งเดียว: [ 8 ]ถ้าbและb'เป็นตัวผกผันการคูณแบบโมดูลาร์ของaเทียบกับโมดูลัสmแล้ว
ดังนั้น
ถ้าa ≡ 0 (mod m )แล้วgcd( a , m ) = mและaจะไม่มีตัวผกผันการคูณแบบมอดูลาร์ด้วย ดังนั้นb ≡ b' (mod m )
เมื่อax ≡ 1 (mod m )มีคำตอบ มักจะแสดงด้วยสัญลักษณ์นี้ −
แต่การใช้สัญลักษณ์แบบนี้อาจถือได้ว่าเป็นการใช้สัญลักษณ์ที่ ไม่ถูกต้อง เนื่องจากอาจถูกตีความผิดว่าเป็นส่วนกลับของ(ซึ่งตรงกันข้ามกับตัวผกผันการคูณแบบโมดูลาร์ ซึ่งไม่ใช่จำนวนเต็ม ยกเว้นเมื่อaเป็น 1 หรือ −1) สัญลักษณ์จะถูกต้องก็ต่อเมื่อ ตีความว่า aเป็นสัญลักษณ์แทนชั้นความสอดคล้องเนื่องจากตัวผกผันการคูณของชั้นความสอดคล้องคือชั้นความสอดคล้องที่มีการคูณตามที่นิยามไว้ในส่วนถัดไป
จำนวนเต็มโมดูลm
ความสัมพันธ์สมมูล โมดูลัสmแบ่งเซตของจำนวนเต็มออกเป็นmชั้นสมมูล การดำเนินการบวกและการคูณสามารถกำหนดได้บน วัตถุ m เหล่านี้ ในลักษณะต่อไปนี้: ในการบวกหรือคูณชั้นสมมูลสองชั้น ขั้นแรกให้เลือกตัวแทน (ด้วยวิธีใดก็ได้) จากแต่ละชั้น จากนั้นดำเนินการตามปกติสำหรับจำนวนเต็มกับตัวแทนทั้งสอง และสุดท้ายเลือกชั้นสมมูลที่ผลลัพธ์ของการดำเนินการกับจำนวนเต็มอยู่เป็นผลลัพธ์ของการดำเนินการบนชั้นสมมูล ในเชิงสัญลักษณ์ นิยามเหล่านี้คือ
และ
โดยที่และทางด้านซ้าย แสดงถึงการบวกและการคูณของชั้นความสอดคล้องกันแบบมอดูลmการดำเนินการเหล่านี้มีความชัดเจนหมายความว่าผลลัพธ์สุดท้ายไม่ขึ้นอยู่กับการเลือกตัวแทนที่ใช้เพื่อให้ได้ผลลัพธ์นั้น
ชั้น ความสอดคล้อง mชั้นที่มีการดำเนินการที่กำหนดไว้สองอย่างนี้ก่อให้เกิดวงแหวน สลับที่ได้ เรียกว่าวงแหวนของจำนวนเต็มมอดูล mมีสัญลักษณ์หลายแบบที่ใช้สำหรับวัตถุทางพีชคณิตเหล่านี้ ส่วนใหญ่ใช้หรือแต่ตำราพื้นฐานและสาขาการประยุกต์ใช้หลายแห่งใช้สัญลักษณ์ที่ง่ายกว่าเมื่อไม่น่าจะเกิดความสับสนกับวัตถุทางพีชคณิตอื่นๆ
ชั้นความสอดคล้องของจำนวนเต็มมอดูลmเดิมเรียกว่าชั้นเศษเหลือมอดูล mซึ่งสะท้อนให้เห็นว่าองค์ประกอบทั้งหมดของชั้นความสอดคล้องจะมีเศษเหลือ (เช่น "เศษเหลือ") เหมือนกันเมื่อหารด้วยmเซตของ จำนวนเต็ม mตัวที่เลือกมาเพื่อให้แต่ละตัวมาจากชั้นความสอดคล้องมอดูล m ที่แตกต่างกันเรียกว่าระบบเศษเหลือมอดูล m ที่สมบูรณ์ [ 9 ]อัลกอริทึมการหารแสดงให้เห็นว่าเซตของจำนวนเต็ม{0, 1, 2, ..., m − 1}ก่อให้เกิดระบบเศษเหลือมอดู ล m ที่สมบูรณ์ ซึ่งเรียกว่าระบบเศษเหลือมอดูลm ที่น้อยที่สุด ในการทำงานกับปัญหาทางคณิตศาสตร์ บางครั้งการทำงานกับระบบเศษเหลือที่สมบูรณ์และใช้ภาษาของความสอดคล้องจะสะดวกกว่า ในขณะที่บางครั้งมุมมองของชั้นความสอดคล้องของวงแหวนจะมีประโยชน์มากกว่า[ 10 ]
กลุ่มการคูณของจำนวนเต็มมอดูลm
ไม่ใช่ว่าทุกองค์ประกอบของระบบเศษเหลือสมบูรณ์มอดูลmจะมีตัวผกผันการคูณมอดูล ตัวอย่างเช่น ศูนย์จะไม่มีตัวผกผันการคูณมอดูลถ้าm > 1หลังจากลบองค์ประกอบของระบบเศษเหลือสมบูรณ์ที่ไม่เป็นจำนวนเฉพาะสัมพัทธ์กับmออกไปแล้ว สิ่งที่เหลืออยู่เรียกว่าระบบเศษเหลือลดรูปซึ่งองค์ประกอบทั้งหมดมีตัวผกผันการคูณมอดูล จำนวนองค์ประกอบในระบบเศษเหลือลดรูปคือโดยที่คือฟังก์ชันโทเทียนต์ของออยเลอร์ นั่น คือ จำนวนเต็มบวกที่น้อยกว่าmที่เป็นจำนวนเฉพาะสัมพัทธ์กับm
ในริงทั่วไปที่มีเอกลักษณ์ไม่ใช่ทุกสมาชิกจะมีตัวผกผันการคูณและสมาชิกที่มีตัวผกผันการคูณเรียกว่าหน่วยเนื่องจากผลคูณของหน่วยสองหน่วยก็คือหน่วย หน่วยของริงจึงรวมกันเป็นกลุ่มซึ่ง เรียกว่า กลุ่มของหน่วยของริงและมักจะใช้สัญลักษณ์R × mถ้าRคือชื่อของริง กลุ่มของหน่วยของริงจำนวนเต็มมอดูลmเรียกว่ากลุ่มการคูณของจำนวนเต็มมอดูลmและมันสมสัณฐานกับระบบเศษเหลือลดรูป โดยเฉพาะอย่างยิ่ง มันมีอันดับ (ขนาด) เท่ากับm
ในกรณีที่mเป็นจำนวนเฉพาะเช่นpแล้วและสมาชิกที่ไม่เป็นศูนย์ทั้งหมดของมีตัวผกผันการคูณ ดังนั้น จึงเป็นฟิลด์จำกัดในกรณีนี้ กลุ่มการคูณของจำนวนเต็มมอดูล pจะก่อให้เกิดกลุ่มวัฏจักรที่มีอันดับp − 1
ตัวอย่าง
สำหรับจำนวนเต็มใดๆจะเป็นจริงเสมอว่าคือตัวผกผันการคูณแบบมอดูลาร์ของเทียบกับมอดูลัสเนื่องจากตัวอย่างเช่น, และอื่นๆ
ตัวอย่างต่อไปนี้ใช้ค่าสัมบูรณ์ 10: จำนวนเต็มสองจำนวนจะสมมูลกันมอด 10 ก็ต่อเมื่อผลต่างของจำนวนทั้งสองหารด้วย 10 ลงตัว ตัวอย่างเช่น
- เนื่องจาก 10 หาร 32 − 2 ได้ลงตัวเท่ากับ 30 และ
- เนื่องจาก 10 หาร 111 − 1 ได้ลงตัวเท่ากับ 110
กลุ่มความสอดคล้องทั้งสิบกลุ่มที่เกี่ยวข้องกับโมดูลัสนี้ ได้แก่:
- และ
สมการเชิงเส้น4x ≡ 5 (mod 10) ไม่มีคำตอบ เนื่องจากจำนวนเต็มที่สมมูลกับ 5 (กล่าวคือ จำนวนใน) เป็นจำนวนคี่ทั้งหมด ในขณะที่4xเป็นจำนวนคู่เสมอ อย่างไรก็ตาม สมการเชิงเส้น4x ≡ 6 (mod 10) มีสองคำตอบ คือx = 4และx = 9 ตัวหารร่วมมาก ของ4, 10 คือ 2และ 2 หาร 5 ไม่ลงตัว แต่หาร 6 ลงตัว
เนื่องจากgcd(3, 10) = 1ดังนั้นสมการเชิงเส้น3 x ≡ 1 (mod 10)จะมีคำตอบ นั่นคือ ตัวผกผันการคูณแบบมอดูลัสของ 3 มอดูลัส 10 จะมีอยู่จริง ในความเป็นจริง 7 สอดคล้องกับสมการนี้ (เช่น 21 − 1 = 20) อย่างไรก็ตาม จำนวนเต็มอื่นๆ ก็สอดคล้องกับสมการนี้เช่นกัน ตัวอย่างเช่น 17 และ −3 (เช่น 3(17) − 1 = 50 และ 3(−3) − 1 = −10) โดยเฉพาะอย่างยิ่ง จำนวนเต็มทุกตัวในจะสอดคล้องกับสมการนี้ เนื่องจากจำนวนเต็มเหล่านี้มีรูปแบบ7 + 10 rสำหรับจำนวนเต็มr บางตัว และ
หารด้วย 10 ลงตัว สมการนี้มีชุดคำตอบเพียงชุดเดียวเท่านั้น คำตอบในกรณีนี้อาจได้มาจากการตรวจสอบทุกกรณีที่เป็นไปได้ แต่จะต้องใช้อัลกอริทึมที่เป็นระบบสำหรับค่าสัมบูรณ์ที่ใหญ่กว่า และจะกล่าวถึงในส่วนถัดไป
ผลคูณของชั้นความสอดคล้องและสามารถหาได้โดยการเลือกสมาชิกของเช่น 25 และสมาชิกของเช่น −2 แล้วสังเกตว่าผลคูณของทั้งสอง (25)(−2) = −50 อยู่ในชั้นความสอดคล้องดังนั้นการบวกก็ถูกนิยามในทำนองเดียวกัน ชั้นความสอดคล้องทั้งสิบชั้นพร้อมกับการดำเนินการบวกและการคูณของชั้นความสอดคล้องเหล่านี้ก่อให้เกิดวงแหวนของจำนวนเต็มมอดูล 10 นั่นคือ
ระบบเศษเหลือที่สมบูรณ์มอดูล 10 คือเซต {10, −9, 2, 13, 24, −15, 26, 37, 8, 9} โดยที่จำนวนเต็มแต่ละตัวอยู่ในชั้นสมมูลมอดูล 10 ที่แตกต่างกัน ระบบเศษเหลือที่น้อยที่สุดที่ไม่ซ้ำกันมอดูล 10 คือ {0, 1, 2, ..., 9} ระบบเศษเหลือที่ลดรูปมอดูล 10 คือ {1, 3, 7, 9} ผลคูณของชั้นสมมูลสองชั้นใดๆ ที่แสดงด้วยจำนวนเหล่านี้ก็คือหนึ่งในสี่ชั้นสมมูลนี้เช่นกัน ซึ่งหมายความว่าสี่ชั้นสมมูลนี้ก่อตัวเป็นกลุ่ม ในกรณีนี้คือกลุ่มวัฏจักรอันดับสี่ โดยมี 3 หรือ 7 เป็นตัวสร้าง (ตัวคูณ) ชั้นสมมูลที่แสดงเหล่านี้ก่อตัวเป็นกลุ่มของหน่วยของริง ชั้นสมมูลเหล่านี้คือชั้นที่มีตัวผกผันการคูณมอดูลอย่างแม่นยำ
การคำนวณ
อัลกอริทึมยูคลิดแบบขยาย
สามารถหาตัวผกผัน การคูณแบบโมดูลัสของโมดูลัสm ได้โดยใช้อัลกอริทึมยุคลิดแบบขยาย
อัลกอริทึมของยุคลิดจะหาตัวหารร่วมมาก (gcd) ของจำนวนเต็มสองจำนวน เช่นaและmถ้าaมีตัวผกผันการคูณมอดูลm gcd นี้จะต้องเป็น 1 สมการสุดท้ายจากหลายสมการที่ได้จากอัลกอริทึมนี้สามารถแก้หา gcd ได้ จากนั้น โดยใช้วิธีที่เรียกว่า "การแทนค่าแบบย้อนกลับ" จะสามารถหาความสัมพันธ์ระหว่างพารามิเตอร์ดั้งเดิมกับ gcd ได้ กล่าวอีกนัยหนึ่งคือสามารถหา จำนวนเต็ม xและy ที่สอดคล้องกับ เอกลักษณ์ของเบซูต์ได้
เขียนใหม่แล้ว นี่คือ
นั่นคือ
ดังนั้น จึงได้คำนวณ ตัวผกผันการคูณแบบโมดูลาร์ของ a แล้ว เวอร์ชันที่มีประสิทธิภาพมากกว่าของอัลกอริทึมนี้คืออัลกอริทึมยุคลิดแบบขยาย ซึ่งโดยการใช้สมการเสริม จะลดขั้นตอนการผ่านอัลกอริทึมสองรอบ (การแทนค่าย้อนกลับสามารถคิดได้ว่าเป็นการผ่านอัลกอริทึมในทางกลับกัน) เหลือเพียงรอบเดียว ใน สัญกรณ์ O ขนาดใหญ่อัลกอริทึมนี้ทำงานในเวลาO(log 2 ( m ))โดยสมมติว่า| a | < mและถือว่าเร็วมากและโดยทั่วไปมีประสิทธิภาพมากกว่าทางเลือกอื่นคือการยกกำลัง

ตัวอย่างเช่น ตัวผกผันการคูณแบบโมดูลาร์ของเมื่อเทียบกับโมดูลัสคือแต่ยังรวมถึงกล่าวคือ ในวงแหวนชั้นเศษเหลือสามารถผกผันได้ด้วยตัวผกผัน
เพราะ
ตามการคำนวณที่อยู่ติดกัน ในขั้นตอนแรก ซึ่งสอดคล้องกับการหารแบบยุคลิด " มีเศษเหลือ" สมการคูณจะถูกบวกเข้ากับสมการซึ่งนำไปสู่ทันทีที่มีเศษเหลือทางด้านซ้าย จะอยู่เหนือกว่า (หรือโดยทั่วไปหากอนุญาตให้มีเศษเหลือติดลบได้) ในตารางทางด้านขวาสุดที่สอดคล้องกันซึ่งมีการดำเนินการแถวที่คล้ายกัน เห็นได้ชัดว่าสามารถละเว้นคอลัมน์ ได้ สุดท้ายสามารถตรวจสอบได้โดยตรง:
ใน
โดยใช้ทฤษฎีบทของออยเลอร์
ทฤษฎีบทของออยเลอร์สามารถใช้แทนอัลกอริทึมยุคลิดแบบขยายเพื่อคำนวณอินเวอร์สโมดูลาร์ได้[ 11 ]
ตามทฤษฎีบทของออยเลอร์ถ้าaเป็นจำนวนเฉพาะสัมพัทธ์กับmนั่นคือgcd( a , m ) = 1แล้ว
โดยที่คือฟังก์ชันโทเทียนต์ของออยเลอร์ซึ่งเป็นผลมาจากข้อเท็จจริงที่ว่าaเป็นสมาชิกของกลุ่มการคูณ× ก็ต่อเมื่อaเป็น จำนวนเฉพาะ สัมพัทธ์กับm เท่านั้น ดังนั้น จึงสามารถหาตัวผกผันการคูณแบบมอดูลาร์ได้โดยตรง:
ในกรณีพิเศษที่mเป็นจำนวนเฉพาะและตัวผกผันมอดูลาร์กำหนดโดย
โดยทั่วไปแล้ว วิธีนี้ช้ากว่าอัลกอริธึมยุคลิดแบบขยาย แต่บางครั้งก็ใช้เมื่อมีการใช้งานสำหรับการยกกำลังแบบโมดูลาร์อยู่แล้ว ข้อเสียบางประการของวิธีนี้ได้แก่:
- ต้องทราบค่า และวิธีการคำนวณที่มีประสิทธิภาพที่สุดที่ทราบกันนั้นต้องอาศัย การแยกตัวประกอบของmการแยกตัวประกอบนั้นเชื่อกันอย่างกว้างขวางว่าเป็นปัญหาที่ยากในเชิงการคำนวณ อย่างไรก็ตาม การคำนวณนั้นทำได้ง่ายเมื่อทราบ การแยกตัวประกอบเฉพาะของ m แล้ว
- ต้นทุนสัมพัทธ์ของการยกกำลัง แม้ว่าจะสามารถดำเนินการได้อย่างมีประสิทธิภาพมากขึ้นโดยใช้การยกกำลังแบบโมดูลาร์แต่เมื่อค่าmมีขนาดใหญ่ การคำนวณที่มีประสิทธิภาพที่สุดคือด้วย วิธี การลดทอนของมอนต์โก เมอรี ซึ่งวิธีการนั้นเองก็ต้องการตัวผกผันโมดูลาร์ mod mซึ่งเป็นสิ่งที่ต้องคำนวณตั้งแต่แรกอยู่แล้ว หากไม่มีวิธีการของมอนต์โกเมอรีการยกกำลังแบบไบนารี มาตรฐาน ซึ่งต้องใช้การหาร mod mในทุกขั้นตอน จะเป็นการดำเนินการที่ช้าเมื่อmมีขนาดใหญ่
ข้อดีที่โดดเด่นอย่างหนึ่งของเทคนิคนี้คือไม่มีเงื่อนไขใดๆ ที่ขึ้นอยู่กับค่าของaดังนั้นค่าของaซึ่งอาจเป็นความลับสำคัญในระบบการเข้ารหัสแบบกุญแจสาธารณะจึงสามารถได้รับการปกป้องจากการโจมตีแบบช่องทางด้านข้างได้ด้วยเหตุนี้ การใช้งานมาตรฐานของCurve25519จึงใช้เทคนิคนี้ในการคำนวณค่าผกผัน
ตัวผกผันหลายตัว
เป็นไปได้ที่จะคำนวณค่าผกผันของจำนวนหลายจำนวนa iมอดูลm ทั่วไป ด้วยการเรียกใช้อัลกอริทึมยุคลิดเพียงครั้งเดียวและการคูณสามครั้งต่ออินพุตเพิ่มเติม[ 12 ] แนวคิดพื้นฐานคือการสร้างผลคูณของa i ทั้งหมด ผกผันผลคูณนั้น แล้วคูณด้วยa jสำหรับj ≠ i ทั้งหมด เพื่อให้เหลือเพียงa ที่ต้องการ−1 i.
กล่าวโดยละเอียดแล้ว อัลกอริทึมมีดังนี้ (การคำนวณทางคณิตศาสตร์ทั้งหมดดำเนินการแบบโมดูลัสm ):
- คำนวณผลคูณพรีฟิก สำหรับทุกi ≤ n
- คำนวณb−1 นโดยใช้อัลกอริธึมใดก็ได้ที่มีอยู่
- สำหรับiตั้งแต่nลงมาถึง 2 ให้คำนวณ
- เอ−1 i= b−1 ib i −1และ
- ข−1 i −1= b−1 iเอไอ .
- สุดท้ายนี้−1 1= b−1 1.
สามารถทำการคูณในโครงสร้างแบบต้นไม้แทนที่จะเป็นแบบเชิงเส้น เพื่อใช้ประโยชน์จากการประมวลผลแบบขนานได้
ตัวผกผันมอดูลัสกำลังของจำนวนเฉพาะ (รวมถึงกำลังของ 2)
ในกรณีที่โมดูลัสMอยู่ในรูปแบบสำหรับจำนวนเฉพาะp บางตัว และจำนวนเต็มบวกm บางตัว เป็น ไปได้ที่จะคำนวณตัวผกผันการคูณแบบโมดูลัสได้อย่างมีประสิทธิภาพโดยใช้การวนซ้ำของนิวตัน-ราฟสัน ซึ่งช่วยให้สามารถคำนวณตัวผกผันได้ด้วยการคูณ สามารถแสดงได้ว่าถ้า
(นั่นคือxเป็นตัวผกผันการคูณแบบโมดูลาร์ของaโมดูลัสกำลังของจำนวนเฉพาะบางตัว ) แล้ว
ซึ่งหมายความว่าสามารถทำการคำนวณผกผันโมดูลาร์ได้โดยการคำนวณผกผันการคูณโมดูลาร์ของโมดูลัสจำนวนเฉพาะ p หรือกำลังเล็กๆ ของจำนวนเฉพาะนั้นก่อน จากนั้นจึงทำการวนซ้ำแบบนิวตัน-ราฟสันหลายครั้งเพื่อคำนวณผกผันโมดูลัสกำลังของจำนวนเฉพาะที่ใหญ่ขึ้นเรื่อยๆสำหรับค่าn ที่ใหญ่ขึ้นเรื่อยๆ [ 13 ] [ 14 ]
การประยุกต์ใช้วิธีนี้ในทางปฏิบัติคือการคำนวณตัวผกผันการคูณแบบโมดูลาร์โมดูลัสกำลังของ 2 อย่างมีประสิทธิภาพ สำหรับการคำนวณดังกล่าว เราอาจเริ่มต้นด้วยการสังเกตว่าจำนวนเต็มคี่ทั้งหมดเป็นตัวผกผันการคูณแบบโมดูลาร์โมดูลัสของตัวเองดังที่สามารถแสดงได้โดยการตรวจสอบ:
, , , ,
จากนั้นใช้การวนซ้ำแบบนิวตัน-ราฟสันเพื่อคำนวณค่าผกผันเชิงโมดูลัสโมดูลัส, , และอื่นๆ ต่อไป
ตัวอย่างเช่น ในภาษาโปรแกรม Cซึ่งการบวก การลบ และการคูณบนuint64_tชนิดข้อมูลจะทำในรูปแบบโมดูลัสทั้งหมดเราสามารถคำนวณตัวผกผันการคูณแบบโมดูลัสของจำนวนเต็มคี่aโมดูลัสโดยใช้ฟังก์ชันต่อไปนี้ซึ่งทำการวนซ้ำแบบนิวตัน-ราฟสันห้าครั้ง:
#include <stdint.h> uint64_t modinv64 ( uint64_t a ) { uint64_t x = a ; for ( int i = 0 ; i < 5 ; i ++ ) x *= 2 - a * x ; return x ; }ขึ้นอยู่กับแอปพลิเคชันและแพลตฟอร์ม อาจเหมาะสมที่จะปรับปรุงรูทีนนี้ให้ดียิ่งขึ้นไปอีก เช่น อาจข้ามการวนซ้ำสองสามครั้งแรกโดยใช้ตารางค้นหาเพื่อหาค่าผกผันโมดูลัสของกำลังสองที่ใหญ่กว่า นอกจากนี้ ในบางระบบ การคูณ 32 บิตอาจเร็วกว่าการคูณ 64 บิต ในกรณีนี้ สามารถเพิ่มความเร็วได้โดยใช้การคูณ 32 บิตจนกว่าจะได้ค่าผกผันโมดูลัส แล้วจึงเปลี่ยนไปใช้การคูณ 64 บิตหลังจากนั้น เมื่อใช้การปรับปรุงดังกล่าว รูทีนภาษา C ที่คำนวณค่าผกผันโมดูลัสของการคูณแบบโมดูลัสจะกลายเป็น:
#include <stdint.h> uint64_t modinv64 ( uint64_t a ) { static const uint8_t tbl [ 256 ] = { 0 , 1 , 0 , 171 , 0 , 205 , 0 , 183 , 0 , 57 , 0 , 163 , 0 , 197 , 0 , 239 , 0 , 241 , 0 , 27 , 0 , 61 , 0 , 167 , 0 , 41 , 0 , 19 , 0 , 53 , 0 , 223 , 0 , 225 , 0 , 139 , 0 , 173 , 0 , 151 , 0 , 25 , 0 , 131 , 0 , 165 , 0 , 207 , 0 , 209 , 0 , 251 , 0 , 29 , 0 , 135 , 0 , 9 , 0 , 243 , 0 , 21 , 0 , 191 , 0 , 193 , 0 , 107 , 0 , 141 , 0 , 119 , 0 , 249 , 0 , 99 , 0 , 133 , 0 , 175 , 0 , 177 , 0 , 219 , 0 , 253 , 0 , 103 , 0 , 233 , 0 , 211 , 0 ,245 , 0 , 159 , 0 , 161 , 0 , 75 , 0 , 109 , 0 , 87 , 0 , 217 , 0 , 67 , 0 , 101 , 0 , 143 , 0 , 145 , 0 , 187 , 0 , 221 , 0 , 71 , 0 , 201 , 0 , 179 , 0 , 213 , 0 , 127 , 0 , 129 , 0 , 43 , 0 , 77 , 0 , 55 , 0 , 185 , 0 , 35 , 0 , 69 , 0 , 111 0 , 113 , 0 , 155 , 0 , 189 , 0 , 39 , 0 , 169 , 0 , 147 , 0 , 181 , 0 , 95 , 0 , 97 , 0 , 11 , 0 , 45 , 0 , 23 , 0 , 153 , 0 , 3 , 0 , 37 , 0 , 79 , 0 , 81 , 0 , 123 , 0 , 157 , 0 , 7 , 0 , 137 , 0 , 115 , 0 , 149 , 0 , 63 , 0 , 65 , 0 , 235 , 0 ,13 , 0 , 247 , 0 , 121 , 0 , 227 , 0 , 5 , 0 , 47 , 0 , 49 , 0 , 91 , 0 , 125 , 0 , 231 , 0 , 105 , 0 , 83 , 0 , 117 , 0 , 31 , 0 , 33 , 0 , 203 , 0 , 237 , 0 , 215 , 0 , 89 , 0 , 195 , 0 , 229 , 0 , 15 , 0 , 17 , 0 , 59 , 0 , 93 , 0 , 199 , 0 , 73 , 0 , 51 , 0 , 85 , 0 , 255 }; uint32_t a32 = ( uint32_t ) a ; uint32_t x = tbl [ a & 0xFF ]; // ตัวผกผันโมดูลัส 2^8 x *= 2 - a32 * x ; // การคูณ 32 บิตx *= 2 - a32 * x ; // การคูณ 32 บิตreturn x * ( 2 - a * x ); // การคูณ 64 บิต}แอปพลิเคชัน
การค้นหาตัวผกผันการคูณแบบโมดูลาร์มีแอปพลิเคชันมากมายในอัลกอริธึมที่อาศัยทฤษฎีเลขคณิตแบบโมดูลาร์ ตัวอย่างเช่น ในการเข้ารหัสลับ การใช้เลขคณิตแบบโมดูลาร์ช่วยให้การดำเนินการบางอย่างทำได้เร็วขึ้นและใช้พื้นที่จัดเก็บน้อยลง ในขณะที่การดำเนินการอื่นๆ ยากขึ้น[ 15 ]คุณสมบัติทั้งสองนี้สามารถนำมาใช้ให้เกิดประโยชน์ได้ โดยเฉพาะอย่างยิ่งในอัลกอริธึม RSA การเข้ารหัสและถอดรหัสข้อความจะทำโดยใช้ตัวเลขสองตัวที่เป็นตัวผกผันการคูณเมื่อเทียบกับโมดูลัสที่เลือกอย่างระมัดระวัง ตัวเลขตัวหนึ่งจะถูกเปิดเผยและสามารถใช้ในขั้นตอนการเข้ารหัสอย่างรวดเร็ว ในขณะที่อีกตัวหนึ่งซึ่งใช้ในขั้นตอนการถอดรหัสจะถูกเก็บเป็นความลับ การหาตัวเลขที่ซ่อนไว้จากตัวเลขที่เปิดเผยนั้นถือว่าทำได้ยากในทางคอมพิวเตอร์ และนี่คือสิ่งที่ทำให้ระบบทำงานเพื่อรับประกันความเป็นส่วนตัว[ 16 ]
ในอีกตัวอย่างหนึ่งในบริบทที่แตกต่างออกไป ลองพิจารณา ปัญหา การหารที่แม่นยำในวิทยาการคอมพิวเตอร์ ซึ่งคุณมีรายการตัวเลขขนาดคำคี่แต่ละตัวหารด้วยk ลงตัว และคุณต้องการหารตัวเลขเหล่านั้นทั้งหมดด้วยkวิธีแก้ปัญหาหนึ่งมีดังนี้:
- ใช้ขั้นตอนวิธีแบบยุคลิดแบบขยายเพื่อคำนวณk −1ซึ่งเป็นตัวผกผันการคูณแบบมอดูลัสของk mod 2 wโดยที่wคือจำนวนบิตในคำ ตัวผกผันนี้จะมีอยู่เนื่องจากตัวเลขเป็นเลขคี่และมอดูลัสไม่มีตัวประกอบที่เป็นเลขคี่
- สำหรับแต่ละตัวเลขในรายการ ให้คูณตัวเลขนั้นด้วยk − 1แล้วเลือกคำที่มีค่าน้อยที่สุดจากผลลัพธ์
ในเครื่องคอมพิวเตอร์หลายเครื่อง โดยเฉพาะเครื่องที่ไม่มีฮาร์ดแวร์รองรับการหาร การหารเป็นกระบวนการที่ช้ากว่าการคูณ ดังนั้นวิธีการนี้จึงช่วยเพิ่มความเร็วได้อย่างมาก ขั้นตอนแรกค่อนข้างช้า แต่จำเป็นต้องทำเพียงครั้งเดียวเท่านั้น
ตัวผกผันการคูณแบบโมดูลาร์ถูกนำมาใช้เพื่อหาคำตอบของระบบสมการเชิงเส้นที่รับประกันโดยทฤษฎีบทเศษเหลือของจีน
ตัวอย่างเช่น ระบบ
- X ≡ 4 (mod 5)
- X ≡ 4 (mod 7)
- X ≡ 6 (mod 11)
มีคำตอบร่วมกัน เนื่องจาก 5, 7 และ 11 เป็นจำนวนเฉพาะสัมพัทธ์ กัน คำตอบหนึ่งคือ
- X = t 1 (7 × 11) × 4 + t 2 (5 × 11) × 4 + t 3 (5 × 7) × 6
ที่ไหน
- t 1 = 3 คือตัวผกผันการคูณแบบโมดูลาร์ของ 7 × 11 (mod 5)
- t 2 = 6 คือตัวผกผันการคูณแบบโมดูลาร์ของ 5 × 11 (mod 7) และ
- t 3 = 6 คือตัวผกผันการคูณแบบโมดูลาร์ของ 5 × 7 (mod 11)
ดังนั้น,
- X = 3 × (7 × 11) × 4 + 6 × (5 × 11) × 4 + 6 × (5 × 7) × 6 = 3504
และในรูปแบบย่อที่เป็นเอกลักษณ์
- X ≡ 3504 ≡ 39 (mod 385)
เนื่องจาก 385 คือค.ร.ม.ของ 5, 7 และ 11
นอกจากนี้ ตัวผกผันการคูณแบบโมดูลาร์ยังมีบทบาทสำคัญในนิยามของผลรวมคลูสเตอร์แมนอีก ด้วย
ดูเพิ่มเติม
- เครื่องกำเนิดเลขสุ่มแบบผกผันเชิงสอดคล้อง – เครื่องกำเนิดเลขสุ่มเทียมที่ใช้ตัวผกผันการคูณแบบโมดูลาร์
- การสร้างใหม่เชิงเหตุผล (คณิตศาสตร์)
หมายเหตุ
- ^โรเซน 1993 , หน้า 132.
- ^ Schumacher 1996 , หน้า 88.
- ^สตินสัน, ดักลาส อาร์. (1995), การเข้ารหัสลับ / ทฤษฎีและการปฏิบัติ , สำนักพิมพ์ CRC, หน้า 124–128 , ISBN 0-8493-8521-0
- ^ Trappe & Washington 2006 , หน้า 164−169.
- ^ Moriarty, K.; Kaliski, B.; Jonsson, J.; Rusch, A. (2016). PKCS #1: ข้อกำหนดการเข้ารหัส RSA . IETF . sec. 2.2. doi : 10.17487/RFC8017 . RFC 8017 . สืบค้นเมื่อ21 มกราคม 2017 .
- ^มักใช้สัญลักษณ์อื่น ๆ รวมถึง [ a ] และ [ a ] mด้วย
- ^ Ireland & Rosen 1990 , หน้า 32
- ^ Shoup, Victor (2005), A Computational Introduction to Number Theory and Algebra , Cambridge University Press, ทฤษฎีบท 2.4, หน้า 15, ISBN 9780521851541
- ^โรเซน 1993หน้า 121
- ^ Ireland & Rosen 1990 , หน้า 31
- ^โทมัส โคชี.ทฤษฎีจำนวนเบื้องต้นพร้อมการประยุกต์ใช้ฉบับที่ 2 ISBN 978-0-12-372487-8หน้า 346
- ^ Brent, Richard P. ; Zimmermann, Paul (ธันวาคม 2010). "§2.5.1 การผกผันหลายครั้งพร้อมกัน" (PDF) . เลขคณิตคอมพิวเตอร์สมัยใหม่ . เอกสารวิชาการเคมบริดจ์ว่าด้วยคณิตศาสตร์เชิงคำนวณและประยุกต์ เล่มที่ 18 สำนักพิมพ์มหาวิทยาลัยเคมบริดจ์ หน้า 67–68 . ISBN 978-0-521-19469-3.
- ^ Jean-Guillaume Dumas, On Newton-Raphson iteration for multiplicative inverses modulo prime powers , 22 เม.ย. 2019, หน้า 6
- ^ Cryptography StackExchange,วิธีการหาตัวผกผันการคูณโมดูล 64 (หรือเลขยกกำลังสองอื่นๆ)? , 17 พฤษภาคม 2017
- ^ Trappe & Washington 2006 , หน้า 167
- ^ Trappe & Washington 2006 , หน้า 165
ลิงก์ภายนอก
- ไวส์สไตน์, เอริก ดับเบิลยู. "Modular Inverse" . แมทเวิลด์ .
- เกวารา วาสเกซ เฟอร์นันโดได้นำเสนอตัวอย่างการแก้ปัญหาตัวผกผันการคูณแบบโมดูลัสโดยใช้อัลกอริทึมของยูคลิด
- ตัวผกผันการคูณจำนวนเต็มโดยใช้วิธีของนิวตันให้ขั้นตอนวิธีที่รวดเร็วในการคำนวณตัวผกผันการคูณโมดูลัสกำลังของ 2
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ ตัวผกผันการคูณแบบโมดูลาร์
ใน คณิตศาสตร์ โดยเฉพาะในสาขา เลขคณิต ตัว ผกผันการคูณแบบมอดูลาร์ ของ จำนวนเต็ม a คือจำนวนเต็ม x ที่ผลคูณ ax สอดคล้อง กับ 1 เมื่อ เทียบกับมอดูลัสm [ 1 ] ใน สัญลักษณ์มาตรฐานของ...
เลขคณิตแบบโมดูลาร์
สำหรับจำนวนเต็มบวก m ที่กำหนดให้ จำนวนเต็มสองจำนวน a และ b จะเรียกว่า สมมูลกันมอดูล m ถ้า m หารผลต่างของจำนวนเต็ม ทั้งสองลงตัว ความสัมพันธ์ทวิภาค นี้ เขียนแทนด้วย
จำนวนเต็มโมดูล m
ความสัมพันธ์สมมูล โมดูลัส m แบ่งเซตของจำนวนเต็มออกเป็น m ชั้นสมมูล การดำเนินการบวกและการคูณสามารถกำหนดได้บน วัตถุ m เหล่านี้ ในลักษณะต่อไปนี้: ในการบวกหรือคูณชั้นสมมูลสองชั้น ขั้นแรกให้เลือกตัวแทน (ด้วยวิธีใดก็ได้) จากแต่ละชั้น...
กลุ่มการคูณของจำนวนเต็มมอดูล m
ไม่ใช่ว่าทุกองค์ประกอบของระบบเศษเหลือสมบูรณ์มอดูล m จะมีตัวผกผันการคูณมอดูล ตัวอย่างเช่น ศูนย์จะไม่มีตัวผกผันการคูณมอดูลถ้า m > 1 หลังจากลบองค์ประกอบของระบบเศษเหลือสมบูรณ์ที่ไม่เป็นจำนวนเฉพาะสัมพัทธ์กับ m ออกไปแล้ว สิ่งที่เหลืออยู่เรียกว่า ระบบเศษเหลือลดรูป...