PESIGN(1) General Commands Manual PESIGN(1)

pesign — ابزاری برای امضای برنامه‌های کاربردی UEFI

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]⟩

pesign یک ابزار خط فرمان برای مدیریت و دستکاری امضاها و خلاصه‌های رمزنگاری برنامه‌های کاربردی UEFI است.

file | file
فایل PE ورودی برای امضا کردن
file | file
فایل PE خروجی برای امضا کردن
|
بازنویسی فایل موجودِ مشخص‌شده با --out
directory | directory
استفاده از پایگاه‌داده NSS در directory (پیش‌فرض: /etc/pki/pesign)
token | token
استفاده از توکن NSS به نام token
nickname | nickname
استفاده از گواهی با نام مستعار nickname در پایگاه‌داده NSS
number | number
شماره امضا، با شروع از اندیس 0، برای استفاده با --remove-signature، --export-signature، یا --show-signature (پیش‌فرض: 0)
file | file
وارد کردن امضای Authenticode از file
file | file
صادر کردن امضای Authenticode به file
file | file
وارد کردن بخش SignedAttributes در PKCS-7 (بدون هیچ امضایی) از file
file | file
صادر کردن بخش SignedAttributes در PKCS-7 (بدون هیچ امضایی) به file
file | file
وارد کردن خلاصه (digest) امضا از file
file | file
صادر کردن کلید عمومی از پایگاه‌داده NSS مشخص‌شده با --token و --certificate به file
file | file
صادر کردن گواهی از پایگاه‌داده NSS مشخص‌شده با --token و --certificate به file
|
هنگام صادر کردن گواهی‌ها، آن‌ها در قالب ascii-armor کدگذاری شوند
|
فهرست کردن امضاها
|
نمایش اطلاعات درباره امضاها
|
نمایش اطلاعات بیشتر و با جزئیات (حالت پرگو)
|
ایجاد یک امضای جدید
|
اجرا به صورت یک دیمن (daemon)
|
هنگام تبدیل به دیمن فرآیند فرعی (fork) ایجاد نشود (دیمن در پیش‌زمینه اجرا می‌شود)
|
حذف امضا
|
نمایش هش Authenticode فایل باینری
digest | digest
استفاده از digest رمزنگاری به همراه --hash (استفاده از help برای فهرست کردن گزینه‌ها) (پیش‌فرض: sha256)
| | |
تکمیل کردن یا نکردن (Padding) فایل باینری بر اساس قوانین PE 9.3 پیش از امضا یا محاسبه هش (پیش‌فرض: --padding)

پدینگ یا تکمیل‌سازی (Padding) حتی برای باینری‌هایی که پیش از مشخصات فعلی PE ایجاد شده‌اند توصیه می‌شود (و در بسیاری از شرایط الزامی است)، و از نسخه pesign 113 به بعد به طور پیش‌فرض فعال است.

اگر یک فایل گواهی و یک فایل کلید خصوصی دارید، مراحل زیر می‌توانند برای امضای یک ایمیج 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 شما یک کتابخانه 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 <enter>' to abort, or <enter> to continue: <type enter here>

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)": <type the PIN here>
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 که با کتابخانه‌های ارائه‌دهنده‌تان پیکربندی شده دسترسی دارید، همچنان می‌توانید از 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

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.

certutil(1), efikeygen(1), modutil(1), opensc-tool(1), openssl(1ssl), openssl-dgst(1ssl), pesign-client(1), pk12util(1), pkcs15-init(1),

Peter Jones Vikas Charak (مثال‌ها)

June 4, 2020 Linux