tpm2_checkquote(1) General Commands Manual tpm2_checkquote(1) نام (NAME) tpm2_checkquote - اعتبارسنجی نقل‌قول (Quote) ارائه‌شده توسط یک TPM خلاصه دستور (SYNOPSIS) tpm2_checkquote [گزینه‌ها] توضیحات (DESCRIPTION) دستور tpm2_checkquote(1) با استفاده از بخش عمومی کلید ارائه‌شده، یک نقل‌قول (Quote) تولیدشده توسط TPM را اعتبارسنجی می‌کند. این دستور امضا را در برابر پیام نقل‌قول ارزیابی کرده و در صورت ارائه، تطابق داده‌های صلاحیت‌سنجی (qualifying data) و مقادیر PCR را با مقادیر موجود در نقل‌قول بررسی می‌کند. مقادیر PCR می‌توانند همراه با اطلاعات TPML_PCR_SELECTION یا بدون آن ارائه شوند. یک نمونه از مقادیر PCR بدون اطلاعات انتخاب PCR، خروجی دستور tpm2_pcrread است. اگر مقدار PCR بدون اطلاعات انتخاب PCR مشخص شود، برای تفسیر داده‌های PCR باید رشته انتخاب PCR با استفاده از گزینه -l تعیین گردد. گزینه‌ها (OPTIONS) • -u, --public=FILE: فایل ورودی برای بخش عمومی کلید اعتبارسنجی امضا. می‌تواند فایل با قالب pem یا فایل با قالب عمومی tss باشد. • -g, --hash-algorithm=ALGORITHM: الگوریتم درهم‌سازی مورد استفاده برای خلاصه‌سازی (digest) پیام. • -m, --message=FILE: پیام نقل‌قول که داده‌های امضاشده توسط TPM را تشکیل می‌دهد. • -s, --signature=FILE: فایل ورودی امضایی که باید اعتبارسنجی شود. • -f, --pcr=FILE: فایل ورودی اختیاری PCR برای ذخیره فهرست مقادیر PCR که در نقل‌قول گنجانده شده بودند. • -l, --pcr-list=PCR: فهرست بانک‌های PCR و شناسه‌های PCR انتخاب‌شده برای هر بانک. • -q, --qualification=HEX_STRING_OR_PATH: داده‌های صلاحیت‌سنجی (qualification data) برای نقل‌قول. می‌تواند یک رشته هگزادسیمال یا یک مسیر فایل باشد. این گزینه معمولاً برای افزودن یک نانس (nonce) جهت محافظت در برابر حملات بازپخش (replay attacks) استفاده می‌شود. • -F, --pcrs_format=FORMAT: انتخاب قالب برای قطعه باینری (binary blob) در فایل خروجی PCR. مقدار `values' یک قطعه باینری از مقادیر PCR خروجی می‌دهد. مقدار `serialized' یک قطعه باینری از مقادیر PCR را در قالب ساختار داده سریال‌سازی‌شده با فرمت اندیان کوچک (little-endian) می‌خواند یا می‌نویسد. مقدار `marshaled' یک قطعه باینری را در قالب باینری مورد استفاده توسط توابع مارشالینگ و آن‌مارشالینگ TSS2 می‌خواند یا می‌نویسد. اگر از `marshaled' استفاده شود، داده‌ها به این ترتیب سریال‌سازی می‌شوند: TPML_PCR_SELECTION، مقدار UINT32 (تعداد عناصر TPML_DIGEST بعدی) و TPML_DIGEST [تعداد عناصر TPML_DIGEST]. اختیاری است. اگر -l ارائه شود، مقدار `normalized' استفاده خواهد شد. در غیر این صورت، پیش‌فرض `serialized' است. ارجاعات (References) مشخص‌کننده‌های الگوریتم (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 Specifiers) این بخش از مشخص‌کننده الگوریتم پیچیده الزامی است. طرح و جزئیات متقارن باقی‌مانده بر اساس نوع مشخص‌شده و نوع شیء در حال ایجاد، پیش‌فرض‌گذاری می‌شوند. • aes - مقدار پیش‌فرض AES: aes128. • aes128 - الگوریتم AES با طول ۱۲۸ بیت و حالت اختیاری (ctr|ofb|cbc|cfb|ecb). اگر حالت مشخص نشود، پیش‌فرض null خواهد بود. • aes192 - مشابه aes128، به‌جز اندازه کلید ۱۹۲ بیتی. • aes256 - مشابه aes128، به‌جز اندازه کلید ۲۵۶ بیتی. • sm4 - مقدار پیش‌فرض SM4: sm4128. • sm4128 یا sm4_128 - الگوریتم 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 با اندازه کلید ۴۰۹۶ بیت. مشخص‌کننده‌های طرح (Scheme Specifiers) فیلد بعدی اختیاری است و می‌توان از آن صرف‌نظر کرد. طرح‌ها معمولاً طرح‌های امضا (Signing Schemes) یا طرح‌های رمزنگاری نامتقارن (Asymmetric Encryption Schemes) هستند. بیشتر طرح‌های امضا بلافاصله پس از طرح امضا، یک الگوریتم درهم‌سازی دریافت می‌کنند. اگر الگوریتم درهم‌سازی ذکر نشود، پیش‌فرض 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) این فیلد اختیاری است و بر اساس نوع (type) شیء در حال ایجاد و ویژگی‌های آن پیش‌فرض‌گذاری می‌شود. به‌طور کلی، هر مشخص‌کننده معتبر متقارن از فهرست مشخص‌کننده‌های نوع باید کار کند. اگر مشخص نشود، جزئیات متقارن یک شیء نامتقارن به‌طور پیش‌فرض به aes128cfb تنظیم می‌شود. مثال‌ها (Examples) ایجاد یک کلید rsa2048 با طرح رمزنگاری نامتقارن rsaes (Create an rsa2048 key with an rsaes asymmetric encryption scheme) tpm2_create -C parent.ctx -G rsa2048:rsaes -u key.pub -r key.priv ایجاد یک کلید ecc256 با طرح امضای ecdaa با شمارنده ۴ و درهم‌سازی sha384 (Create an ecc256 key with an ecdaa signing scheme with a count of 4 and sha384 hash) /tpm2_create -C parent.ctx -G ecc256:ecdaa4-sha384 -u key.pub -r key.priv الگوریتم‌های رمزنگاری ALGORITHM. مشخص‌کننده‌های قالب امضا (Signature Format Specifiers) انتخاب فرمت برای فایل خروجی امضا. گزینه tss (پیش‌فرض) یک قطعه باینری (binary blob) طبق مشخصات TPM 2.0 و هرگونه فاصله‌گذاری احتمالی کامپایلر (compiler padding) تولید می‌کند. گزینه plain داده‌های خام امضا را همان‌طور که توسط الگوریتم رمزنگاری مورد استفاده تعریف شده است، در خروجی قرار می‌دهد. امضا FORMAT. گزینه‌های عمومی (COMMON OPTIONS) این مجموعه گزینه‌ها بین بسیاری از برنامه‌ها مشترک هستند و اطلاعاتی را ارائه می‌دهند که بسیاری از کاربران انتظار دارند. • -h, --help=[man|no-man]: نمایش صفحه راهنمای (manpage) ابزار. به‌طور پیش‌فرض، تلاش می‌کند تا صفحه‌بند man (manpager) را برای ابزار فراخوانی کند؛ اما در صورت شکست، خلاصه کوتاهی از ابزار را نمایش می‌دهد. این رفتار مشابه زمانی است که آرگومان گزینه “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) برای اشیاء گذرای ایجادشده توسط دستور. اگر یک شیء والد از یک فایل بافت (context file) بارگذاری شود، شیء والد گذرا نیز تخلیه خواهد شد. تخلیه خودکار همچنین می‌تواند با تنظیم متغیر محیطی 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 را دارند و بنابراین از عدم استفاده از 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 را برای استفاده توسط این رابط تعیین کرد. مقدار پیش‌فرض /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، قالب رشته پیکربندی مجموعه‌ای از جفت‌های کلید-مقدار ساده است که با نویسه «,» از هم جدا شده‌اند. رشته‌های کلید و مقدار با نویسه «=» از یکدیگر تفکیک می‌شوند. • رابط abrmd TCTI از دو کلید پشتیبانی می‌کند: 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 مترادف یکدیگرند. ماژول‌های مختلف TCTI شناخته‌شده. مثال‌ها (EXAMPLES) تولید یک نقل‌قول با TPM و سپس اعتبارسنجی آن (Generate a quote with a TPM, then verify it) tpm2_createek -c 0x81010001 -G rsa -u ekpub.pem -f pem tpm2_createak -C 0x81010001 -c ak.ctx -G rsa -s rsassa -g sha256 \ -u akpub.pem -f pem -n ak.name tpm2_quote -c ak.ctx -l sha256:15,16,22 -q abc123 -m quote.msg -s quote.sig \ -o quote.pcrs -g sha256 tpm2_checkquote -u akpub.pem -m quote.msg -s quote.sig -f quote.pcrs -g sha256 \ -q abc123 کدهای بازگشتی (RETURNS) ابزارها می‌توانند هر یک از کدهای زیر را بازگردانند: • 0 - موفقیت. • 1 - خطای کلی و نامشخص. • 2 - خطای مدیریت گزینه‌ها. • 3 - خطای احراز هویت. • 4 - خطای مربوط به TCTI. • 5 - طرح پشتیبانی‌نشده. قابل اعمال در tpm2_testparams. اشکالات (BUGS) گزارش اشکالات در گیت‌هاب (Github Issues) راهنما (HELP) مشاهده فهرست پستی (Mailing List) مجوز (LICENSE) این اثر تحت مجوز بین‌المللی کریتیو کامنز ارجاع ۴.۰ (CC BY 4.0) . tpm2-tools tpm2_checkquote(1)