| tpm2_verifysignature(1) | General Commands Manual | tpm2_verifysignature(1) |
نام (NAME)
tpm2_verifysignature(1) - اعتبارسنجی امضا با استفاده از TPM.
خلاصه دستور (SYNOPSIS)
tpm2_verifysignature [OPTIONS]
توضیحات (DESCRIPTION)
tpm2_verifysignature(1) - از کلیدهای بارگذاریشده برای اعتبارسنجی امضای یک پیام با استفاده از دایجست (خلاصه) پیام ارسالشده به TPM استفاده میکند. اگر بررسی امضا موفقیتآمیز باشد، TPM یک TPMT_TK_VERIFIED تولید خواهد کرد. در غیر این صورت، TPM مقدار TPM_RC_SIGNATURE را بازمیگرداند. اگر شیء به یک کلید نامتقارن ارجاع دهد، تنها کافی است بخش عمومی کلید بارگذاری شود. اگر شیء به یک کلید متقارن ارجاع دهد، باید هر دو بخش عمومی و خصوصی بارگذاری شوند.
گزینهها (OPTIONS)
- •
- -c, --key-context=OBJECT:
شیء کانتکست برای کانتکست کلید مورد استفاده در عملیات. میتواند یک فایل یا شماره یک دستگیره (handle) باشد. بخش “Context Object Format” را ببینید.
- •
- -g, --hash-algorithm=ALGORITHM:
الگوریتم هش مورد استفاده برای خلاصه کردن پیام. الگوریتمها باید از “استانداردهای قالببندی” پیروی کنند؛ بخش “Algorithm Specifiers” را ببینید. همچنین برای فهرستی از الگوریتمهای هش پشتیبانیشده، بخش “Supported Hash Algorithms” را ببینید.
- •
- -m, --message=FILE:
فایل پیام، حاوی محتوایی که باید خلاصه (digest) شود.
- •
- -d, --digest=FILE:
فایل هش ورودی، حاوی هش پیام. در صورت انتخاب این گزینه، نیازی به تعیین گزینههای پیام (-m) و الگوریتم (-g) نخواهد بود.
- •
- -s, --signature=FILE:
فایل امضای ورودی مربوط به امضایی که باید اعتبارسنجی شود.
- •
- -f, --scheme=SCHEME:
طرح امضا (signing scheme) که برای امضای پیام استفاده شده است. این گزینه تنها زمانی باید مشخص شود که امضا از استانداردی غیر از tss، مانند openssl آمده باشد. برای جزئیات بیشتر به بخش “Signature format specifiers” مراجعه کنید. قالب tss شامل متادیتای امضا است که برای درک طرح امضای آن مورد نیاز است.
طرحهای امضا باید از “استانداردهای قالببندی” پیروی کنند؛ بخش “Algorithm Specifiers” را ببینید.
- •
- --format=SCHEME:
منسوخ شده است. مشابه --scheme.
- •
- -t, --ticket=FILE:
فایل بلیت (ticket) برای ثبت ساختار اعتبارسنجی.
مراجع (References)
قالب شیء کانتکست (Context Object Format)
نوع یک شیء کانتکست، چه دستگیره (handle) باشد یا نام فایل، طبق منطق زیر و بهترتیب تعیین میشود:
- •
- اگر آرگومان یک مسیر فایل باشد، فایل به عنوان یک شیء گذرای (transient object) بازیابیشده TPM بارگذاری میشود.
- •
- اگر آرگومان تطابق پیشوندی (prefix match) با یکی از موارد زیر داشته باشد:
- •
- owner: سلسلهمراتب مالک (owner hierarchy)
- •
- platform: سلسلهمراتب پلتفرم (platform hierarchy)
- •
- endorsement: سلسلهمراتب تایید (endorsement hierarchy)
- •
- lockout: شیء پایدار کنترل قفلشدگی (lockout control persistent object)
- •
- اگر آرگومان بتواند به عنوان یک عدد بارگذاری شود، با آن مانند یک دستگیره (handle) رفتار خواهد شد، مانند 0x81010013 و مستقیماً استفاده میشود._OBJECT_.
مشخصکنندههای الگوریتم (Algorithm Specifiers)
گزینههایی که الگوریتم دریافت میکنند از “نامهای مناسب (nice-names)” پشتیبانی میکنند.
دو دسته رشته اصلی برای مشخص کردن الگوریتم وجود دارد: ساده و پیچیده. تنها الگوریتمهای خاصی بر اساس کاربرد و شرایط توسط TPM پذیرفته خواهند شد.
مشخصکنندههای ساده (Simple specifiers)
اینها رشتههایی بدون دادههای مشخصکننده اضافی هستند. هنگام ساخت اشیاء، برای بخشهای نامشخص شیء مقادیر پیشفرض در نظر گرفته میشود. میتوانید فهرست “مشخصکنندههای ساده” شناختهشده را در زیر بیابید.
نامتقارن (Asymmetric)
- •
- rsa
- •
- ecc.SS "متقارن (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) و جزئیات نامتقارن، اندازه کلید و غیره. قالب کلی برای تعیین این دادهها در ادامه آمده است: <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 یا sm4_128 <mode> - الگوریتم SM4 با طول ۱۲۸ بیت همراه با حالت اختیاری (ctr|ofb|cbc|cfb|ecb). اگر حالت مشخص نشود، پیشفرض null خواهد بود.
- •
- ecc - منحنی بیضوی (Elliptical Curve)، پیشفرض 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 خواهد بود. برخی هیچ آرگومانی نمیپذیرند و برخی آرگومانهای متعددی دریافت میکنند..SS مشخصکنندههای طرح با هش اختیاری (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 شیء در حال ایجاد و ویژگیهای آن تعیین میشود. بهطور کلی، هر مشخصکنندهٔ معتبر Symmetric از فهرست Type 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]: نمایش صفحهٔ راهنمای (manpage) ابزار. بهطور پیشفرض تلاش میکند manpager را برای ابزار فراخوانی کند، با این حال در صورت شکست، خلاصهای کوتاه از ابزار را نمایش میدهد. اگر آرگومان گزینهٔ “man” مشخص شده باشد نیز رفتار یکسان است، با این حال اگر صراحتاً “man” درخواست شده باشد، ابزار خطاهای man را در stderr ارائه میدهد. اگر گزینهٔ “no-man” مشخص شود، یا manpager ناموفق باشد، گزینههای کوتاه در 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 برای احراز هویت. یک گذرواژهٔ متنی آشکار برای مجاز شمردن عملیات به TPM ارسال میشود. این گزینه را میتوان برای جلوگیری از بروز مشکلات در هنگام استفاده از نشستهای بدون نمک (unsalted) در حالت OpenSSL FIPS استفاده کرد. اگر از مقادیر auth استفاده میشود، باید از یک نشست نمکدار (salted) برای احراز هویت استفاده شود.
- •
- -R، --autoflush: فعالسازی تخلیهٔ خودکار (autoflush) برای اشیاء گذرا (transient) ایجادشده توسط دستور. اگر یک شیء والد از یک فایل زمینه بارگیری شود، شیء والد گذرا نیز تخلیه خواهد شد. همچنین در صورتی که متغیر محیطی 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> بهترتیب منجر به استفاده از مقدار پیشفرض برای آن بخش خواهد شد..SS پیشفرضهای TCTI هنگامی که یک TCTI مشخص نشده باشد، TCTI پیشفرض با استفاده از معناشناسی dlopen(3) جستجو میشود. این ابزارها برای TCTIهای tabrmd، device و mssim به همان ترتیب جستجو کرده و از اولین مورد یافتشده استفاده میکنند. میتوانید با استفاده از گزینهٔ -v برای چاپ اطلاعات نسخه، بررسی کنید که کدام TCTI به عنوان پیشفرض انتخاب خواهد شد. جفت کلید-مقدار “default-tcti” نشان خواهد داد که کدامیک از TCTIهای یادشده پیشفرض است.
TCTIهای سفارشی
هر TCTI که رابط TCTI پویا را پیادهسازی کند میتواند بارگذاری شود. این ابزارها در درون خود از dlopen(3) استفاده میکنند و مقدار خام tcti-name برای جستجو به کار میرود. بنابراین، این مقدار میتواند یک مسیر به کتابخانهٔ اشتراکی، یا نام یک کتابخانه بر اساس معناشناسی dlopen(3) باشد.
گزینههای TCTI (TCTI OPTIONS)
این مجموعه از گزینهها برای پیکربندی پودمانهای مختلف TCTI شناختهشده و موجود به کار میروند:
- •
- device: برای TCTI از نوع device، میتوان فایل دستگاه نویسهای TPM را جهت استفاده توسط TCTI افزاره مشخص کرد. پیشفرض /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، قالب رشتهٔ پیکربندی مجموعهای از جفتهای سادهٔ کلید-مقدار است که با یک نویسهٔ `,' از هم جدا شدهاند. هر رشتهٔ کلید و مقدار با یک نویسهٔ `=' از یکدیگر جدا میشوند.
- •
- پودمان TCTI abrmd از دو کلید پشتیبانی میکند:
- 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 شناختهشده.
مشخصکنندههای قالب امضا (SIGNATURE FORMAT SPECIFIERS)
انتخاب قالب برای فایل خروجی امضا. tss (پیشفرض) یک حباب باینری (binary blob) مطابق با مشخصات TPM 2.0 و هرگونه فاصلهگذاری احتمالی کامپایلر (compiler padding) خروجی میدهد. گزینهٔ plain دادههای خالص امضا را مطابق با تعریف الگوریتم رمزنگاری استفادهشده خروجی میدهد.
مثالها (EXAMPLES)
امضا و اعتبارسنجی با TPM با استفاده از سلسلهمراتب endorsement
-
tpm2_createprimary -C e -c primary.ctx tpm2_create -G rsa -u rsa.pub -r rsa.priv -C primary.ctx tpm2_load -C primary.ctx -u rsa.pub -r rsa.priv -c rsa.ctx echo "my message" > message.dat tpm2_sign -c rsa.ctx -g sha256 -s sig.rssa message.dat tpm2_verifysignature -c rsa.ctx -g sha256 -m message.dat -s sig.rssa
امضا با openssl و اعتبارسنجی با TPM
-
# Generate an ECC key openssl ecparam -name prime256v1 -genkey -noout -out private.ecc.pem openssl ec -in private.ecc.pem -out public.ecc.pem -pubout # Generate a hash to sign (OSSL needs the hash of the message) echo "data to sign" > data.in.raw sha256sum data.in.raw | awk '{ print "000000 " $1 }' | \ xxd -r -c 32 > data.in.digest # Load the private key for signing tpm2_loadexternal -Q -G ecc -r private.ecc.pem -c key.ctx # Sign in the TPM and verify with OSSL tpm2_sign -Q -c key.ctx -g sha256 -d data.in.digest -f plain -s data.out.signed openssl dgst -verify public.ecc.pem -keyform pem -sha256 \ -signature data.out.signed data.in.raw # Sign with openssl and verify with TPM openssl dgst -sha256 -sign private.ecc.pem -out data.out.signed data.in.raw tpm2_verifysignature -Q -c key.ctx -g sha256 -m data.in.raw -f ecdsa \ -s data.out.signed ابزارها میتوانند هر یک از کدهای زیر را بازگردانند: - •
-
0 - موفقیت.
- •
-
1 - خطای عمومی و نامشخص.
- •
-
2 - خطای پردازش گزینهها.
- •
-
3 - خطای احراز هویت.
- •
-
4 - خطای مربوط به TCTI.
- •
-
5 - طرح پشتیبانینشده. قابل اعمال بر tpm2_testparams.
گزارش باگها (BUGS)
راهنما (HELP)
به فهرست پستی مراجعه کنید.
مجوز (LICENSE)
این اثر تحت مجوز بینالمللی کریتیو کامانز انتساب ۴.۰ (CC BY 4.0) مجوزدهی شده است.
| tpm2-tools |