tpm2_nvextend(1) General Commands Manual tpm2_nvextend(1) نام (NAME) tpm2_nvextend - گسترش شاخص حافظه غیرفرار TPM2 (NV) خلاصه دستور (SYNOPSIS) tpm2_nvextend [گزینه‌ها] [آرگومان] توضیحات (DESCRIPTION) دستور tpm2_nvextend(1) - یک شاخص حافظه غیرفرار (NV) را همانند یک PCR گسترش می‌دهد. شاخص NV باید از نوع “extend” باشد که هنگام ایجاد فضای NV با دستور tpm2_nvdefine(1) از طریق فیلد “nt” تعیین می‌شود. شاخص می‌تواند به عنوان یک دستگیره خام (raw handle) یا مقدار آفست نسبت به محدوده دستگیره NV یعنی “TPM2_HR_NV_INDEX” به عنوان آرگومان مشخص شود. گزینه‌ها (OPTIONS) • -C, --hierarchy=OBJECT: سلسله‌مراتب مورد استفاده برای احراز مجوز را مشخص می‌کند. گزینه‌های پشتیبانی‌شده عبارتند از: • o برای TPM_RH_OWNER • p برای TPM_RH_PLATFORM • که در آن ممکن است از دستگیره سلسله‌مراتب یا nv-index استفاده شود. هنگامی که -C صراحتاً ارسال نشود، از دستگیره شاخص برای احراز مجوز در برابر شاخص استفاده خواهد شد. مقدار auth شاخص از طریق گزینه -p در tpm2_nvdefine(1) تنظیم می‌شود. • -P, --auth=AUTH: مقدار احراز مجوز برای سلسله‌مراتب را مشخص می‌کند. • -i, --input=FILE: فایل ورودی حاوی داده‌ها جهت گسترش در شاخص NV را مشخص می‌کند. • --cphash=FILE مسیر فایل برای ثبت هش پارامترهای دستور. این مقدار معمولاً cpHash نامیده می‌شود. نکته: هنگامی که این گزینه انتخاب شود، ابزار در واقع دستور را اجرا نخواهد کرد و صرفاً یک cpHash بازمی‌گرداند، مگر اینکه rphash نیز مورد نیاز باشد. • --rphash=FILE مسیر فایل برای ثبت هش پارامترهای پاسخ. این مقدار معمولاً rpHash نامیده می‌شود. • -S, --session=FILE: نشست ایجادشده با استفاده از tpm2_startauthsession. چندین مورد از این نشست‌ها می‌توانند مشخص شوند. به عنوان مثال، می‌توانید یک نشست برای ممیزی و دیگری برای رمزنگاری/رمزگشایی پارامترها داشته باشید. • -n, --name=FILE: نام شاخص NV که باید هنگام محاسبه صرف cpHash بدون ارسال واقعی دستور به TPM ارائه شود. • آرگومان (ARGUMENT): آرگومان خط فرمان، شاخص NV یا شماره آفست را مشخص می‌کند. مراجع (References) قالب شیء زمینه (Context Object Format) نوع یک شیء زمینه، چه دستگیره (handle) باشد یا نام فایل، طبق منطق زیر و به‌ترتیب تعیین می‌شود: • اگر آرگومان مسیر یک فایل باشد، آن فایل به عنوان یک شیء گذرا (transient) بازیابی‌شده TPM بارگذاری می‌شود. • اگر آرگومان با پیشوند یکی از موارد زیر مطابقت داشته باشد: • owner: سلسله‌مراتب مالک (owner hierarchy) • platform: سلسله‌مراتب پلتفرم (platform hierarchy) • endorsement: سلسله‌مراتب تصدیق (endorsement hierarchy) • lockout: شیء پایدار کنترل قفل (lockout control persistent object) • اگر آرگومان بتواند به صورت یک عدد بارگذاری شود، به عنوان یک دستگیره در نظر گرفته می‌شود (مانند 0x81010013) و مستقیماً استفاده خواهد شد. قالب‌بندی احراز هویت (Authorization Formatting) مجوز استفاده از یک شیء در TPM2.0 می‌تواند به ۳ شکل مختلف باشد: ۱. گذرواژه (Password) ۲. کد HMAC ۳. نشست‌ها (Sessions) نکته: “در صورت مشخص نشدن، مجوزها به‌طور پیش‌فرض به گذرواژه خالی (EMPTY PASSWORD) تنظیم می‌شوند”. برای احراز هویت با مقادیر auth، دستورات ابزار به‌طور ضمنی یک نشست HMAC ایجاد می‌کنند. بنابراین گذرواژه‌ها به صورت رمزنگاری‌نشده منتقل نمی‌شوند. این امر برای گذرواژه‌های تعریف‌شده برای اشیاء صدق نمی‌کند. در این حالت، باید از یک نشست HMAC استفاده شود (دستور tpm2_startauthsession(1) را ببینید). گذرواژه‌ها (Passwords) گذرواژه‌ها با استفاده از شناسه‌های پیشوندی به اَشکال زیر تفسیر می‌شوند. نکته: در صورتی که گذرواژه‌ها پیشوند نداشته باشند، به‌طور پیش‌فرض در قالب رشته در نظر گرفته می‌شوند. رشته (String) یک گذرواژه رشته‌ای، که با پیشوند “str:” یا نبود آن (رشته خام بدون پیشوند) مشخص می‌شود، پردازش تفسیری نمی‌شود و مستقیماً برای احراز هویت استفاده می‌گردد. مثال‌ها (Examples) foobar str:foobar رشته هگز (Hex-string) یک گذرواژه رشته هگز، که با پیشوند “hex:” مشخص می‌شود، از قالب هگزادسیمال به یک آرایه بایتی تبدیل می‌شود؛ بنابراین امکان استفاده از گذرواژه‌هایی با نویسه‌های غیرقابل‌چاپ یا ناسازگار با ترمینال را فراهم می‌کند. مثال (Example) hex:1122334455667788 فایل (File) یک گذرواژه مبتنی بر فایل، که با پیشوند “file:” مشخص می‌شود، باید مسیر فایلی حاوی گذرواژه برای خوانده شدن توسط ابزار یا “-” برای استفاده از ورودی استاندارد (stdin) باشد. ذخیره گذرواژه‌ها در فایل از نشت اطلاعات جلوگیری می‌کند؛ گذرواژه‌هایی که به عنوان گزینه ارسال می‌شوند ممکن است از فهرست فرآیندها یا تاریخچه پوسته خوانده شوند. مثال‌ها (Examples) # برای استفاده از ورودی استاندارد و اعلان ورودی: file:- # برای استفاده از فایل از یک مسیر مشخص: file:path/to/password/file # برای ارسال گذرواژه از طریق echo به stdin: echo foobar | tpm2_tool -p file:- # برای استفاده از bash here-string از طریق stdin: tpm2_tool -p file:- <<< foobar نشست‌ها (Sessions) هنگام استفاده از یک نشست خط‌مشی (policy session) جهت احراز مجوز برای استفاده از یک شیء، آرگومان گزینه را با کلمه کلیدی session شروع کنید. سپس مسیری به یک فایل نشست که با tpm2_startauthsession(1) ایجاد شده است را مشخص نمایید. در صورت تمایل، اگر نشست نیازمند ارسال مقدار auth همراه با دستگیره نشست باشد (مانند policy password)، یک + و سپس یک رشته را همان‌طور که در بخش گذرواژه‌ها (Passwords) شرح داده شده است اضافه کنید. مثال‌ها (Examples) برای استفاده از یک فایل زمینه نشست با نام session.ctx: session:session.ctx برای استفاده از یک فایل زمینه نشست با نام session.ctx و ارسال مقدار auth با مقدار mypassword: session:session.ctx+mypassword برای استفاده از یک فایل زمینه نشست با نام session.ctx و ارسال مقدار auth در قالب هگز با مقدار 0x11223344: session:session.ctx+hex:11223344 احراز هویت‌های PCR (PCR Authorizations) می‌توانید با استفاده از پیشوند “pcr:” و ریززبان (minilanguage) مربوط به PCR یک خط‌مشی PCR را برآورده کنید. ریززبان PCR به‌صورت زیر است: = مشخصات PCR در بخش “مشخص‌کننده‌های بانک PCR” مستند شده است. مقدار raw-pcr-file یک آرگومان اختیاری است که شامل خروجی محتویات خام PCR بازگردانده‌شده توسط tpm2_pcrread(1) است. مشخص‌کننده‌های بانک PCR مثال‌ها (Examples) برای برآورده کردن یک خط‌مشی PCR مربوط به sha256 روی بانک‌های ۰، ۱، ۲ و ۳ از این مشخص‌کننده استفاده کنید: pcr:sha256:0,1,2,3 مشخص کردن AUTH. گزینه‌های عمومی (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). زمانی مفید است که لازم باشد یک اصلاحیه خطا روی دستورات ارسالی به TPM اعمال گردد. تعریف متغیر محیطی TPM2TOOLS_ENABLE_ERRATA نیز معادل این عمل است. • -z, --pwd-session: استفاده از نشست گذرواژه به‌جای نشست HMAC برای احراز هویت. یک گذرواژه با متن آشکار برای مجاز کردن عمل به 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، قالب رشته پیکربندی مجموعه‌ای از جفت‌های کلید-مقدار ساده است که با نویسه `,' از هم جدا شده‌اند. هر کلید و رشته مقدار با نویسه `=' از هم جدا می‌شوند. • ماژول 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 مترادف یکدیگرند. مثال‌ها (EXAMPLES) گسترش دادن داده در یک شاخص NV (OR 0xbadc0de into an index of 0’s) tpm2_nvdefine -C o -a "nt=extend|ownerread|policywrite|ownerwrite|writedefine" 1 echo 'my data' | tpm2_nvextend -C o -i- 1 tpm2_nvread -C o 1 | xxd -p -c32 db7472e3fe3309b011ec11565bce4ea6668cc8ecdef7e6fdcda5206687af3f43 کدهای خروجی (Returns) ابزارها می‌توانند هر یک از کدهای زیر را بازگردانند: • 0 - موفقیت‌آمیز. • 1 - خطای عمومی و نامشخص. • 2 - خطای مدیریت گزینه‌ها. • 3 - خطای احراز هویت. • 4 - خطای مربوط به TCTI. • 5 - طرح پشتیبانی‌نشده. قابل اعمال بر tpm2_testparams. اشکالات (BUGS) مسائل گیت‌هاب (Github Issues) راهنما (HELP) مشاهده فهرست پستی (Mailing List) مجوز (LICENSE) این اثر تحت مجوز بین‌المللی ارجاع ۴٫۰ کریپتیو کامانز (CC BY 4.0) منتشر شده است. tpm2-tools tpm2_nvextend(1)