| OPENSSL-PKEYUTL(1ssl) | OpenSSL | 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 files، -writerand file
- انظر "خيارات الحالة العشوائية" في openssl(1) لمزيد من التفاصيل.
- -provider name
- -provider-path path
- -provparam [name:]key=value
- -propquery propq
- انظر "خيارات المزود" في openssl(1)، و provider(7)، و property(7).
- -config ملف_الضبط
- انظر "خيار الضبط" في 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 أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.
إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.
| 7 أبريل 2026 | 3.6.2 |