PKCS15-INITPKCS15-(1) OpenSC ToolsOpenSC Tools PKCS15-INITPKCS15-(1)

pkcs15-init - ابزار شخصی‌سازی کارت هوشمند

pkcs15-init [OPTIONS]

ابزار pkcs15-init می‌تواند برای ایجاد ساختار PKCS #15 بر روی یک کارت هوشمند و افزودن اشیاء کلید یا گواهی استفاده شود. جزئیات ساختاری که ایجاد خواهد شد از طریق پروفایل‌ها کنترل می‌شود.

پروفایل پیش‌فرضی که استفاده می‌شود pkcs15 است. پروفایل‌های جایگزین را می‌توان از طریق گزینهٔ -p مشخص کرد.

ابزار pkcs15-init می‌تواند برای ایجاد ساختار PKCS #15 روی کارت هوشمند شما، ساخت PINها و نصب کلیدها و گواهی‌ها روی کارت استفاده شود. این فرایند شخصی‌سازی (personalization) نیز نامیده می‌شود.

یک کارت OpenSC می‌تواند دارای یک PIN مسئول امنیت (Security Officer) و صفر یا چند PIN کاربر باشد. واژهٔ PIN مخفف شماره شناسایی شخصی (Personal Identification Number) است و یک کد امنیتی محرمانه است که پیش از مجاز شدن به انجام برخی عملیات‌ها، مانند استفاده از یکی از کلیدهای RSA ذخیره‌شده برای امضای سند یا تغییر خود کارت، باید آن را به کارت ارائه دهید.

معمولاً PINها دنباله‌ای از ارقام ده‌دهی هستند، اما برخی کارت‌ها نویسه‌های اسکی (ASCII) دلخواه را نیز می‌پذیرند. با این حال توجه داشته باشید که استفاده از نویسه‌هایی غیر از ارقام، کارت را روی کارت‌خوان‌های دارای پد شماره (PIN pad reader) غیرقابل استفاده می‌کند، زیرا آن‌ها معمولاً فقط کلیدهایی برای ورود ارقام دارند.

کد PIN مسئول امنیت (SO) خاص است؛ این کد برای محافظت از اطلاعات فراداده روی کارت، مانند خود ساختار PKCS #15 استفاده می‌شود. تنظیم SO PIN اختیاری است، زیرا در بدترین حالت ممکن اگر فردی کارت شما را پیدا کند، می‌تواند ساختار آن را به هم بریزد. برای استخراج هر یک از کلیدهای محرمانهٔ ذخیره‌شده روی کارت، یک مهاجم همچنان به PIN کاربر شما نیاز خواهد داشت (حداقل در پروفایل‌های پیش‌فرض OpenSC). با این حال، ساخت پروفایل‌های کارتی که به مسئول امنیت اجازه دهد PINهای کاربر را بازنویسی کند، امکان‌پذیر است.

برای هر PIN، می‌توانید یک PUK (که PIN رفع انسداد یا unblock PIN نیز نامیده می‌شود) مشخص کنید. از PUK می‌توان برای بازنویسی یا باز کردن قفل PIN در صورتی که دفعات متوالی زیادی مقدار اشتباه وارد شده باشد، استفاده کرد.

در برخی از کارت‌ها که از شبیه‌سازی PKCS#15 استفاده می‌کنند، ویژگی‌های اشیاء خصوصی محافظت می‌شوند و بدون احراز هویت (معمولاً با PIN کاربر) قابل تجزیه و تحلیل نیستند. این احراز هویت باید بلافاصله پس از اتصال کارت (card binding) انجام شود. در چنین مواردی باید از گزینهٔ --verify-pin استفاده شود.

این نخستین گام در شخصی‌سازی کارت است و فایل‌های پایه را بر روی کارت ایجاد می‌کند. برای ایجاد ساختار اولیهٔ PKCS #15، ابزار را به این صورت اجرا کنید:

pkcs15-init --create-pkcs15

سپس PIN و PUK مسئول امنیت از شما درخواست خواهد شد. فشردن سادهٔ کلید return در اعلان SO PIN، از نصب PIN مسئول امنیت صرف‌نظر می‌کند.

اگر کارت پشتیبانی کند، باید پیش از ایجاد ساختار PKCS#15، محتویات کارت را با دستور زیر پاک کنید: pkcs15-init --erase-card

پیش از نصب هرگونه اشیاء کاربری مانند کلیدهای خصوصی، حداقل به یک PIN برای محافظت از این اشیاء نیاز دارید. شما می‌توانید این کار را با دستور زیر انجام دهید:

pkcs15-init --store-pin --id " nn

که در آن nn یک شناسهٔ PKCS #15 در نمادگذاری هگزادسیمال است. مقادیر متداول 01، 02 و غیره هستند.

وارد کردن دستور بالا، PIN و PUK کاربر را از شما درخواست خواهد کرد. اگر مایل به نصب PIN رفع انسداد نیستید، کافی است در اعلان PUK کلید return را فشار دهید.

برای تنظیم یک برچسب (label) برای این شیء PIN (که می‌تواند توسط برنامه‌ها برای نمایش یک اعلان معنادار به کاربر استفاده شود)، از گزینهٔ خط فرمان --label استفاده کنید.

ابزار pkcs15-init به شما امکان می‌دهد کلید جدیدی تولید کرده و آن را روی کارت ذخیره کنید. شما می‌توانید این کار را با استفاده از دستور زیر انجام دهید:

pkcs15-init --generate-key "keyspec" --auth-id "nn"

که در آن keyspec الگوریتم و پارامترهای کلید مورد نظر را توصیف می‌کند. برای نمونه، rsa:2048 یک کلید RSA با مدول ۲۰۴۸ بیتی تولید می‌کند؛ مقدار پیش‌فرض 3072 است. در صورتی که در حال تولید یک کلید EC هستید، منحنی باید مشخص شود، برای نمونه ec:prime256v1. منحنی‌های زیر به پارامتر نیازی ندارند: برای منحنی‌های Edwards 25519 از یکی از نام‌های معادل Ed25519 (ترجیحی)، ed25519 یا edwards25519 و برای منحنی 448 از: Ed448 استفاده کنید. برای منحنی‌های Montgomery 25519 از یکی از این نام‌های معادل استفاده کنید: X25519 (ترجیحی)، cv25519 یا curve25519 و برای منحنی 448 از: X448 استفاده کنید. برای کلیدهای متقارن، طول کلید بر حسب بایت مشخص می‌شود، برای نمونه AES:32 یا DES3:24.

مقدار nn شناسهٔ PIN کاربری است که پیش‌تر نصب شده است، مانند 01.

علاوه بر ذخیرهٔ بخش خصوصی کلید بر روی کارت، pkcs15-init بخش عمومی کلید را نیز به عنوان یک شیء کلید عمومی PKCS #15 ذخیره خواهد کرد.

می‌توانید از یک کلید خصوصی که با روش‌های دیگری تولید شده است استفاده کرده و آن را بر روی کارت بارگذاری کنید. برای نمونه، جهت بارگذاری کلید خصوصی موجود در فایلی به نام okir.pem که در قالب PEM است، از دستور زیر استفاده می‌شود:

pkcs15-init --store-private-key okir.pem --id 45 --auth-id 01

علاوه بر ذخیرهٔ بخش خصوصی کلید بر روی کارت، pkcs15-init بخش عمومی کلید را نیز به عنوان یک شیء کلید عمومی PKCS #15 ذخیره خواهد کرد.

توجه داشته باشید که استفاده از گزینهٔ --id در دستورات pkcs15-init برای تولید یا وارد کردن یک کلید جدید، منسوخ شده است. روش بهتر این است که اجازه دهید میان‌افزار شناسه را از روی محتوای داده‌های کلید استخراج کند (مانند SHA1(modulus) برای RSA و غیره). این کار امکان برقراری ارتباط آسان بین اشیاء «مرتبط» (کلیدهای خصوصی/عمومی و گواهی‌ها) را فراهم می‌کند.

علاوه بر قالب فایل کلید PEM، ابزار pkcs15-init از کلیدهای با کدگذاری DER و فایل‌های PKCS #12 نیز پشتیبانی می‌کند. مورد اخیر، همان قالب فایلی است که توسط نرم‌افزارهایی چون Netscape Navigator هنگام صدور گواهی‌ها به یک فایل استفاده می‌شود. یک فایل PKCS #12 معمولاً حاوی گواهی X.509 متناظر با کلید خصوصی است. در چنین حالتی، pkcs15-init به جای بخش کلید عمومی، گواهی را ذخیره خواهد کرد..SS "بارگذاری کلید عمومی (Public Key Upload)"

شما همچنین می‌توانید با استفاده از گزینهٔ --store-public-key که یک نام فایل را به عنوان آرگومان می‌گیرد، کلیدهای عمومی را به‌صورت جداگانه روی کارت بارگذاری کنید. این فایل باید حاوی کلید عمومی باشد. اگر قالب فایل کلید را با استفاده از گزینهٔ --format مشخص نکنید، pkcs15-init قالب PEM را فرض خواهد کرد. تنها قالب پشتیبانی‌شدهٔ دیگر برای فایل کلید عمومی DER است.

از آن‌جا که کلیدهای عمومی متناظر همواره هنگام تولید یک کلید جدید یا بارگذاری یک کلید خصوصی به‌طور خودکار بارگذاری می‌شوند، احتمالاً به ندرت از این گزینه استفاده خواهید کرد.

شما می‌توانید با استفاده از گزینهٔ --store-certificate که یک نام فایل را به عنوان آرگومان می‌گیرد، گواهی‌ها را روی کارت بارگذاری کنید. این فایل باید حاوی یک گواهی X.509 با کدگذاری PEM باشد.

امروزه اغلب مرورگرها هنگامی که از آن‌ها می‌خواهید کلید و گواهی شما را در یک فایل صادر کنند، از فایل‌هایی با قالب PKCS #12 استفاده می‌کنند. pkcs15-init قادر است این فایل‌ها را تجزیه کرده و محتویات آن‌ها را در یک عملیات واحد روی کارت ذخیره کند. عملکرد این دستور دقیقاً مانند ذخیرهٔ یک کلید خصوصی است، با این تفاوت که باید قالب فایل را مشخص کنید:

pkcs15-init --store-private-key okir.p12 --format pkcs12 --auth-id 01

این دستور کلید خصوصی موجود در فایل okir.p12 را نصب کرده و با PIN ارجاع داده شده توسط شناسهٔ احراز هویت 01 از آن محافظت می‌کند. همچنین هرگونه گواهی X.509 موجود در فایل را که معمولاً شامل گواهی کاربر همراه با کلید و همچنین گواهی CA است، ذخیره خواهد کرد.

می‌توانید از یک کلید محرمانه که با روش‌های دیگر تولید شده استفاده کرده و آن را روی کارت بارگذاری کنید. برای نمونه، برای بارگذاری یک کلید محرمانهٔ AES تولیدشده توسط مولد تصادفی سیستم، می‌توانید از دستور زیر استفاده کنید:

pkcs15-init --store-secret-key /dev/urandom --secret-key-algorithm aes:256 --auth-id 01

به‌طور پیش‌فرض یک شناسهٔ تصادفی برای کلید محرمانه تولید می‌شود. در صورت نیاز می‌توانید یک شناسه را با --id مشخص کنید.

--version,

نسخهٔ انتشار بستهٔ OpenSC را چاپ می‌کند.

--card-profile name, -c name

به pkcs15-init می‌گوید که نمایهٔ کارت مشخص‌شده را بارگذاری کند. به‌ندرت به این گزینه نیاز پیدا خواهید کرد.

--create-pkcs15, -C

این گزینه به pkcs15-init می‌گوید که یک ساختار PKCS #15 روی کارت ایجاد کرده و همهٔ PINها را مقداردهی اولیه کند.

--serial SERIAL

شماره سریال کارت را مشخص می‌کند.

--erase-card, -E

در صورتی که کارت پشتیبانی کند، پیش از ایجاد ساختار PKCS #15 کارت را پاکسازی می‌کند. اگر کارت از پاکسازی پشتیبانی نکند، pkcs15-init با شکست مواجه خواهد شد.

--erase-application AID

برنامه با شناسهٔ برنامهٔ AID را پاک می‌کند.

--generate-key keyspec, -G keyspec

به کارت می‌گوید که یک کلید جدید تولید کرده و آن را روی کارت ذخیره کند. keyspec شامل نام یک الگوریتم است که می‌تواند اختیاری با یک دو‌نقطه «:»، ممیز «/» یا خط تیره «-» و پارامترهای کلید مورد نظر دنبال شود. ایدهٔ خوبی است که شناسهٔ کلید را نیز همراه با این دستور با استفاده از گزینهٔ id مشخص کنید، در غیر این صورت یک شناسهٔ ذاتی (intrinsic ID) از محتوای کلید محاسبه خواهد شد. برای جزئیات مربوط به الگوریتم استفاده‌شده جهت محاسبهٔ شناسهٔ ذاتی، به توضیحات مشخصهٔ 'pkcs15-id-style' در 'pkcs15.profile' مراجعه کنید. برای کارت‌های چندبرنامه‌ای، برنامهٔ PKCS#15 هدف را می‌توان با مقدار هگزادسیمال AID در گزینهٔ aid مشخص کرد.

--pin pin, --puk puk, --so-pin sopin, --so-puk sopuk

این گزینه‌ها می‌توانند برای مشخص کردن مقادیر PIN/PUK در خط فرمان به کار روند. اگر مقدار روی env:VARIABLE تنظیم شود، از مقدار متغیر محیطیِ مشخص‌شده استفاده خواهد شد. به‌طور پیش‌فرض، در صورت نیاز کد از طریق خط فرمان پرسیده می‌شود.

توجه داشته باشید که در اکثر سیستم‌های عامل، هر کاربری می‌تواند با استفاده از ابزارهایی مانند ps(1) خط فرمان هر فرایندی در سیستم را مشاهده کند. بنابراین، در یک سیستم ناامن بهتر است کدها را از طریق یک متغیر محیطی ارسال کنید.

--no-so-pin,

یک SO PIN را نصب نمی‌کند و در مورد آن نیز سؤالی نمی‌پرسد.

--profile name, -p name

به pkcs15-init می‌گوید که نمایهٔ عمومی مشخص‌شده را بارگذاری کند. در حال حاضر، تنها نمایهٔ برنامهٔ تعریف‌شده pkcs15 است، اما شما می‌توانید نمایه‌های اختصاصی خود را بنویسید و با این گزینه آن‌ها را مشخص کنید.

نام نمایه می‌تواند با یک یا چند گزینهٔ نمایه ترکیب شود که رفتار نمایه را کمی تغییر می‌دهند. برای نمونه، نمایهٔ پیش‌فرض OpenSC از گزینهٔ openpin پشتیبانی می‌کند که در طول مقداردهی اولیهٔ کارت، یک PIN تکی نصب می‌نماید. این PIN سپس هم به عنوان SO PIN و هم به عنوان PIN کاربر برای تمام کلیدهای ذخیره‌شده روی کارت استفاده می‌شود.

نام نمایه و گزینه‌ها با یک نویسهٔ + از هم جدا می‌شوند، مانند pkcs15+onepin.

--secret-key-algorithm keyspec,

keyspec الگوریتم و طول کلیدی را که قرار است ایجاد یا بارگذاری شود توصیف می‌کند، مانند aes:256. این کار یک کلید AES ۲۵۶ بیتی ایجاد خواهد کرد.

--store-certificate filename, -X filename

به pkcs15-init می‌گوید که گواهی ارائه‌شده در filename را روی کارت ذخیره کرده و یک شیء گواهی با شناسهٔ مشخص‌شده از طریق گزینهٔ --id ایجاد کند. بدون شناسهٔ ارائه‌شده، یک شناسهٔ ذاتی بر اساس کلید عمومی گواهی محاسبه خواهد شد. برای جزئیات مربوط به الگوریتم مورداستفاده برای محاسبهٔ شناسهٔ ذاتی، به توضیحات مشخصهٔ 'pkcs15-id-style' در 'pkcs15.profile' مراجعه کنید. فرض می‌شود این فایل حاوی گواهی کدگذاری‌شده با PEM است. برای کارت‌های چندبرنامه‌ای، برنامهٔ هدف را می‌توان با مقدار هگزادسیمال AID در گزینهٔ aid مشخص کرد.

--store-pin, -P

یک PIN/PUK جدید را روی کارت ذخیره می‌کند.

--store-public-key filename

به pkcs15-init می‌گوید که کلید عمومی مشخص‌شده را روی کارت بارگذاری کرده و یک شیء کلید عمومی با شناسهٔ کلید مشخص‌شده از طریق --id ایجاد نماید. به‌طور پیش‌فرض، فرض می‌شود فایل حاوی کلید با قالب PEM است. قالب‌های دیگر را می‌توان با استفاده از --format مشخص کرد.

--store-private-key filename, -S filename

به pkcs15-init می‌گوید که کلید خصوصی مشخص‌شده را روی کارت بارگذاری کند. این دستور همچنین یک شیء کلید عمومی حاوی بخش کلید عمومی ایجاد خواهد کرد. به‌طور پیش‌فرض، فرض می‌شود فایل حاوی کلید با قالب PEM است. قالب‌های جایگزین را می‌توان با استفاده از --format مشخص کرد. ایدهٔ خوبی است که شناسهٔ کلید را نیز همراه با این دستور با استفاده از گزینهٔ --id مشخص کنید، در غیر این صورت یک شناسهٔ ذاتی از محتوای کلید محاسبه خواهد شد. برای جزئیات مربوط به الگوریتم مورد استفاده برای محاسبهٔ شناسهٔ ذاتی، به توضیحات مشخصهٔ 'pkcs15-id-style' در 'pkcs15.profile' مراجعه کنید. برای کارت‌های چندبرنامه‌ای، برنامهٔ PKCS#15 هدف را می‌توان با مقدار هگزادسیمال AID در گزینهٔ aid مشخص کرد.

--store-secret-key filename,

به pkcs15-init می‌گوید که کلید محرمانهٔ مشخص‌شده را روی کارت بارگذاری کند. فرض می‌شود فایل حاوی کلید خام است. نوع کلید باید با گزینهٔ --secret-key-algorithm مشخص شود.

همچنین می‌توانید شناسهٔ کلید را همراه با این دستور، با استفاده از گزینهٔ --id مشخص کنید، در غیر این صورت یک شناسهٔ تصادفی تولید می‌شود. برای کارت‌های چندبرنامه‌ای، برنامهٔ PKCS#15 هدف را می‌توان با مقدار هگزادسیمال AID در گزینهٔ aid مشخص کرد.

--store-data filename, -W filename

یک شیء داده را ذخیره می‌کند.

--update-certificate filename, -U filename

به pkcs15-init می‌گوید که شیء گواهی با شناسهٔ مشخص‌شده از طریق گزینهٔ --id را با گواهی موجود در filename به‌روزرسانی کند. فرض می‌شود فایل حاوی یک گواهی با کدگذاری PEM است.

هنگام به‌روزرسانی گواهی‌های رمزگشایی رایانامه توجه ویژه‌ای داشته باشید، زیرا گم شدن یا فقدان گواهی‌ها می‌تواند پیام‌های رایانامه را غیرقابل خواندن کند!

--delete-objects arg, -D arg

به pkcs15-init می‌گوید که شیء مشخص‌شده را حذف کند. arg فهرستی جداشده با کاما است که شامل هر یک از موارد privkey، pubkey، secrkey، cert، chain یا data می‌باشد.

هنگامی که data مشخص شود، یک ---application-id نیز باید مشخص شود، در سایر موارد باید یک --id مشخص گردد.

هنگامی که chain مشخص شود، زنجیرهٔ گواهی که با گواهی دارای شناسهٔ مشخص‌شده آغاز می‌شود حذف خواهد شد، تا جایی که به یک گواهی CA برسد که گواهی دیگری را روی کارت تصدیق کرده باشد. --change-attributes arg, -A arg

به pkcs15-init می‌گوید تا صفت مشخص‌شده را تغییر دهد. arg یکی از مقادیر privkey، pubkey، secrkey، cert یا data است. همچنین باید --id شیء را مشخص کنید. در حال حاضر، تنها می‌توانید --label را تغییر دهید، برای مثال:
pkcs15-init -A cert --id 45 -a 1 --label Jim

--use-default-transport-keys, -T

به pkcs15-init می‌گوید که کلیدهای انتقال (transport keys) را درخواست نکند و از کلیدهای پیش‌فرض، به همان صورتی که برای راه‌انداز کارت شناخته شده است، استفاده کند.

--sanity-check

به pkcs15-init می‌گوید که بررسی سلامت (sanity check) ویژه کارت و در صورت امکان رویه به‌روزرسانی را انجام دهد.

--reader arg, -r arg

شماره کارت‌خوان مورد استفاده. به‌طور پیش‌فرض، نخستین کارت‌خوانی که کارتی در آن قرار دارد استفاده می‌شود. اگر arg یک ATR باشد، کارت‌خوان با کارت منطبق انتخاب خواهد شد.

--verbose, -v

باعث پرگویی بیشتر pkcs15-init می‌شود. برای فعال‌سازی خروجی اشکال‌زدایی در کتابخانه OpenSC، این پرچم را چندین بار مشخص کنید.

--wait, -w

باعث می‌شود pkcs15-init منتظر قرار دادن کارت بماند.

--use-pinpad

از کاربر سوال نپرسد؛ اگر هیچ PIN ارائه‌نشده باشد، از pinpad استفاده خواهد شد.

--auth-id filename, -a filename

شناسه (ID) مربوط به PIN را جهت استفاده/ایجاد مشخص می‌کند

--puk-id ID

شناسه (ID) مربوط به PUK را جهت استفاده/ایجاد مشخص می‌کند

--label LABEL

برچسب (label) را برای شیء PIN، کلید، گواهی یا داده هنگام ایجاد اشیاء جدید مشخص می‌کند. هنگام حذف اشیاء، می‌توان از این گزینه برای حذف شیء بر اساس برچسب استفاده کرد.

--puk-label LABEL

برچسب PUK را مشخص می‌کند

--public-key-label LABEL

برچسب کلید عمومی را مشخص می‌کند (همراه با --generate-key استفاده شود)

--cert-label LABEL

برچسب گواهی کاربر را مشخص می‌کند (همراه با --store-private-key استفاده شود)

--application-name arg

نام برنامه شیء داده را مشخص می‌کند (همراه با --store-data-object استفاده شود)

--aid AID

شناسه AID مربوط به برنامه PKCS#15 روی کارت را برای مقید شدن به آن مشخص می‌کند (به صورت هگزادسیمال)

--output-file filename -o filename,

بخش عمومی کلید تولیدشده را در فایل ذخیره می‌کند

--passphrase PASSPHRASE

عبارت‌عبور (passphrase) را برای باز کردن قفل کلید سری مشخص می‌کند

--authority

گواهی را به عنوان گواهی CA علامت‌گذاری می‌کند

--key-usage arg -u arg,

کاربرد کلید X.509 را مشخص می‌کند. arg فهرستی جداشده با کاما است که شامل هر یک از موارد digitalSignature، nonRepudiation، keyEncipherment، dataEncipherment، keyAgreement، keyCertSign، cRLSign می‌باشد. در صورت یکتا بودن، استفاده از نام‌های اختصاری مجاز است (برای مثال dataEnc).

نام مستعار sign معادل است با digitalSignature,keyCertSign,cRLSign

نام مستعار decrypt معادل است با keyEncipherment,dataEncipherment

--finalize -F,

مرحله مقداردهی اولیه کارت هوشمند را به پایان می‌رساند

--update-last-update

صفت 'lastUpdate' مربوط به tokenInfo را به‌روزرسانی می‌کند

--ignore-ca-certificates

هنگام ذخیره PKCS#12 از گواهی‌های CA صرف‌نظر می‌کند

--update-existing

گواهی موجود را ذخیره یا به‌روزرسانی می‌کند

--extractable

کلید خصوصی به صورت یک کلید قابل استخراج ذخیره می‌شود

--user-consent arg

میزان رضایت کاربر (user-consent) را مشخص می‌کند. arg یک مقدار عدد صحیح است. اگر > 0 باشد، این مقدار مشخص می‌کند که پیش از نیاز به احراز هویت جدید، چند بار می‌توان به شیء دسترسی داشت. اگر صفر باشد، شیء نیازی به احراز هویت مجدد ندارد.

--insecure

حالت ناامن: برای کلید خصوصی نیازی به PIN نیست

--md-container-guid GUID

برای یک کلید جدید، GUID را برای یک ظرف MD مشخص می‌کند

--help -h,

پیام راهنما را نمایش می‌دهد

pkcs15-profile(5)

pkcs15-init توسط Olaf Kirch <okir@suse.de> نوشته شده است.

06/02/2026 openscopensc