PESIGN(1) General Commands Manual PESIGN(1) نام (NAME) pesign – ابزاری برای امضای برنامه‌های کاربردی UEFI خلاصه دستور (SYNOPSIS) pesign -i file [-o file] [-f] [-n directory] [-t token] [-c nickname] [-u number] [-m file] [-e file] [-I file] [-E file] [-R file] [-K file] [-C file] [-a] [-l] [-S] [-v] ⟨-s | -D [-N] | -r | -h [-d digest] [-P | -p]⟩ توضیحات (DESCRIPTION) pesign یک ابزار خط فرمان برای مدیریت و دستکاری امضاها و خلاصه‌های رمزنگاری برنامه‌های کاربردی UEFI است. گزینه‌ها (OPTIONS) -i file | --in file فایل PE ورودی برای امضا کردن -o file | --out file فایل PE خروجی برای امضا کردن -f | --force بازنویسی فایل موجودِ مشخص‌شده با --out -n directory | --certdir directory استفاده از پایگاه‌داده NSS در directory (پیش‌فرض: /etc/pki/pesign) -t token | --token token استفاده از توکن NSS به نام token -c nickname | --certificate nickname استفاده از گواهی با نام مستعار nickname در پایگاه‌داده NSS -u number | --signature-number number شماره امضا، با شروع از اندیس 0، برای استفاده با --remove-signature، --export-signature، یا --show-signature (پیش‌فرض: 0) -m file | --import-signature file وارد کردن امضای Authenticode از file -e file | --export-signature file صادر کردن امضای Authenticode به file -I file | --import-signed-attributes file وارد کردن بخش SignedAttributes در PKCS-7 (بدون هیچ امضایی) از file -E file | --export-signed-attributes file صادر کردن بخش SignedAttributes در PKCS-7 (بدون هیچ امضایی) به file -R file | --import-raw-signature file وارد کردن خلاصه (digest) امضا از file -K file | --export-pubkey file صادر کردن کلید عمومی از پایگاه‌داده NSS مشخص‌شده با --token و --certificate به file -C file | --export-cert file صادر کردن گواهی از پایگاه‌داده NSS مشخص‌شده با --token و --certificate به file -a | --ascii-armor هنگام صادر کردن گواهی‌ها، آن‌ها در قالب ascii-armor کدگذاری شوند -l | --list-signatures فهرست کردن امضاها -S | --show-signature نمایش اطلاعات درباره امضاها -v | --verbose نمایش اطلاعات بیشتر و با جزئیات (حالت پرگو) -s | --sign ایجاد یک امضای جدید -D | --daemonize اجرا به صورت یک دیمن (daemon) -N | --nofork هنگام تبدیل به دیمن فرآیند فرعی (fork) ایجاد نشود (دیمن در پیش‌زمینه اجرا می‌شود) -r | --remove-signature حذف امضا -h | --hash نمایش هش Authenticode فایل باینری -d digest | --digest-type digest استفاده از digest رمزنگاری به همراه --hash (استفاده از help برای فهرست کردن گزینه‌ها) (پیش‌فرض: sha256) -P | --padding | -p | --nopadding تکمیل کردن یا نکردن (Padding) فایل باینری بر اساس قوانین PE 9.3 پیش از امضا یا محاسبه هش (پیش‌فرض: --padding) پدینگ یا تکمیل‌سازی (Padding) حتی برای باینری‌هایی که پیش از مشخصات فعلی PE ایجاد شده‌اند توصیه می‌شود (و در بسیاری از شرایط الزامی است)، و از نسخه pesign 113 به بعد به طور پیش‌فرض فعال است. مثال‌ها (EXAMPLES) امضا با گواهی و کلید خصوصی در فایل‌های جداگانه اگر یک فایل گواهی و یک فایل کلید خصوصی دارید، مراحل زیر می‌توانند برای امضای یک ایمیج PE استفاده شوند: # Create a pkcs12 file from private key and certificate file. host:~$ openssl pkcs12 -export -out foo_key.p12 \ -inkey signing_key.pem -in xyz_cert.x509.pem # Import pkcs12 file into pesign db host:~$ pk12util -i foo_key.p12 -d /etc/pki/pesign # Do the signing host:~$ pesign -c my-signing-cert -s \ -i foo.unsigned.efi -o foo.signed.efi لطفاً توجه داشته باشید که این تنها یک مثال است، و بهترین شیوه توصیه‌شده این است که کلیدهای خصوصی همیشه در یک ماژول امنیت سخت‌افزاری (HSM) با استاندارد FIPS 140-2، سطح ۲ یا بالاتر ذخیره شوند. امضا با استفاده از HSM اگر در HSM خود یک جفت‌کلید دارید و ارائه‌دهنده HSM شما یک کتابخانه PKCS-11 ارائه می‌دهد، می‌توانید مستقیماً از آن به همراه NSS استفاده کنید: # Add the HSM PKCS-11 library to the NSS database host:~$ modutil -dbdir /etc/pki/pesign -add vendor-engine \ -libfile /usr/lib64/pkcs11/vendor-engine.so WARNING: Performing this operation while the browser is running could cause corruption of your security databases. If the browser is currently running, you should exit browser before continuing this operation. Type 'q ' to abort, or to continue: Module "vendor-engine" added to database. # List the added module host:~$ modutil -dbdir /etc/pki/pesign -list ----------------------------------------------------------- 1. NSS Internal PKCS #11 Module uri: pkcs11:library-manufacturer=Mozilla%20Foundation;library-description=NSS%20Internal%20Crypto%20Services;library-version=3.52 slots: 2 slots attached status: loaded slot: NSS Internal Cryptographic Services token: NSS Generic Crypto Services uri: pkcs11:token=NSS%20Generic%20Crypto%20Services;manufacturer=Mozilla%20Foundation;serial=0000000000000000;model=NSS%203 slot: NSS User Private Key and Certificate Services token: NSS Certificate DB uri: pkcs11:token=NSS%20Certificate%20DB;manufacturer=Mozilla%20Foundation;serial=0000000000000000;model=NSS%203 2. opensc-pkcs11.so library name: /usr/lib64/pkcs11/opensc-pkcs11.so uri: pkcs11:library-manufacturer=OpenSC%20Project;library-description=OpenSC%20smartcard%20framework;library-version=0.20 slots: 1 slot attached status: loaded slot: Generic Smart Card Reader Interface [Smart Card Reader Interf... token: OpenSC Card (myorg-sb-signer) uri: pkcs11:token=OpenSC%20Card%20(myorg-sb-signer);manufacturer=OpenSC%20Project;serial=56516a130f35;model=PKCS%2315 ----------------------------------------------------------- # List certs in tokens host:~$ certutil -d /etc/pki/pesign \ -h "OpenSC Card (myorg-sb-signer)" -L Certificate Nickname Trust Attributes SSL,S/MIME,JAR/XPI Enter Password or Pin for "OpenSC Card (myorg-sb-signer)": OpenSC Card (myorg-sb-signer):/CN=My Org's SB Signer u,u,u # Sign with private key in HSM host:~$ pesign -t "OpenSC Card (myorg-sb-signer)" \ -c "OpenSC Card (myorg-sb-signer):/CN=My Org's SB Signer" \ -s -i foo.unsigned.efi -o foo.efi امضا با استفاده از HSM به‌همراه موتور OpenSSL اگر در HSM خود یک جفت‌کلید دارید اما نمی‌توانید مستقیماً به آن دسترسی پیدا کنید، ولی به ابزار خط فرمان openssl که با کتابخانه‌های ارائه‌دهنده‌تان پیکربندی شده دسترسی دارید، همچنان می‌توانید از pesign برای امضای باینری‌های PE خود استفاده کنید: # Import the public certificate into the NSS Database host:~$ certutil -d /etc/pki/pesign -A -n myorg-sb-signer \ -t ,,u -i myorg-sb-signer.cer # Export the PKCS-7 SignedAttributes section pesign generates host:~$ pesign -i foo.unsigned.efi -E foo.sattrs.bin # Generate a signature using OpenSSL host:~$ openssl dgst -sha256 -sign $KEY \ --keyform ENGINE --engine $ENGINEID \ -out foo.sattrs.sig foo.sattrs.bin # Import the signature with the original SignedAttributes into # the PE binary host:~$ pesign -c myorg-sb-signer \ -R foo.sattrs.sig -I foo.sattrs.bin \ -i foo.unsigned.efi -o foo.efi استانداردها (STANDARDS) B. Kaliski, PKCS #7: Cryptographic Message Syntax v1.5, Internet Engineering Task Force, RFC 2315, https://tools.ietf.org/html/rfc2315 , March 1998. K. Moriarty, M. Nyström, S. Parkinson, A. Rusch, and M. Scott, PKCS #12: Personal Information Exchange Syntax v1.1, Internet Engineering Task Force, RFC 7292, https://tools.ietf.org/html/rfc7292 , July 2014. PKCS11 Technical Committee, PKCS#11: Cryptographic Token Interface Standard, OASIS, https://www.cryptsoft.com/pkcs11doc. M. Nyström, PKCS #15—A Cryptographic-Token Information Format Standard, RSA Laboratories, https://www.usenix.org/legacy/events/smartcard99/full_papers/nystrom/nystrom.pdf , 1999. Portable Executable, Microsoft, https://docs.microsoft.com/en-us/windows/win32/debug/pe-format , August 26, 2019. Windows Authenticode Portable Executable Signature Format, Microsoft, https://web.archive.org/web/20130518222430/http://download.microsoft.com/download/9/c/5/9c5b2167-8017-4bae-9fde-d599bac8184a/Authenticode_PE.docx , March 21, 2008. Federal Information Processing Standard 140-2, United States Department of Commerce, FIPS 140-2, http://csrc.nist.gov/publications/PubsFIPS.html , National Institute of Standards and Technology. همچنین ببینید (SEE ALSO) certutil(1), efikeygen(1), modutil(1), opensc-tool(1), openssl(1ssl), openssl-dgst(1ssl), pesign-client(1), pk12util(1), pkcs15-init(1), نویسندگان (AUTHORS) Peter Jones Vikas Charak (مثال‌ها) Linux June 4, 2020 Linux