Score:0

อัลกอริทึมแฮชการเข้ารหัสแบบเสริมที่ไม่สามารถย้อนกลับได้

ธง in

ฉันต้องการฟังก์ชันแฮชการเข้ารหัสแบบเบาซึ่งเป็นส่วนเสริมแต่ไม่สามารถย้อนกลับได้ แต่ฉันไม่แน่ใจว่ามีฟังก์ชันดังกล่าวอยู่! (จะดีกว่าถ้าใช้งานได้หลายชุดด้วย)

โดยสารเติมแต่งฉันหมายถึง: ให้ฟังก์ชันดังกล่าว , ฟังก์ชั่นอื่น ต้องมีอยู่มีทรัพย์สิน g(f(X),f(Y))=f(X||Y), ที่ไหน || หมายถึงการต่อสตริงเข้าด้วยกัน เอ็กซ์ และ วาย.

ฉันได้พบฟังก์ชันแฮชโฮโมมอร์ฟิคจาก เฟสบุ๊ค ซึ่งเป็นสารเติมแต่งแต่ก็ผันกลับได้เช่นกัน


แก้ไข:

ฉันไม่ได้หมายถึงการต้านทานภาพล่วงหน้าแม้ว่าฉันจะต้องการมีคุณสมบัตินั้นในฟังก์ชันโดยรวมก็ตาม

ไม่สามารถย้อนกลับได้: ถ้าเรารู้ว่า ฉ(X||Y) และนั่น วาย เป็นองค์ประกอบที่ใช้เป็นอินพุต จึงไม่สามารถคำนวณ g ได้-1(f(X||Y),f(Y)) เพื่อรับ ฉ(เอ็กซ์)

ปล.ฉันกำลังพยายามค้นหาโซลูชันที่ทนทานต่อควอนตัมและน้ำหนักเบาพอที่จะทำงานในอุปกรณ์ IoT

poncho avatar
my flag
คุณอาจต้องการเพิ่มคุณสมบัติอื่นๆ ที่คุณต้องการ สำหรับการบวกและย้อนกลับไม่ได้ เรามีฟังก์ชัน $f(x) = 0$ และ $g(0, 0) = 0$; ที่ตรงตามข้อกำหนดทั้งสอง แต่ฉันสงสัยว่ามันจะมีประโยชน์สำหรับกรณีการใช้งานของคุณ (ไม่ว่าจะเป็นอะไรก็ตาม) สิ่งที่ค่อนข้างเล็กน้อยสามารถหาได้จากการ xor'ing ไบต์ของสตริงอินพุตเข้าด้วยกัน ...
in flag
@poncho คุณพูดถูก! ฉันหมายถึงรหัสลับ
poncho avatar
my flag
ด้วยการเข้ารหัส คุณหมายถึงความทนทานต่อพรีอิมเมจ (คำตอบของ baro77 ทำเช่นนั้น) การต้านทานพรีอิมเมจที่สองหรือการต้านทานการชนกันหรือไม่
poncho avatar
my flag
หากคุณต้องการพรีอิมเมจที่สองหรือการต้านทานการชน โปรดดูความคิดเห็นของฉันที่ส่งไปยัง baro77 ซึ่งสำรวจแนวคิด (ซึ่งจำเป็นต้องทำให้สมบูรณ์...)
in flag
@poncho ฉันกำลังอ่านความคิดเห็นที่เป็นประโยชน์ของคุณ! และปรับปรุงคำถามให้ถูกต้อง ขอบคุณทั้งสอง :)
poncho avatar
my flag
QR ทำให้สิ่งนี้ยาก - วิธีแก้ปัญหาแบบ baro77 จะขึ้นอยู่กับกลุ่ม และอัลกอริทึมของ Shor จะแก้ปัญหาที่ยากที่สุดโดยอิงตามกลุ่ม...
Score:1
ธง gd

ตอนนี้ฉันกำลังรีบ แต่ฉันต้องการแบ่งปันแนวคิดบางอย่างกับคุณ (ซึ่งหากจำเป็น ฉันจะให้รายละเอียดในวันถัดไป):

  • การต่อกันสามารถเห็นเป็น $x||y = xk+y$ ที่ไหน $k=2^{|y|}$
  • ดังนั้น $f(x||y) = ฉ(xk+y)$
  • ถ้าเราถือว่า $f$ เป็นการคูณสำหรับเครื่องกำเนิด EC $G$ (การตั้งค่า EC privkey/pubkey ทั่วไป) เราได้รับ:

$f(x) = Gx$

$f(y) = Gy$

$f(x||y) = G(xk+y) = G(xk) + Gy = G(x+x+...+x) + Gy = (Gx + Gx + ... + Gx) + Gy = kGx + Gy$

  • ข้อความสุดท้ายให้คุณ $g$ (ความสัมพันธ์เชิงสัญลักษณ์เท่ากับการต่อข้อมูล แต่ตอนนี้ดำเนินการกับจุด EC)

$f(x) = Gx$ แน่นอนว่าไม่ใช่แฮช แต่ก็ไม่พลิกกลับได้ (เป็นปัญหาลอการิทึมแบบไม่ต่อเนื่องทั่วไป) และด้วยคำจำกัดความข้างต้นดูเหมือนว่า (ถ้าฉันจำไม่ผิด) เพิ่มตามที่คุณร้องขอ


แก้ไข: ทั่วไป

ตามที่ @poncho ชี้ให้เห็นอย่างระมัดระวัง แนวคิดก่อนหน้านี้จะทำงานได้ก็ต่อเมื่อทั้งหมด $y$ มีขนาดที่ทราบล่วงหน้าคงที่ เพราะสิ่งนี้รับประกันได้ว่า $k$ คงที่และสามารถใช้ใน $g$ (ซึ่งไม่มี "การมองเห็นโดยตรง" ของ $y$ เพื่อคำนวณขนาดของมัน) วิธีแก้ปัญหาที่ชาญฉลาดที่ @poncho แนะนำคือปล่อยให้ $f$ ส่งขนาดอินพุตไปยัง "ขั้นตอนต่อไป" ดังนั้นคำจำกัดความก่อนหน้านี้จึงสรุปในลักษณะนี้:

  • $x||y = xk+y$ ที่ไหน $k=2^{|y|}$ แล้วแต่ขนาดของ $y$ เป็น
  • $f(x) = (Gx, |x|) = (X, |x|)$
  • $f(x||y) = f(xk+y) = (kX+Y,|x|+|y|) = (2^{|y|}X+Y,|x|+|y|) $
  • $g((X,s_x),(Y,s_y)) = (2^{s_y}X+Y, s_x+s_y)$

ยังคง $f$ ไม่ใช่แฮช แต่อย่างที่เคยกล่าวไว้ว่าเป็นสารเติมแต่งในรสชาติของคุณและไม่สามารถเปลี่ยนกลับได้ (ทนพรีอิมเมจตัวแรก ในคำศัพท์แฮช).

poncho avatar
my flag
ปัญหาหนึ่งของสิ่งนี้คือการทำงานของ $g$ ขึ้นอยู่กับความยาวของ $y$ ตอนนี้สามารถแก้ไขได้โดยการรวมความยาวของสตริงแฮชในเอาต์พุตของ $f$ นั่นคือ $f(x) = (xG, |x|)...
baro77 avatar
gd flag
@poncho คุณพูดถูกแน่นอน ในใจของฉันกำลังคิดที่จะกำหนดความยาวของสตริงให้คงที่และทราบล่วงหน้า
poncho avatar
my flag
"การรวมขนาดอินพุทในเอาต์พุตยังหลีกเลี่ยงการโจมตีแบบพรีอิมเมจครั้งที่สองและการชนกัน"; ไม่ (ยกเว้นการโจมตีพรีอิมเมจครั้งที่สองกับอินพุตสั้น); การเพิ่มลำดับของตัวสร้างจะไม่เปลี่ยนการคูณจุด หากการเติมนี้ไม่เปลี่ยนความยาว (เนื่องจากค่าที่แฮชนั้นยาวกว่าความยาวอยู่แล้ว และการเพิ่มไม่ได้ทำให้เกิด 'โอเวอร์โฟลว์') ดังนั้นผลลัพธ์การแฮชก็จะเหมือนเดิม
poncho avatar
my flag
ในทางกลับกัน หาก OP ต้องการพรีอิมเมจที่สองหรือการต้านทานการชนกัน คุณสามารถใช้แนวคิดเดียวกันได้ แต่แทนที่จะใช้กลุ่ม EC ให้ทำผ่านโมดูโลวงแหวนการคูณที่ประกอบด้วยการแยกตัวประกอบลับ ("โมดูลัส RSA"); ที่นั่น พรีอิมเมจ/การชนกันครั้งที่สองนั้นพิสูจน์ได้ว่าปลอดภัยพอๆ กับแฟคตอริ่ง (สมมติว่ามีตัวสร้างที่เลือกมาอย่างดี และมีข้อแม้ว่ามีแบ็คดอร์สำหรับคนที่รู้การแยกตัวประกอบ)
baro77 avatar
gd flag
อืม @poncho .. ตอนนี้ฉันไม่เข้าใจประเด็นของคุณ... แน่ใจว่า $l$ เป็นคำสั่ง EC $Gx = G(x+l)$ แต่ $|x| != |x+l|$ . สำหรับฉันแล้ว ดูเหมือนว่าคุณกำลังสมมติว่าขนาดอินพุตในเอาต์พุตถูกตัดทอน... ทำไม ในใจของฉันมันไม่ใช่ ดังนั้นเอาต์พุตโดยรวมของ $f(x)$ จึงแตกต่างจาก $f(x+l)$ one: ดังนั้นการค้นหาพรีอิมเมจที่สองหรือการชนกันจึงไม่ใช่เรื่องง่ายเหมือนการเพิ่มลำดับกลุ่ม
poncho avatar
my flag
ที่จริง ถ้า $x > l$ เป็นไปได้ว่า $|x| = |x +l|$
baro77 avatar
gd flag
@poncho คุณพูดถูก :) ตอนนี้ฉันเห็นประเด็นแล้ว: ถ้า $x$ ใหญ่พอแล้ว มันอาจเกิดขึ้นได้ ขนาดบิตของมันไม่ได้รับผลกระทบจากการเพิ่ม $l$ ขอบคุณสำหรับการแก้ไขผู้ป่วย!

โพสต์คำตอบ

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