tpm2_pcrallocate(1) General Commands Manual tpm2_pcrallocate(1)

tpm2_pcrallocate - پیکربندی PCRها و الگوریتم‌های بانک

tpm2_pcrallocate [OPTIONS] [*ARGUMENT]

دستور tpm2_pcrallocate(1) - به کاربر اجازه می‌دهد تخصیص PCR را برای TPM تعیین کند. یک تخصیص، فعال‌سازی یا غیرفعال‌سازی PCRها و بانک‌های آن است. یک PCR می‌تواند چندین بانک داشته باشد، که در آن هر بانک با یک الگوریتم درهم‌سازی خاص مرتبط است. تخصیص در آرگومان تعیین می‌شود.

اگر هیچ تخصیصی داده نشود، بانک‌های SHA1 و SHA256 با PCRهای ۰ تا ۲۳ تخصیص می‌یابند.

تخصیص فهرستی از بانک‌ها و PCRهای انتخاب‌شده است. مقادیر باید از استانداردهای مشخص‌کننده‌های بانک PCR پیروی کنند؛ بخش “مشخص‌کننده‌های بانک PCR (PCR Bank Specifiers)” را ببینید.

تخصیص‌های جدید پس از راه‌اندازی مجدد بعدی سیستم اعمال می‌شوند.

نکته: این دستور نیازمند مجوز پلتفرم (platform authorization) است.

•
-P، --auth=AUTH:

مقدار احراز هویت اختیاری. مقادیر احراز هویت باید از “استانداردهای قالب‌بندی احراز هویت” پیروی کنند؛ بخش “قالب‌بندی احراز هویت (Authorization Formatting)” را ببینید.

•
ARGUMENT آرگومان خط فرمان تخصیص PCR را مشخص می‌کند.
•
--cphash=FILE

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

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

•
اگر آرگومان یک مسیر فایل باشد، آنگاه فایل به عنوان یک شیء گذرای بازگردانی‌شده TPM بارگذاری می‌شود.
•
اگر آرگومان با پیشوند یکی از موارد زیر مطابقت داشته باشد:
•
owner: سلسله‌مراتب مالک (owner hierarchy)
•
platform: سلسله‌مراتب پلتفرم (platform hierarchy)
•
endorsement: سلسله‌مراتب تایید (endorsement hierarchy)
•
lockout: شیء پایدار کنترل قفل (lockout control persistent object)
•
اگر آرگومان بتواند به عنوان یک عدد بارگذاری شود، به عنوان یک دستگیره تلقی خواهد شد (برای نمونه 0x81010013) و مستقیماً استفاده می‌شود.

مجوز استفاده از یک شیء در TPM2.0 می‌تواند به ۳ شکل مختلف باشد: ۱. گذرواژه (Password) ۲. HMAC ۳. نشست‌ها (Sessions)

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

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

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

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

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

foobar
str:foobar

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

hex:1122334455667788

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

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

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

برای استفاده از یک فایل زمینه نشست با نام session.ctx:

session:session.ctx

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

session:session.ctx+mypassword

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

session:session.ctx+hex:11223344

می‌توانید یک سیاست PCR را با استفاده از پیشوند “pcr:” و ریززبان PCR برآورده کنید. ریززبان PCR به شرح زیر است: <pcr-spec>=<raw-pcr-file>

مشخصات PCR در بخش “مشخص‌کننده‌های بانک PCR (PCR Bank Specifiers)” مستند شده است.

مقدار raw-pcr-file یک آرگومان اختیاری است که شامل خروجی محتویات خام PCR مطابق با مقدار بازگردانده‌شده توسط tpm2_pcrread(1) است.

مشخص‌کننده‌های بانک PCR

برای برآورده کردن یک سیاست PCR از sha256 روی بانک‌های ۰، ۱، ۲ و ۳ از یک مشخص‌کننده به صورت زیر استفاده کنید:

pcr:sha256:0,1,2,3

تعیین AUTH.

گزینه‌هایی که الگوریتم دریافت می‌کنند از “نام‌های مناسب (nice-names)” پشتیبانی می‌کنند.

دو رده اصلی از رشته‌های مشخص‌کننده الگوریتم وجود دارد: ساده و پیچیده. تنها الگوریتم‌های خاصی بر اساس کاربرد و شرایط توسط TPM پذیرفته می‌شوند.

این‌ها رشته‌هایی بدون داده‌های مشخص‌کننده اضافی هستند. هنگام ایجاد اشیاء، بخش‌های نامشخص شیء به مقادیر پیش‌فرض ارجاع داده می‌شوند. می‌توانید فهرست “مشخص‌کننده‌های ساده” شناخته‌شده را در زیر بیابید.

•
rsa
•
ecc

•
aes
•
camellia
•
sm4

•
sha1
•
sha256
•
sha384
•
sha512
•
sm3_256
•
sha3_256
•
sha3_384
•
sha3_512

•
hmac
•
xor

•
rsassa
•
rsapss
•
ecdsa
•
ecdaa
•
ecschnorr
•
sm2

•
oaep
•
rsaes
•
ecdh

•
ctr
•
ofb
•
cbc
•
cfb
•
ecb

•
null

اشیاء هنگام تعیین برای ایجاد توسط TPM، دارای الگوریتم‌های متعددی هستند که باید در داده‌های عمومی مقداردهی شوند؛ مواردی مانند نوع، طرح و جزئیات نامتقارن، اندازه کلید و غیره. در زیر قالب کلی برای مشخص کردن این داده‌ها آمده است: <type>:<scheme>:<symmetric-details>

این بخش از مشخص‌کننده الگوریتم پیچیده الزامی است. طرح و جزئیات متقارن باقی‌مانده بر اساس نوع مشخص‌شده و نوع شیء در حال ایجاد پیش‌فرض‌گذاری می‌شوند.

•
aes - مقدار پیش‌فرض AES: aes128.
•
aes128<mode> - الگوریتم AES با طول ۱۲۸ بیت و حالت اختیاری (ctr|ofb|cbc|cfb|ecb). اگر حالت مشخص نشود، پیش‌فرض null خواهد بود.
•
aes192<mode> - مشابه aes128<mode>، به‌جز اندازه کلید ۱۹۲ بیتی.
•
aes256<mode> - مشابه aes128<mode>، به‌جز اندازه کلید ۲۵۶ بیتی.
•
sm4 - مقدار پیش‌فرض SM4: sm4128.
•
sm4128 یا sm4_128 <mode> - الگوریتم SM4 با طول ۱۲۸ بیت و حالت اختیاری (ctr|ofb|cbc|cfb|ecb). اگر حالت مشخص نشود، پیش‌فرض null خواهد بود.
•
ecc - خم بیضوی، پیش‌فرض ecc256.
•
ecc192 یا ecc_nist_p192 - خم بیضوی ۱۹۲ بیتی NIST ECC.
•
ecc224 یا ecc_nist_p224 - خم بیضوی ۲۲۴ بیتی NIST ECC.
•
ecc256 یا ecc_nist_p256 - خم بیضوی ۲۵۶ بیتی NIST ECC.
•
ecc384 یا ecc_nist_p384 - خم بیضوی ۳۸۴ بیتی NIST ECC.
•
ecc521 یا ecc_nist_p521 - خم بیضوی ۵۲۱ بیتی NIST ECC.
•
ecc_sm2 یا ecc_sm2_p256 - خم بیضوی ۲۵۶ بیتی SM2.
•
rsa - مقدار پیش‌فرض RSA: rsa2048.
•
rsa1024 - الگوریتم RSA با اندازه کلید ۱۰۲۴ بیت.
•
rsa2048 - الگوریتم RSA با اندازه کلید ۲۰۴۸ بیت.
•
rsa3072 - الگوریتم RSA با اندازه کلید ۳۰۷۲ بیت.
•
rsa4096 - الگوریتم RSA با اندازه کلید ۴۰۹۶ بیت.

فیلد بعدی اختیاری است و می‌توان از آن صرف‌نظر کرد.

طرح‌ها معمولاً طرح‌های امضا (Signing Schemes) یا طرح‌های رمزنگاری نامتقارن (Asymmetric Encryption Schemes) هستند. بیشتر طرح‌های امضا بلافاصله پس از طرح امضا یک الگوریتم درهم‌سازی دریافت می‌کنند. اگر الگوریتم درهم‌سازی ذکر نشود، پیش‌فرض sha256 خواهد بود. برخی هیچ آرگومانی نمی‌پذیرند و برخی چندین آرگومان دریافت می‌کنند.

پس از این مشخص‌کننده‌های طرح، یک خط تیره و یک الگوریتم درهم‌سازی معتبر قرار می‌گیرد، برای مثال: oaep-sha256.

•
oaep
•
ecdh
•
rsassa
•
rsapss
•
ecdsa
•
ecschnorr
•
sm2

پس از این مشخص‌کننده طرح، یک شمارنده (حداکثر اندازه UINT16) و سپس یک خط تیره (-) و یک الگوریتم درهم‌سازی معتبر قرار می‌گیرد. * ecdaa برای مثال، ecdaa4-sha256. اگر شمارنده‌ای مشخص نشود، پیش‌فرض ۴ خواهد بود.

این مشخص‌کننده طرح هیچ آرگومانی دریافت نمی‌کند. * rsaes

این فیلد اختیاری است و بر اساس نوع (type) شیء در حال ایجاد و ویژگی‌های آن پیش‌فرض‌گذاری می‌شود. به‌طور کلی، هر مشخص‌کننده معتبر متقارن از فهرست مشخص‌کننده‌های نوع باید کار کند. اگر مشخص نشود، جزئیات متقارن یک شیء نامتقارن به‌طور پیش‌فرض به aes128cfb تنظیم می‌شود.

tpm2_create -C parent.ctx -G rsa2048:rsaes -u key.pub -r key.priv

/tpm2_create -C parent.ctx -G ecc256:ecdaa4-sha384 -u key.pub -r key.priv الگوریتم‌های رمزنگاری ALGORITHM.

ویژگی‌های شیء (Object Attributes) برای کنترل خواص مختلف اشیاء ایجادشده به کار می‌روند. هنگامی که به عنوان یک گزینه مشخص شوند، می‌توان از ماسک بیتی خام یا “نام‌های مناسب (nice-names)” استفاده کرد. این مقادیر را می‌توان در جدول ۳۱ بخش ۲ از مشخصات TPM2.0 یافت، که در اینجا در دسترس است:

https://trustedcomputinggroup.org/wp-content/uploads/TPM-Rev-2.0-Part-2-Structures-01.38.pdf

نام‌های مناسب با گرفتن فیلد نام در جدول ۳۱ و حذف پیشوند TPMA_OBJECT_ و تبدیل نتیجه به حروف کوچک محاسبه می‌شوند. بنابراین، TPMA_OBJECT_FIXEDTPM به fixedtpm تبدیل می‌شود. نام‌های مناسب را می‌توان با استفاده از نماد OR بیتی یعنی “|” به هم پیوند داد.

برای نمونه، جهت تنظیم فیلدهای TPMA_OBJECT_FIXEDTPM، TPMA_OBJECT_NODA و TPMA_OBJECT_SIGN_ENCRYPT، آرگومان مربوطه به صورت زیر خواهد بود:

fixedtpm|noda|sign که ویژگی‌های شیء ATTRIBUTES را مشخص می‌کند.

فهرست‌های انتخاب بانک PCR از مشخصات زیر پیروی می‌کنند:

<BANK>:<PCR>[,<PCR>] or <BANK>:all

چندین بانک می‌توانند با `+' از یکدیگر جدا شوند.

برای مثال:

sha1:3,4+sha256:all

شناسه‌های ۳ و ۴ را از بانک SHA1 و شناسه‌های ۰ تا ۲۳ را از بانک SHA256 انتخاب خواهد کرد.

برخی دستورات از تعیین مقادیر پلمب پیش‌رو (forward sealing) نیز پشتیبانی می‌کنند:

sha1:0,1=da39a3ee5e6b4b0d3255bfef95601890afd80709,2

این دستور مقادیر فعلی را برای PCRهای ۰ و ۲ انتخاب می‌کند، اما برای PCR 1 از مقدار مشخص‌شده استفاده می‌نماید. طول چکیده (digest) باید با اندازه بانک مطابقت داشته باشد. پیشوند اختیاری 0x حذف خواهد شد.

انتخاب‌های PCR حداکثر ۵ نگاشت هش به انتخاب PCR را مجاز می‌دانند. این یک محدودیت در طراحی در فراخوانی منفرد به TPM جهت دریافت مقادیر PCR است.

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

•
-h، --help=[man|no-man]: نمایش صفحه راهنمای ابزار. به‌طور پیش‌فرض، تلاش می‌کند تا صفحه‌خوان man را برای ابزار فراخوانی کند؛ با این حال در صورت بروز خطا خلاصه‌ای کوتاه از ابزار را نمایش می‌دهد. این رفتار مشابه زمانی است که آرگومان گزینهٔ “man” مشخص شده باشد، اما اگر صراحتاً “man” درخواست شود، ابزار خطاهای man را در stderr ارائه می‌دهد. اگر گزینهٔ “no-man” مشخص شود، یا صفحه‌خوان 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.

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

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 دستگاه، فایل دستگاه کاراکتری 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'.

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

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

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

\--tcti:bus_type=session

نکته: abrmd و tabrmd مترادف هستند.

tpm2_pcrallocate

tpm2_pcrallocate -P abc sha1:7,8,9,10,16,17,18,19+sha256:all

tpm2_pcrallocate -P abc sha1:none+sha256:all

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

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

tpm2_pcrread(1)، tpm2_pcrextend(1)، tpm2_pcrreset(1)

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

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

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

tpm2-tools