ฉันกำลังใช้การเข้ารหัสแบบ 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 ช่วยปกป้องข้อมูลได้ดีขึ้นหรือไม่ และอย่างไร
ขอบคุณมาก!