OPENSSL-PKEYUTL(1ssl)

الاسم
openssl-pkeyutl - أمر المفتاح غير المتماثل

موجز
openssl pkeyutl [-help] [-in ملف] [-rawin] [-digest خوارزمية] [-out ملف] [-secret ملف] [-sigfile ملف] [-inkey اسم_الملف|معرف_المورد] [-keyform DER|PEM|P12|ENGINE] [-passin معطى] [-pubin] [-certin] [-rev] [-sign] [-verify] [-verifyrecover] [-encrypt] [-decrypt] [-derive] [-peerkey ملف] [-peerform DER|PEM|P12|ENGINE] [-encap] [-decap] [-kdf خوارزمية] [-kdflen طول] [-kemop وضع] [-pkeyopt خيار:قيمة] [-pkeyopt_passin خيار[:معطى_المرور]] [-hexdump] [-asn1parse] [-engine معرف] [-engine_impl] [-rand ملفات] [-writerand ملف] [-provider اسم] [-provider-path مسار] [-provparam [الاسم:]مفتاح=قيمة] [-propquery propq] [-config ملف_التكوين]

الوصف
يمكن استخدام هذا الأمر لإجراء عمليات منخفضة المستوى على المفاتيح غير المتماثلة (العامة أو الخاصة) باستخدام أي خوارزمية مدعومة.

يُفترض إجراء عملية التوقيع (انظر الخيار -sign) بشكل مبدئي.

الخيارات

-help
    اطبع رسالة الاستخدام.

-in اسم_الملف
    يحدد هذا اسم ملف المدخلات لقراءة البيانات منه أو المدخل القياسي إذا لم يُحدد هذا الخيار.

-rawin
    يشير هذا إلى أن بيانات مدخلات التوقيع أو الاستيثاق هي بيانات خام، لم تُعالج بأي خوارزمية لخلاصة الرسائل (hash). باستثناء EdDSA، يمكن للمستخدم تحديد خوارزمية خلاصة باستخدام الخيار -digest. بالنسبة لخوارزميات التوقيع مثل RSA و DSA و ECDSA، فإن خوارزمية الخلاصة المبدئية هي SHA256. وبالنسبة لـ SM2، فهي SM3.

    يمكن استخدام هذا الخيار مع -sign و -verify فقط. بالنسبة لـ EdDSA (خوارزميتي Ed25519 و Ed448) يكون هذا الخيار مضمنًا منذ إصدار OpenSSL 3.5، وكان مطلوبًا في الإصدارات الأقدم.

    يتضمن الخيار -digest الخيار -rawin منذ إصدار OpenSSL 3.5.

-digest خوارزمية
    لا يمكن استخدام هذا الخيار إلا مع -sign و -verify. يحدد خوارزمية الخلاصة المستخدمة لتجزئة بيانات المدخلات قبل توقيعها أو الاستيثاق منها باستخدام مفتاح المدخلات. يمكن حذف هذا الخيار إذا كانت خوارزمية التوقيع لا تتطلب معالجة مسبقة للمدخلات عبر دالة تجزئة (مثل EdDSA). إذا حُذف هذا الخيار بينما تتطلبه خوارزمية التوقيع وكان الخيار -rawin محددًا، فستُستخدم قيمة مبدئية (انظر -rawin للتفاصيل). إذا وجد هذا الخيار، فإن الخيار -rawin يكون مضمنًا منذ إصدار OpenSSL 3.5، وكان مطلوبًا في الإصدارات الأقدم.

    في الوقت الحالي، لا يُدعم HashEdDSA (بديل ph أو "التجزئة المسبقة" من EdDSA)، لذا لا يمكن استخدام الخيار -digest مع EdDSA.

-out اسم_الملف
    يحدد اسم ملف المخرجات للكتابة إليه أو الخرج القياسي بشكل مبدئي.

-secret اسم_الملف
    يحدد اسم ملف مخرجات السر المشترك عند إجراء التغليف عبر الخيار -encap أو فك التغليف عبر الخيار -decap. يُنتج الخيار -encap أيضًا مخرجات نص معمي (عام) منفصل يُكتب مبدئيًا إلى الخرج القياسي، ولكن لكونه بيانات ثنائية غير نصية، فإنه يُعاد توجيهه عادةً إلى ملف يُختار عبر الخيار -out.

-sigfile ملف
    ملف التوقيع، مطلوب ومسموح به لعمليات -verify فقط.

-inkey اسم_الملف|معرف_مورد
    مفتاح المدخلات، ويجب أن يكون مفتاحًا خاصًا بشكل مبدئي.

-keyform DER|PEM|P12|ENGINE
    تنسيق المفتاح؛ غير محدد بشكل مبدئي. انظر openssl-format-options(1) للحصول على التفاصيل.

-passin المعطى
    مصدر كلمة مرور مفتاح المدخلات. لمزيد من المعلومات حول تنسيق المعطى راجع openssl-passphrase-options(1).

-pubin
    مبدئيًا، يُقرأ مفتاح خاص من مدخلات المفتاح. مع هذا الخيار، يُقرأ مفتاح عام بدلاً من ذلك. إذا لم تتضمن المدخلات مفتاحًا عامًا بل مفتاحًا خاصًا، فيُستخدم جزؤه العام.

-certin
    المدخلات عبارة عن شهادة تحتوي على مفتاح عام.

-rev
    اعكس ترتيب مخزن المدخلات المؤقت. هذا مفيد لبعض المكتبات (مثل CryptoAPI) التي تمثل المخزن المؤقت بتنسيق little-endian. لا يمكن استخدام هذا بالتزامن مع -rawin.

-sign
    وقع بيانات المدخلات وأخرج النتيجة الموقعة. يتطلب هذا مفتاحًا خاصًا. يُوصى باستخدام عملية خلاصة الرسائل مع هذا عند الاقتضاء، راجع الخيارين -rawin و -digest للتفاصيل. خلاف ذلك، يُفترض أن بيانات المدخلات المقدمة مع الخيار -in هي خلاصة بالفعل، ولكن قد يتطلب هذا خيار -pkeyopt إضافي "digest:"md في بعض الحالات (مثل RSA مع وضع حشو PKCS#1 المبدئي). حتى بالنسبة للخوارزميات الأخرى مثل ECDSA، حيث لا يؤثر خيار -pkeyopt الإضافي على مخرجات التوقيع، فإنه يُوصى به لأنه يتيح التحقق من أن طول المدخلات متوافق مع الخلاصة المقصودة.

-verify
    استوثق من بيانات المدخلات مقابل التوقيع المقدم مع الخيار -sigfile وأشر إلى ما إذا كان الاستيثاق قد نجح أو فشل. يُفترض أن بيانات المدخلات المقدمة مع الخيار -in هي قيمة تجزئة ما لم يُحدد الخيار -rawin أو يكون مضمنًا. مع البيانات الخام، عندما تكون خوارزمية الخلاصة قابلة للتطبيق، فإنه ينبغي تحديدها أيضًا حتى لو كان يمكن استنتاجها من التوقيع أو تأخذ قيمة مبدئية.

-verifyrecover
    استوثق من التوقيع المعطى وأخرج البيانات المستعادة (حمولة التوقيع). على سبيل المثال، في حالة RSA PKCS#1 تكون البيانات المستعادة هي ترميز DER لـ EMSA-PKCS-v1_5 للمعرف الكائني (OID) لخوارزمية الخلاصة وقيمتها كما هو محدد في RFC8017 القسم 9.2 <https://datatracker.ietf.org/doc/html/rfc8017#section-9.2>.

    لاحظ أن المدخلات المعطاة هنا مع الخيار -in ليست مدخلات توقيع (كما هو الحال مع الخيارين -sign و -verify) ولكنها قيمة مخرجات توقيع، تُنتج عادةً باستخدام الخيار -sign.

    يتوفر هذا الخيار للاستخدام مع مفاتيح RSA فقط.

-encrypt
    عمِّ بيانات المدخلات باستخدام مفتاح عام.

-decrypt
    فك تعمية بيانات المدخلات باستخدام مفتاح خاص.

-derive
    اشتق سرًا مشتركًا باستخدام مفتاح (EC)DH الخاص بك ومفتاح النظير.

-peerkey ملف
    ملف يحتوي على مفتاح (EC)DH العام أو الخاص للنظير لاستخدامه في عملية اشتقاق المفاتيح (الاتفاق). يجب أن يتطابق نوعه مع نوع المفتاح الخاص بك المعطى مع -inkey.

-peerform DER|PEM|P12|ENGINE
    تنسيق مفتاح النظير؛ غير محدد بشكل مبدئي. راجع openssl-format-options(1) للحصول على التفاصيل.

-encap
    استخدم آلية تغليف المفاتيح (KEM) لـ تغليف سر مشترك لمفتاح النظير الـ عام. تُكتب النتيجة المغلفة (أو النص المعمي، بيانات ثنائية غير نصية) إلى الخرج القياسي مبدئيًا، أو إلى الملف المحدد بـ -out. يجب أيضًا تقديم الخيار -secret لتحديد ملف المخرجات لقيمة السر المشترك المشتقة والمولدة في عملية التغليف. يُدعم التغليف مع عدد من خوارزميات المفاتيح العامة، حاليًا: ML-KEM و X25519 و X448 و EC. تستخدم خوارزميتا ECX و EC هيكلية DHKEM الخاصة بـ RFC9180 <https://www.rfc-editor.org/rfc/rfc9180>. يُدعم التغليف أيضًا مع مفاتيح RSA عبر هيكلية RSASVE.

    على مستوى واجهة برمجة التطبيقات (API)، يُدعم التغليف وفك التغليف أيضًا لبعض خوارزميات ECDHE الهجينة (بدون DHKEM) بالإضافة إلى خوارزميات ML-KEM، ولكن هذه مخصصة أساسًا للاستخدام مع TLS ولا ينبغي استخدامها بشكل مستقل. لا توجد على أي حال تنسيقات قياسية للمفاتيح العامة والخاصة للخوارزميات الهجينة، لذا لا يمكن تقديم مادة المفاتيح المطلوبة.

-decap
    فك ترميز سر مغلف، باستخدام مفتاح -private، لاشتقاق نفس السر المشترك الذي حُصل عليه عندما غُلّف السر للمفتاح العام المقابل. يُقرأ السر المغلف مبدئيًا من المدخل القياسي، أو من الملف المحدد بـ -in. يُكتب السر المشترك المشتق إلى الملف المحدد بخيار -secret، والذي يجب تقديمه أيضًا. يُدعم فك التغليف مع عدد من خوارزميات المفاتيح العامة، حاليًا: ML-KEM و X25519 و X448 و EC. تستخدم خوارزميتا ECX و EC هيكلية DHKEM الخاصة بـ RFC9180 <https://www.rfc-editor.org/rfc/rfc9180>. يُدعم فك التغليف أيضًا مع مفاتيح RSA عبر هيكلية RSASVE.

-kemop وضع
    يُستخدم هذا الخيار مع أوامر -encap/-decap ويحدد وضع KEM الخاص بخوارزمية المفتاح عندما لا تتوفر طريقة مبدئية لتغليف وفك تغليف الأسرار المشتركة مع نوع المفتاح المختار. تدعم جميع الخوارزميات المدعومة حاليًا وضعها المبدئي فقط، وهذا الخيار، رغم توفره، ليس مطلوبًا.

-kdf خوارزمية
    استخدم خوارزمية دالة اشتقاق المفاتيح. الخوارزميات المدعومة حاليًا هي TLS1-PRF و HKDF. ملاحظة: سيتعين عادةً ضبط معلمات إضافية وطول مخرجات KDF لكي يعمل هذا. راجع EVP_PKEY_CTX_set_hkdf_md(3) و EVP_PKEY_CTX_set_tls1_prf_md(3) لمعرفة معلمات السلسلة المدعومة لكل خوارزمية.

-kdflen طول
    اضبط طول المخرجات لـ KDF.

-pkeyopt خيار:قيمة
    خيارات المفتاح العام المحددة كـ خيار:قيمة. انظر قسم "ملاحظات" أدناه لمزيد من التفاصيل.

-pkeyopt_passin خيار[:وسيط_كلمة_المرور]
    يسمح بقراءة خيار المفتاح العام خيار من الدخل القياسي (stdin) أو من مصدر كلمة مرور. إذا حُدد خيار فقط، فسيُطلب من المستخدم إدخال كلمة مرور عبر الدخل القياسي. بدلاً من ذلك، يمكن تحديد وسيط_كلمة_المرور الذي يمكن أن يكون أي قيمة يدعمها openssl-passphrase-options(1).

-hexdump
    تفريغ بيانات المخرجات بنظام سداسي عشري.

-asn1parse
    يعالج بيانات مخرجات ASN.1 للتحقق من ترميز DER الخاص بها وطباعة أي أخطاء. عند استخدامه مع خيار -verifyrecover، قد يكون هذا مفيداً في حال وُقّعت بنية ASN.1 مرمزة بـ DER مباشرةً (دون تجزئتها) وعند التحقق من توقيع بتنسيق PKCS#1 v1.5، الذي يحتوي على ترميز DER.

-engine id
    انظر "خيارات المحرك" في openssl(1). هذا الخيار مهجور.

-engine_impl
    عند استخدامه مع خيار -engine، فإنه يحدد أيضًا استخدام المحرك id للعمليات التعموية.

-rand ملفات، -writerand ملف
    انظر "خيارات الحالة العشوائية" في openssl(1) للتفاصيل.

-provider الاسم
-provider-path المسار
-provparam [الاسم:]المفتاح=القيمة
-propquery propq
    انظر "خيارات المزود" في openssl(1)، و provider(7)، و property(7).

-config ملف_الضبط
    انظر "Configuration Option" في openssl(1).

ملاحظات
تختلف العمليات والخيارات المدعومة وفقاً لخوارزمية المفتاح وتنفيذها. يُشار إلى عمليات وخيارات OpenSSL أدناه.

ما لم يُذكر خلاف ذلك، يدعم خيار -pkeyopt لجميع أنواع المفاتيح العامة وسيط "digest:"alg، الذي يحدد الملخص المستخدم في عمليات التوقيع والتحقق. يجب أن تمثل قيمة alg اسم ملخص كما هو مستخدم في دالة EVP_get_digestbyname()، على سبيل المثال sha256. لا تُستخدم هذه القيمة لتجزئة بيانات الدخل. إنما تُستخدم (بواسطة بعض الخوارزميات) للتحقق من صحة أطوال البيانات الممرة ولإنشاء البنى التي يتكون منها التوقيع (مثل DigestInfo في تواقيع RSASSA PKCS#1 v1.5).

على سبيل المثال، إذا كانت قيمة وسيط خيار -pkeyopt المسمى "digest" هي sha256، فيجب أن يكون دخل التوقيع أو التحقق هو القيمة الثنائية بطول 32 بايت لمخرجات دالة تجزئة SHA256.

ما لم يُستخدم -rawin أو يُضمن ضمناً، لا يقوم هذا الأمر بتجزئة بيانات الدخل بل سيستخدم البيانات مباشرة كدخل لخوارزمية التوقيع. اعتماداً على نوع المفتاح، ونوع التوقيع، ووضع الحشو، تختلف الأطوال القصوى المعقولة لبيانات الدخل. مع RSA، لا يمكن أن تكون البيانات الموقعة أطول من مقياس المفتاح (modulus). في حالة ECDSA و DSA، يجب ألا تكون البيانات أطول من حجم الحقل، وإلا سيُقتطع بصمت إلى حجم الحقل. في أي حال، يجب ألا يكون حجم الدخل أكبر من أكبر حجم مخرجات ملخص مدعوم EVP_MAX_MD_SIZE، وهو حالياً 64 بايت.

خوارزمية RSA
تدعم خوارزمية RSA بشكل عام عمليات التعمية، وفك التعمية، والتوقيع، والتحقق، والتحقق مع الاستعادة. ومع ذلك، تدعم بعض أوضاع الحشو مجموعة فرعية فقط من هذه العمليات. قِيم pkeyopt الإضافية التالية مدعومة:

rsa_padding_mode:mode
    يضبط هذا وضع حشو RSA. القيم المقبولة لـ mode هي pkcs1 لحشو PKCS#1، و none لعدم وجود حشو، و oaep لوضع OAEP، و x931 لوضع X9.31 و pss لـ PSS.

    في حشو PKCS#1، إذا لم يُضبط ملخص الرسالة، فسيُوقع على البيانات المزودة أو يُتحقق منها مباشرة بدلاً من استخدام بنية DigestInfo. إذا ضُبط الملخص، فتُستخدم بنية DigestInfo ويجب أن يتوافق طولها مع نوع الملخص.

    لاحظ أنه بالنسبة لحشو pkcs1، كحماية ضد هجوم Bleichenbacher، لن تفشل عملية فك التعمية في حال فشل فحص الحشو. استخدم none والفحص اليدوي للرسالة المفكوكة تعميتها للتحقق مما إذا كانت القيمة المفكوكة تحتوي على حشو PKCS#1 v1.5 صحيح.

    في وضع oaep، تُدعم التعمية وفك التعمية فقط.

    بالنسبة لـ x931، إذا ضُبط نوع الملخص، فسيُستخدم لتنسيق بيانات الكتلة، وإلا فسيُستخدم البايت الأول لتحديد معرف ملخص X9.31. يمكن إجراء التوقيع والتحقق والتحقق مع الاستعادة في هذا الوضع.

    في وضع pss، يُدعم التوقيع والتحقق فقط ويجب تحديد نوع الملخص.

rsa_pss_saltlen:len
    لوضع pss فقط، يحدد هذا الخيار طول المملحة (salt). تُدعم ثلاث قيم خاصة: digest يضبط طول المملحة على طول الملخص، و max يضبط طول المملحة على أقصى قيمة مسموح بها. عند التحقق، يؤدي auto إلى تحديد طول المملحة آلياً بناءً على بنية كتلة PSS.

rsa_mgf1_md:digest
    يضبط ملخص MGF1 لحشوي PSS و OAEP. إذا لم يُضبط ملخص MGF1 صراحةً في وضع PSS، فسيُستخدم ملخص التوقيع.

rsa_oaep_md:digest
    يضبط الملخص المستخدم لدالة تجزئة OAEP. إذا لم يُضبط صراحةً، فسيُستخدم SHA256.

rsa_pkcs1_implicit_rejection:flag
    يعطل (عند ضبطه على 0) أو يفعل (عند ضبطه على 1) استخدام الرفض الضمني مع فك تعمية PKCS#1 v1.5. عند تفعيله (وهو المبدئي)، وكحماية ضد هجوم Bleichenbacher، ستولد المكتبة نصاً مجرداً عشوائياً حتمياً ستعيده إلى المستدعِي في حال فشل فحص الحشو. عند تعطيله، تقع على عاتق المستدعِي مسؤولية التعامل مع الأخطاء المعادة بطريقة خالية من القنوات الجانبية.

خوارزمية RSA-PSS
خوارزمية RSA-PSS هي نسخة مقيدة من خوارزمية RSA تدعم فقط عمليات التوقيع والتحقق مع حشو PSS. قِيم -pkeyopt الإضافية التالية مدعومة:

rsa_padding_mode:mode، rsa_pss_saltlen:len، rsa_mgf1_md:digest
    لهذه الخيارات نفس المعنى كما في خوارزمية RSA مع بعض القيود الإضافية. لا يمكن ضبط وضع الحشو إلا على pss وهي القيمة المبدئية.

    إذا كان للمفتاح قيود على المعاملات، فسيُضبط الملخص وملخص MGF1 وطول المملحة على القيم المحددة في المعاملات. لا يمكن تغيير الملخص و MGF1، ولا يمكن ضبط طول المملحة على قيمة أقل من الحد الأدنى للقيود.

خوارزمية DSA
تدعم خوارزمية DSA عمليتي التوقيع والتحقق فقط. حالياً، لا توجد خيارات -pkeyopt إضافية غير digest. يُفترض ملخص SHA256 مبدئياً.

خوارزمية DH
تدعم خوارزمية DH عملية الاشتقاق فقط ولا توجد خيارات -pkeyopt إضافية.

خوارزمية EC
تدعم خوارزمية EC عمليات التوقيع والتحقق والاشتقاق. تستخدم عمليتا التوقيع والتحقق ECDSA ويستخدم الاشتقاق ECDH. يُفترض SHA256 مبدئياً لخيار -pkeyopt digest.

خوارزميتا X25519 و X448
تدعم خوارزميتا X25519 و X448 اشتقاق المفاتيح فقط. حالياً لا توجد خيارات إضافية.

  خوارزميات SLH-DSA
خوارزميات SLH-DSA (SLH-DSA-SHA2-128s، SLH-DSA-SHA2-128f، SLH-DSA-SHA2-192s، SLH-DSA-SHA2-192f، SLH-DSA-SHA2-256s، SLH-DSA-SHA2-256f) هي خوارزميات توقيع ما بعد الكم. عند استخدام SLH-DSA مع pkeyutl، تتوفر الخيارات التالية:

-sign
    وقّع على بيانات الدخل باستخدام مفتاح SLH-DSA خاص. على سبيل المثال:

      $ openssl pkeyutl -sign -in file.txt -inkey slhdsa.pem -out sig

-verify
    تحقق من التوقيع باستخدام مفتاح SLH-DSA عام. على سبيل المثال:

      $ openssl pkeyutl -verify -in file.txt -inkey slhdsa.pem -sigfile sig

انظر EVP_PKEY-SLH-DSA(7) و EVP_SIGNATURE-SLH-DSA(7) لمزيد من التفاصيل حول خوارزمية SLH-DSA وتنفيذها.

خوارزميات ML-DSA-44 و ML-DSA-65 و ML-DSA-87
خوارزميات ML-DSA هي خوارزميات توقيع ما بعد الكم تدعم توقيع الرسائل "الخام" والتحقق منها. لا يتم إجراء تجزئة أولية. عند استخدام ML-DSA مع pkeyutl، تتوفر الخيارات التالية:

-sign
    وقّع على بيانات الدخل باستخدام مفتاح ML-DSA خاص. على سبيل المثال:

      $ openssl pkeyutl -sign -in file.txt -inkey mldsa65.pem -out sig

-verify
    تحقق من التوقيع باستخدام مفتاح ML-DSA عام. على سبيل المثال:

      $ openssl pkeyutl -verify -in file.txt -inkey mldsa65.pem -sigfile sig

-pkeyopt خيار:قيمة
    خيارات إضافية لتوقيع ML-DSA والتحقق منه:

    message-encoding:value
        يحدد وضع ترميز الرسالة المستخدم للتوقيع. هذا يتحكم في كيفية معالجة رسالة الدخل قبل التوقيع. القيم الصالحة مشروحة في EVP_SIGNATURE-ML-DSA(7). على سبيل المثال:

          $ openssl pkeyutl -sign -in file.txt -inkey mldsa65.pem -out sig -pkeyopt message-encoding:1

    test-entropy:value
        يحدد قيمة انتروبيا اختبارية للتوقيع الحتمي. على سبيل المثال:

          $ openssl pkeyutl -sign -in file.txt -inkey mldsa65.pem -out sig -pkeyopt test-entropy:abcdefghijklmnopqrstuvwxyz012345

    hextest-entropy:value
        يحدد قيمة اعتلاج (entropy) للاختبار بتنسيق ست عشري. على سبيل المثال:

          $ openssl pkeyutl -sign -in file.txt -inkey mldsa65.pem -out sig -pkeyopt hextest-entropy:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f

    deterministic:value
        يفعّل التوقيع المحدد (deterministic). على سبيل المثال:

          $ openssl pkeyutl -sign -in file.txt -inkey mldsa65.pem -out sig -pkeyopt deterministic:1

    mu:value
        يحدد معامل mu. على سبيل المثال:

          $ echo -n "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" >file.txt
          $ openssl pkeyutl -sign -in file.txt -inkey mldsa65.pem -out sig -pkeyopt mu:1

context-string:string
    يحدد سلسلة نصية للسياق لكل من عمليتي التوقيع والتحقق. يجب أن تكون سلسلة السياق هي نفسها حتى تنجح عملية التحقق. على سبيل المثال:

      $ openssl pkeyutl -sign -in file.txt -inkey mldsa65.pem -out sig -pkeyopt context-string:mycontext
      $ openssl pkeyutl -verify -in file.txt -inkey mldsa65.pem -sigfile sig -pkeyopt context-string:mycontext

hexcontext-string:string
    يحدد سلسلة سياق بتنسيق ست عشري، مما يسمح بقيم تحكم ثنائية. على سبيل المثال:

      $ openssl pkeyutl -sign -in file.txt -inkey mldsa65.pem -out sig -pkeyopt hexcontext-string:6d79636f6e74657874

تدعم عملية التوقيع خيار deterministic:bool، حيث تُضبط قيمة bool على 1 إذا أُريد توليد توقيع محدد بمدخل عشوائي ثابت كله أصفار. بشكل مبدئي، أو إذا كانت قيمة bool هي 0، تُستخدم قيمة اعتلاج عشوائية. يمكن أيضًا الحصول على نتيجة محددة عبر تحديد قيمة اعتلاج صريحة من خلال معامل hextest-entropy:value. يجب استخدام توقيع ML-DSA المحدد في الاختبارات فقط.

انظر EVP_SIGNATURE-ML-DSA(7) لمزيد من التفاصيل حول خوارزميات ML-DSA وتنفيذها.

خوارزميات ML-KEM-512 و ML-KEM-768 و ML-KEM-1024
تدعم خوارزميات ML-KEM عمليات الكبسلة (encapsulation) وفك الكبسلة فقط. تدعم عملية الكبسلة خيار hexikme:entropy، حيث يكون entropy هو ترميز من 64 رقمًا ست عشريًا لقيمة بحجم 32 بايت. يجب استخدام هذا في الاختبارات فقط، إذ إن القيم المعروفة أو المسربة لهذا الخيار قد تعرض السر المشترك المولد للخطر.

انظر EVP_KEM-ML-KEM(7) لمزيد من التفاصيل.

خوارزميات ED25519 و ED448
تدعم هذه الخوارزميات التوقيع والتحقق فقط. ينفذ OpenSSL المتغيرات "المجردة" فقط من هذه الخوارزميات بحيث يمكن تمرير البيانات الخام إليها مباشرة دون تجزئتها أولاً. يدعم OpenSSL عملية "الطلقة الواحدة" (oneshot) فقط مع هذه الخوارزميات. وهذا يعني وجوب قراءة الملف المراد توقيعه/التحقق منه بالكامل في الذاكرة قبل معالجته. يجب تجنب توقيع أو التحقق من الملفات الكبيرة جدًا. بالإضافة إلى ذلك، يجب أن يكون حجم الملف معروفًا ليعمل هذا. إذا تعذر تحديد حجم الملف (على سبيل المثال إذا كان الإدخال هو stdin) فستفشل عملية التوقيع أو التحقق.

SM2
تدعم خوارزمية SM2 عمليات التوقيع والتحقق والتعمية وفك التعمية. بالنسبة لعمليات التوقيع والتحقق، تتطلب SM2 تمرير سلسلة معرف تمييز (Distinguishing ID). قيمة -pkeyopt التالية مدعومة:

distid:string
    يضبط هذا سلسلة المعرف المستخدمة في عمليات توقيع أو تحقق SM2. أثناء التحقق من توقيع SM2، يجب أن يكون المعرف هو نفسه المستخدم عند توقيع البيانات. خلاف ذلك، سيفشل التحقق.

hexdistid:hex_string
    يضبط هذا سلسلة المعرف المستخدمة في عمليات توقيع أو تحقق SM2. أثناء التحقق من توقيع SM2، يجب أن يكون المعرف هو نفسه المستخدم عند توقيع البيانات. خلاف ذلك، سيفشل التحقق. يجب أن تكون سلسلة المعرف المقدمة بهذا الخيار قيمة ست عشرية صالحة.

أمثلة
توقيع بعض البيانات باستخدام مفتاح خاص:

 openssl pkeyutl -sign -in file -inkey key.pem -out sig

استعادة البيانات الموقعة (مثلاً في حال استخدام مفتاح RSA):

 openssl pkeyutl -verifyrecover -in sig -inkey key.pem

التحقق من التوقيع (مثلاً مفتاح DSA):

 openssl pkeyutl -verify -in file -sigfile sig -inkey key.pem

توقيع البيانات باستخدام قيمة ملخص الرسالة (هذا صالح حاليًا لـ RSA فقط):

 openssl pkeyutl -sign -in file -inkey key.pem -out sig -pkeyopt digest:sha256

اشتقاق قيمة سر مشترك:

 openssl pkeyutl -derive -inkey key.pem -peerkey pubkey.pem -out secret

عرض ست عشري لـ 48 بايت من TLS1 PRF باستخدام الملخص SHA256 وسر مشترك وبذرة (seed) تتكون من بايت واحد بقيمة 0xFF:

 openssl pkeyutl -kdf TLS1-PRF -kdflen 48 -pkeyopt md:SHA256 \
    -pkeyopt hexsecret:ff -pkeyopt hexseed:ff -hexdump

اشتقاق مفتاح باستخدام scrypt حيث تُقرأ كلمة المرور من سطر الأوامر:

 openssl pkeyutl -kdf scrypt -kdflen 16 -pkeyopt_passin pass \
    -pkeyopt hexsalt:aabbcc -pkeyopt N:16384 -pkeyopt r:8 -pkeyopt p:1

الاشتقاق باستخدام نفس الخوارزمية، ولكن مع قراءة المفتاح من متغير البيئة MYPASS:

 openssl pkeyutl -kdf scrypt -kdflen 16 -pkeyopt_passin pass:env:MYPASS \
    -pkeyopt hexsalt:aabbcc -pkeyopt N:16384 -pkeyopt r:8 -pkeyopt p:1

توقيع بعض البيانات باستخدام مفتاح خاص SM2(7) ومعرف محدد:

 openssl pkeyutl -sign -in file -inkey sm2.key -out sig -rawin -digest sm3 \
    -pkeyopt distid:someid

التحقق من بعض البيانات باستخدام شهادة SM2(7) ومعرف محدد:

 openssl pkeyutl -verify -certin -in file -inkey sm2.cert -sigfile sig \
    -rawin -digest sm3 -pkeyopt distid:someid

فك تعمية بعض البيانات باستخدام مفتاح خاص وحشوة OAEP مع استخدام SHA256:

 openssl pkeyutl -decrypt -in file -inkey key.pem -out secret \
    -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256

إنشاء زوج مفاتيح ML-DSA وتوقيع البيانات مع سلسلة سياق محددة:

  $ openssl genpkey -algorithm ML-DSA-65 -out mldsa65.pem
  $ openssl pkeyutl -sign -in file.txt -inkey mldsa65.pem -out sig -pkeyopt context-string:example

التحقق من توقيع باستخدام ML-DSA مع نفس سلسلة السياق:

  $ openssl pkeyutl -verify -in file.txt -inkey mldsa65.pem -sigfile sig -pkeyopt context-string:example

توليد زوج مفاتيح ML-KEM واستخدامه للكبسلة:

  $ openssl genpkey -algorithm ML-KEM-768 -out mlkem768.pem
  $ openssl pkey -in mlkem768.pem -pubout -out mlkem768_pub.pem
  $ openssl pkeyutl -encap -inkey mlkem768_pub.pem -pubin -out ciphertext -secret shared_secret.bin

فك كبسلة سر مشترك باستخدام مفتاح خاص ML-KEM:

  $ openssl pkeyutl -decap -inkey mlkem768.pem -in ciphertext -secret decapsulated_secret.bin

إنشاء زوج مفاتيح SLH-DSA وتوقيع البيانات:

  $ openssl genpkey -algorithm SLH-DSA-SHA2-128s -out slh-dsa.pem
  $ openssl pkeyutl -sign -in file.txt -inkey slh-dsa.pem -out sig

التحقق من توقيع باستخدام SLH-DSA:

  $ openssl pkeyutl -verify -in file.txt -inkey slh-dsa.pem -sigfile sig

انظر أيضًا
openssl(1), openssl-genpkey(1), openssl-pkey(1), openssl-rsautl(1) openssl-dgst(1), openssl-rsa(1), openssl-genrsa(1), openssl-kdf(1) EVP_PKEY_CTX_set_hkdf_md(3), EVP_PKEY_CTX_set_tls1_prf_md(3),

التاريخ
منذ إصدار OpenSSL 3.5، يتضمن الخيار -digest الخيار -rawin، ولم يعد هذان الخياران مطلوبين عند التوقيع أو التحقق باستخدام مفتاح Ed25519 أو Ed448.

أيضًا منذ إصدار OpenSSL 3.5، لم يعد الخيار -kemop مطلوبًا لأي من الخوارزميات المدعومة، إذ إن الـ mode الوحيد المدعوم هو المبدئي الآن.

خيار -engine أصبح مهجوراً في OpenSSL 3.0.

حقوق النسخ
حقوق النشر 2006-2026 لمؤلفي مشروع OpenSSL. جميع الحقوق محفوظة.

مرخص بموجب رخصة Apache 2.0 (المشار إليها فيما يلي بـ ”الرخصة“). لا يجوز لك استخدام هذا الملف إلا وفقًا لشروط الرخصة. يمكنك الحصول على نسخة منها في الملف LICENSE الموجود في حزمة التوزيع المصدرية أو على الرابط <https://www.openssl.org/source/license.html>.

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.