Score:3

การใช้ปัจจัยร่วมเพื่อค้นหาจุดฐานสำหรับเหตุผลด้านประสิทธิภาพเท่านั้นหรือไม่

ธง fr

สำหรับการเข้ารหัสเส้นโค้งวงรี ขั้นตอนการค้นหาจุดฐานที่สร้างกลุ่มย่อยที่มีลำดับ $n$ เป็น:

  1. คำนวณการสั่งซื้อ $N$ ของเส้นโค้งวงรี (ใช้ของ Schoof)
  2. เลือก $n$. $n$ ต้องเป็นจำนวนเฉพาะและตัวหารของ $N$
  3. คำนวณโคแฟกเตอร์ $h = \frac{N}{n}$
  4. เลือกจุดสุ่ม $พี$ บนทางโค้ง
  5. คำนวณ $G = hP$
  6. ถ้า $G$ เป็น 0 แล้วกลับไปที่ขั้นตอนที่ 4 มิฉะนั้น คุณพบตัวสร้างที่มีลำดับ $n$ และโคแฟกเตอร์ $h$

แหล่งที่มา

จุดประสงค์ของโคแฟกเตอร์ในที่นี้คือเพื่อเพิ่มประสิทธิภาพในการหากลุ่มย่อยขนาดใหญ่เท่านั้นใช่หรือไม่?

ฉันคิดว่าถ้าคุณไม่ได้ใช้ co-factor และพยายามคำนวณแบบ brute-force แทนว่าจุดสุ่ม $พี$เป็นตัวกำเนิดสำหรับกลุ่มย่อยที่มีขนาด $n$ คุณจะต้องทำ $n$ การทำซ้ำซึ่งจะเป็นไปไม่ได้ในคอมพิวเตอร์สมัยใหม่ แต่ฉันต้องการยืนยัน

แก้ไข: ย่อหน้าสุดท้ายของฉันผิด b/c เราสามารถใช้กำลังสองซ้ำๆ เพื่อคำนวณได้ $G = nP$

kelalaka avatar
in flag
การหลอกลวง [วิธีค้นหาลำดับของเครื่องกำเนิดไฟฟ้าบนเส้นโค้งวงรี](https://crypto.stackexchange.com/q/44089/18298)
Andreas ZUERCHER avatar
tr flag
@kelalaka คำถาม & คำตอบที่เชื่อมโยงของคุณไม่ได้ซ้ำกันจริง ๆ เนื่องจากไม่ได้พูดถึงเหตุผลด้านประสิทธิภาพเลย แรงผลักดันหลักของคำถามนี้ไม่ใช่ “ทำอย่างไร” แต่ทำไม: ประสิทธิภาพเพียงอย่างเดียวหรือประสิทธิภาพ + เหตุผลอื่นๆ
Score:3
ธง my

จุดประสงค์ของโคแฟกเตอร์ในที่นี้คือเพื่อเพิ่มประสิทธิภาพในการหากลุ่มย่อยขนาดใหญ่เท่านั้นใช่หรือไม่?

อัลกอริทึมสำรองนี้จะใช้งานได้ (สมมติว่า $n$ เป็นนายก; ที่จริงแล้วอัลกอริทึมทั้งสองถือว่า $n$ เป็นจำนวนเฉพาะ):

  1. เลือกจุด P แบบสุ่มบนเส้นโค้ง (นอกเหนือจากจุดที่ไม่มีที่สิ้นสุด)

  2. คำนวณ $G = nP$

  3. ถ้า $ก \n 0$ให้กลับไปที่ขั้นตอนที่ 4 มิฉะนั้น คุณพบตัวสร้างที่มีลำดับ $n$ และโคแฟกเตอร์ $h$

อัลกอริทึมนั้นจะใช้งานได้ อย่างไรก็ตามเห็นได้ชัดว่ามีประสิทธิภาพน้อยกว่ามาก ส่วนหนึ่งเป็นเพราะคอมพิวเตอร์ $nP$ จะมีราคาแพงกว่าคอมพิวเตอร์มาก $hP$ (อย่างที่เรามักจะ $n \ggg h$) และในเวอร์ชันแก้ไข คุณจะต้องคาดหวัง $h$ การวนซ้ำก่อนที่จะพบจุด ในขณะที่อัลกอริทึมดั้งเดิมนั้นเป็นสิ่งที่คาดไว้ $1 + 1/n$ การทำซ้ำ (นั่นคือการทดสอบในตอนท้ายแทบไม่เคยล้มเหลว)

Foobar avatar
fr flag
ขอบคุณสำหรับการตอบสนอง คุณช่วยอธิบายประโยคสุดท้ายของคุณโดยละเอียดได้ไหม (มีการแก้ไขโดยอ้างถึงเวอร์ชันที่ใช้โคแฟกเตอร์หรืออัลกอริทึมที่ช้ากว่า)?
Foobar avatar
fr flag
นอกจากนี้เกี่ยวกับการทำซ้ำ ฉันถือว่าคุณหมายความว่ามีการวนซ้ำใหม่ทุกครั้งที่เราเดาจุดสุ่มใหม่ $P$เนื่องจากภายใต้อัลกอริทึมทั้งสองจุด $P$ ถูกเลือกแบบสุ่ม เหตุใดจึงมีการคาดเดาน้อยกว่าในอัลกอริทึมเดิม
knaccc avatar
es flag
@Roymunson หลังจากเลือกจุดสุ่มที่ตรงกับสมการเส้นโค้ง การวนซ้ำของอัลกอริทึมของคุณจะสำเร็จ $N-h$ จาก $N$ ครั้ง (เช่น เกือบจะแน่นอน) และอัลกอริทึมทางเลือกของปอนโช (ถ้าคุณพิจารณาว่าการเริ่มต้นซ้ำเวลา ของการเลือกจุดสุ่ม แต่ก่อนการตรวจสอบอินฟินิตี้) การวนซ้ำแต่ละครั้งจะสำเร็จเพียง $n-1$ จาก $N$ ครั้ง (เช่น ประมาณ $1$ จาก $h$ ครั้ง) ข้อได้เปรียบของอัลกอริทึมของเสื้อปอนโชคือจะไม่ยกเว้นความเป็นไปได้ที่ถูกต้องใดๆ
poncho avatar
my flag
@knaccc: จริง ๆ แล้วอัลกอริทึมดั้งเดิมจะไม่ยกเว้นความเป็นไปได้ที่ถูกต้องเช่นกัน ในความเป็นจริง มันจะสร้างเครื่องกำเนิดไฟฟ้าที่เป็นไปได้ทั้งหมดด้วยความน่าจะเป็นที่เท่ากัน
knaccc avatar
es flag
@poncho ขอบคุณที่ชี้ให้เห็น ตอนนี้ฉันคิดเกี่ยวกับมัน นั่นก็สมเหตุสมผลดี
Score:1
ธง in

นี่เป็นผลลัพธ์เชิงประจักษ์เพื่อเสริมคำตอบของ Poncho

ใช้ Curve25519 ซึ่งมีปัจจัยร่วม $8$ เป็นคำสั่ง $n$ ของปัจจัยกลุ่มดังเช่น

$\small{n = 2^3 * 7237005577332262213973186563042994240857116359379907606001950938285454250989}$

  • $h = 8 $
  • $q = n/8$

เราใช้ SageMath และ SageMath สุ่ม_องค์ประกอบ ซึ่งทำหน้าที่ มันอาจส่งคืนองค์ประกอบเอกลักษณ์ $\mathcal{O}$ ของเส้นโค้ง (โอกาสได้น้อยมาก) , บน Curve25519 $\คณิตศาสตร์แคล{O} = (0:1:0)$ ในรูปแบบไวเออร์สตราส

เวลานำเข้า

def สุ่มBasePointByCofactor (E, เอกลักษณ์, ปัจจัยร่วม):
    
    s = เวลา เวลา ()
    ci = 0
    n = E.คำสั่ง()
    สำหรับผมในช่วง (1,10000):
        P = E.random_element()
        ถ้า cofactor*P != ตัวตน:
            ci = ci +1
    จ = เวลา เวลา ()
    พิมพ์ ("เวลาที่ผ่านไปบน RandomBasePointByCofactor", e-s)
    กลับ (ci)
        
def RandomBasePointByOrder (E, ตัวตน, ปัจจัยร่วม):
    
    s = เวลา เวลา ()
    ci = 0
    n = จำนวนเต็ม (E.order() / ตัวประกอบ)
    สำหรับผมในช่วง (1,10000):
        P = E.random_element()
        ถ้า n*P == ตัวตน:
            ci = ci +1

    จ = เวลา เวลา ()
    พิมพ์ ("เวลาที่ผ่านไปบน RandomBasePointByOrder", e-s)
    กลับ (ci)    

พี = 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffff
K = GF(พี)
ก = K(0x76d06)
B = K(0x01)
E = EllipticCurve(K, ((3 - A^2)/(3 * B^2), (2 * A^3 - 9 * A)/(27 * B^3)))

IP = E((0,1,0))
ผูกพัน = 10,000

พิมพ์ (" จำนวนเครื่องกำเนิดไฟฟ้าที่พบ =" , RandomBasePointByCofactor(E,IP,8), "/", ผูกไว้)

พิมพ์ (" จำนวนตัวสร้างที่พบ =", RandomBasePointByOrder (E, IP,8),"/", ผูกไว้)

ผลลัพธ์ตัวอย่างคือ

เวลาที่ผ่านไปบน RandomBasePointByCofactor 1.9164307117462158
 จำนวนเครื่องกำเนิดไฟฟ้าที่พบ = 9999 / 10,000
เวลาที่ผ่านไปบน RandomBasePointByOrder 64.77565383911133
 จำนวนเครื่องกำเนิดไฟฟ้าที่พบ = 1267 / 10,000

ดังนั้น

  • วิธี cofactor เร็วกว่า ~ 32 เท่าเร็วกว่าในการทดลอง

    เราสามารถอธิบายสิ่งนี้ด้วยคำง่ายๆ เช่น $8$ ต้องการการเสแสร้ง 4 ครั้งและการเพิ่ม 1 ครั้ง ในขณะที่ $n$ ต้องการการเสแสร้ง 251 ครั้งและการเพิ่ม 125 ครั้งด้วยความไร้เดียงสา ดับเบิลและอัลกอริทึม. สิ่งนี้ให้การคำนวณเพิ่มขึ้น ~ 75 เท่าหากเราถือว่าการเพิ่มเป็นสองเท่าและการเพิ่มเติมมีความเร็วเท่ากันซึ่งไม่ใช่

  • วิธีปัจจัยร่วมสร้างเครื่องกำเนิดไฟฟ้ามากกว่าวิธีการสั่งซื้อตั้งแต่ $1/8$ ขององค์ประกอบสุ่มจาก $8\cdot q$ ตกอยู่ในนายกรัฐมนตรีขนาดใหญ่ $คิว$ ของ Curve25519.

ดังนั้นวิธีโคแฟกเตอร์จึงเป็นที่นิยม

Foobar avatar
fr flag
ขอบคุณ สคริปต์นี้มีประโยชน์อย่างยิ่งสำหรับการดูทฤษฎีในการดำเนินการ
kelalaka avatar
in flag
นั่นคือเหตุผลที่จำเป็นต้องดำเนินการเพื่อดู แม้แต่ Paul Erdös ก็มีปัญหากับ [ปัญหาของ Monty Hall](https://en.wikipedia.org/wiki/Monty_Hall_problem) จนกระทั่งพวกเขาเห็นการจำลองด้วยคอมพิวเตอร์..

โพสต์คำตอบ

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