tpm2_checkquote(1) General Commands Manual tpm2_checkquote(1)

tpm2_checkquote - اعتبارسنجی نقل‌قول (Quote) ارائه‌شده توسط یک TPM

tpm2_checkquote [گزینه‌ها]

دستور tpm2_checkquote(1) با استفاده از بخش عمومی کلید ارائه‌شده، یک نقل‌قول (Quote) تولیدشده توسط TPM را اعتبارسنجی می‌کند. این دستور امضا را در برابر پیام نقل‌قول ارزیابی کرده و در صورت ارائه، تطابق داده‌های صلاحیت‌سنجی (qualifying data) و مقادیر PCR را با مقادیر موجود در نقل‌قول بررسی می‌کند. مقادیر PCR می‌توانند همراه با اطلاعات TPML_PCR_SELECTION یا بدون آن ارائه شوند. یک نمونه از مقادیر PCR بدون اطلاعات انتخاب PCR، خروجی دستور tpm2_pcrread است. اگر مقدار PCR بدون اطلاعات انتخاب PCR مشخص شود، برای تفسیر داده‌های PCR باید رشته انتخاب PCR با استفاده از گزینه -l تعیین گردد.

•
-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' است.

گزینه‌هایی که الگوریتم‌ها را دریافت می‌کنند از “نام‌های مناسب (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.

انتخاب فرمت برای فایل خروجی امضا. گزینه tss (پیش‌فرض) یک قطعه باینری (binary blob) طبق مشخصات TPM 2.0 و هرگونه فاصله‌گذاری احتمالی کامپایلر (compiler padding) تولید می‌کند. گزینه plain داده‌های خام امضا را همان‌طور که توسط الگوریتم رمزنگاری مورد استفاده تعریف شده است، در خروجی قرار می‌دهد. امضا FORMAT.

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

•
-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 یا “رابط انتقال (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-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، می‌توان فایل دستگاه نویسه‌ای 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 شناخته‌شده.

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

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

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

گزارش اشکالات در گیت‌هاب (Github Issues)

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

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

tpm2-tools