tpm2_policynamehash(1) General Commands Manual tpm2_policynamehash(1) نام (NAME) tpm2_policynamehash - پیوند دادن یک خط‌مشی با نام‌های اشیاء مشخص. خلاصه دستور (SYNOPSIS) tpm2_policynamehash [OPTIONS] توضیحات (DESCRIPTION) دستور tpm2_policynamehash(1) یک خط‌مشی را با نام‌های اشیاء مشخص پیوند می‌دهد. این یک ادعای به‌تعویق‌افتاده (deferred assertion) است که در آن، هشِ نام تمامی هندل‌های اشیاء در یک دستور TPM در برابر هش مشخص‌شده در خط‌مشی بررسی و مطابقت داده می‌شود. گزینه‌ها (OPTIONS) • -L, --policy=FILE: فایل ذخیره‌سازی چکیدهٔ (digest) مرکب خط‌مشی. • -S, --session=FILE: فایل نشست خط‌مشی تولیدشده از طریق گزینهٔ -S در دستور tpm2_startauthsession(1). • -n, --name=FILE: فایل حاوی هش نام اشیاء ارجاع‌شده. مراجع (References) گزینه‌های عمومی (COMMON OPTIONS) این مجموعه از گزینه‌ها میان بسیاری از برنامه‌ها مشترک هستند و اطلاعاتی را ارائه می‌دهند که اغلب کاربران انتظار دارند. • -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 (TCTI Configuration) رابط انتقال یا 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 (TCTI Defaults) هنگامی که TCTI مشخص نشده باشد، TCTI پیش‌فرض با استفاده از قواعد معنایی dlopen(3) جستجو می‌شود. ابزارها به دنبال رابط‌های TCTI با نام‌های tabrmd، device و mssim دقیقاً به همین ترتیب خواهند گشت و از نخستین مورد یافت‌شده استفاده می‌کنند. می‌توانید با استفاده از گزینهٔ -v برای چاپ اطلاعات نسخه، بررسی کنید که کدام TCTI به عنوان پیش‌فرض انتخاب خواهد شد. جفت کلید-مقدار “default-tcti” نشان می‌دهد کدام‌یک از TCTIهای یادشده پیش‌فرض است. رابط‌های TCTI سفارشی (Custom TCTIs) هر TCTI که رابط پویای TCTI را پیاده‌سازی کرده باشد می‌تواند بارگذاری شود. ابزارها در لایه درونی از dlopen(3) استفاده می‌کنند و مقدار خام tcti-name برای جستجو به کار می‌رود. بنابراین، این مقدار می‌تواند مسیری به کتابخانه مشترک باشد، یا نام یک کتابخانه مطابق قواعد معنایی dlopen(3). گزینه‌های TCTI (TCTI OPTIONS) این مجموعه از گزینه‌ها برای پیکربندی ماژول‌های مختلف 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 مترادف یکدیگرند. مثال‌ها (EXAMPLES) محدود کردن تکثیر کلید به والد جدید مشخص و کلید تکثیرپذیر مشخص. تولید یک شیء تکثیرپذیر (Generate a duplicable object) 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 ایجاد والد جدید (Create the new parent) 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 تغییر خط‌مشی کلید تکثیرپذیر به خط‌مشی namehash برای محدود کردن والد و کلید 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 کدهای بازگشتی (RETURNS) ابزارها می‌توانند هر یک از کدهای زیر را بازگردانند: • 0 - موفقیت‌آمیز. • 1 - خطای عمومی و نامشخص. • 2 - خطای مدیریت گزینه‌ها. • 3 - خطای احراز هویت. • 4 - خطای مربوط به TCTI. • 5 - طرح‌واره پشتیبانی‌نشده (Non supported scheme). قابل اعمال در tpm2_testparams. محدودیت‌ها (LIMITATIONS) این ابزار انتظار دارد که از قبل یک نشست از طریق tpm2_startauthsession(1) برقرار شده باشد و به یکی از موارد زیر نیاز دارد: • دسترسی مستقیم به دستگاه • پشتیبانی گسترده از نشست با tpm2-abrmd. بدون آن، اغلب مدیران منابع وضعیت نشست را در فاصلهٔ میان فراخوانی‌های دستور ذخیره نخواهند کرد. اشکالات (BUGS) مسائل گیت‌هاب (Github Issues) راهنما (HELP) مشاهدهٔ فهرست پستی (Mailing List) مجوز (LICENSE) این اثر تحت مجوز بین‌المللی کریتیو کامنز ارجاع ۴.۰ (CC BY 4.0) منتشر شده است. tpm2-tools tpm2_policynamehash(1)