tpm2_create(1) General Commands Manual tpm2_create(1)

tpm2_create - ایجاد یک شیء فرزند

tpm2_create [گزینه‌ها]

دستور tpm2_create(1) یک شیء فرزند ایجاد می‌کند. این شیء می‌تواند یک کلید یا یک شیء مهروموم (sealing object) باشد. یک شیء مهروموم امکان مهروموم کردن داده‌های کاربر در TPM را با حداکثر اندازه ۱۲۸ بایت فراهم می‌سازد. علاوه بر این، در صورت مشخص شدن گزینهٔ -c، شیء ایجادشده بارگذاری نیز خواهد شد.

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

•
-C, --parent-context=OBJECT:

والد شیئی که قرار است ایجاد شود.

•
-P, --parent-auth=AUTH:

مقدار مجوز (auth value) شیء والد مشخص‌شده با -C.

•
-p, --key-auth=AUTH:

مقدار مجوز برای شیء ایجادشده.

•
-g, --hash-algorithm=ALGORITHM:

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

•
-G, --key-algorithm=ALGORITHM:

الگوریتم کلید مرتبط با این شیء. در صورت مشخص نشدن، پیش‌فرض “rsa” است.

•
-a, --attributes=ATTRIBUTES:

ویژگی‌های شیء، اختیاری است. مقدار پیش‌فرض برای اشیاء ایجادشده عبارت است از:

TPMA_OBJECT_SIGN_ENCRYPT|TPMA_OBJECT_DECRYPT|TPMA_OBJECT_FIXEDTPM| TPMA_OBJECT_FIXEDPARENT|TPMA_OBJECT_SENSITIVEDATAORIGIN| TPMA_OBJECT_USERWITHAUTH

هنگامی که -i برای مهروموم کردن مشخص شود، TPMA_OBJECT_SIGN_ENCRYPT و TPMA_OBJECT_DECRYPT از مجموعه ویژگی‌های پیش‌فرض حذف می‌شوند. الگوریتم به گونه‌ای تنظیم می‌شود که شیء تنها برای مهروموم و رمزگشایی مهروموم مناسب باشد؛ یعنی نمی‌توان از یک شیء هم‌زمان برای عملیات مهروموم و رمزنگاری استفاده کرد.

هنگامی که -L برای افزودن اطلاعات احراز هویت مبتنی بر پالیسی مشخص شده باشد و هیچ گذرواژهٔ رشته‌ای تعیین نشده باشد، ویژگی TPMA_OBJECT_USERWITHAUTH پاک می‌شود، مگر آنکه با تنظیم صریح این ویژگی با گزینهٔ -a مشخص گردد. این کار از ایجاد اشیایی با مدل احراز هویت ناخواسته جلوگیری می‌کند که در آن کاربر قصد اعمال یک پالیسی را داشته اما به اشتباه شیئی با مجوز خالی ایجاد کرده که می‌تواند به جای احراز هویت پالیسی استفاده شود.

•
-i, --sealing-input=FILE یا STDIN:

فایل داده برای مهروموم شدن، اختیاری است. اگر فایل - باشد، از stdin خوانده می‌شود. هنگام مهروموم کردن داده‌ها، تنها الگوریتم TPM_ALG_KEYEDHASH با طرح NULL مجاز است. بنابراین، نمی‌توان گزینهٔ -G را مشخص کرد.

•
-L, --policy=FILE یا HEX_STRING:

فایل پالیسی ورودی یا یک رشته هگزادسیمال، اختیاری است.

•
-u, --public=FILE:

فایل خروجی حاوی بخش عمومی شیء ایجادشده، اختیاری است.

•
-r, --private=FILE:

فایل خروجی حاوی بخش حساس (خصوصی) شیء، اختیاری است. # جزئیات حفاظت (Protection Details)

اشیایی که می‌توانند به خارج از TPM منتقل شوند، باید محافظت گردند (محرمانگی و یکپارچگی). به عنوان مثال، اشیاء گذرا (transient) نیازمند آن هستند که داده‌های محافظت‌شده توسط TPM (کلید یا داده‌های مهروموم) در خارج از TPM ذخیره شوند. این مورد در ابزارهایی مانند tpm2_create(1) دیده می‌شود که در آن گزینهٔ -r این داده‌های محافظت‌شده را در خروجی قرار می‌دهد. این حباب داده (blob) حاوی بخش‌های حساس شیء است. بخش‌های حساس شیء توسط شیء والد محافظت می‌شوند؛ با استفاده از مشخصات رمزنگاری متقارن شیء والد برای رمزگذاری داده‌های حساس و اعمال HMAC بر روی آن.

جزئیات دقیق را می‌توان در بخش ۲۳ سند زیر یافت:

•
https://trustedcomputinggroup.org/wp-content/uploads/TPM-Rev-2.0-Part-1-Architecture-01.38.pdf

به‌ویژه شکل ۲۰ مرتبط است، هرچند که مشخصاً به حباب‌های تکثیر اشاره دارد، اما فرآیند یکسان است.

اگر خروجی از tpm2_duplicate(1) باشد، خروجی کمی متفاوت خواهد بود، همان‌طور که به‌طور کامل در بخش ۲۳ توضیح داده شده است.

•
-c, --key-context=FILE:

فایل خروجی حاوی کانتکست کلید، اختیاری است. کانتکست کلید مشابه فایل کانتکست تولیدشده توسط tpm2_load(1) است، اما از طریق دستور tpm2_createloaded(1) ایجاد می‌شود. این گزینه می‌تواند برای اجتناب از توالی دستورات معمول tpm2_create(1) و tpm2_load(1) و انجام همهٔ آن‌ها در یک دستور، به‌صورت اتمیک، به کار رود.

•
--creation-data=FILE:

یک فایل خروجی اختیاری که داده‌های ایجاد را برای گواهی‌دهی ذخیره می‌کند.

•
--template-data=FILE:

یک فایل خروجی اختیاری که داده‌های الگوی کلید (TPM2B_PUBLIC) را برای استفاده در tpm2_policytemplate ذخیره می‌کند.

•
-t, --creation-ticket=FILE:

یک فایل خروجی اختیاری که تیکت ایجاد را برای گواهی‌دهی ذخیره می‌کند.

•
-d, --creation-hash=FILE:

یک فایل خروجی اختیاری که هش ایجاد را برای گواهی‌دهی ذخیره می‌کند.

•
-q, --outside-info=HEX_STR_OR_FILE:

یک رشته هگزادسیمال یا مسیر اختیاری برای افزودن داده‌های یکتا به داده‌های ایجاد. توجه داشته باشید که این مقدار کمکی به ایجاد شیء از نظر آماری یکتا نمی‌کند.

•
-l, --pcr-list=PCR:

فهرست بانک‌های PCR و شناسه‌های PCRهای انتخاب‌شده برای هر بانک جهت گنجانده شدن در داده‌های ایجاد برای گواهی‌دهی.

•
--cphash=FILE

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

•
--rphash=FILE

مسیر فایل برای ثبت هش پارامترهای پاسخ. این مقدار معمولاً به عنوان rpHash شناخته می‌شود.

•
-S, --session=FILE:

نشست ایجادشده با استفاده از tpm2_startauthsession. می‌توان چندین نشست را مشخص کرد. به عنوان مثال، می‌توانید یک نشست برای حسابرسی و نشستی دیگر برای رمزگذاری/رمزگشایی پارامترها داشته باشید.

•
-f, --format:

انتخاب قالب برای فایل خروجی کلید عمومی. مقدار `tss' (پیش‌فرض) یک حباب دادهٔ دودویی مطابق با مشخصات TPM 2.0 تولید می‌کند. مقدار `pem' یک کلید عمومی با کدگذاری PEM و سازگار با OpenSSL تولید می‌کند. مقدار `der' یک کلید عمومی با کدگذاری DER و سازگار با OpenSSL تولید می‌کند. مقدار `tpmt' یک حباب دادهٔ دودویی از ساختار TPMT_PUBLIC مرجع در مشخصات TPM 2.0 تولید می‌کند.

قالب کلید عمومی.

•
-o, --output=FILE:

مسیر فایل خروجی، برای ثبت بخش عمومی شیء.

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

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

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

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

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

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

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

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

foobar
str:foobar

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

hex:1122334455667788

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

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

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

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

session:session.ctx

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

session:session.ctx+mypassword

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

session:session.ctx+hex:11223344

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

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

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

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

برای برآورده کردن یک پالیسی PCR از نوع sha256 روی بانک‌های 0، 1، 2 و 3 از مشخص‌کننده زیر استفاده کنید:

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

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

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

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

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

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

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

این فیلد اختیاری است و بر اساس نوع شیء در حال ایجاد و ویژگی‌های آن به مقادیر پیش‌فرض تنظیم می‌شود. به‌طور کلی، هر مشخص‌کننده معتبر متقارن از فهرست مشخص‌کننده‌های نوع قابل استفاده است. در صورت عدم تعیین، جزئیات متقارن یک شیء نامتقارن به‌طور پیش‌فرض 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.

ویژگی‌های شیء برای کنترل ویژگی‌های مختلف اشیاء ایجادشده به کار می‌روند. هنگامی که به عنوان یک گزینه مشخص می‌شوند، می‌توان از ماسک بیتی خام یا “نام‌های مناسب” (nice-names) استفاده کرد. این مقادیر را می‌توان در جدول ۳۱ بخش ۲ از مشخصات TPM 2.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 را مشخص می‌کند.

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

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

استفاده موفقیت‌آمیز از ویژگی manpages نیازمند نصب بودن صفحات راهنما یا قرار داشتن آن‌ها در مسیر 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 values) به کار روند، باید از یک نشست نمک‌دار (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)، فایل دستگاه نویسه‌ای (character 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 مترادف یکدیگرند. ماژول‌های مختلف TCTI شناخته‌شده.

برای ایجاد یک شیء، ابتدا باید یک کلید اولیه (primary key) به عنوان والد آن ایجاد کنیم.

tpm2_createprimary -c primary.ctx

این دستور با استفاده از تمام مقادیر پیش‌فرض یک شیء ایجاد کرده و بخش‌های خصوصی و عمومی مهروموم‌شده توسط TPM را به ترتیب در مسیرهای مشخص‌شده با -u و -r ذخیره می‌کند. ابزار به‌طور پیش‌فرض یک کلید RSA تولید می‌کند.

tpm2_create -C primary.ctx -u obj.pub -r obj.priv

به غیر از اشیاء کلید، TPM امکان مهروموم کردن مقادیر کمی از داده‌های تعیین‌شده توسط کاربر را در خود فراهم می‌کند.

echo "my sealed data" > seal.dat
tpm2_create -C primary.ctx -i seal.dat -u obj.pub -r obj.priv

معمولاً هنگام ایجاد یک شیء، تنها بخش‌های عمومی و خصوصی آن بازگردانده می‌شوند و فراخواننده باید از tpm2_load(1) برای بارگذاری این بخش‌های عمومی و خصوصی در TPM پیش از استفاده از شیء استفاده کند. با این حال، در صورت پشتیبانی TPM، این فرآیند درون همین دستور نیز قابل انجام است. می‌توانید با بررسی بازگردانده شدن TPM2_CC_CreateLoaded در مجموعه دستورات توسط tpm2_getcap(1)، پشتیبانی TPM خود را از این ویژگی تأیید کنید. اگر TPM شما از TPM2_CC_CreateLoaded پشتیبانی نکند، خطای کد دستور پشتیبانی‌نشده بازگردانده خواهد شد. در صورت عدم پشتیبانی، باید از tpm2_load(1) استفاده شود. برای جزئیات نحوه استفاده از آن، به آن صفحه راهنما مراجعه نمایید.

tpm2_create -C primary.ctx -G ecc -u obj.pub -r obj.priv -c ecc.ctx

این دستور با استفاده از مقادیر پیش‌فرض یک شیء ایجاد می‌کند، اما همچنین کلید عمومی را در قالب یک فایل PEM سازگار با ابزارهایی مانند OpenSSL و سایر ابزارهای پشتیبانی‌کننده از PEM در خروجی قرار می‌دهد.

tpm2_create -C primary.ctx -u obj.pub -r obj.priv -f pem -o obj.pem

برای یک کلید امضای محدودشده (restricted)، باید طرح امضا و مقدار null برای الگوریتم متقارن مشخص شود.

tpm2_create -C primary.ctx -Grsa2048:rsapss:null  \
    -a "fixedtpm|fixedparen|sensitivedataorigin|userwithauth|restricted|sign" \
    -r obj.priv -u obj.pub

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

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

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

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

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

tpm2-tools