.\" Automatically generated by Pandoc 3.6.1 .\" .TH "tpm2_duplicate" "1" "" "tpm2\-tools" "General Commands Manual" .SH "نام (NAME)" tpm2_duplicate \- کپی و تکثیر شیء بارگذاری‌شده در TPM2 .SH "خلاصه دستور (SYNOPSIS)" \f[B]tpm2_duplicate\f[R] [\f[I]گزینه‌ها\f[R]] .SH "توضیحات (DESCRIPTION)" دستور \f[B]tpm2_duplicate\f[R](1) یک شیء بارگذاری‌شده را تکثیر می‌کند تا بتوان از آن در یک سلسله‌مراتب (hierarchy) متفاوت استفاده کرد. کلید والد جدید برای شیء تکثیرشده می‌تواند روی همان TPM یا یک TPM دیگر، یا TPM_RH_NULL باشد. .SH "گزینه‌ها (OPTIONS)" این گزینه‌ها فرآیند وارد کردن کلید را کنترل می‌کنند: .IP \[bu] 2 \f[B]\-G\f[R], \f[B]\-\-wrapper\-algorithm\f[R]=\f[I]ALGORITHM\f[R]: .RS 2 .PP الگوریتم متقارنی که اگر گزینهٔ \-U استفاده نشود، برای پوشش درونی (inner wrapper) استفاده خواهد شد. پشتیبانی می‌کند از: .IP \[bu] 2 aes \- الگوریتم AES 128 در حالت CFB. .IP \[bu] 2 null \- هیچ‌کدام. الگوریتم کلید مرتبط با والد عمومی در صورت استفاده از گزینهٔ \-U. .RE .IP \[bu] 2 \f[B]\-G\f[R], \f[B]\-\-key\-algorithm\f[R]=\f[I]ALGORITHM\f[R]: .RS 2 .PP الگوریتم کلید مرتبط با والد عمومی در صورت استفاده از گزینهٔ \-U. .RE .IP \[bu] 2 \f[B]\-i\f[R], \f[B]\-\-encryptionkey\-in\f[R]=\f[I]FILE\f[R]: .RS 2 .PP نام فایل کلید متقارن (داده‌های ۱۲۸ بیتی) را مشخص می‌کند که برای پوشش درونی استفاده می‌شود. تنها زمانی معتبر است که الگوریتم متقارن مشخص‌شده null نباشد. .RE .IP \[bu] 2 \f[B]\-o\f[R], \f[B]\-\-encryptionkey\-out\f[R]=\f[I]FILE\f[R]: .RS 2 .PP نام فایل برای ذخیره کلید متقارن (داده‌های ۱۲۸ بیتی) که برای پوشش درونی استفاده شده است را مشخص می‌کند. تنها زمانی معتبر است که الگوریتم متقارن مشخص‌شده null نباشد و \-\-input\-key\-file مشخص نشده باشد. در این حالت TPM کلید را تولید می‌کند. .RE .IP \[bu] 2 \f[B]\-C\f[R], \f[B]\-\-parent\-context\f[R]=\f[I]OBJECT\f[R]: .RS 2 .PP شیء کلید والد. .RE .IP \[bu] 2 \f[B]\-U\f[R], \f[B]\-\-parent\-public\f[R]=\f[I]FILE\f[R]: .RS 2 .PP مسیر فایل به کلید عمومی شیء والد در TPM مقصد را مشخص می‌کند. این باید فایلی با قالب \f[CR]TPM2B_PUBLIC\f[R] باشد. این کلید عمومی برای پوشش‌دهی یک کلید PEM یا DER استفاده می‌شود که برای یک TPM راه دور صادر خواهد شد. .RE .IP \[bu] 2 \f[B]\-k\f[R], \f[B]\-\-private\-key\f[R]=\f[I]FILE\f[R]: .RS 2 .PP مسیر فایل کلید خصوصی خارجی را مشخص می‌کند که باید برای TPM راه دور رمزنگاری شود. این باید یک کلید خصوصی با قالب PEM باشد. .RE .IP \[bu] 2 \f[B]\-r\f[R], \f[B]\-\-private\f[R]=\f[I]FILE\f[R]: .RS 2 .PP مسیر فایل را برای ذخیره بخش خصوصی شیء تکثیرشده مشخص می‌کند. # جزئیات حفاظت (Protection Details) .RE .PP اشیایی که می‌توانند به خارج از TPM منتقل شوند، باید محافظت گردند (محرمانگی و یکپارچگی). به عنوان مثال، اشیاء گذرا (transient) نیازمند آن هستند که داده‌های محافظت‌شده توسط TPM (کلید یا داده‌های مهروموم) در خارج از TPM ذخیره شوند. این مورد در ابزارهایی مانند tpm2_create(1) دیده می‌شود که در آن گزینهٔ \f[B]\-r\f[R] این داده‌های محافظت‌شده را در خروجی قرار می‌دهد. این حباب داده (blob) حاوی بخش‌های حساس شیء است. بخش‌های حساس شیء توسط شیء والد محافظت می‌شوند؛ با استفاده از مشخصات رمزنگاری متقارن والد برای رمزگذاری داده‌های حساس و اعمال HMAC بر روی آن. .PP جزئیات دقیق را می‌توان در بخش ۲۳ سند زیر یافت: .IP \[bu] 2 https://trustedcomputinggroup.org/wp\-content/uploads/TPM\-Rev\-2.0\-Part\-1\-Architecture\-01.38.pdf .PP به‌ویژه شکل ۲۰ مرتبط است، هرچند که مشخصاً به حباب‌های تکثیر اشاره دارد، اما فرآیند یکسان است. .PP اگر خروجی از tpm2_duplicate(1) باشد، خروجی کمی متفاوت خواهد بود، همان‌طور که به‌طور کامل در بخش ۲۳ توضیح داده شده است. .IP \[bu] 2 \f[B]\-u\f[R], \f[B]\-\-public\f[R]=\f[I]FILE\f[R]: .RS 2 .PP در صورتی که یک کلید خارجی در حال تکثیر باشد، مسیر فایل برای ذخیره بخش عمومی شیء تکثیرشده را مشخص می‌کند. .RE .IP \[bu] 2 \f[B]\-s\f[R], \f[B]\-\-encrypted\-seed\f[R]=\f[I]FILE\f[R]: .RS 2 .PP فایل ذخیره سید (seed) رمزنگاری‌شدهٔ شیء تکثیرشده. .RE .IP \[bu] 2 \f[B]\-p\f[R], \f[B]\-\-auth\f[R]=\f[I]AUTH\f[R]: .RS 2 .PP مقدار احراز هویت برای کلید، اختیاری است. .RE .IP \[bu] 2 \f[B]\-L\f[R], \f[B]\-\-policy\f[R]=\f[I]FILE\f[R]: .RS 2 .PP فایل پالیسی ورودی، اختیاری است. .RE .IP \[bu] 2 \f[B]\-c\f[R], \f[B]\-\-key\-context\f[R]=\f[I]OBJECT\f[R]: .RS 2 .PP شیئی که قرار است تکثیر شود. .RE .IP \[bu] 2 \f[B]\-a\f[R], \f[B]\-\-attributes\f[R]=\f[I]ATTRIBUTES\f[R]: .RS 2 .PP ویژگی‌های شیء، اختیاری است. مقدار پیش‌فرض برای اشیاء ایجادشده عبارت است از: .PP \f[CR]TPMA_OBJECT_SIGN_ENCRYPT|TPMA_OBJECT_DECRYPT|TPMA_OBJECT_USERWITHAUTH\f[R] .PP نکته: اگر یک پالیسی بدون مقدار auth مشخص شود، ویژگی \f[CR]TPMA_OBJECT_USERWITHAUTH\f[R] غیرفعال می‌شود. .RE .IP \[bu] 2 \f[B]\-\-cphash\f[R]=\f[I]FILE\f[R] .RS 2 .PP مسیر فایل برای ثبت هش پارامترهای دستور. این مقدار معمولاً به عنوان cpHash شناخته می‌شود. نکته: با انتخاب این گزینه، ابزار در عمل دستور را اجرا نمی‌کند و صرفاً یک cpHash برمی‌گرداند. .RE .SS "مراجع (References)" .SH "قالب شیء کانتکست (Context Object Format)" نوع یک شیء کانتکست، چه هندل باشد یا نام فایل، بر اساس منطق زیر \f[I]به‌ترتیب\f[R] تعیین می‌شود: .IP \[bu] 2 اگر آرگومان یک مسیر فایل باشد، آن فایل به عنوان یک شیء گذرا (transient) بازگردانی‌شدهٔ TPM بارگذاری می‌شود. .IP \[bu] 2 اگر آرگومان با \f[I]پیشوند\f[R] یکی از موارد زیر مطابقت داشته باشد: .RS 2 .IP \[bu] 2 owner: سلسله‌مراتب مالک (owner hierarchy) .IP \[bu] 2 platform: سلسله‌مراتب پلتفرم (platform hierarchy) .IP \[bu] 2 endorsement: سلسله‌مراتب تأیید (endorsement hierarchy) .IP \[bu] 2 lockout: شیء پایدار کنترل قفل (lockout control persistent object) .RE .IP \[bu] 2 اگر آرگومان بتواند به صورت یک عدد بارگذاری شود، به عنوان یک هندل تلقی می‌شود (مانند 0x81010013) و مستقیماً استفاده خواهد شد._OBJECT_. .SH "قالب‌بندی احراز هویت (Authorization Formatting)" مجوز برای استفاده از یک شیء در TPM2.0 می‌تواند به ۳ شکل مختلف باشد: 1. گذرواژه (Password) 2. کد HMAC 3. نشست‌ها (Sessions) .PP \f[B]نکته:\f[R] \[lq]در صورت مشخص نشدن، مجوزها به‌طور پیش‌فرض به \f[B]گذرواژه خالی (EMPTY PASSWORD)\f[R] تنظیم می‌شوند\[rq]. .PP برای احراز هویت با مقادیر مجاز (auth values)، دستورات ابزار به‌طور ضمنی یک نشست HMAC ایجاد می‌کنند. بنابراین گذرواژه‌ها به صورت رمزنگاری‌نشده منتقل نمی‌شوند. این امر برای گذرواژه‌های تعریف‌شده برای اشیاء صدق نمی‌کند. در این حالت، باید از یک نشست HMAC استفاده شود (دستور tpm2_startauthsession(1) را ببینید). .SS "گذرواژه‌ها (Passwords)" گذرواژه‌ها با استفاده از شناسه‌های پیشوندی به اَشکال زیر تفسیر می‌شوند. .PP \f[B]نکته\f[R]: در صورتی که گذرواژه‌ها پیشوند نداشته باشند، به‌طور پیش‌فرض به شکل رشته فرض می‌شوند. .SS "رشته (String)" یک گذرواژه رشته‌ای، که با پیشوند \[lq]str:\[rq] یا نبود آن (رشته خام بدون پیشوند) مشخص می‌شود، پردازش تفسیری نمی‌شود و مستقیماً برای احراز هویت استفاده می‌گردد. .SS "مثال‌ها (Examples)" .IP .EX foobar str:foobar .EE .SS "رشته هگز (Hex\-string)" یک گذرواژه رشته هگز، که با پیشوند \[lq]hex:\[rq] مشخص می‌شود، از قالب هگزادسیمال به یک آرایه بایتی تبدیل می‌شود؛ بنابراین امکان استفاده از گذرواژه‌هایی با نویسه‌های غیرقابل‌چاپ یا ناسازگار با ترمینال را فراهم می‌کند. .SS "مثال (Example)" .IP .EX hex:1122334455667788 .EE .SS "فایل (File)" یک گذرواژه مبتنی بر فایل، که با پیشوند \[lq]file:\[rq] مشخص می‌شود، باید مسیر فایلی حاوی گذرواژه برای خوانده شدن توسط ابزار یا کاراکتر \[lq]\-\[rq] برای استفاده از ورودی استاندارد (stdin) باشد. ذخیره گذرواژه‌ها در فایل از نشت اطلاعات جلوگیری می‌کند؛ گذرواژه‌هایی که به عنوان گزینه خط فرمان منتقل می‌شوند ممکن است از فهرست فرآیندها یا تاریخچه شل خوانده شوند. .SS "مثال‌ها (Examples)" .IP .EX # برای استفاده از ورودی استاندارد و دریافت اعلان file:\- # برای استفاده از فایل از طریق مسیر file:path/to/password/file # برای ارسال گذرواژه از طریق stdin با echo: echo foobar | tpm2_tool \-p file:\- # برای استفاده از here\-string بش از طریق stdin: tpm2_tool \-p file:\- <<< foobar .EE .SS "نشست‌ها (Sessions)" هنگام استفاده از یک نشست پالیسی (policy session) برای مجاز کردن استفاده از یک شیء، شناسه گزینه را با کلمه کلیدی \f[I]session\f[R] شروع کنید. سپس مسیری به یک فایل نشست که توسط دستور tpm2_startauthsession(1) ایجاد شده است را مشخص نمایید. در صورت تمایل، اگر نشست نیازمند ارسال یک مقدار احراز هویت (auth value) به همراه هندل نشست باشد (مانند گذرواژه پالیسی)، یک علامت + و یک رشته را مطابق آنچه در بخش \f[B]گذرواژه‌ها (Passwords)\f[R] توضیح داده شد، اضافه کنید. .SS "مثال‌ها (Examples)" برای استفاده از یک فایل کانتکست نشست با نام \f[I]session.ctx\f[R]: .IP .EX session:session.ctx .EE .PP برای استفاده از یک فایل کانتکست نشست با نام \f[I]session.ctx\f[R] \f[B]و\f[R] ارسال مقدار احراز هویت mypassword: .IP .EX session:session.ctx+mypassword .EE .PP برای استفاده از یک فایل کانتکست نشست با نام \f[I]session.ctx\f[R] \f[B]و\f[R] ارسال مقدار احراز هویت \f[I]هگز\f[R] 0x11223344: .IP .EX session:session.ctx+hex:11223344 .EE .SS "مجوزهای PCR (PCR Authorizations)" می‌توانید با استفاده از پیشوند \[lq]pcr:\[rq] و زبان کوچک مربوط به PCR، یک پالیسی PCR را برآورده سازید. زبان کوچک PCR به صورت زیر است: \f[CR]=\f[R] .PP مشخصات PCR در بخش \[lq]مشخص‌کننده‌های بانک PCR\[rq] مستند شده است. .PP آرگومان \f[CR]raw\-pcr\-file\f[R] یک پارامتر \f[B]اختیاری\f[R] است که شامل خروجی محتویات خام PCR مطابق با خروجی دستور \f[I]tpm2_pcrread(1)\f[R] می‌باشد. .PP مشخص‌کننده‌های بانک PCR .SS "مثال‌ها (Examples)" برای برآورده کردن یک پالیسی PCR از نوع sha256 روی بانک‌های 0، 1، 2 و 3 از مشخص‌کننده زیر استفاده کنید: .IP .EX pcr:sha256:0,1,2,3 .EE .PP مشخص کردن \f[I]AUTH\f[R]. .SH "مشخص‌کننده‌های الگوریتم (Algorithm Specifiers)" گزینه‌هایی که الگوریتم دریافت می‌کنند از «نام‌های مناسب» (nice\-names) پشتیبانی می‌کنند. .PP دو دسته اصلی رشته‌های مشخص‌کننده الگوریتم وجود دارد: ساده و پیچیده. تنها الگوریتم‌های خاصی بر اساس نوع کاربرد و شرایط توسط TPM پذیرفته خواهند شد. .SS "مشخص‌کننده‌های ساده (Simple specifiers)" این‌ها رشته‌هایی بدون داده‌های مشخص‌کننده اضافی هستند. هنگام ایجاد اشیاء، بخش‌های تعیین‌نشده شیء با مقادیر پیش‌فرض در نظر گرفته می‌شوند. فهرست «مشخص‌کننده‌های ساده» شناخته‌شده در زیر آمده است. .SS "نامتقارن (Asymmetric)" .IP \[bu] 2 rsa .IP \[bu] 2 ecc .SS "متقارن (Symmetric)" .IP \[bu] 2 aes .IP \[bu] 2 camellia .IP \[bu] 2 sm4 .SS "الگوریتم‌های درهم‌سازی (Hashing Algorithms)" .IP \[bu] 2 sha1 .IP \[bu] 2 sha256 .IP \[bu] 2 sha384 .IP \[bu] 2 sha512 .IP \[bu] 2 sm3_256 .IP \[bu] 2 sha3_256 .IP \[bu] 2 sha3_384 .IP \[bu] 2 sha3_512 .SS "درهم‌سازی کلیددار (Keyed Hash)" .IP \[bu] 2 hmac .IP \[bu] 2 xor .SS "طرح‌های امضا (Signing Schemes)" .IP \[bu] 2 rsassa .IP \[bu] 2 rsapss .IP \[bu] 2 ecdsa .IP \[bu] 2 ecdaa .IP \[bu] 2 ecschnorr .IP \[bu] 2 sm2 .SS "طرح‌های رمزنگاری نامتقارن (Asymmetric Encryption Schemes)" .IP \[bu] 2 oaep .IP \[bu] 2 rsaes .IP \[bu] 2 ecdh .SS "حالت‌ها (Modes)" .IP \[bu] 2 ctr .IP \[bu] 2 ofb .IP \[bu] 2 cbc .IP \[bu] 2 cfb .IP \[bu] 2 ecb .SS "متفرقه (Misc)" .IP \[bu] 2 null .SS "مشخص‌کننده‌های پیچیده (Complex Specifiers)" اشیاء، هنگامی که برای ایجاد توسط TPM مشخص می‌شوند، الگوریتم‌های متعددی دارند که در داده‌های عمومی آن‌ها قرار می‌گیرد؛ مواردی مانند نوع، طرح و جزئیات نامتقارن، اندازه کلید و غیره. در ادامه قالب کلی برای تعیین این داده‌ها آمده است: \f[CR]::\f[R] .SS "مشخص‌کننده‌های نوع (Type Specifiers)" این بخش از مشخص‌کننده الگوریتم پیچیده الزامی است. باقی‌مانده جزئیات طرح و بخش متقارن بر اساس نوع مشخص‌شده و نوع شیء در حال ایجاد، مقدار پیش‌فرض به خود می‌گیرند. .IP \[bu] 2 aes \- مقدار پیش‌فرض AES: aes128 .IP \[bu] 2 aes128\f[CR]\f[R] \- الگوریتم AES با ۱۲۸ بیت و حالت اختیاری (\f[I]ctr\f[R]|\f[I]ofb\f[R]|\f[I]cbc\f[R]|\f[I]cfb\f[R]|\f[I]ecb\f[R]). اگر حالت مشخص نشود، مقدار پیش‌فرض \f[I]null\f[R] خواهد بود. .IP \[bu] 2 aes192\f[CR]\f[R] \- مشابه aes128\f[CR]\f[R]، به جز اندازه کلید ۱۹۲ بیتی. .IP \[bu] 2 aes256\f[CR]\f[R] \- مشابه aes128\f[CR]\f[R]، به جز اندازه کلید ۲۵۶ بیتی. .IP \[bu] 2 sm4 \- مقدار پیش‌فرض SM4: sm4128 .IP \[bu] 2 sm4128 or sm4_128 \f[CR]\f[R] \- الگوریتم SM4 با ۱۲۸ بیت و حالت اختیاری (\f[I]ctr\f[R]|\f[I]ofb\f[R]|\f[I]cbc\f[R]|\f[I]cfb\f[R]|\f[I]ecb\f[R]). اگر حالت مشخص نشود، مقدار پیش‌فرض \f[I]null\f[R] خواهد بود. .IP \[bu] 2 ecc \- منحنی بیضوی، مقدار پیش‌فرض ecc256. .IP \[bu] 2 ecc192 or ecc_nist_p192 \- منحنی ECC NIST با طول ۱۹۲ بیت .IP \[bu] 2 ecc224 or ecc_nist_p224 \- منحنی ECC NIST با طول ۲۲۴ بیت .IP \[bu] 2 ecc256 or ecc_nist_p256 \- منحنی ECC NIST با طول ۲۵۶ بیت .IP \[bu] 2 ecc384 or ecc_nist_p384 \- منحنی ECC NIST با طول ۳۸۴ بیت .IP \[bu] 2 ecc521 or ecc_nist_p521 \- منحنی ECC NIST با طول ۵۲۱ بیت .IP \[bu] 2 ecc_sm2 or ecc_sm2_p256 \- منحنی SM2 با طول ۲۵۶ بیت .IP \[bu] 2 rsa \- مقدار پیش‌فرض RSA: rsa2048 .IP \[bu] 2 rsa1024 \- الگوریتم RSA با اندازه کلید ۱۰۲۴ بیت. .IP \[bu] 2 rsa2048 \- الگوریتم RSA با اندازه کلید ۲۰۴۸ بیت. .IP \[bu] 2 rsa3072 \- الگوریتم RSA با اندازه کلید ۳۰۷۲ بیت. .IP \[bu] 2 rsa4096 \- الگوریتم RSA با اندازه کلید ۴۰۹۶ بیت. .SS "مشخص‌کننده‌های طرح (Scheme Specifiers)" مورد بعدی یک فیلد اختیاری است و می‌توان از آن صرف‌نظر کرد. .PP طرح‌ها معمولاً \f[B]طرح‌های امضا\f[R] یا \f[B]طرح‌های رمزنگاری نامتقارن\f[R] هستند. بیشتر طرح‌های امضا یک الگوریتم درهم‌سازی را مستقیماً پس از طرح امضا دریافت می‌کنند. اگر الگوریتم درهم‌سازی ذکر نشود، پیش‌فرض آن \f[I]sha256\f[R] خواهد بود. برخی هیچ آرگومانی دریافت نمی‌کنند و برخی چندین آرگومان می‌پذیرند. .SS "طرح‌های با الگوریتم درهم‌سازی اختیاری (Hash Optional Scheme Specifiers)" پس از این مشخص‌کننده‌های طرح، یک خط تیره و یک الگوریتم درهم‌سازی معتبر قرار می‌گیرد؛ به عنوان مثال: \f[CR]oaep\-sha256\f[R]. .IP \[bu] 2 oaep .IP \[bu] 2 ecdh .IP \[bu] 2 rsassa .IP \[bu] 2 rsapss .IP \[bu] 2 ecdsa .IP \[bu] 2 ecschnorr .IP \[bu] 2 sm2 .SS "طرح‌های با چند گزینه (Multiple Option Scheme Specifiers)" پس از این مشخص‌کننده طرح، یک مقدار شمارش (حداکثر اندازه UINT16) و سپس یک خط تیره (\-) و یک الگوریتم درهم‌سازی معتبر می‌آید. * ecdaa برای مثال: ecdaa4\-sha256. اگر مقداری برای شمارش تعیین نشود، پیش‌فرض آن ۴ خواهد بود. .SS "طرح‌های بدون گزینه (No Option Scheme Specifiers)" این مشخص‌کننده طرح هیچ آرگومانی نمی‌پذیرد. * rsaes .SS "مشخص‌کننده‌های جزئیات متقارن (Symmetric Details Specifiers)" این فیلد اختیاری است و بر اساس \f[I]نوع\f[R] شیء در حال ایجاد و ویژگی‌های آن به مقادیر پیش‌فرض تنظیم می‌شود. به‌طور کلی، هر مشخص‌کننده معتبر \f[B]متقارن\f[R] از فهرست \f[B]مشخص‌کننده‌های نوع\f[R] قابل استفاده است. در صورت عدم تعیین، جزئیات متقارن یک شیء نامتقارن به‌طور پیش‌فرض \f[I]aes128cfb\f[R] در نظر گرفته می‌شود. .SS "مثال‌ها (Examples)" .SS "ایجاد یک کلید rsa2048 با طرح رمزنگاری نامتقارن rsaes" \f[CR]tpm2_create \-C parent.ctx \-G rsa2048:rsaes \-u key.pub \-r key.priv\f[R] .SS "ایجاد یک کلید ecc256 با طرح امضای ecdaa با تعداد ۴ و هش sha384" \f[CR]/tpm2_create \-C parent.ctx \-G ecc256:ecdaa4\-sha384 \-u key.pub \-r key.priv\f[R] الگوریتم‌های رمزنگاری \f[I]ALGORITHM\f[R]. .SH "گزینه‌های عمومی (COMMON OPTIONS)" این مجموعه گزینه‌ها میان بسیاری از برنامه‌ها مشترک هستند و اطلاعاتی را ارائه می‌دهند که اغلب کاربران انتظار دارند. .IP \[bu] 2 \f[B]\-h\f[R], \f[B]\-\-help=[man|no\-man]\f[R]: نمایش صفحه راهنمای ابزار. به‌طور پیش‌فرض، تلاش می‌کند صفحه‌خوان راهنما (manpager) را برای ابزار فراخوانی کند؛ اما در صورت شکست، خلاصه‌ای کوتاه از ابزار را نمایش می‌دهد. اگر آرگومان گزینه \[lq]man\[rq] مشخص شود نیز همین رفتار رخ می‌دهد، اما اگر صریحاً \[lq]man\[rq] درخواست شود، ابزار خطاهای man را در خروجی استاندارد خطا (stderr) نشان می‌دهد. اگر گزینه \[lq]no\-man\[rq] مشخص شود یا صفحه‌خوان man با شکست مواجه گردد، خلاصه گزینه‌ها در خروجی استاندارد (stdout) چاپ خواهد شد. .RS 2 .PP استفاده موفقیت‌آمیز از ویژگی manpages نیازمند نصب بودن صفحات راهنما یا قرار داشتن آن‌ها در مسیر .I MANPATH است؛ برای جزئیات بیشتر به .BR man (1) مراجعه کنید. .RE .IP \[bu] 2 \f[B]\-v\f[R], \f[B]\-\-version\f[R]: نمایش اطلاعات نگارش این ابزار و TCTIهای پشتیبانی‌شده و سپس خروج. .IP \[bu] 2 \f[B]\-V\f[R], \f[B]\-\-verbose\f[R]: افزایش میزان اطلاعاتی که ابزار حین اجرا در کنسول چاپ می‌کند. هنگام استفاده از این گزینه، نام فایل و شماره خط چاپ می‌شوند. .IP \[bu] 2 \f[B]\-Q\f[R], \f[B]\-\-quiet\f[R]: بی‌صدا کردن خروجی عادی ابزار در خروجی استاندارد (stdout). .IP \[bu] 2 \f[B]\-Z\f[R], \f[B]\-\-enable\-errata\f[R]: فعال‌سازی اعمال اصلاحیه‌های اشتباهات (errata fixups). این گزینه زمانی مفید است که نیاز به اعمال یک اصلاحیه errata روی دستورات ارسالی به TPM باشد. تعریف متغیر محیطی TPM2TOOLS_ENABLE_ERRATA نیز عملکردی معادل دارد. .IP \[bu] 2 \f[B]\-z\f[R], \f[B]\-\-pwd\-session\f[R]: استفاده از نشست گذرواژه به جای نشست HMAC برای احراز هویت. یک گذرواژه متن خام (clear text) برای تأیید عملیات به TPM ارسال می‌شود. از این گزینه می‌توان برای جلوگیری از بروز مشکل در زمان استفاده از نشست‌های بدون نمک (unsalted) در حالت OpenSSL FIPS استفاده کرد. اگر مقادیر مجاز (auth values) به کار روند، باید از یک نشست نمک‌دار (salted) برای احراز هویت استفاده شود. .IP \[bu] 2 \f[B]\-R\f[R], \f[B]\-\-autoflush\f[R]: فعال کردن تخلیه خودکار (autoflush) برای اشیاء گذرای ایجادشده توسط دستور. اگر یک شیء والد از یک فایل زمینه بارگذاری شود، آن شیء والد گذرا نیز تخلیه خواهد شد. تخلیه خودکار همچنین در صورتی که متغیر محیطی TPM2TOOLS_AUTOFLUSH روی yes یا true تنظیم شده باشد، فعال می‌شود. اطلاعاتی که ممکن است بسیاری از کاربران انتظار داشته باشند. .SH "پیکربندی TCTI (TCTI Configuration)" رابط انتقال یا TCTI (\f[I]Transmission Interface\f[R]) سازوکار ارتباطی با TPM است. TCTIها را می‌توان برای ارتباط با TPM از طریق بسترهای گوناگون تغییر داد. .PP برای کنترل TCTI، ابزارها موارد زیر را در نظر می‌گیرند: .IP "1." 3 گزینه خط فرمان \f[B]\-T\f[R] یا \f[B]\-\-tcti\f[R] .IP "2." 3 متغیر محیطی: \f[I]TPM2TOOLS_TCTI\f[R]. .PP \f[B]نکته:\f[R] گزینه خط فرمان همواره بر متغیر محیطی اولویت دارد. .PP TCTIهای شناخته‌شده کنونی عبارتند از: .IP \[bu] 2 tabrmd \- مدیر منابع، موسوم به \c .UR https://github.com/tpm2-software/tpm2-abrmd tabrmd .UE \c \&. توجه داشته باشید که tabrmd و abrmd به عنوان نام tcti هم‌معنی هستند. .IP \[bu] 2 mssim \- معمولاً برای برقراری ارتباط با شبیه‌ساز نرم‌افزاری TPM استفاده می‌شود. .IP \[bu] 2 device \- هنگام برقراری ارتباط مستقیم با فایل دستگاه TPM استفاده می‌شود. .IP \[bu] 2 none \- هیچ ارتباطی با TPM برقرار نمی‌کند. برخی ابزارها امکان استفاده از گزینه‌های خارج از TPM (off\-tpm) را می‌دهند و بنابراین از عدم استفاده از TCTI پشتیبانی می‌کنند. ابزارهایی که از آن پشتیبانی نمی‌کنند، در صورت تلاش برای استفاده بدون اتصال TCTI با خطا مواجه می‌شوند. این مقدار از \f[I]هیچ\f[R] گزینه‌ای پشتیبانی نمی‌کند و \f[I]باید دقیقاً\f[R] به صورت متن \[lq]none\[rq] ارائه شود. .PP آرگومان‌های گزینه خط فرمان یا متغیر محیطی به شکل زیر هستند: .PP \f[CR]:\f[R] .PP تعیین یک رشته خالی برای هر یک از بخش‌های \f[CR]\f[R] یا \f[CR]\f[R] باعث می‌شود به ترتیب مقدار پیش‌فرض برای آن بخش استفاده شود. .SS "پیش‌فرض‌های TCTI (TCTI Defaults)" هنگامی که یک TCTI مشخص نشده باشد، TCTI پیش‌فرض با استفاده از سازوکار \f[I]dlopen(3)\f[R] جستجو می‌شود. ابزارها به دنبال TCTIهای \f[I]tabrmd\f[R]، \f[I]device\f[R] و \f[I]mssim\f[R] \f[B]به همین ترتیب\f[R] می‌گردند و \f[B]از نخستین موردی که پیدا شد استفاده می‌کنند\f[R]. می‌توانید با استفاده از گزینه \f[B]\-v\f[R] برای چاپ اطلاعات نگارش، متوجه شوید کدام TCTI به عنوان پیش‌فرض انتخاب خواهد شد. جفت کلید\-مقدار \[lq]default\-tcti\[rq] نشان خواهد داد کدام یک از TCTIهای پیش‌گفته به عنوان پیش‌فرض است. .SS "TCTIهای سفارشی (Custom TCTIs)" هر TCTI که رابط پویای TCTI را پیاده‌سازی کند می‌تواند بارگذاری شود. ابزارها در داخل از \f[I]dlopen(3)\f[R] استفاده می‌کنند و مقدار خام \f[I]tcti\-name\f[R] برای جستجو به کار می‌رود. بنابراین، این مقدار می‌تواند مسیری به کتابخانه مشترک یا نام کتابخانه به نحوی که برای سازوکار \f[I]dlopen(3)\f[R] قابل فهم باشد، باشد. .SH "گزینه‌های TCTI (TCTI OPTIONS)" این مجموعه گزینه‌ها برای پیکربندی ماژول‌های مختلف TCTI شناخته‌شده در دسترس به کار می‌روند: .IP \[bu] 2 \f[B]device\f[R]: برای TCTI دستگاه (device)، فایل دستگاه نویسه‌ای (character device) TPM برای استفاده توسط این TCTI قابل تعیین است. مقدار پیش‌فرض \f[I]/dev/tpm0\f[R] است. .RS 2 .PP مثال: \f[B]\-T device:/dev/tpm0\f[R] یا \f[B]export \f[BI]TPM2TOOLS_TCTI\f[B]=\[lq]device:/dev/tpm0\[rq]\f[R] .RE .IP \[bu] 2 \f[B]mssim\f[R]: برای TCTI شبیه‌ساز mssim، نام دامنه یا آدرس IP و شماره درگاه (port) مورد استفاده شبیه‌ساز قابل تعیین است. مقادیر پیش‌فرض 127.0.0.1 و 2321 هستند. .RS 2 .PP مثال: \f[B]\-T mssim:host=localhost,port=2321\f[R] یا \f[B]export \f[BI]TPM2TOOLS_TCTI\f[B]=\[lq]mssim:host=localhost,port=2321\[rq]\f[R] .RE .IP \[bu] 2 \f[B]abrmd\f[R]: برای TCTI ابزار abrmd، قالب رشته پیکربندی مجموعه‌ای از جفت‌های کلید\-مقدار ساده است که با کاراکتر `,' از هم جدا شده‌اند. هر کلید و رشته مقدار با کاراکتر `=' از هم جدا می‌شوند. .RS 2 .IP \[bu] 2 ماژول TCTI abrmd از دو کلید پشتیبانی می‌کند: .RS 2 .IP "1." 3 `bus_name' : نام سرویس tabrmd روی گذرگاه (یک رشته). .IP "2." 3 `bus_type' : نوع نمونه dbus (یک رشته) که محدود به `session' و `system' است. .RE .PP مشخص کردن نام tcti مربوط به tabrmd و رشته پیکربندی \f[CR]bus_name=com.example.FooBar\f[R]: .IP .EX \[rs]\-\-tcti=tabrmd:bus_name=com.example.FooBar .EE .PP مشخص کردن tcti پیش‌فرض (abrmd) و رشته پیکربندی \f[CR]bus_type=session\f[R]: .IP .EX \[rs]\-\-tcti:bus_type=session .EE .PP \f[B]نکته\f[R]: دو نام abrmd و tabrmd مترادف یکدیگرند. ماژول‌های مختلف TCTI شناخته‌شده. .RE .SH "مثال‌ها (EXAMPLES)" .SS "مثال ۱: تکثیر کلید ایجادشده با پالیسی‌ای که امکان تکثیر را فراهم می‌کند:" .IP .EX tpm2_startauthsession \-S session.dat tpm2_policycommandcode \-S session.dat \-L policy.dat TPM2_CC_Duplicate tpm2_flushcontext session.dat tpm2_createprimary \-C o \-g sha256 \-G rsa \-c primary.ctxt tpm2_create \-C primary.ctxt \-g sha256 \-G rsa \-r key.prv \-u key.pub \-c key.ctxt \[rs] \-L policy.dat \-a \[dq]sensitivedataorigin|userwithauth|decrypt|sign\[dq] tpm2_createprimary \-C o \-g sha256 \-G ecc \-c new_parent.ctxt tpm2_startauthsession \[rs]\-\-policy\-session \-S session.dat tpm2_policycommandcode \-S session.dat \-L policy.dat TPM2_CC_Duplicate tpm2_duplicate \-C new_parent.ctxt \-c key.ctxt \-G null \-p \[dq]session:session.dat\[dq] \[rs] \-r duprv.bin \-s seed.dat tpm2_flushcontext session.dat .EE .SS "مثال ۲: به عنوان یک مثال سرتاسری، فرآیند زیر یک کلید RSA تولیدشده روی \f[CR]TPM\-A\f[R] را به \f[CR]TPM\-B\f[R] منتقل می‌کند" .SS "روی TPM\-B" ایجاد یک شیء والد که برای پوشش‌دهی/انتقال کلید استفاده خواهد شد. .IP .EX tpm2_createprimary \-C o \-g sha256 \-G rsa \-c primary.ctx tpm2_create \-C primary.ctx \-g sha256 \-G rsa \[rs] \-r new_parent.prv \-u new_parent.pub \[rs] \-a \[dq]restricted|sensitivedataorigin|decrypt|userwithauth\[dq] .EE .PP کپی کردن \f[CR]new_parent.pub\f[R] به \f[CR]TPM\-A\f[R]. .SS "روی TPM\-A" ایجاد شیء ریشه و پالیسی احراز هویتی که تنها تکثیر را مجاز می‌داند .IP .EX tpm2_createprimary \-C o \-g sha256 \-G rsa \-c primary.ctx tpm2_startauthsession \-S session.dat tpm2_policycommandcode \-S session.dat \-L dpolicy.dat TPM2_CC_Duplicate tpm2_flushcontext session.dat rm session.dat .EE .PP تولید یک جفت‌کلید RSA روی TPM\-A که تکثیر خواهد شد (توجه داشته باشید که عبارت عبور `foo' است) .IP .EX tpm2_create \-C primary.ctx \-g sha256 \-G rsa \-p foo \-r key.prv \[rs] \-u key.pub \-L dpolicy.dat \-a \[dq]sensitivedataorigin|userwithauth|decrypt|sign\[dq] tpm2_load \-C primary.ctx \-r key.prv \-u key.pub \-c key.ctx tpm2_readpublic \-c key.ctx \-o dup.pub .EE .PP آزمایش امضا و رمزنگاری به صورت محلی (تا بعداً بتوانیم مقایسه کنیم که همان کلید منتقل شده است). .IP .EX echo \[dq]meet me at..\[dq] >file.txt tpm2_rsaencrypt \-c key.ctx \-o data.encrypted file.txt tpm2_sign \-c key.ctx \-g sha256 \-f plain \-p foo \-o sign.raw file.txt .EE .PP مقایسه هش امضا (بعداً از این برای تأیید انتقال کلید به TPM\-B استفاده خواهیم کرد): .IP .EX sha256sum sign.raw a1b4e3fbaa29e6e46d95cff498150b6b8e7d9fd21182622e8f5a3ddde257879e .EE .PP آغاز یک نشست احراز هویت و دستور پالیسی برای مجاز کردن تکثیر .IP .EX tpm2_startauthsession \-\-policy\-session \-S session.dat tpm2_policycommandcode \-S session.dat \-L dpolicy.dat TPM2_CC_Duplicate .EE .PP بارگذاری فایل new_parent.pub منتقل‌شده از \f[CR]TPM\-B\f[R] .IP .EX tpm2_loadexternal \-C o \-u new_parent.pub \-c new_parent.ctx .EE .PP آغاز عملیات تکثیر .IP .EX tpm2_duplicate \-C new_parent.ctx \-c key.ctx \-G null \[rs] \-p \[dq]session:session.dat\[dq] \-r dup.dpriv \-s dup.seed .EE .PP کپی کردن فایل‌های زیر به TPM\-B: * dup.pub * dup.dpriv * dup.seed * (اختیاراً data.encrypted صرفاً برای آزمایش رمزگشایی) .SS "روی TPM\-B" آغاز یک نشست احراز هویت و پالیسی .IP .EX tpm2_startauthsession \-\-policy\-session \-S session.dat tpm2_policycommandcode \-S session.dat \-L dpolicy.dat TPM2_CC_Duplicate .EE .PP بارگذاری کانتکستی که برای انتقال استفاده کردیم .IP .EX tpm2_flushcontext \-\-transient\-object tpm2_load \-C primary.ctx \-u new_parent.pub \-r new_parent.prv \-c new_parent.ctx .EE .PP وارد کردن کانتکست تکثیرشده در برابر والدی که استفاده کردیم .IP .EX tpm2_import \-C new_parent.ctx \-u dup.pub \-i dup.dpriv \[rs] \-r dup.prv \-s dup.seed \-L dpolicy.dat .EE .PP بارگذاری کانتکست کلید تکثیرشده .IP .EX tpm2_flushcontext \-\-transient\-object tpm2_load \-C new_parent.ctx \-u dup.pub \-r dup.prv \-c dup.ctx .EE .PP آزمایش مطابقت کلید واردشده .IP \[bu] 2 امضا .IP .EX echo \[dq]meet me at..\[dq] >file.txt tpm2_sign \-c dup.ctx \-g sha256 \-o sig.rss \-p foo file.txt dd if=sig.rss of=sign.raw bs=1 skip=6 count=256 .EE .PP مقایسه هش فایل امضا: .IP .EX $ sha256sum sign.raw a1b4e3fbaa29e6e46d95cff498150b6b8e7d9fd21182622e8f5a3ddde257879e .EE .IP \[bu] 2 رمزگشایی .IP .EX tpm2_flushcontext \-\-transient\-object tpm2_rsadecrypt \-p foo \-c dup.ctx \-o data.ptext data.encrypted # cat data.ptext meet me at.. .EE .SS "مثال ۳: صادر کردن یک کلید RSA اوپن‌اس‌اس‌ال برای یک TPM راه دور" برای ارسال امن یک کلید RSA تولیدشده توسط OpenSSL به یک TPM راه دور، به‌گونه‌ای که تنها آن TPM راه دور بتواند آن را بارگذاری کند، و بدون افشای کلید خصوصی برای سیستم‌عامل میزبان در ماشین راه دور: .IP \[bu] 2 در TPM\-B مقصد، یک کانتکست اولیه ایجاد کرده و کلید عمومی آن را بخوانید، سپس \f[CR]primary.pub\f[R] را به ماشین مبدأ ارسال کنید: .IP .EX tpm2_createprimary \-c primary.ctx tpm2_readpublic \-c primary.ctx \-o primary.pub .EE .IP \[bu] 2 در ماشین مبدأ، کلید خصوصی RSA را ایجاد کرده و آن را با کلید عمومی TPM مقصد پوشش دهید (wrap کنید). مشابه با \f[CR]tpm2_makecredential\f[R]، این مرحله نباید نیازی به TPM داشته باشد. .IP .EX openssl genrsa \-out rsa.pem tpm2_duplicate \-U primary.pub \-G rsa \-k rsa.pem \-u rsa.pub \-r rsa.dpriv \-s rsa.seed .EE .IP \[bu] 2 فایل‌های \f[CR]rsa.pub\f[R]، \f[CR]rsa.dpriv\f[R] و \f[CR]rsa.seed\f[R] را به TPM\-B مقصد ارسال کرده و فایل‌ها را وارد (import) کنید؛ این کار آن‌ها را با استفاده از \f[CR]primary.ctx\f[R] رمزگشایی می‌کند تا \f[CR]rsa.priv\f[R] تولید شود، که سپس می‌تواند به عنوان یک کلید TPM بارگذاری و استفاده شود: .IP .EX tpm2_import \-C primary.ctx \-G rsa \-i rsa.dpriv \-s rsa.seed \-u rsa.pub \-r rsa.priv tpm2_load \-C primary.ctx \-c rsa.ctx \-u rsa.pub \-r rsa.priv .EE .SS "مثال ۴: صادر کردن یک کلید HMAC برای یک TPM راه دور و محدود کردن آن از صادرات مجدد" این فرآیند یک کلید HMAC ایجادشده در داخل \f[CR]TPM\-A\f[R] را فقط به \f[CR]TPM\-B\f[R] صادر می‌کند و با پالیسی‌ای همراه می‌سازد که مانع از اجازه صادرات مجدد توسط \f[CR]TPM\-B\f[R] می‌شود. .IP \[bu] 2 در \f[CR]TPM\-B\f[R] مقصد، یک کانتکست اولیه ایجاد کنید: .IP .EX tpm2_createprimary \-C o \-g sha256 \-G rsa \-c primary.ctx tpm2_create \-C primary.ctx \-g sha256 \-G rsa \-r new_parent.prv \[rs] \-u new_parent.pub \-a \[dq]fixedtpm|fixedparent|restricted|sensitivedataorigin|decrypt|userwithauth\[dq] .EE .PP کپی کردن \f[CR]new_parent.pub\f[R] به \f[CR]TPM\-A\f[R]. .IP \[bu] 2 روی \f[CR]TPM\-A\f[R] مبدأ .PP کلید راه دور را بارگذاری کرده و «نام» (name) آن را ذخیره کنید .IP .EX tpm2_loadexternal \-C o \-u new_parent.pub \-c new_parent.ctx \-n new_parent.name .EE .PP یک شیء اولیه و یک پالیسی ایجاد کنید که تکثیر را فقط به والد \f[CR]TPM\-B\f[R] محدود کند .IP .EX tpm2_createprimary \-C o \-g sha256 \-G rsa \-c primary.ctx tpm2_startauthsession \-S session.dat tpm2_policyduplicationselect \-S session.dat \-N new_parent.name \-L dpolicy.dat tpm2_flushcontext session.dat .EE .PP یک کلید HMAC با آن پالیسی ایجاد کنید .IP .EX tpm2_create \-C primary.ctx \-g sha256 \-G hmac \-r key.prv \-u key.pub \[rs] \-L dpolicy.dat \-a \[dq]sensitivedataorigin|userwithauth|sign\[dq] .EE .PP کلید را بارگذاری کرده و «نام» آن را ذخیره کنید. یک HMAC آزمایشی تولید کنید .IP .EX tpm2_load \-C primary.ctx \-r key.prv \-u key.pub \-c key.ctx tpm2_readpublic \-c key.ctx \-n dupkey.name export plain=\[dq]foo\[dq] echo \-n $plain \f[B]|\f[R] tpm2_hmac \-g sha256 \-c key.ctx \f[B]|\f[R] xxd \-p \-c 256 42a1fad918fa0e4cbea94d759da89ccdfac5a640672d0170f4930cafe14d179c .EE .PP آغاز نشست احراز هویت برای تکثیر با استفاده از \f[CR]tpm2_policyduplicationselect\f[R] .IP .EX tpm2_startauthsession \-\-policy\-session \-S session.dat tpm2_policyduplicationselect \-S session.dat \-N new_parent.name \[rs] \-L dpolicy.dat \-n dupkey.name tpm2_duplicate \-C new_parent.ctx \-c key.ctx \-G null \[rs] \-p \[dq]session:session.dat\[dq] \-r dup.dup \-s dup.seed .EE .PP کپی کردن \f[CR]dup.dup\f[R]، \f[CR]dup.seed\f[R] و \f[CR]key.pub\f[R] به \f[CR]TPM\-B\f[R] .IP \[bu] 2 روی \f[CR]TPM\-B\f[R] مقصد .PP بارگذاری مجدد والد جدید اولیه و وارد کردن کلید .IP .EX tpm2_load \-C primary.ctx \-u new_parent.pub \-r new_parent.prv \-c new_parent.ctx tpm2_import \-C new_parent.ctx \-u key.pub \-i dup.dup \-r dup.prv \-s dup.seed tpm2_load \-C new_parent.ctx \-u key.pub \-r dup.prv \-c dup.ctx .EE .PP تولید یک نمونه HMAC .IP .EX export plain=\[dq]foo\[dq] echo \-n $plain \f[B]|\f[R] tpm2_hmac \-g sha256 \-c dup.ctx \f[B]|\f[R] xxd \-p \-c 256 42a1fad918fa0e4cbea94d759da89ccdfac5a640672d0170f4930cafe14d179c .EE .SH "کدهای بازگشتی (RETURNS)" ابزارها می‌توانند هر یک از کدهای زیر را بازگردانند: .IP \[bu] 2 0 \- موفقیت‌آمیز. .IP \[bu] 2 1 \- خطای عمومی و نامشخص. .IP \[bu] 2 2 \- خطای مدیریت گزینه‌ها. .IP \[bu] 2 3 \- خطای احراز هویت. .IP \[bu] 2 4 \- خطای مربوط به TCTI. .IP \[bu] 2 5 \- طرح پشتیبانی‌نشده. قابل اعمال بر tpm2_testparams. .SH "اشکالات (BUGS)" \c .UR https://github.com/tpm2-software/tpm2-tools/issues مسائل گیت‌هاب (Github Issues) .UE \c .SH "راهنما (HELP)" مشاهده \c .UR https://lists.linuxfoundation.org/mailman/listinfo/tpm2 فهرست پستی (Mailing List) .UE \c .SH "مجوز (LICENSE)" این اثر تحت \c .UR https://creativecommons.org/licenses/by/4.0 مجوز بین‌المللی ارجاع ۴٫۰ کریپتیو کامانز (CC BY 4.0) .UE \c \&.