| tpm2_duplicate(1) | General Commands Manual | tpm2_duplicate(1) |
نام (NAME)
tpm2_duplicate - کپی و تکثیر شیء بارگذاریشده در TPM2
خلاصه دستور (SYNOPSIS)
tpm2_duplicate [گزینهها]
توضیحات (DESCRIPTION)
دستور tpm2_duplicate(1) یک شیء بارگذاریشده را تکثیر میکند تا بتوان از آن در یک سلسلهمراتب (hierarchy) متفاوت استفاده کرد. کلید والد جدید برای شیء تکثیرشده میتواند روی همان TPM یا یک TPM دیگر، یا TPM_RH_NULL باشد.
گزینهها (OPTIONS)
این گزینهها فرآیند وارد کردن کلید را کنترل میکنند:
- •
- -G, --wrapper-algorithm=ALGORITHM:
الگوریتم متقارنی که اگر گزینهٔ -U استفاده نشود، برای پوشش درونی (inner wrapper) استفاده خواهد شد. پشتیبانی میکند از:
- •
- aes - الگوریتم AES 128 در حالت CFB.
- •
- null - هیچکدام. الگوریتم کلید مرتبط با والد عمومی در صورت استفاده از گزینهٔ -U.
- •
- -G, --key-algorithm=ALGORITHM:
الگوریتم کلید مرتبط با والد عمومی در صورت استفاده از گزینهٔ -U.
- •
- -i, --encryptionkey-in=FILE:
نام فایل کلید متقارن (دادههای ۱۲۸ بیتی) را مشخص میکند که برای پوشش درونی استفاده میشود. تنها زمانی معتبر است که الگوریتم متقارن مشخصشده null نباشد.
- •
- -o, --encryptionkey-out=FILE:
نام فایل برای ذخیره کلید متقارن (دادههای ۱۲۸ بیتی) که برای پوشش درونی استفاده شده است را مشخص میکند. تنها زمانی معتبر است که الگوریتم متقارن مشخصشده null نباشد و --input-key-file مشخص نشده باشد. در این حالت TPM کلید را تولید میکند.
- •
- -C, --parent-context=OBJECT:
شیء کلید والد.
- •
- -U, --parent-public=FILE:
مسیر فایل به کلید عمومی شیء والد در TPM مقصد را مشخص میکند. این باید فایلی با قالب TPM2B_PUBLIC باشد. این کلید عمومی برای پوششدهی یک کلید PEM یا DER استفاده میشود که برای یک TPM راه دور صادر خواهد شد.
- •
- -k, --private-key=FILE:
مسیر فایل کلید خصوصی خارجی را مشخص میکند که باید برای TPM راه دور رمزنگاری شود. این باید یک کلید خصوصی با قالب PEM باشد.
- •
- -r, --private=FILE:
مسیر فایل را برای ذخیره بخش خصوصی شیء تکثیرشده مشخص میکند. # جزئیات حفاظت (Protection Details)
اشیایی که میتوانند به خارج از TPM منتقل شوند، باید محافظت گردند (محرمانگی و یکپارچگی). به عنوان مثال، اشیاء گذرا (transient) نیازمند آن هستند که دادههای محافظتشده توسط TPM (کلید یا دادههای مهروموم) در خارج از TPM ذخیره شوند. این مورد در ابزارهایی مانند tpm2_create(1) دیده میشود که در آن گزینهٔ -r این دادههای محافظتشده را در خروجی قرار میدهد. این حباب داده (blob) حاوی بخشهای حساس شیء است. بخشهای حساس شیء توسط شیء والد محافظت میشوند؛ با استفاده از مشخصات رمزنگاری متقارن والد برای رمزگذاری دادههای حساس و اعمال HMAC بر روی آن.
جزئیات دقیق را میتوان در بخش ۲۳ سند زیر یافت:
بهویژه شکل ۲۰ مرتبط است، هرچند که مشخصاً به حبابهای تکثیر اشاره دارد، اما فرآیند یکسان است.
اگر خروجی از tpm2_duplicate(1) باشد، خروجی کمی متفاوت خواهد بود، همانطور که بهطور کامل در بخش ۲۳ توضیح داده شده است.
- •
- -u, --public=FILE:
در صورتی که یک کلید خارجی در حال تکثیر باشد، مسیر فایل برای ذخیره بخش عمومی شیء تکثیرشده را مشخص میکند.
- •
- -s, --encrypted-seed=FILE:
فایل ذخیره سید (seed) رمزنگاریشدهٔ شیء تکثیرشده.
- •
- -p, --auth=AUTH:
مقدار احراز هویت برای کلید، اختیاری است.
- •
- -L, --policy=FILE:
فایل پالیسی ورودی، اختیاری است.
- •
- -c, --key-context=OBJECT:
شیئی که قرار است تکثیر شود.
- •
- -a, --attributes=ATTRIBUTES:
ویژگیهای شیء، اختیاری است. مقدار پیشفرض برای اشیاء ایجادشده عبارت است از:
TPMA_OBJECT_SIGN_ENCRYPT|TPMA_OBJECT_DECRYPT|TPMA_OBJECT_USERWITHAUTH
نکته: اگر یک پالیسی بدون مقدار auth مشخص شود، ویژگی TPMA_OBJECT_USERWITHAUTH غیرفعال میشود.
- •
- --cphash=FILE
مسیر فایل برای ثبت هش پارامترهای دستور. این مقدار معمولاً به عنوان cpHash شناخته میشود. نکته: با انتخاب این گزینه، ابزار در عمل دستور را اجرا نمیکند و صرفاً یک cpHash برمیگرداند.
مراجع (References)
قالب شیء کانتکست (Context Object Format)
نوع یک شیء کانتکست، چه هندل باشد یا نام فایل، بر اساس منطق زیر بهترتیب تعیین میشود:
- •
- اگر آرگومان یک مسیر فایل باشد، آن فایل به عنوان یک شیء گذرا (transient) بازگردانیشدهٔ TPM بارگذاری میشود.
- •
- اگر آرگومان با پیشوند یکی از موارد زیر مطابقت داشته باشد:
- •
- owner: سلسلهمراتب مالک (owner hierarchy)
- •
- platform: سلسلهمراتب پلتفرم (platform hierarchy)
- •
- endorsement: سلسلهمراتب تأیید (endorsement hierarchy)
- •
- lockout: شیء پایدار کنترل قفل (lockout control persistent object)
- •
- اگر آرگومان بتواند به صورت یک عدد بارگذاری شود، به عنوان یک هندل تلقی میشود (مانند 0x81010013) و مستقیماً استفاده خواهد شد._OBJECT_.
قالببندی احراز هویت (Authorization Formatting)
مجوز برای استفاده از یک شیء در TPM2.0 میتواند به ۳ شکل مختلف باشد: 1. گذرواژه (Password) 2. کد HMAC 3. نشستها (Sessions)
نکته: “در صورت مشخص نشدن، مجوزها بهطور پیشفرض به گذرواژه خالی (EMPTY PASSWORD) تنظیم میشوند”.
برای احراز هویت با مقادیر مجاز (auth values)، دستورات ابزار بهطور ضمنی یک نشست 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 # برای ارسال گذرواژه از طریق stdin با echo: echo foobar | tpm2_tool -p file:- # برای استفاده از here-string بش از طریق stdin: tpm2_tool -p file:- <<< foobar
نشستها (Sessions)
هنگام استفاده از یک نشست پالیسی (policy session) برای مجاز کردن استفاده از یک شیء، شناسه گزینه را با کلمه کلیدی session شروع کنید. سپس مسیری به یک فایل نشست که توسط دستور tpm2_startauthsession(1) ایجاد شده است را مشخص نمایید. در صورت تمایل، اگر نشست نیازمند ارسال یک مقدار احراز هویت (auth value) به همراه هندل نشست باشد (مانند گذرواژه پالیسی)، یک علامت + و یک رشته را مطابق آنچه در بخش گذرواژهها (Passwords) توضیح داده شد، اضافه کنید.
مثالها (Examples)
برای استفاده از یک فایل کانتکست نشست با نام session.ctx:
-
session:session.ctx
برای استفاده از یک فایل کانتکست نشست با نام session.ctx و ارسال مقدار احراز هویت mypassword:
-
session:session.ctx+mypassword
برای استفاده از یک فایل کانتکست نشست با نام session.ctx و ارسال مقدار احراز هویت هگز 0x11223344:
-
session:session.ctx+hex:11223344
مجوزهای PCR (PCR Authorizations)
میتوانید با استفاده از پیشوند “pcr:” و زبان کوچک مربوط به PCR، یک پالیسی PCR را برآورده سازید. زبان کوچک PCR به صورت زیر است: <pcr-spec>=<raw-pcr-file>
مشخصات PCR در بخش “مشخصکنندههای بانک PCR” مستند شده است.
آرگومان raw-pcr-file یک پارامتر اختیاری است که شامل خروجی محتویات خام PCR مطابق با خروجی دستور tpm2_pcrread(1) میباشد.
مشخصکنندههای بانک PCR
مثالها (Examples)
برای برآورده کردن یک پالیسی PCR از نوع sha256 روی بانکهای 0، 1، 2 و 3 از مشخصکننده زیر استفاده کنید:
-
pcr:sha256:0,1,2,3
مشخص کردن AUTH.
مشخصکنندههای الگوریتم (Algorithm Specifiers)
گزینههایی که الگوریتم دریافت میکنند از «نامهای مناسب» (nice-names) پشتیبانی میکنند.
دو دسته اصلی رشتههای مشخصکننده الگوریتم وجود دارد: ساده و پیچیده. تنها الگوریتمهای خاصی بر اساس نوع کاربرد و شرایط توسط TPM پذیرفته خواهند شد.
مشخصکنندههای ساده (Simple specifiers)
اینها رشتههایی بدون دادههای مشخصکننده اضافی هستند. هنگام ایجاد اشیاء، بخشهای تعییننشده شیء با مقادیر پیشفرض در نظر گرفته میشوند. فهرست «مشخصکنندههای ساده» شناختهشده در زیر آمده است.
نامتقارن (Asymmetric)
- •
- rsa
- •
- ecc
متقارن (Symmetric)
- •
- aes
- •
- camellia
- •
- sm4
الگوریتمهای درهمسازی (Hashing Algorithms)
- •
- sha1
- •
- sha256
- •
- sha384
- •
- sha512
- •
- sm3_256
- •
- sha3_256
- •
- sha3_384
- •
- sha3_512
درهمسازی کلیددار (Keyed Hash)
- •
- hmac
- •
- xor
طرحهای امضا (Signing Schemes)
- •
- rsassa
- •
- rsapss
- •
- ecdsa
- •
- ecdaa
- •
- ecschnorr
- •
- sm2
طرحهای رمزنگاری نامتقارن (Asymmetric Encryption Schemes)
- •
- oaep
- •
- rsaes
- •
- ecdh
حالتها (Modes)
- •
- ctr
- •
- ofb
- •
- cbc
- •
- cfb
- •
- ecb
متفرقه (Misc)
- •
- null
مشخصکنندههای پیچیده (Complex Specifiers)
اشیاء، هنگامی که برای ایجاد توسط TPM مشخص میشوند، الگوریتمهای متعددی دارند که در دادههای عمومی آنها قرار میگیرد؛ مواردی مانند نوع، طرح و جزئیات نامتقارن، اندازه کلید و غیره. در ادامه قالب کلی برای تعیین این دادهها آمده است: <type>:<scheme>:<symmetric-details>
مشخصکنندههای نوع (Type Specifiers)
این بخش از مشخصکننده الگوریتم پیچیده الزامی است. باقیمانده جزئیات طرح و بخش متقارن بر اساس نوع مشخصشده و نوع شیء در حال ایجاد، مقدار پیشفرض به خود میگیرند.
- •
- 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 با اندازه کلید ۴۰۹۶ بیت.
مشخصکنندههای طرح (Scheme Specifiers)
مورد بعدی یک فیلد اختیاری است و میتوان از آن صرفنظر کرد.
طرحها معمولاً طرحهای امضا یا طرحهای رمزنگاری نامتقارن هستند. بیشتر طرحهای امضا یک الگوریتم درهمسازی را مستقیماً پس از طرح امضا دریافت میکنند. اگر الگوریتم درهمسازی ذکر نشود، پیشفرض آن sha256 خواهد بود. برخی هیچ آرگومانی دریافت نمیکنند و برخی چندین آرگومان میپذیرند.
طرحهای با الگوریتم درهمسازی اختیاری (Hash Optional Scheme Specifiers)
پس از این مشخصکنندههای طرح، یک خط تیره و یک الگوریتم درهمسازی معتبر قرار میگیرد؛ به عنوان مثال: oaep-sha256.
- •
- oaep
- •
- ecdh
- •
- rsassa
- •
- rsapss
- •
- ecdsa
- •
- ecschnorr
- •
- sm2
طرحهای با چند گزینه (Multiple Option Scheme Specifiers)
پس از این مشخصکننده طرح، یک مقدار شمارش (حداکثر اندازه UINT16) و سپس یک خط تیره (-) و یک الگوریتم درهمسازی معتبر میآید. * ecdaa برای مثال: ecdaa4-sha256. اگر مقداری برای شمارش تعیین نشود، پیشفرض آن ۴ خواهد بود.
طرحهای بدون گزینه (No Option Scheme Specifiers)
این مشخصکننده طرح هیچ آرگومانی نمیپذیرد. * rsaes
مشخصکنندههای جزئیات متقارن (Symmetric Details Specifiers)
این فیلد اختیاری است و بر اساس نوع شیء در حال ایجاد و ویژگیهای آن به مقادیر پیشفرض تنظیم میشود. بهطور کلی، هر مشخصکننده معتبر متقارن از فهرست مشخصکنندههای نوع قابل استفاده است. در صورت عدم تعیین، جزئیات متقارن یک شیء نامتقارن بهطور پیشفرض aes128cfb در نظر گرفته میشود.
مثالها (Examples)
ایجاد یک کلید rsa2048 با طرح رمزنگاری نامتقارن rsaes
tpm2_create -C parent.ctx -G rsa2048:rsaes -u key.pub -r key.priv
ایجاد یک کلید ecc256 با طرح امضای ecdaa با تعداد ۴ و هش sha384
/tpm2_create -C parent.ctx -G ecc256:ecdaa4-sha384 -u key.pub -r key.priv الگوریتمهای رمزنگاری ALGORITHM.
گزینههای عمومی (COMMON OPTIONS)
این مجموعه گزینهها میان بسیاری از برنامهها مشترک هستند و اطلاعاتی را ارائه میدهند که اغلب کاربران انتظار دارند.
- •
- -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 (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-name>:<tcti-option-config>
تعیین یک رشته خالی برای هر یک از بخشهای <tcti-name> یا <tcti-option-config> باعث میشود به ترتیب مقدار پیشفرض برای آن بخش استفاده شود.
پیشفرضهای 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)، فایل دستگاه نویسهای (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 شناختهشده.
مثالها (EXAMPLES)
مثال ۱: تکثیر کلید ایجادشده با پالیسیای که امکان تکثیر را فراهم میکند:
-
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 \ -L policy.dat -a "sensitivedataorigin|userwithauth|decrypt|sign" tpm2_createprimary -C o -g sha256 -G ecc -c new_parent.ctxt tpm2_startauthsession \--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 "session:session.dat" \ -r duprv.bin -s seed.dat tpm2_flushcontext session.dat
مثال ۲: به عنوان یک مثال سرتاسری، فرآیند زیر یک کلید RSA تولیدشده روی TPM-A را به TPM-B منتقل میکند
روی TPM-B
ایجاد یک شیء والد که برای پوششدهی/انتقال کلید استفاده خواهد شد.
-
tpm2_createprimary -C o -g sha256 -G rsa -c primary.ctx tpm2_create -C primary.ctx -g sha256 -G rsa \ -r new_parent.prv -u new_parent.pub \ -a "restricted|sensitivedataorigin|decrypt|userwithauth"
کپی کردن new_parent.pub به TPM-A.
روی TPM-A
ایجاد شیء ریشه و پالیسی احراز هویتی که تنها تکثیر را مجاز میداند
-
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
تولید یک جفتکلید RSA روی TPM-A که تکثیر خواهد شد (توجه داشته باشید که عبارت عبور `foo' است)
-
tpm2_create -C primary.ctx -g sha256 -G rsa -p foo -r key.prv \ -u key.pub -L dpolicy.dat -a "sensitivedataorigin|userwithauth|decrypt|sign" tpm2_load -C primary.ctx -r key.prv -u key.pub -c key.ctx tpm2_readpublic -c key.ctx -o dup.pub
آزمایش امضا و رمزنگاری به صورت محلی (تا بعداً بتوانیم مقایسه کنیم که همان کلید منتقل شده است).
-
echo "meet me at.." >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
مقایسه هش امضا (بعداً از این برای تأیید انتقال کلید به TPM-B استفاده خواهیم کرد):
-
sha256sum sign.raw a1b4e3fbaa29e6e46d95cff498150b6b8e7d9fd21182622e8f5a3ddde257879e
آغاز یک نشست احراز هویت و دستور پالیسی برای مجاز کردن تکثیر
-
tpm2_startauthsession --policy-session -S session.dat tpm2_policycommandcode -S session.dat -L dpolicy.dat TPM2_CC_Duplicate
بارگذاری فایل new_parent.pub منتقلشده از TPM-B
-
tpm2_loadexternal -C o -u new_parent.pub -c new_parent.ctx
آغاز عملیات تکثیر
-
tpm2_duplicate -C new_parent.ctx -c key.ctx -G null \ -p "session:session.dat" -r dup.dpriv -s dup.seed
کپی کردن فایلهای زیر به TPM-B: * dup.pub * dup.dpriv * dup.seed * (اختیاراً data.encrypted صرفاً برای آزمایش رمزگشایی)
روی TPM-B
آغاز یک نشست احراز هویت و پالیسی
-
tpm2_startauthsession --policy-session -S session.dat tpm2_policycommandcode -S session.dat -L dpolicy.dat TPM2_CC_Duplicate
بارگذاری کانتکستی که برای انتقال استفاده کردیم
-
tpm2_flushcontext --transient-object tpm2_load -C primary.ctx -u new_parent.pub -r new_parent.prv -c new_parent.ctx
وارد کردن کانتکست تکثیرشده در برابر والدی که استفاده کردیم
-
tpm2_import -C new_parent.ctx -u dup.pub -i dup.dpriv \ -r dup.prv -s dup.seed -L dpolicy.dat
بارگذاری کانتکست کلید تکثیرشده
-
tpm2_flushcontext --transient-object tpm2_load -C new_parent.ctx -u dup.pub -r dup.prv -c dup.ctx
آزمایش مطابقت کلید واردشده
- •
- امضا
-
echo "meet me at.." >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
مقایسه هش فایل امضا:
-
$ sha256sum sign.raw a1b4e3fbaa29e6e46d95cff498150b6b8e7d9fd21182622e8f5a3ddde257879e
- •
- رمزگشایی
-
tpm2_flushcontext --transient-object tpm2_rsadecrypt -p foo -c dup.ctx -o data.ptext data.encrypted # cat data.ptext meet me at..
مثال ۳: صادر کردن یک کلید RSA اوپناساسال برای یک TPM راه دور
برای ارسال امن یک کلید RSA تولیدشده توسط OpenSSL به یک TPM راه دور، بهگونهای که تنها آن TPM راه دور بتواند آن را بارگذاری کند، و بدون افشای کلید خصوصی برای سیستمعامل میزبان در ماشین راه دور:
- •
- در TPM-B مقصد، یک کانتکست اولیه ایجاد کرده و کلید عمومی آن را بخوانید، سپس primary.pub را به ماشین مبدأ ارسال کنید:
-
tpm2_createprimary -c primary.ctx tpm2_readpublic -c primary.ctx -o primary.pub
- •
- در ماشین مبدأ، کلید خصوصی RSA را ایجاد کرده و آن را با کلید عمومی TPM مقصد پوشش دهید (wrap کنید). مشابه با tpm2_makecredential، این مرحله نباید نیازی به TPM داشته باشد.
-
openssl genrsa -out rsa.pem tpm2_duplicate -U primary.pub -G rsa -k rsa.pem -u rsa.pub -r rsa.dpriv -s rsa.seed
- •
- فایلهای rsa.pub، rsa.dpriv و rsa.seed را به TPM-B مقصد ارسال کرده و فایلها را وارد (import) کنید؛ این کار آنها را با استفاده از primary.ctx رمزگشایی میکند تا rsa.priv تولید شود، که سپس میتواند به عنوان یک کلید TPM بارگذاری و استفاده شود:
-
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
مثال ۴: صادر کردن یک کلید HMAC برای یک TPM راه دور و محدود کردن آن از صادرات مجدد
این فرآیند یک کلید HMAC ایجادشده در داخل TPM-A را فقط به TPM-B صادر میکند و با پالیسیای همراه میسازد که مانع از اجازه صادرات مجدد توسط TPM-B میشود.
- •
- در TPM-B مقصد، یک کانتکست اولیه ایجاد کنید:
-
tpm2_createprimary -C o -g sha256 -G rsa -c primary.ctx tpm2_create -C primary.ctx -g sha256 -G rsa -r new_parent.prv \ -u new_parent.pub -a "fixedtpm|fixedparent|restricted|sensitivedataorigin|decrypt|userwithauth"
کپی کردن new_parent.pub به TPM-A.
- •
- روی TPM-A مبدأ
کلید راه دور را بارگذاری کرده و «نام» (name) آن را ذخیره کنید
-
tpm2_loadexternal -C o -u new_parent.pub -c new_parent.ctx -n new_parent.name
یک شیء اولیه و یک پالیسی ایجاد کنید که تکثیر را فقط به والد TPM-B محدود کند
-
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
یک کلید HMAC با آن پالیسی ایجاد کنید
-
tpm2_create -C primary.ctx -g sha256 -G hmac -r key.prv -u key.pub \ -L dpolicy.dat -a "sensitivedataorigin|userwithauth|sign"
کلید را بارگذاری کرده و «نام» آن را ذخیره کنید. یک HMAC آزمایشی تولید کنید
-
tpm2_load -C primary.ctx -r key.prv -u key.pub -c key.ctx tpm2_readpublic -c key.ctx -n dupkey.name export plain="foo" echo -n $plain | tpm2_hmac -g sha256 -c key.ctx | xxd -p -c 256 42a1fad918fa0e4cbea94d759da89ccdfac5a640672d0170f4930cafe14d179c
آغاز نشست احراز هویت برای تکثیر با استفاده از tpm2_policyduplicationselect
-
tpm2_startauthsession --policy-session -S session.dat tpm2_policyduplicationselect -S session.dat -N new_parent.name \ -L dpolicy.dat -n dupkey.name tpm2_duplicate -C new_parent.ctx -c key.ctx -G null \ -p "session:session.dat" -r dup.dup -s dup.seed
کپی کردن dup.dup، dup.seed و key.pub به TPM-B
- •
- روی TPM-B مقصد
بارگذاری مجدد والد جدید اولیه و وارد کردن کلید
-
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
تولید یک نمونه HMAC
-
export plain="foo" echo -n $plain | tpm2_hmac -g sha256 -c dup.ctx | xxd -p -c 256 42a1fad918fa0e4cbea94d759da89ccdfac5a640672d0170f4930cafe14d179c
کدهای بازگشتی (RETURNS)
ابزارها میتوانند هر یک از کدهای زیر را بازگردانند:
- •
- 0 - موفقیتآمیز.
- •
- 1 - خطای عمومی و نامشخص.
- •
- 2 - خطای مدیریت گزینهها.
- •
- 3 - خطای احراز هویت.
- •
- 4 - خطای مربوط به TCTI.
- •
- 5 - طرح پشتیبانینشده. قابل اعمال بر tpm2_testparams.
اشکالات (BUGS)
راهنما (HELP)
مشاهده فهرست پستی (Mailing List)
مجوز (LICENSE)
این اثر تحت مجوز بینالمللی ارجاع ۴٫۰ کریپتیو کامانز (CC BY 4.0).
| tpm2-tools |