หมวดหมู่ OWASP: MASVS-CRYPTO: การเข้ารหัส
ภาพรวม
แม้ว่าการเข้ารหัสจะใช้กันอย่างแพร่หลายเพื่อปกป้องการรักษาความลับและความสมบูรณ์ของข้อมูล แต่ก็ยังมีความเสี่ยงที่สำคัญเกิดขึ้นเมื่อนักพัฒนาแอปใช้ อัลกอริทึมการเข้ารหัสที่อ่อนแอหรือล้าสมัยโดยไม่ตั้งใจ ช่องโหว่นี้เกิดจาก จุดอ่อนที่มีอยู่ในอัลกอริทึมเหล่านี้ ซึ่งผู้ไม่ประสงค์ดีที่มีกำลังการประมวลผลหรือความรู้ที่จำเป็นอาจใช้แสวงหาประโยชน์ ผลที่ตามมาของการใช้ประโยชน์ดังกล่าวอาจร้ายแรง ซึ่งอาจนำไปสู่ การเข้าถึงโดยไม่ได้รับอนุญาต การละเมิดข้อมูล และการดัดแปลงข้อมูลที่ละเอียดอ่อน
ผลกระทบ
ข้อมูลที่ละเอียดอ่อนอาจถูกเปิดเผย แก้ไข หรือปลอมแปลง อัลกอริทึมการเข้ารหัสที่เสียหรือมีความเสี่ยงอาจนำไปสู่ช่องโหว่และอาจถูกนำไปใช้ในทางที่ผิดเพื่อถอดรหัสข้อมูลที่ละเอียดอ่อน ดัดแปลงข้อมูล หรือแอบอ้างเป็นเอนทิตีที่ถูกต้องตามกฎหมาย ผลกระทบจากการใช้ประโยชน์จากช่องโหว่ดังกล่าวอาจมีตั้งแต่การละเมิดข้อมูลและการสูญเสียทางการเงินไปจนถึงความเสียหายต่อชื่อเสียงและการสูญเสียความไว้วางใจจากผู้ใช้
ความเสี่ยง: ฟังก์ชันแฮชแบบเข้ารหัสที่อ่อนแอหรือใช้งานไม่ได้
การใช้ฟังก์ชันแฮชการเข้ารหัสที่อ่อนแอหรือใช้งานไม่ได้ (เช่น MD5
หรือ SHA1
)
ก่อให้เกิดความเสี่ยงอย่างมากต่อความปลอดภัยและความสมบูรณ์ของข้อมูล ฟังก์ชันแฮช
ออกแบบมาเพื่อสร้างลายนิ้วมือ (แฮช) ที่ไม่ซ้ำกันและมีความยาวคงที่ของข้อมูลที่ป้อน
จึงมีประโยชน์สำหรับวัตถุประสงค์ต่างๆ รวมถึงการยืนยันความสมบูรณ์ของข้อมูล
การจัดเก็บรหัสผ่าน และลายเซ็นดิจิทัล อย่างไรก็ตาม เมื่อใช้ฟังก์ชันแฮชที่อ่อนแอหรือถูกบุกรุก อาจเกิดช่องโหว่หลายประการดังนี้
- การโจมตีแบบชนกัน: ฟังก์ชันแฮชที่อ่อนแอมีแนวโน้มที่จะถูกโจมตีแบบชนกัน ซึ่งผู้โจมตีจะค้นหาอินพุต 2 รายการที่แตกต่างกันซึ่งสร้างค่าแฮชเดียวกัน ซึ่งอาจทำให้ผู้ไม่ประสงค์ดีสามารถแทนที่ข้อมูลที่ถูกต้องด้วยข้อมูลที่เป็นอันตราย โดยไม่ถูกตรวจพบ ซึ่งจะทำให้ความสมบูรณ์ของข้อมูลลดลง
- การละเมิดข้อมูล: หากแฮชรหัสผ่านด้วยอัลกอริทึมที่ไม่รัดกุม การละเมิดระบบที่สำเร็จอาจทำให้ข้อมูลเข้าสู่ระบบของผู้ใช้ถูกเปิดเผย จากนั้นผู้โจมตี อาจใช้ตารางเรนโบว์หรือเทคนิคอื่นๆ เพื่อถอดรหัสรหัสผ่าน และเข้าถึงบัญชีโดยไม่ได้รับอนุญาต
- การปฏิเสธลายเซ็นดิจิทัล: ฟังก์ชันแฮชที่อ่อนแอซึ่งใช้ในลายเซ็นดิจิทัลอาจถูกนำไปใช้สร้างลายเซ็นปลอม ซึ่งทำให้ตรวจสอบความถูกต้องและความสมบูรณ์ของเอกสารหรือข้อความได้ยาก
การลดปัญหา
การใช้ฟังก์ชันแฮชแบบเข้ารหัสที่แข็งแกร่งและผ่านการตรวจสอบอย่างดี เช่น SHA-2
หรือ SHA-3
และการอัปเดตฟังก์ชันเหล่านี้อย่างต่อเนื่องเมื่อพบช่องโหว่ใหม่ๆ เป็นสิ่งสำคัญในการลดความเสี่ยงเหล่านี้ นอกจากนี้ การนำแนวทางปฏิบัติด้านความปลอดภัยมาใช้ เช่น การเพิ่ม Salt ในรหัสผ่านและการใช้อัลกอริทึมการแฮชเฉพาะรหัสผ่าน เช่น bcrypt
หรือ Argon2
จะช่วยเพิ่มการปกป้องข้อมูลได้อีกด้วย
ความเสี่ยง: ฟังก์ชันการเข้ารหัสที่อ่อนแอหรือใช้งานไม่ได้
การใช้ฟังก์ชันการเข้ารหัสลับที่ไม่ปลอดภัยหรือใช้งานไม่ได้ (เช่น DES
หรือ
RC4
) ทำให้เกิดความเสี่ยงอย่างร้ายแรงต่อการรักษาความลับของข้อมูลที่ละเอียดอ่อน การเข้ารหัส
ออกแบบมาเพื่อปกป้องข้อมูลโดยการแปลงข้อมูลให้อยู่ในรูปแบบที่อ่านไม่ได้
แต่หากอัลกอริทึมการเข้ารหัสมีข้อบกพร่อง ก็อาจมีการข้ามการป้องกันเหล่านี้ได้
- การละเมิดข้อมูล: อัลกอริทึมการเข้ารหัสที่อ่อนแอมีแนวโน้มที่จะถูกโจมตีหลายรูปแบบ รวมถึงการโจมตีแบบ Brute Force, การโจมตีแบบข้อความธรรมดาที่ทราบ และ เทคนิคการวิเคราะห์รหัสลับ หากการโจมตีสำเร็จ การโจมตีเหล่านี้จะเปิดเผยข้อมูลที่เข้ารหัส ทำให้มีการเข้าถึงข้อมูลที่ละเอียดอ่อนโดยไม่ได้รับอนุญาต เช่น รายละเอียดส่วนบุคคล บันทึกทางการเงิน หรือข้อมูลธุรกิจที่เป็นความลับ
- การดัดแปลงและแก้ไขข้อมูล: แม้ว่าผู้โจมตีจะถอดรหัสข้อมูลได้ไม่สมบูรณ์ แต่ก็ยังอาจดัดแปลงข้อมูลได้โดยไม่ถูกตรวจพบหาก อัลกอริทึมการเข้ารหัสอ่อนแอ ซึ่งอาจนำไปสู่การแก้ไขข้อมูลโดยไม่ได้รับอนุญาต ซึ่งอาจส่งผลให้เกิดการฉ้อโกง การสื่อให้เข้าใจผิด หรือกิจกรรมที่เป็นอันตรายอื่นๆ
การลดปัญหา
ใช้อัลกอริทึมการเข้ารหัสที่รัดกุมในฟังก์ชันการเข้ารหัส
การใช้ อัลกอริทึมการเข้ารหัสที่รัดกุมและผ่านการตรวจสอบอย่างดี รวมถึงการทำตามแนวทางปฏิบัติแนะนำสำหรับการจัดการคีย์และการติดตั้งใช้งานการเข้ารหัส เป็นสิ่งสำคัญในการลดความเสี่ยงเหล่านี้ การอัปเดตอัลกอริทึมการเข้ารหัสเป็นประจำและการรับทราบข้อมูลเกี่ยวกับภัยคุกคามที่เกิดขึ้นใหม่เป็นสิ่งจำเป็นอย่างยิ่งในการรักษาความปลอดภัยของข้อมูลให้มีประสิทธิภาพ
อัลกอริทึมเริ่มต้นที่แนะนำให้ใช้มีดังนี้
- การเข้ารหัสแบบสมมาตร
AES-128
/AES-256
ที่มีโหมดGCM
Chacha20
- การเข้ารหัสแบบอสมมาตร
RSA-2048
/RSA-4096
ที่มีระยะห่างจากขอบOAEP
ใช้ Primitive ที่ปลอดภัยจากไลบรารีการเข้ารหัสเพื่อลดข้อผิดพลาดที่พบบ่อย
แม้ว่าการเลือกอัลกอริทึมการเข้ารหัสที่เหมาะสมจะเป็นสิ่งสำคัญ แต่หากต้องการลดช่องโหว่ด้านความปลอดภัยอย่างแท้จริง คุณควรใช้ไลบรารีการเข้ารหัสที่นำเสนอ API ที่มีประสิทธิภาพและเน้นการกำหนดค่าเริ่มต้นที่ปลอดภัย แนวทางนี้ไม่เพียงแต่ช่วยเสริมความปลอดภัยของแอปพลิเคชันเท่านั้น แต่ยังช่วยลดโอกาสที่จะเกิดช่องโหว่จากข้อผิดพลาดในการเขียนโค้ดได้อย่างมากอีกด้วย เช่น Tink ช่วยให้การเลือกการเข้ารหัสง่ายขึ้นด้วยการเสนอ
2 ตัวเลือกที่แตกต่างกัน ได้แก่ การเข้ารหัส AEAD
และ Hybrid
ซึ่งช่วยให้นักพัฒนาซอฟต์แวร์
ตัดสินใจด้านความปลอดภัยได้อย่างมีข้อมูลประกอบมากขึ้น
ความเสี่ยง: ฟังก์ชันลายเซ็นการเข้ารหัสที่อ่อนแอหรือใช้งานไม่ได้
การใช้ฟังก์ชันลายเซ็นเข้ารหัสที่อ่อนแอหรือใช้งานไม่ได้ (เช่น
RSA-PKCS#1 v1.5
หรือฟังก์ชันที่อิงตามฟังก์ชันแฮชที่อ่อนแอ)
ก่อให้เกิดความเสี่ยงร้ายแรงต่อความสมบูรณ์ของข้อมูลและการสื่อสาร ลายเซ็นดิจิทัล
ออกแบบมาเพื่อการตรวจสอบสิทธิ์ การปฏิเสธความรับผิด และความสมบูรณ์ของข้อมูล
เพื่อให้มั่นใจว่าข้อความหรือเอกสารมาจากผู้ส่งที่เฉพาะเจาะจง
และไม่มีการดัดแปลง อย่างไรก็ตาม เมื่ออัลกอริทึมลายเซ็นพื้นฐาน
มีข้อบกพร่อง การรับประกันเหล่านี้อาจถูกบุกรุกได้
- การปลอมลายเซ็น: อัลกอริทึมลายเซ็นที่ไม่รัดกุมอาจเสี่ยงต่อการโจมตี ซึ่งอนุญาตให้ผู้ไม่ประสงค์ดีสร้างลายเซ็นปลอมได้ ซึ่งหมายความว่าผู้โจมตีสามารถ แอบอ้างเป็นหน่วยงานที่ถูกต้อง สร้างเอกสารปลอม หรือดัดแปลงข้อความ โดยไม่ถูกตรวจพบ
- การปฏิเสธลายเซ็น: หากอัลกอริทึมลายเซ็นถูกทำลาย ผู้ลงนาม อาจอ้างเท็จว่าตนไม่ได้ลงนามในเอกสาร ซึ่งจะบ่อนทำลาย หลักการของการปฏิเสธไม่ได้ และสร้างความท้าทายทางกฎหมายและด้านลอจิสติกส์
- การดัดแปลงและแก้ไขข้อมูล: ในสถานการณ์ที่ใช้ลายเซ็นเพื่อปกป้องความสมบูรณ์ของข้อมูล อัลกอริทึมที่ไม่รัดกุมอาจทําให้ผู้โจมตีแก้ไขข้อมูลได้โดยไม่ทําให้ลายเซ็นไม่ถูกต้อง ซึ่งนําไปสู่การแก้ไขที่ไม่สามารถตรวจพบและอาจทําให้ข้อมูลสําคัญถูกบุกรุก
การลดปัญหา
ใช้อัลกอริทึมลายเซ็นการเข้ารหัสที่รัดกุม
การใช้ อัลกอริทึมลายเซ็นการเข้ารหัสที่รัดกุมและผ่านการตรวจสอบอย่างดีจึงเป็นสิ่งสำคัญในการลดความเสี่ยงเหล่านี้
RSA-2048
/RSA-4096
ที่มีระยะห่างจากขอบPSS
- อัลกอริทึมลายเซ็นดิจิทัลโดยใช้เส้นโค้งวงรี (
ECDSA
) ที่มีเส้นโค้งที่ปลอดภัย
ใช้ Primitive ที่ปลอดภัยจากไลบรารีการเข้ารหัสเพื่อลดข้อผิดพลาดที่พบบ่อย
การเลือกอัลกอริทึมลายเซ็นที่เหมาะสมเป็นสิ่งสำคัญ แต่หากต้องการลดช่องโหว่ด้านความปลอดภัยอย่างแท้จริง
ให้พิจารณาใช้ไลบรารีการเข้ารหัสที่ให้การรับประกันความปลอดภัยที่แข็งแกร่ง
โดยค่าเริ่มต้น ตัวอย่างเช่น Tink ช่วยลดความซับซ้อนในการเลือก
ลายเซ็นโดยเสนอ ECDSA
ที่มีเส้นโค้งที่ปลอดภัยเป็นตัวเลือกเริ่มต้น ทั้งหมดนี้อยู่ใน
API ที่ตรงไปตรงมาและครอบคลุม แนวทางนี้ไม่เพียงแต่ช่วยเพิ่ม
ความปลอดภัย แต่ยังช่วยเพิ่มประสิทธิภาพการพัฒนาด้วยการลดความจำเป็นในการกำหนดค่า
ที่ซับซ้อนหรือการตัดสินใจ
แหล่งข้อมูล
- ไลบรารีการเข้ารหัส Tink
- คุณภาพแอป Android: การเข้ารหัส
- ลายเซ็นดิจิทัลด้วย Tink
- การเข้ารหัสแบบผสมด้วย Tink
- การเข้ารหัสที่ผ่านการตรวจสอบสิทธิ์ด้วย Tink
- ฟังก์ชันแฮชและการเข้ารหัสลับที่อ่อนแอหรือไม่สมบูรณ์ใน Android Security Lint
- CWE-327: การใช้อัลกอริทึมการเข้ารหัสลับที่เสียหรือมีความเสี่ยง
- CWE-328: การใช้แฮชที่ไม่รัดกุม
- CWE-780: การใช้อัลกอริทึม RSA โดยไม่มี OAEP
- หน้า NIST เกี่ยวกับฟังก์ชันแฮชที่ได้รับอนุมัติ
- มาตรฐานการเข้ารหัสขั้นสูง (วิกิพีเดีย)
- Secure Hash Algorithm 2 (วิกิพีเดีย)
- Secure Hash Algorithm 3 (วิกิพีเดีย)
- ระบบการเข้ารหัส RSA (Wikipedia)
- Elliptic Curve Digital Signature Algorithm (วิกิพีเดีย)
- สตรีมไซเฟอร์ ChaCha (Wikipedia)
- การเพิ่ม Salt ในรหัสผ่าน (วิกิพีเดีย)
- ระบบเข้ารหัสแบบผสม (วิกิพีเดีย)
- การเข้ารหัสที่ตรวจสอบสิทธิ์แล้ว