Score:4

ความเสี่ยงของการใช้ SHA1 แทน SHA256 สำหรับ RSA ที่มี OAEP Padding

ธง us

ฉันกำลังใช้การเข้ารหัสแบบ RSA อย่างง่ายดังต่อไปนี้ใน PHP (โดยใช้ opensl_public_encrypt):

// $sRawText คือสตริงข้อความที่จะเข้ารหัส
// $sPublicKey คือรหัสสาธารณะที่เก็บไว้บนเซิร์ฟเวอร์
opensl_public_encrypt($sข้อความดิบ, $ผลลัพธ์, $sPublicKey, OPENSSL_PKCS1_OAEP_PADDING);
// $sResult คือผลลัพธ์ที่เข้ารหัสซึ่งจะถูกเก็บไว้

ฉันแน่ใจว่าใช้ตัวเลือกการเติม OAEP อย่างไรก็ตาม การเติมเสร็จสิ้นด้วย SHA1 แทน SHA256 PHP ไม่มีตัวเลือกการเติมในตัวที่รองรับ SHA256 ตัวอย่างเช่น ไลบรารีการเข้ารหัสของ Python ใช้ SHA256 แทนดังนี้:

จาก cryptography.hazmat.primitives นำเข้าการทำให้เป็นอนุกรม
จากแฮชนำเข้า cryptography.hazmat.primitives
จากการขยายการนำเข้า cryptography.hazmat.primitives.asymmetric
ciphertext = public_key.encrypt(
    ข้อความ,
    padding.OAEP(
        mgf=padding.MGF1(อัลกอริทึม=hashes.SHA256()),
        อัลกอริทึม = hashes.SHA256 (),
        ป้ายกำกับ=ไม่มี
    )
)

ตัวเลือกเดียวสำหรับฉันในการรับ SHA256 บน PHP คือการใช้ไลบรารีของบุคคลที่สาม เช่น PHPSecLib หรือ EasyRSA ฉันพบสิ่งกีดขวางบนถนนหลังจากพยายามติดตั้งและใช้สิ่งกีดขวางบนสภาพแวดล้อมการโฮสต์ที่ใช้ร่วมกันของฉันไม่กี่ชั่วโมงหลังจากผ่านไปสองสามชั่วโมง (จะดีมากถ้าฉันสามารถใส่ไฟล์ .php หนึ่งไฟล์ที่มี RSA ทั้งหมดในที่เดียว)

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

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

ฉันวางแผนที่จะจัดการข้อมูลที่เข้ารหัสแบบออฟไลน์ทั้งหมด และจะใช้ฟิลด์ฐานข้อมูลที่เข้ารหัสเพื่อการตรวจสอบเท่านั้น (เช่น ข้อมูลตรงกับข้อมูลที่ผู้ใช้ป้อน) หรือเพื่อนับรายการบางฟิลด์ในฐานข้อมูลไม่ละเอียดอ่อน ดังนั้นจึงไม่ถูกเข้ารหัส และฟิลด์อื่นๆ เช่น รหัสผ่านจะถูกแฮช

สิ่งที่ฉันอยากรู้คือ ถ้าฉันดำเนินการใช้การเติม SHA1 ต่อไป การโจมตีแบบใดที่จะเปิดโอกาสให้ฉันต่อสู้กับศัตรูด้วยข้อมูลฐานข้อมูลที่เข้ารหัสและรหัสสาธารณะ พวกเขาจะทำอย่างไรกับการโจมตีเหล่านี้? การเติม SHA256 ช่วยปกป้องข้อมูลได้ดีขึ้นหรือไม่ และอย่างไร

ขอบคุณมาก!

kelalaka avatar
in flag
ขอบคุณ. ยังคง `ปลอดภัยเนื่องจาก MGF ไม่ใช่วิธีมาตรฐานในการค้นหาการชนกันของ SHA-1 อย่างไรก็ตาม หาวิธีที่จะโยกย้าย` โยกย้ายไปใช้ SHA-256; ค้นหาวิธีใช้
us flag
ฉันเข้าใจว่า SHA-256 เป็นตัวเลือกที่แนะนำ อย่างไรก็ตาม ฉันต้องการทำความเข้าใจว่าทำไมและอะไรคือความเสี่ยงของ SHA-1 MGF เป็นฟังก์ชันสร้างช่วงเวลาหรือไม่?
Score:5

คุณสามารถใช้ SHA-1 หรือ MD5 สำหรับ OAEP จะไม่ทำให้คุณถูกโจมตีใดๆ

OAEP ใช้ฟังก์ชันแฮชสำหรับสองสิ่ง: เพื่อแฮชป้ายกำกับ และเป็นส่วนหนึ่งของฟังก์ชันการสร้างมาสก์ ซึ่งในทางปฏิบัติแล้ว จะเป็น MGF1 ของฟังก์ชันแฮชบางตัวเสมอ

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

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

การใช้ SHA-1 ในการสร้างการเข้ารหัสอาจทำให้ผู้ตรวจสอบขมวดคิ้ว และทำให้ระบบของคุณไม่เป็นไปตามมาตรฐานความปลอดภัยบางประการ ในแง่ของความปลอดภัย มันทำให้เสียสมาธิเล็กน้อย แต่ไม่ใช่ช่องโหว่

โพสต์คำตอบ

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