| OPENSSL-PKCS8(1ssl) | OpenSSL | OPENSSL-PKCS8(1ssl) |
نام (NAME)
openssl-pkcs8 - دستور تبدیل کلید خصوصی با قالب PKCS#8
خلاصه دستور (SYNOPSIS)
openssl pkcs8 [-help] [-topk8] [-inform DER|PEM] [-outform DER|PEM] [-in filename] [-passin arg] [-out filename] [-passout arg] [-iter count] [-noiter] [-nocrypt] [-traditional] [-v2 alg] [-v2prf alg] [-v1 alg] [-scrypt] [-scrypt_N N] [-scrypt_r r] [-scrypt_p p] [-saltlen size] [-rand files] [-writerand file] [-engine id] [-provider name] [-provider-path path] [-provparam [name:]key=value] [-propquery propq]
توضیحات (DESCRIPTION)
این دستور کلیدهای خصوصی در قالب PKCS#8 را پردازش میکند. این ابزار میتواند هم قالب رمزنگارینشدهٔ PKCS#8 PrivateKeyInfo و هم قالب EncryptedPrivateKeyInfo را با انواع الگوریتمهای PKCS#5 (نسخههای v1.5 و v2.0) و PKCS#12 مدیریت و پردازش کند.
گزینهها (OPTIONS)
- -help
- نمایش پیام راهنمای نحوهٔ استفاده.
- -topk8
- بهطور معمول یک کلید خصوصی PKCS#8 در ورودی مورد انتظار است و یک کلید خصوصی در فایل خروجی نوشته خواهد شد. با گزینهٔ -topk8 وضعیت معکوس میشود: این گزینه یک کلید خصوصی را میخواند و کلیدی با قالب PKCS#8 مینویسد.
- -inform DER|PEM, -outform DER|PEM
- قالبهای
ورودی و
خروجی؛
مقدار
پیشفرض PEM
است. برای
جزئیات به
openssl-format-options(1)
مراجعه
کنید.
اگر یک کلید از قالب PKCS#8 تبدیل میشود (یعنی از گزینهٔ -topk8 استفاده نشده باشد)، فایل ورودی باید در قالب PKCS#8 باشد. یک کلید رمزنگاریشده مورد انتظار است مگر اینکه گزینهٔ -nocrypt گنجانده شده باشد.
اگر -topk8 استفاده نشود و حالت PEM تنظیم شده باشد، فایل خروجی یک کلید خصوصی رمزنگارینشده در قالب PKCS#8 خواهد بود. اگر گزینهٔ -traditional استفاده شود، کلید خصوصی با قالب سنتی (traditional) به جای آن نوشته میشود.
اگر -topk8 استفاده نشود و حالت DER تنظیم شده باشد، فایل خروجی یک کلید خصوصی رمزنگارینشده در قالب سنتی DER خواهد بود.
اگر -topk8 استفاده شود، هر کلید خصوصی پشتیبانیشدهای را میتوان برای فایل ورودی در قالبی که با -inform مشخص شده به کار برد. فایل خروجی کلیدی با قالب PKCS#8 و رمزنگاریشده با پارامترهای رمزنگاری مشخصشده خواهد بود، مگر اینکه -nocrypt گنجانده شده باشد.
- -traditional
- هنگامی که این گزینه موجود باشد و از -topk8 استفاده نشده باشد، کلید خصوصی در قالب سنتی (traditional) نوشته میشود.
- -in filename
- این گزینه فایل ورودی را برای خواندن کلید مشخص میکند؛ در صورت مشخص نشدن، از ورودی استاندارد استفاده میشود. اگر کلید رمزنگاری شده باشد، از شما عبارت عبور خواسته خواهد شد، مگر اینکه گزینهٔ -passin ارائه شده باشد.
- -passin arg, -passout arg
- منبع گذرواژه برای فایل ورودی و خروجی. برای اطلاعات بیشتر دربارهٔ قالب arg به openssl-passphrase-options(1) مراجعه کنید.
- -out filename
- این گزینه
فایل خروجی
را برای
نوشتن کلید
مشخص
میکند؛ در
حالت
پیشفرض در
خروجی
استاندارد
نوشته
میشود. نام
فایل خروجی
میتواند
با نام فایل
ورودی
یکسان باشد
که منجر به
جایگزینی
محتوای
فایل
میشود.
توجه داشته
باشید که
ورودی/خروجی
فایلها
اتمیک (atomic)
نیست؛ فایل
خروجی
ابتدا
کوتاهسازی
(truncate) و سپس
نوشته
میشود.
اگر هر یک از گزینههای رمزنگاری تنظیم شده باشند و -passout مشخص نشده باشد، عبارت عبور درخواست خواهد شد. اگر ورودی گذرواژه متوقف شود، فایل خروجی دستنخورده باقی میماند.
- -iter count
- هنگام ایجاد محفظههای جدید PKCS#8، از تعداد تکرار معینی روی گذرواژه در اشتقاق کلید رمزنگاری برای خروجی PKCS#8 استفاده میکند. مقادیر بالا زمان لازم برای شکستن محفظهٔ PKCS#8 به روش جستجوی فراگیر (brute-force) را افزایش میدهد.
- -noiter
- هنگام ایجاد محفظههای جدید PKCS#8، مقدار ۱ را به عنوان تعداد تکرار استفاده میکند.
- -nocrypt
- کلیدهای PKCS#8 تولیدشده یا ورودی بهطور معمول ساختارهای EncryptedPrivateKeyInfo در PKCS#8 هستند که از یک الگوریتم مناسب رمزنگاری مبتنی بر گذرواژه استفاده میکنند. با این گزینه یک ساختار رمزنگارینشدهٔ PrivateKeyInfo مورد انتظار بوده یا خروجی داده میشود. این گزینه کلیدهای خصوصی را به هیچ وجه رمزنگاری نمیکند و فقط باید در صورت ضرورت مطلق استفاده شود. برخی نرمافزارها مانند برخی نسخههای نرمافزارهای امضای کد جاوا از کلیدهای خصوصی رمزنگارینشده استفاده میکردند.
- -v2 alg
- این گزینه
الگوریتم PKCS#5
v2.0 را تعیین
میکند.
آرگومان alg الگوریتم رمزنگاری مورد استفاده است؛ مقادیر معتبر شامل aes128، aes256 و des3 هستند. اگر این گزینه مشخص نشود، از aes256 استفاده میشود.
- -v2prf alg
- این گزینه
الگوریتم PRF
مورد
استفاده با
PKCS#5 v2.0 را تنظیم
میکند. یک
مقدار
معتبر
متداول hmacWithSHA256
است. اگر
این گزینه
تنظیم
نشود،
مقدار
پیشفرض
مربوط به
سایفر
استفاده
میشود یا
در صورت
نبود مقدار
پیشفرض،
hmacWithSHA256 به کار
میرود.
برخی پیادهسازیها ممکن است از الگوریتمهای سفارشی PRF پشتیبانی نکنند و برای کارکرد به گزینهٔ hmacWithSHA1 نیاز داشته باشند.
- -v1 alg
- این گزینه نشان میدهد که باید از یک الگوریتم PKCS#5 v1.5 یا PKCS#12 استفاده شود. برخی پیادهسازیهای قدیمیتر ممکن است از PKCS#5 v2.0 پشتیبانی نکنند و به این گزینه نیاز داشته باشند. در صورت مشخص نشدن، قالب PKCS#5 v2.0 استفاده میشود.
- -scrypt
- از الگوریتم scrypt برای رمزنگاری کلید خصوصی با پارامترهای پیشفرض استفاده میکند: در حال حاضر N=16384، r=8 و p=1 و AES در حالت CBC با کلید ۲۵۶ بیتی. این پارامترها را میتوان با گزینههای -scrypt_N، -scrypt_r، -scrypt_p و -v2 تغییر داد.
- -scrypt_N N, -scrypt_r r, -scrypt_p p
- پارامترهای N، r یا p را برای scrypt تنظیم میکند.
- -saltlen
- طول نمک (salt به بایت) را برای استفاده در الگوریتم PBE مشخص میکند. اگر این مقدار مشخص نشود، پیشفرض برای PBES2 مقدار ۱۶ (۱۲۸ بیت) و برای PBES1 مقدار ۸ (۶۴ بیت) است.
- -rand files, -writerand file
- برای جزئیات بیشتر به بخش «گزینههای وضعیت تصادفی (Random State Options)» در openssl(1) مراجعه کنید.
- -engine id
- بخش «گزینههای موتور (Engine Options)» را در openssl(1) ببینید. این گزینه منسوخ شده است.
- -provider name
- -provider-path path
- -provparam [name:]key=value
- -propquery propq
- بخش «گزینههای ارائهدهنده (Provider Options)» را در openssl(1)، provider(7) و property(7) ببینید.
نکات (NOTES)
بهطور پیشفرض هنگام تبدیل یک کلید به قالب PKCS#8، از PKCS#5 v2.0 با استفاده از AES ۲۵۶ بیتی همراه با HMAC و SHA256 استفاده میشود.
برخی پیادهسازیهای قدیمیتر از قالب PKCS#5 v2.0 پشتیبانی نمیکنند و در عوض به شکل قدیمیتر PKCS#5 v1.5 نیاز دارند، و احتمالاً به الگوریتمهای رمزنگاری ضعیف و ناامن مانند DES ۵۶ بیتی نیز نیاز خواهند داشت.
کلیدهای خصوصی رمزنگاریشده با الگوریتمهای PKCS#5 v2.0 و تعداد تکرارهای بالا، بسیار امنتر از کلیدهای رمزنگاریشده با قالبهای سنتی سازگار با SSLeay هستند. بنابراین اگر امنیت بیشتر مد نظر باشد، کلیدها باید تبدیل شوند.
امکان نوشتن کلیدهای خصوصی رمزنگاریشده با کدگذاری DER در قالب PKCS#8 وجود دارد؛ زیرا جزئیات رمزنگاری در سطح ASN1 گنجانده شدهاند، در حالی که قالب سنتی آنها را در سطح PEM شامل میشود.
الگوریتمهای PKCS#5 V1.5 و PKCS#12 (PKCS#5 V1.5 AND PKCS#12 ALGORITHMS)
الگوریتمهای مختلفی را میتوان با گزینهٔ خط فرمان -v1 استفاده کرد، از جمله PKCS#5 v1.5 و PKCS#12. این موارد در ادامه با جزئیات بیشتر توضیح داده شدهاند.
- PBE-MD2-DES PBE-MD5-DES
- این الگوریتمها در مشخصات اولیهٔ PKCS#5 v1.5 گنجانده شده بودند. از آنجا که هر دو از DES استفاده میکنند، تنها ۵۶ بیت حفاظت فراهم مینمایند.
- PBE-SHA1-RC2-64, PBE-MD2-RC2-64, PBE-MD5-RC2-64, PBE-SHA1-DES
- این الگوریتمها در مشخصات اصلی PKCS#5 v1.5 ذکر نشدهاند، اما از همان الگوریتم اشتقاق کلید استفاده میکنند و توسط برخی نرمافزارها پشتیبانی میشوند. آنها در PKCS#5 v2.0 ذکر شدهاند و از RC2 ۶۴ بیتی یا DES ۵۶ بیتی استفاده میکنند.
- PBE-SHA1-RC4-128, PBE-SHA1-RC4-40, PBE-SHA1-3DES, PBE-SHA1-2DES, PBE-SHA1-RC2-128, PBE-SHA1-RC2-40
- این الگوریتمها از الگوریتم رمزنگاری مبتنی بر گذرواژهٔ PKCS#12 استفاده میکنند و اجازه میدهند از الگوریتمهای رمزنگاری قوی مانند triple DES یا RC2 ۱۲۸ بیتی استفاده شود.
مثالها (EXAMPLES)
تبدیل یک کلید خصوصی به قالب PKCS#8 با استفاده از پارامترهای پیشفرض (AES با کلید ۲۵۶ بیتی و hmacWithSHA256):
openssl pkcs8 -in key.pem -topk8 -out enckey.pem
تبدیل یک کلید خصوصی به قالب رمزنگارینشدهٔ PKCS#8:
openssl pkcs8 -in key.pem -topk8 -nocrypt -out enckey.pem
تبدیل یک کلید خصوصی به قالب PKCS#5 v2.0 با استفاده از triple DES:
openssl pkcs8 -in key.pem -topk8 -v2 des3 -out enckey.pem
تبدیل یک کلید خصوصی به قالب PKCS#5 v2.0 با استفاده از AES با ۲۵۶ بیت در حالت CBC و PRF از نوع hmacWithSHA512:
openssl pkcs8 -in key.pem -topk8 -v2 aes-256-cbc -v2prf hmacWithSHA512 -out enckey.pem
تبدیل یک کلید خصوصی به PKCS#8 با استفاده از یک الگوریتم سازگار با PKCS#5 1.5 (الگوریتم DES):
openssl pkcs8 -in key.pem -topk8 -v1 PBE-MD5-DES -out enckey.pem
تبدیل یک کلید خصوصی به PKCS#8 با استفاده از یک الگوریتم سازگار با PKCS#12 (الگوریتم 3DES):
openssl pkcs8 -in key.pem -topk8 -out enckey.pem -v1 PBE-SHA1-3DES
خواندن یک کلید خصوصی با قالب DER و رمزنگارینشدهٔ PKCS#8:
openssl pkcs8 -inform DER -nocrypt -in key.der -out key.pem
تبدیل یک کلید خصوصی از هر قالب رمزنگاریشدهٔ PKCS#8 به قالب سنتی (traditional):
openssl pkcs8 -in pk8.pem -traditional -out key.pem
تبدیل یک کلید خصوصی به قالب PKCS#8، با رمزنگاری AES-256 و با یک میلیون تکرار گذرواژه:
openssl pkcs8 -in key.pem -topk8 -v2 aes-256-cbc -iter 1000000 -out pk8.pem
استانداردها (STANDARDS)
بردارهای آزمون (Test vectors) این پیادهسازی PKCS#5 v2.0 با استفاده از triple DES، DES و RC2 با تعداد تکرارهای بالا به لیست پستی pkcs-tng ارسال شدند؛ چندین نفر تأیید کردند که توانستهاند کلیدهای خصوصی تولیدشده را رمزگشایی کنند و بنابراین میتوان فرض کرد که این پیادهسازی PKCS#5 v2.0 حداقل تا جایی که به این الگوریتمها مربوط میشود تا حد معقولی دقیق است.
قالب کلیدهای خصوصی PKCS#8 برای DSA (و موارد دیگر) به خوبی مستند نشده است: این موضوع در PKCS#11 v2.01، بخش 11.9 پنهان مانده است. قالب پیشفرض کلید خصوصی PKCS#8 برای DSA در OpenSSL با این استاندارد مطابقت دارد.
اشکالات (BUGS)
باید گزینهای وجود داشته باشد که الگوریتم رمزنگاری در حال استفاده و سایر جزئیات مانند تعداد تکرار را چاپ کند.
همچنین ببینید (SEE ALSO)
openssl(1)، openssl-dsa(1)، openssl-rsa(1)، openssl-genrsa(1)، openssl-gendsa(1)
تاریخچه (HISTORY)
گزینهٔ -iter در OpenSSL 1.1.0 اضافه شد.
گزینهٔ -engine در OpenSSL 3.0 منسوخ شد.
حق نشر (COPYRIGHT)
Copyright 2000-2026 The OpenSSL Project Authors. All Rights Reserved.
تحت مجوز آپاچی نسخه ۲.۰ (Apache License 2.0) منتشر شده است («مجوز»). شما نمیتوانید از این فایل جز در انطباق با این مجوز استفاده کنید. میتوانید نسخهای از مجوز را در فایل LICENSE در توزیع منبع یا در https://www.openssl.org/source/license.html دریافت کنید.
| 2026-08-25 | 3.6.4 |