0Pricing
Cryptology Academy · درس

libsodium: مكتبة تشفير مقاومة لسوء الاستخدام

استكشفوا واجهة API المصمّمة بعناية في libsodium، والتي تجعل اختيار المعلمات غير الآمنة أمرًا صعبًا.

libsodium: مكتبة تشفير مقاومة لسوء الاستخدام درس مجاني في Cryptology Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Cryptology Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Cryptology Academy 4 دروس في المجموع.

فلسفة libsodium ونشأتها

أنشأ Frank Denis مكتبة libsodium بوصفها نسخة محمولة ومتعددة المنصات من مكتبة NaCl ‏(Networking and Cryptography library) التي طورها Daniel Bernstein وTanja Lange وPeter Schwabe. وتتمثل الفلسفة الأساسية في جعل الاستخدام الصحيح للتشفير سهلًا قدر الإمكان، وجعل الاستخدام الخاطئ صعبًا قدر الإمكان. وتساعد الإعدادات الآمنة الافتراضية وواجهات API البسيطة والخيارات الخوارزمية المحددة سلفًا على منع الأخطاء الشائعة التي تعاني منها المكتبات منخفضة المستوى.

التشفير الموثّق بالمفتاح السري

يوفّر crypto_secretbox تشفيرًا موثّقًا بالمفتاح السري باستخدام XSalsa20-Poly1305. تتلقى واجهة برمجة التطبيقات رسالةً وnonce بطول 24 بايت يتم توليده عشوائيًا ومفتاحًا بطول 32 بايت. يكون الناتج نصًا مشفّرًا ومُوثّقًا في الوقت نفسه. تعمل crypto_secretbox_open على فك التشفير والتحقق من وسم المصادقة ذريًا، وتعيد خطأً عند اكتشاف العبث. ويمنع ذلك فك تشفير النصوص المشفّرة التالفة أو التي عُدّلت بطريقة ضارة.

التشفير الموثّق بالمفتاح العام

توفّر crypto_box تشفيرًا موثّقًا بالمفتاح العام بين طرفين باستخدام X25519-XSalsa20-Poly1305. وباستخدام المفتاح الخاص للمرسل والمفتاح العام للمستلم، تشفّر الرسالة وتوثّقها بحيث لا يتمكّن من فك تشفيرها إلا المستلم المقصود، كما يستطيع المستلم التحقق من هوية المرسل. أما crypto_box_seal فهي النسخة المجهولة؛ إذ تُخفى هوية المرسل، ولا يتوفر فيها سوى التشفير دون مصادقة المرسل.

التوقيعات الرقمية باستخدام Ed25519

تطبّق crypto_sign التوقيعات الرقمية باستخدام Ed25519. ينتج عن توليد المفاتيح مفتاح خاص بطول 64 بايت (وهو في الواقع seed مضمومًا إلى المفتاح العام) ومفتاح عام بطول 32 بايت. ينتج عن التوقيع توقيع بطول 64 بايت. وتتميّز عملية التحقق بالسرعة وبزمن تنفيذ ثابت. وتكون توقيعات Ed25519 حتمية؛ إذ تنتج الرسالة نفسها مع المفتاح نفسه التوقيع نفسه دائمًا، مما يلغي ثغرات فشل العشوائية التي أثّرت في ECDSA في بعض التطبيقات.

التجزئة باستخدام BLAKE2b

توفر crypto_generichash تجزئةً للأغراض العامة باستخدام BLAKE2b. وعلى خلاف SHA-256، لا تتطلب BLAKE2b إنشاء HMAC منفصلًا للتجزئة باستخدام مفتاح؛ إذ تقبل مفتاحًا اختياريًا مباشرةً. ويمكن ضبط طول الناتج من 16 إلى 64 بايت. وتكون BLAKE2b أسرع من SHA-256 وSHA-512 على المعالجات الحديثة ذات 64 بت، مع توفير خصائص أمان مماثلة أو أفضل.

اشتقاق المفاتيح باستخدام BLAKE2b

توفر crypto_kdf اشتقاق المفاتيح من مفتاح رئيسي باستخدام BLAKE2b. وباستخدام مفتاح رئيسي بطول 32 بايت، وسلسلة سياق بطول 8 بايت تحدد الغرض، ومعرّف مفتاح فرعي هو رقم بطول 64 بت، تشتق مفتاحًا فرعيًا مستقلًا تشفيريًا وبطول قابل للضبط. ويتيح ذلك اشتقاق عدة مفاتيح مستقلة من مفتاح رئيسي واحد لأغراض مختلفة، من دون وجود أي ترابط بين المفاتيح المشتقة.

تجزئة كلمات المرور باستخدام Argon2id

توفر crypto_pwhash تجزئة كلمات المرور باستخدام Argon2id، الفائز في مسابقة تجزئة كلمات المرور. تجمع Argon2id بين عمليات حسابية صعبة من حيث الذاكرة، مما يحد من هجمات GPU، وعمليات حسابية صعبة من حيث الزمن، مما يحد من هجمات ASIC. وتشمل المعلمات حد العمليات (كلفة الزمن) وحد الذاكرة، ويمكن ضبطهما بما يلائم متطلبات الأمان. تنتج crypto_pwhash_str سلسلة نصية قياسية مناسبة للتخزين، وتتضمن الخوارزمية ومعلماتها.

الصناديق المختومة للتشفير المجهول

تشفّر crypto_box_seal رسالةً إلى مستلم من دون الكشف عن هوية المرسل. فهي تولّد زوج مفاتيح مؤقتًا، وتجري تبادل مفاتيح باستخدام المفتاح العام للمستلم، ثم تتخلص من المفتاح الخاص المؤقت. يستطيع المستلم فك التشفير باستخدام مفتاحه الخاص، لكنه لا يستطيع تحديد هوية المرسل. وهذا مناسب لأنظمة الإرسال المجهول وقنوات التشفير أحادية الاتجاه.

روابط libsodium للغات البرمجة

تتوفر لـ libsodium روابط لمعظم لغات البرمجة الرئيسية تقريبًا. وتوفر PyNaCl روابط Python اصطلاحية، مع استثناءات وكائنات bytes بأسلوب Python. أما libsodium-wrappers فتوفّر روابط JavaScript/Node.js، باستخدام WASM في المتصفحات. وlibsodium.js هي نسخة مطبّقة بـ JavaScript خالص. وتختلف جودة الروابط؛ لذا يُفضّل استخدام الروابط الرسمية أو التي تحظى بصيانة واسعة، والتي تغلّف مكتبة C بدلًا من إعادة تطبيق الخوارزميات.

مقارنة مع واجهة OpenSSL منخفضة المستوى

تتطلب واجهة OpenSSL منخفضة المستوى اتخاذ قرارات صريحة بشأن الخوارزميات وأحجام المفاتيح وأنماط التشغيل والحشو وإدارة IV. وتُقبل التركيبات غير الصحيحة من دون تنبيه. أما libsodium فتوفّر تطبيقًا صحيحًا واحدًا لكل حالة استخدام، من دون الحاجة إلى إعدادات. فعلى سبيل المثال، يتطلب التشفير باستخدام OpenSSL اختيار الشيفرة ونمط التشغيل واشتقاق المفتاح وتوليد IV والحشو؛ بينما يكفي مع crypto_secretbox في libsodium توفير المفتاح وnonce والرسالة، وتتولى المكتبة كل ما عدا ذلك بصورة صحيحة.

اختيار libsodium للمشروعات الجديدة

تُعد libsodium نقطة البداية الموصى بها لأي مشروع يتطلب عمليات تشفير في اللغات المدعومة. فواجهتها الصغيرة تقلل احتمال إساءة الاستخدام، وخوارزمياتها حديثة ومدروسة جيدًا، كما أن تطبيقها المشترك بين المنصات بلغة C خضع لاختبارات شاملة. ولا ينبغي الانتقال إلى مكتبة منخفضة المستوى مثل OpenSSL إلا عند الحاجة إلى خوارزميات محددة غير متوفرة في libsodium، أو إلى التحقق وفق FIPS 140-2.

عمليات libsodium

ما الدالة في libsodium التي ينبغي استخدامها لتجزئة كلمة مرور وتخزينها في قاعدة بيانات؟

مراجعة libsodium

مراجعة libsodium: إعدادات آمنة وواجهة يصعب إساءة استخدامها، مبنية على بدائيات NaCl التي طوّرها Bernstein وآخرون؛ وcrypto_secretbox للتشفير بالمفتاح السري (XSalsa20-Poly1305)؛ وcrypto_box للتشفير بالمفتاح العام (X25519)؛ وcrypto_sign لتوقيعات Ed25519؛ وcrypto_generichash لتجزئة BLAKE2b؛ وcrypto_pwhash لتجزئة كلمات المرور باستخدام Argon2id؛ والصناديق المختومة للتشفير المجهول؛ وروابط لمعظم المنصات الرئيسية.

الأسئلة الشائعة

هل درس «libsodium: مكتبة تشفير مقاومة لسوء الاستخدام» مجاني؟

نعم — نص درس «libsodium: مكتبة تشفير مقاومة لسوء الاستخدام» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Cryptology Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Cryptology Academy 4 دروس في المجموع.

ماذا ستتعلم في «libsodium: مكتبة تشفير مقاومة لسوء الاستخدام»؟

استكشفوا واجهة API المصمّمة بعناية في libsodium، والتي تجعل اختيار المعلمات غير الآمنة أمرًا صعبًا. تتمرن على Cryptology Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Cryptology Academy؟

لا تُشترط خبرة سابقة. Cryptology Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «libsodium: مكتبة تشفير مقاومة لسوء الاستخدام»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Cryptology Academy هذا؟

نعم. كل درس في Cryptology Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. libsodium: مكتبة تشفير مقاومة لسوء الاستخدام
  2. واجهة OpenSSL API: البنى الأساسية ومواطن الخلل
  3. Google Tink: تشفير آمن عالي المستوى
  4. تدقيق تبعيات التشفير واختيارها
← العودة إلى Cryptology Academy