Score:2

แอบคำนวณการคูณของสองจำนวนที่มีคนสองคนเป็นเจ้าของ

ธง br
Leo

ตัวอย่างเช่น อลิซและบ็อบมีตัวเลขสองตัว $a$ และ $ข$ตามลำดับ พวกเขาต้องการคำนวณการคูณ $a\cdotข$ โดยที่อลิซไม่รู้ตัว $ข$ หรือบ๊อบรู้ $a$ และส่งการคูณนี้ $a\cdotข$ ถึงแครอล แครอลจะใช้สิ่งนี้ $a\cdotข$ เพื่อทำการสมัครต่อไป แครอลจะไม่สมรู้ร่วมคิดกับอลิซหรือบ็อบ มีวิธีและห้องสมุด / เครื่องมือใดใน Golang เพื่อบรรลุเป้าหมายนี้หรือไม่? ขอขอบคุณ!

Score:1
ธง es

ฉันถือว่าตัวเลขของคุณเป็นจำนวนเต็มที่มากกว่าศูนย์และน้อยกว่า $n$.

อลิซเลือกปัจจัยที่ทำให้ไม่เห็นแบบสุ่มอย่างสม่ำเสมอ $k$ ที่ไหน $0<k<n$และส่ง $k\cdota$ ถึงบ๊อบและ $k$ ถึงแครอล บ๊อบส่ง $k\cdot a\cdot b$ ถึงแครอล แครอลคำนวณ $a\cdot b=k^{-1}\cdot k\cdot a\cdot b$.

จำเป็นต้องดำเนินการทั้งหมด $mod\ n$. ผลิตภัณฑ์ $a\cdotข$ ต้องน้อยกว่า $n$เว้นแต่ว่าคุณกำลังจัดการกับสเกลาร์/คีย์ส่วนตัว ซึ่งไม่สำคัญว่าแครอลจะได้ผลิตภัณฑ์มาหรือไม่ $mod\ n$.

$k^{-1}$ หมายถึง ผกผันการคูณแบบโมดูลาร์ ของ $k$. ดังนั้นคุณควรตรวจสอบให้แน่ใจว่าคุณได้เลือก $n$ เป็นนายก

ขึ้นอยู่กับแอปพลิเคชันของคุณ คุณอาจใช้หมายเลขเหล่านี้เป็นคีย์ส่วนตัว ซึ่งในกรณีนี้คุณควรเลือก $n$ เพื่อให้เป็นลำดับกลุ่มที่สำคัญของเครื่องกำเนิดของคุณ เช่น. สำหรับ Curve25519 หรือ Ed25519 ให้ใช้ลำดับที่ระบุใน อาร์เอฟซี 7748หรือใช้ $คิว$ ค่าที่ระบุสำหรับกลุ่ม MODP ใน rfc5114.

Score:1
ธง cn

วิธีแก้ปัญหาโดยไม่ต้องสันนิษฐานว่า $a$ และ $ข$ ไม่เป็นศูนย์และไม่ต้องคำนวณผลคูณผกผัน ซึ่งไม่เกี่ยวข้องกับการสื่อสารระหว่างอลิซกับบ๊อบ นอกเหนือจากข้อตกลงล่วงหน้าเกี่ยวกับสตริงสุ่มทั่วไป (ซึ่งเรียกว่าโมเดล "ข้อความพร้อมกันส่วนตัว"):

อลิซและบ็อบเห็นด้วย $r,s,t$ (สามตัวเลขสุ่ม). อลิซมาส่ง $c = a+r, c' = c\cdot s + t$ ถึงแครอลและบ็อบก็ส่ง $d = b+s, d' = b\cdot r - t$ ถึงแครอล แครอลคำนวณ $c\cdot d - (c' + d')$.

ที่นี่ผลรวมสามารถทำได้แบบโมดูโล $n$, ที่ไหน $n$ เป็นขอบเขตบนสาธารณะ $a$ และ $ข$และ "สุ่ม" หมายถึงองค์ประกอบสุ่มที่สม่ำเสมอของ $\mathbb{Z}/n\mathbb{Z}$.

หมายเหตุ: ประเด็นสำคัญในคำถามของคุณคือข้อสันนิษฐานที่ว่าแครอลจะไม่สมรู้ร่วมคิดกับอลิซและบ็อบ เป็นผลแบบดั้งเดิมที่การคำนวณที่ปลอดภัยไม่จำเป็นต้องมีการเข้ารหัสหรือการสันนิษฐานในการคำนวณทันทีที่จำนวนฝ่ายที่สามารถสมรู้ร่วมคิดต่ำกว่าครึ่งหนึ่งของจำนวนทั้งหมดอย่างเคร่งครัด ซึ่งเป็นกรณีนี้ ดังนั้น คุณไม่จำเป็นต้องมีไลบรารี/เครื่องมือพิเศษใน Golang นอกเหนือจากเลขคณิตพื้นฐาน

Geoffroy Couteau avatar
cn flag
คุณพูดถูก ฉันควรตรวจสอบสิ่งที่ฉันเขียนก่อนส่ง ฉันลบโซลูชันแรกออกแล้วแทนที่ด้วยโซลูชันที่สอง ขอบคุณ!
knaccc avatar
es flag
คุณกำลังบอกว่าทั้งสาม $(r,s,t)$ เดียวกันสามารถใช้ซ้ำได้โดยไม่กระทบต่อความปลอดภัยของโครงการหรือไม่ ดูเหมือนว่าเป็นเทคนิคที่มีประโยชน์จริงๆ - มีรูปแบบต่างๆ ที่ใช้ในแอปพลิเคชันเชิงปฏิบัติที่คุณรู้จักหรือไม่
Geoffroy Couteau avatar
cn flag
ไม่ได้ $r,s,t$ ใช้ซ้ำไม่ได้ ตัวอย่างเช่น ถ้า $r$ ใช้ซ้ำกับ $a'$ ใหม่ แครอลจะเรียนรู้ $a-a'$อย่างไรก็ตาม วิธีการทั่วไปที่นี่คือการใช้การหลอกล่อ: อลิซและบ็อบตกลงเพียงเมล็ดพันธุ์สั้น ๆ และขยายเป็นจำนวนสามเท่าโดยพลการ $(r_i,s_i,t_i)$ ตามความต้องการได้ทันทีโดยไม่ต้องใช้เพิ่มเติม การโต้ตอบ (เช่น การใช้ฟังก์ชันสุ่มเทียม)
Geoffroy Couteau avatar
cn flag
โครงร่างที่ฉันอธิบายคือการเข้ารหัสแบบสุ่มสำหรับฟังก์ชันผลิตภัณฑ์ การเข้ารหัสแบบสุ่มมีแอปพลิเคชันที่มีประสิทธิภาพมากมายในการเข้ารหัส (ดู [เอกสารนี้](https://ieeeexplore.ieee.org/document/892118) และการติดตามอีกมากมาย เทคนิคนี้ค่อนข้างใช้งานได้จริงและสามารถนำไปใช้กับแอปพลิเคชันในโลกแห่งความเป็นจริงได้อย่างง่ายดาย แม้ว่าฉันจะไม่ทราบว่ามีแอปพลิเคชันที่ใช้งานได้จริงใดๆ ก็ตาม (ถ้าฉันต้องเดิมพัน ฉันก็ยังเดิมพันว่าแอปพลิเคชันที่ใช้งานได้จริงบางตัวใช้เทคนิคนี้)

โพสต์คำตอบ

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