tpm2_rsadecrypt(1) راهنمای دستورهای عمومی tpm2_rsadecrypt(1)

tpm2_rsadecrypt - انجام عملیات رمزگشایی RSA با استفاده از TPM

tpm2_rsadecrypt [OPTIONS] [ARGUMENT]

دستور tpm2_rsadecrypt(1) عملیات رمزگشایی RSA را بر روی محتویات فایل با استفاده از طرح لایه‌گذاری (padding scheme) مشخص‌شده طبق استاندارد IETF RFC 3447 (PKCS#1) انجام می‌دهد. در صورت عدم تعیین، آرگومان خط فرمان به‌طور پیش‌فرض stdin خواهد بود.

کلید ارجاع‌داده‌شده توسط key-context باید دارای شرایط زیر باشد:

1.
یک کلید RSA باشد
2.
صفت decrypt در مشخصه‌های آن تنظیم (SET) شده باشد.

•
-c, --key-context=OBJECT:

شیء بافتاری که به بخش عمومی کلید RSA برای استفاده در رمزگشایی اشاره می‌کند. می‌تواند یک فایل یا یک شماره دستگیره (handle) باشد. بخش “قالب شیء بافتار (Context Object Format)” را ببینید.

•
-p, --auth=AUTH:

مقدار اختیاری احراز هویت برای استفاده از کلید مشخص‌شده با -c.

•
-o, --output=FILE:

مسیر اختیاری فایل خروجی برای ذخیره داده‌های رمزگشایی‌شده در آن. حالت پیش‌فرض، چاپ داده‌های رمزگذاری‌شده دودویی در STDOUT است.

•
-s, --scheme=FORMAT:

اختیاری، طرح لایه‌گذاری را تعیین می‌کند (پیش‌فرض rsaes است).

•
null - مقدار TPM_ALG_NULL که در صورت تنظیم، از طرح خود کلید استفاده می‌کند.
•
rsaes - مقدار TPM_ALG_RSAES که معادل RSAES_PKCSV1.5 است.
•
oaep - مقدار TPM_ALG_OAEP که معادل RSAES_OAEP است.
•
-l, --label=FILE یا STRING:

اختیاری، داده‌های برچسب (label) را تعیین می‌کند. TPM نیاز دارد که آخرین بایت برچسب صفر باشد؛ این موضوع به‌صورت داخلی در ابزار مدیریت می‌شود. هیچ بایت صفر تعبیه‌شده دیگری نمی‌تواند وجود داشته باشد، در غیر این صورت TPM برچسب شما را کوتاه (truncate) خواهد کرد.

•
--cphash=FILE

مسیر فایل برای ثبت درهم‌سازی پارامترهای دستور. این مورد معمولاً با عنوان cpHash شناخته می‌شود. نکته: هنگامی که این گزینه انتخاب شود، این ابزار در واقع دستور را اجرا نخواهد کرد، بلکه صرفاً یک cpHash بازمی‌گرداند.

•
ARGUMENT آرگومان خط فرمان که فایل حاوی داده‌های مورد نظر برای رمزگشایی را مشخص می‌کند.

نوع یک شیء بافتار، چه دستگیره (handle) باشد و چه نام فایل، بر اساس منطق زیر به‌ترتیب تعیین می‌شود:

•
اگر آرگومان مسیر یک فایل باشد، آن فایل به عنوان یک شیء گذرا (transient object) بازیابی‌شده TPM بارگذاری می‌شود.
•
اگر آرگومان یک تطابق پیشوندی (prefix) بر روی یکی از موارد زیر باشد:
•
owner: سلسله‌مراتب مالک (owner hierarchy)
•
platform: سلسله‌مراتب پلتفرم (platform hierarchy)
•
endorsement: سلسله‌مراتب تایید (endorsement hierarchy)
•
lockout: شیء پایدار کنترل قفل (lockout control persistent object)
•
اگر آرگومان بتواند به عنوان یک عدد بارگذاری شود، به عنوان یک دستگیره (مانند 0x81010013) در نظر گرفته شده و مستقیماً استفاده خواهد شد._OBJECT_..SH "قالب‌بندی احراز هویت (Authorization Formatting)" احراز هویت برای استفاده از یک شیء در TPM2.0 می‌تواند به ۳ شکل مختلف انجام شود: ۱. گذرواژه (Password) ۲. کد HMAC ۳. نشست‌ها (Sessions)

نکته: “در صورت مشخص نشدن، اعتبارسنجی‌ها به‌طور پیش‌فرض بر روی گذرواژه خالی (EMPTY PASSWORD) تنظیم می‌شوند”.

برای احراز هویت با مقادیر auth، دستورات ابزار به‌طور ضمنی یک نشست HMAC ایجاد می‌کنند. بنابراین گذرواژه‌ها به صورت رمزنگاری‌نشده منتقل نمی‌شوند. این موضوع برای گذرواژه‌های تعریف‌شده برای اشیاء صدق نمی‌کند. در این حالت، باید از یک نشست HMAC استفاده شود (رجوع کنید به tpm2_startauthsession(1)).

گذرواژه‌ها با استفاده از شناسه‌های پیشوندی به اَشکال زیر تفسیر می‌شوند.

نکته: به‌طور پیش‌فرض، زمانی که گذرواژه‌ها فاقد پیشوند باشند، در قالب رشته (string) در نظر گرفته می‌شوند.

یک گذرواژه رشته‌ای که با پیشوند “str:” یا نبود آن (رشته خام بدون پیشوند) مشخص می‌شود، تفسیر نشده و مستقیماً برای احراز هویت به کار می‌رود.

foobar
str:foobar

یک گذرواژه بر پایه رشته هگز (hex-string) که با پیشوند “hex:” مشخص می‌شود، از فرمت شانزده‌شانزدهی به یک آرایه بایتی تبدیل می‌شود؛ بنابراین امکان استفاده از گذرواژه‌هایی با نویسه‌های غیرقابل‌چاپ یا ناسازگار با ترمینال را فراهم می‌سازد.

hex:1122334455667788

یک گذرواژه مبتنی بر فایل که با پیشوند “file:” مشخص می‌شود، باید مسیر فایلی حاوی گذرواژه جهت خوانده شدن توسط ابزار، یا یک “-” برای استفاده از stdin باشد. ذخیره کردن گذرواژه‌ها در فایل از نشت اطلاعات جلوگیری می‌کند؛ زیرا گذرواژه‌هایی که به عنوان گزینه ارسال می‌شوند ممکن است از طریق فهرست فرآیندها یا قابلیت‌های متداول تاریخچه پوسته خوانده شوند.

# برای استفاده از stdin و دریافت اعلان
file:-
# برای استفاده از یک فایل از طریق مسیر
file:path/to/password/file
# برای ارسال گذرواژه با دستور echo از طریق stdin:
echo foobar | tpm2_tool -p file:-
# برای استفاده از here-string در bash از طریق stdin:
tpm2_tool -p file:- <<< foobar

هنگام استفاده از یک نشست پالیسی (policy session) برای مجاز کردن استفاده از یک شیء، پیشوند آرگومان گزینه را با کلیدواژه session مشخص کنید. سپس مسیر فایل نشستی را که با دستور tpm2_startauthsession(1) ایجاد شده است وارد نمایید. در صورت تمایل، چنانچه نشست نیازمند ارسال مقدار auth به همراه هندل نشست باشد (مانند policy password)، یک نویسه + و یک رشته را مطابق با آنچه در بخش گذرواژه‌ها (Passwords) شرح داده شد به انتهای آن اضافه کنید.

جهت استفاده از یک فایل زمینه نشست (context) به نام session.ctx:

session:session.ctx

جهت استفاده از یک فایل زمینه نشست به نام session.ctx و ارسال authvalue با مقدار mypassword:

session:session.ctx+mypassword

جهت استفاده از یک فایل زمینه نشست به نام session.ctx و ارسال authvalue از نوع HEX با مقدار 0x11223344:

session:session.ctx+hex:11223344
شما می‌توانید با استفاده از پیشوند “pcr:” و ریززبان PCR، یک سیاست PCR را برآورده کنید.
ریززبان PCR به صورت زیر است:
<pcr-spec>=<raw-pcr-file>
مشخصات PCR در بخش “PCR bank specifiers” مستند شده است.
آرگومان raw-pcr-file یک آرگومان اختیاری است که شامل خروجی محتویات خام PCR بازگردانده‌شده توسط tpm2_pcrread(1) می‌باشد.
مشخص‌کننده‌های بانک PCR

برای برآورده کردن یک سیاست PCR از نوع sha256 روی بانک‌های 0، 1، 2 و 3 از یک مشخص‌کننده به این شکل استفاده کنید:

pcr:sha256:0,1,2,3

مشخص کردن AUTH.

این مجموعه از گزینه‌ها میان بسیاری از برنامه‌ها مشترک هستند و اطلاعاتی را ارائه می‌دهند که ممکن است بسیاری از کاربران انتظار داشته باشند.

•
-h, --help=[man|no-man]: نمایش صفحهٔ راهنمای (manpage) ابزار. به‌طور پیش‌فرض، تلاش می‌کند صفحه‌بند راهنما (manpager) را برای ابزار فراخوانی کند، با این حال در صورت شکست، خلاصه‌ای کوتاه از ابزار را در خروجی ارائه می‌دهد. این همان رفتاری است که در صورت تعیین آرگومان گزینهٔ “man” رخ می‌دهد؛ با این وجود اگر صراحتاً “man” درخواست شود، ابزار خطاهای man را در stderr ارائه خواهد داد. اگر گزینهٔ “no-man” مشخص شود، یا فراخوانی manpager با شکست مواجه گردد، گزینه‌های کوتاه در stdout خروجی داده خواهند شد.

استفادهٔ موفقیت‌آمیز از ویژگی صفحات راهنما مستلزم آن است که صفحات راهنما نصب شده یا در MANPATH قرار داشته باشند؛ برای جزئیات بیشتر man(1) را ببینید.

•
-v, --version: نمایش اطلاعات نگارش برای این ابزار، tctiهای پشتیبانی‌شده و خروج.
•
-V, --verbose: افزایش اطلاعاتی که ابزار در طول اجرای خود روی کنسول چاپ می‌کند. هنگام استفاده از این گزینه نام فایل و شمارهٔ خط چاپ می‌شوند.
•
-Q, --quiet: بی‌صدا کردن خروجی عادی ابزار در stdout.
•
-Z, --enable-errata: فعال‌سازی اعمال اصلاحات غلط‌نامه (errata fixups). زمانی مفید است که لازم باشد یک اصلاحیهٔ غلط‌نامه روی دستورهای ارسال‌شده به TPM اعمال شود. تعریف متغیر محیطی TPM2TOOLS_ENABLE_ERRATA معادل آن است.
•
-z, --pwd-session: استفاده از نشست گذرواژه (password session) به جای نشست HMAC برای احراز هویت. یک گذرواژهٔ متنی آشکار (clear text) برای صدور مجوز عملیات به TPM ارسال می‌شود. از این گزینه می‌توان برای جلوگیری از بروز مشکلات در زمان استفاده از نشست‌های بدون سالت (unsalted) در حالت OpenSSL FIPS استفاده کرد. اگر مقادیر auth به کار برده شوند، باید از یک نشست سالت‌دار (salted) برای احراز هویت استفاده شود.
•
-R, --autoflush: فعال‌سازی تخلیهٔ خودکار (autoflush) برای شیءهای گذرا (transient objects) ایجادشده توسط دستور. اگر یک شیء والد از یک فایل زمینه (context) بارگیری شود، شیء والد گذرا نیز تخلیه خواهد شد. تخلیهٔ خودکار همچنین می‌تواند در صورتی فعال شود که متغیر محیطی TPM2TOOLS_AUTOFLUSH روی yes یا true تنظیم شده باشد. اطلاعاتی که ممکن است بسیاری از کاربران انتظار داشته باشند.

رابط TCTI یا “Transmission Interface” سازوکار ارتباطی با TPM است. TCTIها را می‌توان برای برقراری ارتباط با TPMها در بسترهای مختلف تغییر داد.

برای کنترل TCTI، ابزارها این موارد را در نظر می‌گیرند:

1.
گزینهٔ خط فرمان -T یا --tcti
2.
متغیر محیطی: TPM2TOOLS_TCTI.

نکته: گزینهٔ خط فرمان همواره بر متغیر محیطی اولویت دارد.

در حال حاضر TCTIهای شناخته‌شده عبارتند از:

•
tabrmd - مدیر منابع، موسوم به tabrmd. توجه داشته باشید که tabrmd و abrmd به عنوان یک نام tcti هم‌معنی هستند.
•
mssim - معمولاً برای برقراری ارتباط با شبیه‌ساز نرم‌افزاری TPM استفاده می‌شود.
•
device - زمانی استفاده می‌شود که ارتباط مستقیماً با یک فایل دستگاه TPM انجام گیرد.
•
none - اتصالی با TPM مقداردهی اولیه نشود. برخی ابزارها امکان استفاده از گزینه‌های خارج از TPM (off-tpm) را فراهم می‌کنند و بنابراین از عدم استفاده از TCTI پشتیبانی می‌کنند. ابزارهایی که از آن پشتیبانی نمی‌کنند، در صورت تلاش برای استفاده بدون اتصال TCTI، با خطا مواجه می‌شوند. از هیچ‌گونه گزینه‌ای پشتیبانی نمی‌کند و باید دقیقاً به عنوان متن “none” ارائه شود.

آرگومان‌های مربوط به گزینهٔ خط فرمان یا متغیر محیطی به شکل زیر هستند:

<tcti-name>:<tcti-option-config>

مشخص کردن یک رشتهٔ خالی برای هر یک از <tcti-name> یا <tcti-option-config> به ترتیب باعث استفاده از مقدار پیش‌فرض برای آن بخش می‌شود..SS مقادیر پیش‌فرض TCTI هنگامی که TCTI مشخص نشده باشد، TCTI پیش‌فرض با استفاده از معانی dlopen(3) جستجو می‌شود. ابزارها به دنبال TCTIهای tabrmd، device و mssim دقیقاً به همین ترتیب گشته و از نخستین موردی که یافت شود استفاده خواهند کرد. می‌توانید با استفاده از گزینهٔ -v جهت چاپ اطلاعات نسخه، بررسی کنید که چه TCTIای به عنوان پیش‌فرض انتخاب خواهد شد. جفت کلید-مقدار “default-tcti” مشخص می‌کند که کدام‌یک از TCTIهای مذکور پیش‌فرض است.

هر TCTI که رابط پویای TCTI را پیاده‌سازی کرده باشد قابل بارگذاری است. ابزارها در لایهٔ داخلی از dlopen(3) استفاده می‌کنند و مقدار خام tcti-name برای جستجو به کار می‌رود. بنابراین، این مقدار می‌تواند مسیری به کتابخانهٔ اشتراکی، یا نام یک کتابخانه طبق قواعد معنایی dlopen(3) باشد.

این مجموعه از گزینه‌ها برای پیکربندی ماژول‌های مختلف TCTI شناخته‌شده و موجود به کار می‌روند:

•
device: برای TCTI از نوع device، فایل دستگاه نویسه‌ای TPM جهت استفاده توسط TCTI دستگاه را می‌توان تعیین کرد. مقدار پیش‌فرض /dev/tpm0 است.

مثال: -T device:/dev/tpm0 یا export TPM2TOOLS_TCTI=“device:/dev/tpm0”

•
mssim: برای TCTI از نوع mssim، نام دامنه یا آدرس IP و شماره درگاه استفاده‌شده توسط شبیه‌ساز را می‌توان مشخص کرد. مقادیر پیش‌فرض 127.0.0.1 و 2321 هستند.

مثال: -T mssim:host=localhost,port=2321 یا export TPM2TOOLS_TCTI=“mssim:host=localhost,port=2321”

•
abrmd: برای TCTI از نوع abrmd، قالب رشتهٔ پیکربندی مجموعه‌ای از جفت‌های کلید-مقدار ساده است که با نویسهٔ «,» جدا شده‌اند. هر رشتهٔ کلید و مقدار با یک نویسهٔ «=» از هم جدا می‌شوند.
•
مورد TCTI abrmd از دو کلید پشتیبانی می‌کند:
1.
`bus_name' : نام سرویس tabrmd روی گذرگاه (یک رشته).
2.
`bus_type' : نوع نمونهٔ dbus (یک رشته) که محدود به `session' و `system' است.

تعیین نام tcti مربوط به tabrmd و یک رشتهٔ پیکربندی bus_name=com.example.FooBar:

\--tcti=tabrmd:bus_name=com.example.FooBar

تعیین tcti پیش‌فرض (abrmd) و یک رشتهٔ پیکربندی bus_type=session:

\--tcti:bus_type=session

نکته: abrmd و tabrmd مترادف یکدیگرند. ماژول‌های گوناگون شناخته‌شدهٔ TCTI.

tpm2_createprimary -c primary.ctx
tpm2_create -C primary.ctx -Grsa2048 -u key.pub -r key.priv
tpm2_load -C primary.ctx -u key.pub -r key.priv -c key.ctx

echo "my message" > msg.dat
tpm2_rsaencrypt -c key.ctx -o msg.enc msg.dat
tpm2_rsadecrypt -c key.ctx -o msg.ptext msg.enc
cat msg.ptext
my message

ابزارها می‌توانند هر یک از کدهای زیر را برگردانند:

•
0 - موفقیت.
•
1 - خطای عمومی نامشخص.
•
2 - خطای پردازش گزینه‌ها.
•
3 - خطای احراز هویت.
•
4 - خطای مربوط به TCTI.
•
5 - طرح پشتیبانی‌نشده. قابل اعمال بر tpm2_testparams.

مسائل گیت‌هاب (Github Issues)

مشاهدهٔ فهرست پستی (Mailing List)

این اثر تحت مجوز بین‌المللی Creative Commons Attribution 4.0 (CC BY 4.0) منتشر شده است.

tpm2-tools