שימוש במפתח Cloud HSM עם pkcs11-tool

במדריך הזה מופיעות דוגמאות לפקודות pkcs11-tool לשימוש במפתח Cloud HSM ב-Debian 11 (Bullseye) באמצעות הספרייה PKCS #11. יכול להיות שיהיה צורך לשנות את הפקודות שמופיעות בהוראות האלה בהתאם למערכת ההפעלה או להפצת לינוקס שלכם.

לפני שמתחילים

לפני שממשיכים, צריך לבצע את השלבים במאמר שימוש במפתח Cloud HSM עם OpenSSL.

שימוש בהצפנה ובפענוח סימטריים

בקטעים הבאים מוסבר איך להצפין ולפענח באמצעות מפתח הצפנה סימטרי, OpenSSL ו-pkcs11-tool.

דרישות מוקדמות

  1. יוצרים מפתח סימטרי גולמי להצפנה ב-Cloud HSM. כדי ליצור מפתח Cloud HSM, מגדירים את רמת ההגנה ל-HSM בזמן יצירת מפתח חדש.

  2. חשוב לרשום את אלגוריתם ההצפנה הסימטרי הגולמי שבוחרים עבור המפתח. לכל אלגוריתם יש דרישות משלו לגבי ריפוד, וקטורי אתחול ונתונים מאומתים נוספים.

  3. יוצרים קובץ קלט שמכיל את הנתונים שרוצים להצפין.

הצפנה

כדי להצפין קובץ טקסט, מריצים את הפקודה הבאה:

pkcs11-tool --module PATH_TO_LIBKMSP11_SO --encrypt \
    --mechanism MECHANISM \
    --slot 0 \
    --label HSM_KEY_NAME \
    --iv INITIALIZATION_VECTOR \
    --input-file INPUT_TEXT_FILE_PATH \
    --output-file ENCRYPTED_TEXT_FILE_PATH

מחליפים את מה שכתוב בשדות הבאים:

  • PATH_TO_LIBKMSP11_SO: הנתיב למודול PKCS#11, לדוגמה: /usr/local/lib/libkmsp11.so.
  • MECHANISM: המנגנון שבו יש להשתמש, על סמך אלגוריתם המפתח. לדוגמה, AES-CBC-PAD.
  • HSM_KEY_NAME: השם של מפתח Cloud HSM שבו רוצים להשתמש להצפנה.
  • INITIALIZATION_VECTOR: הערך של וקטור האתחול שישמש כחלק מההצפנה.
  • INPUT_TEXT_FILE_PATH: הנתיב לקובץ הקלט שרוצים להצפין.
  • ENCRYPTED_TEXT_FILE_PATH: הנתיב שבו רוצים לשמור את קובץ הטקסט המוצפן.

פענוח

כדי לפענח קובץ טקסט, מריצים את הפקודה הבאה:

pkcs11-tool --module PATH_TO_LIBKMSP11_SO --decrypt \
    --mechanism MECHANISM \
    --slot 0 \
    --label HSM_KEY_NAME \
    --iv INITIALIZATION_VECTOR \
    --input-file ENCRYPTED_TEXT_FILE_PATH \
    --output-file DECRYPTED_TEXT_FILE_PATH

מחליפים את מה שכתוב בשדות הבאים:

  • PATH_TO_LIBKMSP11_SO: הנתיב למודול PKCS#11. לדוגמה: /usr/local/lib/libkmsp11.so.
  • MECHANISM: המנגנון שבו יש להשתמש, על סמך אלגוריתם המפתח. לדוגמה, ECDSA.
  • HSM_KEY_NAME: השם של מפתח Cloud HSM ששימש להצפנת הקובץ שרוצים לפענח.
  • INITIALIZATION_VECTOR: הערך של וקטור האתחול שישמש כחלק מההצפנה.
  • ENCRYPTED_TEXT_FILE_PATH: הנתיב לקובץ שרוצים לפענח.
  • DECRYPTED_TEXT_FILE_PATH: הנתיב שבו רוצים לשמור את קובץ הטקסט המפוענח.

שימוש בהצפנה ובפענוח אסימטריים

בקטעים הבאים מוסבר איך להצפין ולפענח באמצעות מפתח הצפנה אסימטרי, OpenSSL ו-pkcs11-tool.

דרישות מוקדמות

  1. יוצרים מפתח פענוח אסימטרי ב-Cloud HSM ומורידים את המפתח הציבורי שלו.

  2. יוצרים קובץ קלט עם טקסט.

    echo Hello World! >> input.txt
    

הצפנה

כדי להצפין קובץ טקסט, מריצים את הפקודה הבאה:

openssl pkeyutl -in INPUT_TEXT_FILE_PATH -encrypt -pubin \
    -inkey PUBLIC_KEY \
    -pkeyopt rsa_padding_mode:oaep \
    -pkeyopt rsa_oaep_md:sha256 \
    -pkeyopt rsa_mgf1_md:sha256 > ENCRYPTED_TEXT_FILE_PATH

מחליפים את מה שכתוב בשדות הבאים:

  • INPUT_TEXT_FILE_PATH: הנתיב לקובץ הקלט שרוצים להצפין.
  • PUBLIC_KEY: הנתיב למפתח הציבורי.
  • ENCRYPTED_TEXT_FILE_PATH: הנתיב שבו רוצים לשמור את קובץ הטקסט המוצפן.

פענוח

כדי לפענח קובץ טקסט, מריצים את הפקודה הבאה:

pkcs11-tool --module PATH_TO_LIBKMSP11_SO \
    --decrypt --mechanism RSA-PKCS-OAEP --slot 0 --hash-algorithm=sha256 \
    --mgf MGF1-SHA256 --label HSM_KEY_NAME --type privkey \
    -i ENCRYPTED_TEXT_FILE_PATH \
    -o OUTPUT_TEXT_FILE_PATH

מחליפים את מה שכתוב בשדות הבאים:

  • PATH_TO_LIBKMSP11_SO: הנתיב למודול PKCS#11 (path/to/libkmsp11.so).
  • HSM_KEY_NAME: השם של מפתח Cloud HSM שתואם למפתח הציבורי ששימש להצפנת קובץ הטקסט.
  • ENCRYPTED_TEXT_FILE_PATH: הנתיב לקובץ שרוצים לפענח.
  • OUTPUT_TEXT_FILE_PATH: הנתיב שבו רוצים לשמור את הפלט המפוענח.

חתימה ואימות

בקטעים הבאים מוסבר איך לחתום ולאמת באמצעות מפתח חתימה אסימטרי וכלי pkcs11.

דרישות מוקדמות

  1. יוצרים מפתח חתימה אסימטרי ב-Cloud HSM.

  2. יוצרים קובץ עם נתוני הקלט שעברו גיבוב ורוצים לחתום עליהם.

לחתימה

כדי לחתום על קובץ טקסט, מריצים את הפקודה הבאה:

pkcs11-tool --module PATH_TO_LIBKMSP11_SO --sign \
   --mechanism MECHANISM \
   --slot 0 \
   --label HSM_KEY_NAME \
   -i INPUT_TEXT_FILE_PATH \
   -o OUTPUT_SIGNATURE_FILE_PATH

מחליפים את מה שכתוב בשדות הבאים:

  • PATH_TO_LIBKMSP11_SO: הנתיב למודול PKCS#11, לדוגמה path/to/libkmsp11.so.
  • HSM_KEY_NAME: השם של מפתח Cloud HSM שבו רוצים להשתמש לחתימה.
  • MECHANISM: המנגנון שבו יש להשתמש, על סמך אלגוריתם המפתח. לדוגמה, ECDSA.
  • INPUT_TEXT_FILE_PATH: הנתיב לקובץ הקלט שרוצים לחתום עליו.
  • OUTPUT_SIGNATURE_FILE_PATH: הנתיב שבו רוצים לשמור את קובץ החתימה.

אימות

כדי לאמת קובץ חתימה, מריצים את הפקודה הבאה:

pkcs11-tool --module PATH_TO_LIBKMSP11_SO --verify \
   --mechanism MECHANISM \
   --slot 0 \
   --label HSM_KEY_NAME \
   -i INPUT_TEXT_FILE_PATH \
   --signature-file SIGNATURE_FILE_PATH

מחליפים את מה שכתוב בשדות הבאים:

  • PATH_TO_LIBKMSP11_SO: הנתיב למודול PKCS#11, לדוגמה path/to/libkmsp11.so.
  • HSM_KEY_NAME: השם של מפתח Cloud HSM ששימש ליצירת החתימה שרוצים לאמת.
  • MECHANISM: המנגנון שבו יש להשתמש, על סמך אלגוריתם המפתח. לדוגמה, ECDSA.
  • INPUT_TEXT_FILE_PATH: הנתיב לקובץ שנחתם בעבר.
  • SIGNATURE_FILE_PATH: הנתיב לקובץ החתימה.