0Pricing
Cryptology Academy · บทเรียน

libsodium: ไลบรารีการเข้ารหัสที่ลดความเสี่ยงจากการใช้งานผิดวิธี

สำรวจ API ที่กำหนดแนวทางไว้อย่างชัดเจนของ libsodium ซึ่งช่วยให้เลือกพารามิเตอร์ที่ไม่ปลอดภัยได้ยาก

libsodium: ไลบรารีการเข้ารหัสที่ลดความเสี่ยงจากการใช้งานผิดวิธี เป็นบทเรียน Cryptology Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Cryptology Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Cryptology Academy มีบทเรียนทั้งหมด 4 บทเรียน

ปรัชญาและที่มาของ libsodium

libsodium ถูกสร้างโดย Frank Denis ในฐานะรุ่นสร้างที่พกพาได้และทำงานข้ามแพลตฟอร์มของไลบรารี NaCl (ไลบรารีเครือข่ายและการเข้ารหัส) ซึ่งพัฒนาโดย Daniel Bernstein, Tanja Lange และ Peter Schwabe แนวคิดหลักคือทำให้การใช้การเข้ารหัสอย่างถูกต้องทำได้ง่ายที่สุด และทำให้การใช้งานอย่างไม่ถูกต้องทำได้ยากที่สุด ค่าเริ่มต้นที่ปลอดภัย ส่วนเชื่อมต่อโปรแกรมประยุกต์ที่เรียบง่าย และการเลือกอัลกอริทึมที่กำหนดแนวทางไว้อย่างชัดเจน ช่วยป้องกันข้อผิดพลาดทั่วไปที่มักเกิดกับไลบรารีระดับล่าง

การเข้ารหัสที่ยืนยันความถูกต้องด้วยคีย์ลับ

crypto_secretbox ให้บริการการเข้ารหัสที่ยืนยันความถูกต้องด้วยคีย์ลับโดยใช้ XSalsa20-Poly1305 API รับข้อความ นอนซ์ขนาด 24 ไบต์ (สร้างแบบสุ่ม) และคีย์ขนาด 32 ไบต์ ผลลัพธ์คือข้อความเข้ารหัสที่ผ่านทั้งการเข้ารหัสและการยืนยันความถูกต้อง crypto_secretbox_open จะถอดรหัสและตรวจสอบแท็กยืนยันความถูกต้องเป็นขั้นตอนเดียว พร้อมส่งคืนข้อผิดพลาดหากตรวจพบการดัดแปลง วิธีนี้ป้องกันไม่ให้ถอดรหัสข้อความเข้ารหัสที่เสียหายหรือถูกแก้ไขโดยผู้ไม่หวังดี

การเข้ารหัสที่ยืนยันความถูกต้องด้วยคีย์สาธารณะ

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

ลายเซ็นดิจิทัลด้วย Ed25519

crypto_sign ใช้สร้างลายเซ็นดิจิทัลด้วย Ed25519 การสร้างคีย์จะได้คีย์ส่วนตัวขนาด 64 ไบต์ (จริง ๆ แล้วคือซีดที่ต่อกับคีย์สาธารณะ) และคีย์สาธารณะขนาด 32 ไบต์ การลงนามจะสร้างลายเซ็นขนาด 64 ไบต์ การตรวจสอบทำได้รวดเร็วและใช้เวลาคงที่ ลายเซ็น Ed25519 เป็นแบบกำหนดแน่นอน (ข้อความและคีย์เดียวกันจะสร้างลายเซ็นเดียวกันเสมอ) จึงขจัดช่องโหว่จากความล้มเหลวในการสุ่มที่เคยส่งผลกระทบต่อ ECDSA ในการนำไปใช้บางรูปแบบ

การแฮชด้วย BLAKE2b

crypto_generichash ให้บริการการแฮชทั่วไปโดยใช้ BLAKE2b ซึ่งแตกต่างจาก SHA-256 ตรงที่ BLAKE2b ไม่จำเป็นต้องใช้โครงสร้าง HMAC แยกต่างหากสำหรับการแฮชด้วยคีย์ แต่รับคีย์เสริมได้โดยตรง ความยาวผลลัพธ์กำหนดได้ตั้งแต่ 16 ถึง 64 ไบต์ บนตัวประมวลผล 64 บิตรุ่นใหม่ BLAKE2b ทำงานได้เร็วกว่า SHA-256 และ SHA-512 พร้อมมอบคุณสมบัติด้านความปลอดภัยที่เทียบเท่าหรือดีกว่า

การสร้างคีย์ย่อยด้วย BLAKE2b

crypto_kdf ใช้สร้างคีย์ย่อยจากคีย์หลักด้วย BLAKE2b เมื่อมีคีย์หลักขนาด 32 ไบต์ สตริงบริบท (ขนาด 8 ไบต์ที่ระบุวัตถุประสงค์) และ ID ของคีย์ย่อย (ตัวเลขขนาด 64 บิต) ฟังก์ชันนี้จะสร้างคีย์ย่อยที่เป็นอิสระทางการเข้ารหัส โดยกำหนดความยาวได้ วิธีนี้ช่วยให้สร้างคีย์อิสระหลายคีย์จากคีย์หลักเดียวสำหรับวัตถุประสงค์ต่าง ๆ ได้ โดยไม่มีความเชื่อมโยงระหว่างคีย์ย่อยที่สร้างขึ้น

การแฮชรหัสผ่านด้วย Argon2id

crypto_pwhash ให้บริการการแฮชรหัสผ่านโดยใช้ Argon2id ซึ่งเป็นผู้ชนะการแข่งขันการแฮชรหัสผ่าน Argon2id ผสานการคำนวณที่ใช้หน่วยความจำสูง (ต้านทานการโจมตีด้วย GPU) เข้ากับการคำนวณที่ใช้เวลาสูง (ต้านทานการโจมตีด้วย ASIC) พารามิเตอร์ประกอบด้วยขีดจำกัดจำนวนการดำเนินการ (ต้นทุนด้านเวลา) และขีดจำกัดหน่วยความจำ ซึ่งสามารถปรับให้เหมาะกับข้อกำหนดด้านความปลอดภัยได้ crypto_pwhash_str สร้างสตริงมาตรฐานที่เหมาะสำหรับจัดเก็บ โดยมีข้อมูลอัลกอริทึมและพารามิเตอร์รวมอยู่ด้วย

กล่องปิดผนึกสำหรับการเข้ารหัสแบบไม่ระบุตัวตน

crypto_box_seal เข้ารหัสข้อความถึงผู้รับโดยไม่เปิดเผยผู้ส่ง ฟังก์ชันนี้สร้างคู่คีย์ชั่วคราว แลกเปลี่ยนคีย์กับคีย์สาธารณะของผู้รับ แล้วทิ้งคีย์ส่วนตัวชั่วคราวนั้น ผู้รับสามารถถอดรหัสโดยใช้คีย์ส่วนตัวของตนเอง แต่ไม่สามารถระบุตัวผู้ส่งได้ วิธีนี้เหมาะสำหรับระบบรับข้อมูลแบบไม่ระบุตัวตนและช่องทางเข้ารหัสทางเดียว

ตัวเชื่อมต่อภาษาของ libsodium

libsodium มีตัวเชื่อมต่อสำหรับภาษาโปรแกรมหลักแทบทุกภาษา PyNaCl มีตัวเชื่อมต่อ Python ที่เป็นธรรมชาติตามรูปแบบของภาษา พร้อมข้อยกเว้นและออบเจ็กต์ไบต์แบบ Python libsodium-wrappers มีตัวเชื่อมต่อ JavaScript/Node.js (ใช้ WASM ในเบราว์เซอร์) ส่วน libsodium.js เป็นการพอร์ตด้วย JavaScript ล้วน คุณภาพของตัวเชื่อมต่อแตกต่างกันไป ควรเลือกตัวเชื่อมต่ออย่างเป็นทางการหรือได้รับการดูแลอย่างกว้างขวาง ซึ่งครอบไลบรารี C แทนการสร้างอัลกอริทึมขึ้นใหม่

เปรียบเทียบกับ API ระดับต่ำของ OpenSSL

API ระดับต่ำของ OpenSSL กำหนดให้ตัดสินใจอย่างชัดเจนเกี่ยวกับอัลกอริทึม ขนาดคีย์ โหมด การเติมข้อมูล และการจัดการ IV การจับคู่ที่ไม่ถูกต้องจะได้รับการยอมรับโดยไม่แจ้งเตือน libsodium มีการนำไปใช้ที่ถูกต้องเพียงแบบเดียวสำหรับแต่ละกรณีการใช้งาน โดยไม่จำเป็นต้องกำหนดค่า ตัวอย่างเช่น การเข้ารหัสด้วย OpenSSL ต้องเลือกชุดรหัส โหมด การสร้างคีย์ การสร้าง IV และการเติมข้อมูล ส่วนเมื่อใช้ crypto_secretbox ของ libsodium คุณเพียงส่งคีย์ นอนซ์ และข้อความ จากนั้นระบบจะจัดการส่วนที่เหลืออย่างถูกต้อง

การเลือกใช้ libsodium สำหรับโครงการใหม่

libsodium เป็นจุดเริ่มต้นที่แนะนำสำหรับโครงการใด ๆ ที่ต้องใช้การดำเนินการด้านการเข้ารหัสลับในภาษาที่รองรับ พื้นที่ API ขนาดเล็กช่วยลดโอกาสการใช้งานผิด อัลกอริทึมมีความทันสมัยและผ่านการวิเคราะห์อย่างละเอียด และการนำไปใช้ด้วย C ที่รองรับหลายแพลตฟอร์มผ่านการทดสอบอย่างทั่วถึง การเปลี่ยนไปใช้ไลบรารีระดับต่ำกว่าอย่าง OpenSSL ควรทำเฉพาะเมื่อจำเป็นต้องใช้อัลกอริทึมเฉพาะที่ไม่มีใน libsodium หรือต้องการการตรวจรับรอง FIPS 140-2

การดำเนินการของ libsodium

ควรใช้ฟังก์ชันใดของ libsodium เพื่อแฮชรหัสผ่านสำหรับจัดเก็บในฐานข้อมูล

สรุป libsodium

สรุป libsodium: ค่าเริ่มต้นที่ปลอดภัยและ API ที่ใช้งานผิดได้ยาก สร้างบนพื้นฐานของ NaCl โดย Bernstein และคณะ, crypto_secretbox สำหรับการเข้ารหัสด้วยคีย์ลับ (XSalsa20-Poly1305), crypto_box สำหรับการเข้ารหัสด้วยคีย์สาธารณะ (X25519), crypto_sign สำหรับลายเซ็น Ed25519, crypto_generichash สำหรับการแฮชด้วย BLAKE2b, crypto_pwhash สำหรับการแฮชรหัสผ่านด้วย Argon2id, กล่องปิดผนึกสำหรับการเข้ารหัสแบบไม่ระบุตัวตน และตัวเชื่อมต่อภาษาสำหรับแพลตฟอร์มหลักส่วนใหญ่

คำถามที่พบบ่อย

บทเรียน “libsodium: ไลบรารีการเข้ารหัสที่ลดความเสี่ยงจากการใช้งานผิดวิธี” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “libsodium: ไลบรารีการเข้ารหัสที่ลดความเสี่ยงจากการใช้งานผิดวิธี” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Cryptology Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Cryptology Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “libsodium: ไลบรารีการเข้ารหัสที่ลดความเสี่ยงจากการใช้งานผิดวิธี”

สำรวจ API ที่กำหนดแนวทางไว้อย่างชัดเจนของ libsodium ซึ่งช่วยให้เลือกพารามิเตอร์ที่ไม่ปลอดภัยได้ยาก คุณปฏิบัติ Cryptology Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Cryptology Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Cryptology Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “libsodium: ไลบรารีการเข้ารหัสที่ลดความเสี่ยงจากการใช้งานผิดวิธี” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Cryptology Academy นี้ได้ไหม

ได้ บทเรียน Cryptology Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. libsodium: ไลบรารีการเข้ารหัสที่ลดความเสี่ยงจากการใช้งานผิดวิธี
  2. API ของ OpenSSL: โครงสร้างหลักและข้อผิดพลาดที่ควรระวัง
  3. Google Tink: การเข้ารหัสระดับสูงที่ปลอดภัย
  4. การตรวจสอบและคัดเลือกส่วนพึ่งพาด้านการเข้ารหัส
← กลับไปที่ Cryptology Academy