tpm2_policynv(1) General Commands Manual tpm2_policynv(1)

tpm2_policynv - ارزیابی مجوز خط‌مشی با مقایسه مقداری مشخص با محتویات اندیس NV تعیین‌شده

tpm2_policynv [OPTIONS] [ARGUMENT] [ARGUMENT]

دستور tpm2_policynv(1) - مجوز خط‌مشی را از طریق مقایسه محتویات نوشته‌شده در یک اندیس NV با مقدار مشخص‌شده در گزینه‌های ابزار ارزیابی می‌کند. این ابزار دو آرگومان دریافت می‌کند - (۱) اندیس NV که به صورت یک هندل خام یا یک مقدار آفست نسبت به محدوده هندل NV یعنی “TPM2_HR_NV_INDEX” مشخص می‌شود، و (۲) عملگر مقایسه برای مقایسه بزرگی و یا عملیات آزمون بیت. در مشخصات، اندیس NV نگه‌دارنده داده‌ها operandA نامیده می‌شود و داده‌ای که کاربر برای مقایسه مشخص می‌کند operandB نام دارد. عملگر مقایسه می‌تواند به صورت‌های زیر مشخص شود:

•
“eq” اگر operandA = operandB
•
“neq” اگر operandA != operandB
•
“sgt” اگر signed operandA > signed operandB
•
“ugt” اگر unsigned operandA > unsigned operandB
•
“slt” اگر signed operandA < signed operandB
•
“ult” اگر unsigned operandA < unsigned operandB
•
“sge” اگر signed operandA >= signed operandB
•
“uge” اگر unsigned operandA >= unsigned operandB
•
“sle” اگر signed operandA <= unsigned operandB
•
“ule” اگر unsigned operandA <= unsigned operandB
•
“bs” اگر تمام بیت‌های تنظیم‌شده در operandA در operandB نیز تنظیم شده باشند
•
“bc” اگر تمام بیت‌های تنظیم‌شده در operandA در operandB پاک (صفر) باشند

•
-C, --hierarchy=OBJECT:

سلسله‌مراتب مورد استفاده برای احراز هویت را مشخص می‌کند. گزینه‌های پشتیبانی‌شده عبارتند از:

•
o برای TPM_RH_OWNER
•
p برای TPM_RH_PLATFORM
•
<num> که در آن می‌توان از هندل سلسله‌مراتب یا nv-index استفاده کرد.

هنگامی که -C به طور صریح داده نشود، از هندل اندیس برای احراز هویت در برابر اندیس استفاده خواهد شد. مقدار احراز هویت اندیس از طریق گزینه -p در tpm2_nvdefine(1) تنظیم می‌شود.

•
-P, --auth=AUTH:

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

•
-L, --policy=FILE:

فایل ذخیره خلاصه خط‌مشی (policy digest).

•
-S, --session=FILE:

فایل نشست خط‌مشی ایجادشده از طریق گزینه -S در tpm2_startauthsession یا ذخیره‌شده از اجرای قبلی ابزار.

•
--offset=NATURAL_NUMBER:

آفست درون اندیس NV برای شروع مقایسه. اندازه داده‌ها از آفست شروع شده و تا پایان اندازه اندیس NV نباید از اندازه عملوند مشخص‌شده در گزینه‌ها بیشتر باشد.

•
--cphash=FILE

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

•
-i, --input=FILE:

فایل ورودی شامل داده‌ها را برای مقایسه با محتویات اندیس NV مشخص می‌کند. در مشخصات استاندارد، این داده عملوند یا به طور خاص‌تر operandB نامیده می‌شود. اگر مقدار گزینه برابر با “-” باشد، می‌تواند به عنوان یک ورودی فایل یا stdin مشخص شود.

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

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

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

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

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

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

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

نکته: گزینه خط فرمان همواره متغیر محیطی را لغو (override) می‌کند.

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

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

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

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

تعیین یک رشته خالی برای هر یک از <tcti-name> یا <tcti-option-config> باعث می‌شود به ترتیب مقدار پیش‌فرض برای هر بخش استفاده شود.

هنگامی که 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 شناخته‌شده.

بررسی اینکه آیا مقدار محتوای اندیس NV با یک عدد ورودی برابر است یا خیر. برای انجام این کار، ابتدا یک اندیس NV به اندازه ۱ بایت ایجاد کرده و مقداری درون آن می‌نویسیم، مانند: 0xAA. سپس تلاش می‌کنیم یک خط‌مشی ایجاد کنیم که در صورت برقرار بودن عملیات مقایسه برابری محتوای اندیس NV با مقدار مشخص‌شده در گزینه‌های ابزار، معتبر شود.

nv_test_index=0x01500001
tpm2_nvdefine -C o -p nvpass $nv_test_index -a "authread|authwrite" -s 1
echo "aa" | xxd -r -p | tpm2_nvwrite -P nvpass -i- $nv_test_index

tpm2_startauthsession -S session.ctx --policy-session
### این باید ناموفق باشد
echo "bb" | xxd -r -p | tpm2_policynv -S session.ctx -L policy.nv -i- 0x1500001 eq -P nvpass
tpm2_flushcontext session.ctx

tpm2_startauthsession -S session.ctx --policy-session
### این باید موفقیت‌آمیز باشد
echo "aa" | xxd -r -p | tpm2_policynv -S session.ctx -L policy.nv -i- 0x1500001 eq -P nvpass
tpm2_flushcontext session.ctx

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

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

انتظار می‌رود نشستی از پیش از طریق tpm2_startauthsession(1) ایجاد شده باشد و به یکی از موارد زیر نیاز دارد:

•
دسترسی مستقیم به دستگاه
•
پشتیبانی از نشست گسترش‌یافته با tpm2-abrmd.

بدون آن، اکثر مدیران منابع وضعیت نشست را در بین فراخوانی‌های دستور ذخیره نخواهند کرد.

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

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

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

tpm2-tools