tpm2_policynamehash(1) General Commands Manual tpm2_policynamehash(1)

tpm2_policynamehash - پیوند دادن یک خط‌مشی با نام‌های اشیاء مشخص.

tpm2_policynamehash [OPTIONS]

دستور tpm2_policynamehash(1) یک خط‌مشی را با نام‌های اشیاء مشخص پیوند می‌دهد. این یک ادعای به‌تعویق‌افتاده (deferred assertion) است که در آن، هشِ نام تمامی هندل‌های اشیاء در یک دستور TPM در برابر هش مشخص‌شده در خط‌مشی بررسی و مطابقت داده می‌شود.

•
-L, --policy=FILE:

فایل ذخیره‌سازی چکیدهٔ (digest) مرکب خط‌مشی.

•
-S, --session=FILE:

فایل نشست خط‌مشی تولیدشده از طریق گزینهٔ -S در دستور tpm2_startauthsession(1).

•
-n, --name=FILE:

فایل حاوی هش نام اشیاء ارجاع‌شده.

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

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

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

•
-v, --version: نمایش اطلاعات نسخه برای این ابزار، TCTIهای پشتیبانی‌شده و خروج.
•
-V, --verbose: افزایش میزان اطلاعاتی که ابزار در حین اجرای خود در کنسول چاپ می‌کند. هنگام استفاده از این گزینه، نام فایل و شماره خط چاپ می‌شوند.
•
-Q, --quiet: بی‌صدا کردن خروجی عادی ابزار در stdout.
•
-Z, --enable-errata: فعال‌سازی اعمال اصلاحات اشکالات (errata fixups). این گزینه زمانی مفید است که نیاز باشد اصلاحات errata به دستورات ارسالی به 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.

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

رابط‌های 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> به ترتیب سبب استفاده از مقادیر پیش‌فرض برای آن بخش می‌شود.

هنگامی که 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 و شماره درگاه (port) مورد استفاده توسط شبیه‌ساز می‌تواند مشخص شود. مقادیر پیش‌فرض 127.0.0.1 و 2321 هستند.

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

•
abrmd: برای TCTI ابزار abrmd، قالب رشته پیکربندی مجموعه‌ای از جفت‌های کلید-مقدار ساده است که با نویسهٔ `,' جدا شده‌اند. رشته‌های هر کلید و مقدار با نویسهٔ `=' از یکدیگر جدا می‌شوند.
•
رابط abrmd TCTI از دو کلید پشتیبانی می‌کند:
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 مترادف یکدیگرند.

محدود کردن تکثیر کلید به والد جدید مشخص و کلید تکثیرپذیر مشخص.

openssl genrsa -out signing_key_private.pem 2048
openssl rsa -in signing_key_private.pem -out signing_key_public.pem -pubout
tpm2_loadexternal -G rsa -C o -u signing_key_public.pem -c signing_key.ctx \
-n signing_key.name
tpm2_startauthsession -S session.ctx -g sha256
tpm2_policyauthorize -S session.ctx -L authorized.policy -n signing_key.name
tpm2_policycommandcode -S session.ctx -L policy.dat TPM2_CC_Duplicate
tpm2_flushcontext session.ctx
tpm2_createprimary -C o -g sha256 -G rsa -c primary.ctx -Q
## The duplicable key
tpm2_create -Q -C primary.ctx -g sha256 -G rsa -r key.prv -u key.pub \
-L policy.dat -a "sensitivedataorigin|sign|decrypt"
tpm2_load -Q -C primary.ctx -r key.prv -u key.pub -c key.ctx

tpm2_create -Q -C primary.ctx -g sha256 -G rsa -r new_parent.prv \
-u new_parent.pub \
-a "decrypt|fixedparent|fixedtpm|restricted|sensitivedataorigin"
tpm2_loadexternal -Q -C o -u new_parent.pub -c new_parent.ctx

tpm2_readpublic -Q -c new_parent.ctx -n new_parent.name
tpm2_readpublic -Q -c key.ctx -n key.name
cat key.name new_parent.name | openssl dgst -sha256 -binary > name.hash
tpm2_startauthsession -S session.ctx -g sha256
tpm2_policynamehash -L policy.namehash -S session.ctx -n name.hash
tpm2_flushcontext session.ctx
openssl dgst -sha256 -sign signing_key_private.pem \
-out policynamehash.signature policy.namehash
tpm2_startauthsession -S session.ctx -g sha256
tpm2_policyauthorize -S session.ctx -L authorized.policy -i policy.namehash \
-n signing_key.name
tpm2_policycommandcode -S session.ctx -L policy.dat TPM2_CC_Duplicate
tpm2_flushcontext session.ctx

tpm2_verifysignature -c signing_key.ctx -g sha256 -m policy.namehash \
-s policynamehash.signature -t verification.tkt -f rsassa
tpm2_startauthsession -S session.ctx --policy-session -g sha256
tpm2_policynamehash -S session.ctx -n name.hash
tpm2_policyauthorize -S session.ctx -i policy.namehash -n signing_key.name \
-t verification.tkt
tpm2_policycommandcode -S session.ctx TPM2_CC_Duplicate
tpm2_duplicate -C new_parent.ctx -c key.ctx -G null -p "session:session.ctx" \
-r dupprv.bin -s dupseed.dat
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)

این اثر تحت مجوز بین‌المللی کریتیو کامنز ارجاع ۴.۰ (CC BY 4.0) منتشر شده است.

tpm2-tools