במאמר הזה מוסבר איך ליצור מפתח להצפנה אסימטרית באמצעות מפתח RSA ואיך להשתמש בו. אם רוצים להשתמש במפתחות אסימטריים ליצירה ולתיקוף של חתימות, אפשר לעיין במאמר בנושא יצירה ותיקוף של חתימות דיגיטליות. אם רוצים להשתמש במפתחות סימטריים להצפנה ולפענוח, אפשר לעיין במאמר בנושא הצפנה ופענוח של נתונים.
הצפנה אסימטרית משתמשת בחלק של המפתח הציבורי במפתח האסימטרי, ופענוח משתמש בחלק של המפתח הפרטי במפתח. Cloud Key Management Service מספק פונקציונליות לאחזור המפתח הציבורי ופונקציונליות לפענוח טקסט מוצפן שהוצפן באמצעות המפתח הציבורי. Cloud KMS לא מאפשר גישה ישירה למפתח הפרטי.
לפני שמתחילים
בנושא הזה מופיעות דוגמאות להרצה בשורת הפקודה. כדי לפשט את השימוש בדוגמאות, מומלץ להשתמש ב-Cloud Shell. בדוגמה להצפנה נעשה שימוש ב-OpenSSL, שמותקן מראש ב-Cloud Shell.
יוצרים מפתח אסימטרי עם מטרת המפתח
ASYMMETRIC_DECRYPT. כדי לראות אילו אלגוריתמים נתמכים למטרת המפתחASYMMETRIC_DECRYPT, אפשר לעיין במאמר בנושא אלגוריתמים להצפנה אסימטרית. אי אפשר לבצע את התהליך הזה עם מפתח שהמטרה שלו היאASYMMETRIC_SIGN.אם אתם מתכוונים להשתמש בשורת הפקודה, תצטרכו להתקין את OpenSSL אם הוא עדיין לא מותקן אצלכם. אם אתם משתמשים ב-Cloud Shell, OpenSSL כבר מותקן.
- משתמשי macOS: הגרסה של OpenSSL שמותקנת ב-macOS לא תומכת בדגלים שמשמשים לפענוח נתונים בנושא הזה. כדי לבצע את השלבים האלה ב-macOS, צריך להתקין את OpenSSL מ-Homebrew.
בקרת גישה למפתח
למשתמש או לשירות שיקבלו את המפתח הציבורי, צריך להעניק את ההרשאה
cloudkms.cryptoKeyVersions.viewPublicKeyבמפתח האסימטרי. המפתח הציבורי נדרש להצפנת נתונים.כדי שמשתמש או שירות יוכלו לפענח נתונים שהוצפנו באמצעות המפתח הציבורי, צריך להעניק את ההרשאה
cloudkms.cryptoKeyVersions.useToDecryptלמפתח האסימטרי.
מידע על הרשאות ותפקידים ב-Cloud KMS זמין במאמר הרשאות ותפקידים.
הצפנת נתונים
כדי להצפין נתונים באמצעות מפתח הצפנה אסימטרי, מאחזרים את המפתח הציבורי ומשתמשים בו להצפנת הנתונים.
gcloud
כדי להשתמש בדוגמה הזו, צריך להתקין את OpenSSL במערכת המקומית.
הורדת מפתח ציבורי
מורידים את המפתח הציבורי:
gcloud kms keys versions get-public-key key-version \
--key key \
--keyring key-ring \
--location location \
--output-file public-key-path
מחליפים את key-version בגרסת המפתח שכוללת את המפתח הציבורי. מחליפים את key בשם המפתח. מחליפים את key-ring בשם של אוסף המפתחות שבו נמצא המפתח. מחליפים את location במיקום ב-Cloud KMS של אוסף המפתחות. מחליפים את public-key-path במיקום שבו רוצים לשמור את המפתח הציבורי במערכת המקומית.
הצפנת נתונים
מצפינים את הנתונים באמצעות המפתח הציבורי שהורדתם ושומרים את הפלט בקובץ:
openssl pkeyutl -in cleartext-data-input-file \
-encrypt \
-pubin \
-inkey public-key-path \
-pkeyopt rsa_padding_mode:oaep \
-pkeyopt rsa_oaep_md:sha256 \
-pkeyopt rsa_mgf1_md:sha256 \
> encrypted-data-output-file
מחליפים את cleartext-data-input-file בנתיב ובשם הקובץ שרוצים להצפין.
מחליפים את public-key-path בנתיב ובשם הקובץ שבו הורדתם את המפתח הציבורי.
מחליפים את encrypted-data-output-file בנתיב ובשם הקובץ שבו רוצים לשמור את הנתונים המוצפנים.
C#
כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח בשפת C# ולהתקין את ה-SDK של Cloud KMS C# .
Go
כדי להשתמש ב-Cloud KMS בשורת הפקודה, קודם צריך להתקין את הגרסה האחרונה של Google Cloud CLI או לשדרג אליה.
Java
כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח ב-Java ולהתקין את Cloud KMS Java SDK.
Node.js
כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח של Node.js ולהתקין את Cloud KMS Node.js SDK.
PHP
כדי להריץ את הקוד הזה, קודם צריך לקרוא על שימוש ב-PHP ב- Cloud de Confiance ולהתקין את Cloud KMS PHP SDK.
Python
כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח של Python ולהתקין את Cloud KMS Python SDK.
Ruby
כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח של Ruby ולהתקין את Cloud KMS Ruby SDK.
פענוח נתונים
משתמשים ב-Cloud KMS כדי לבצע את הפענוח.
gcloud
כדי להשתמש ב-Cloud KMS בשורת הפקודה, קודם צריך להתקין את הגרסה האחרונה של Google Cloud CLI או לשדרג אליה.
gcloud kms asymmetric-decrypt \
--version key-version \
--key key \
--keyring key-ring \
--location location \
--ciphertext-file file-path-with-encrypted-data \
--plaintext-file file-path-to-store-plaintext
מחליפים את key-version בגרסת המפתח, או משמיטים את הדגל --version כדי לזהות את הגרסה באופן אוטומטי. מחליפים את key בשם של המפתח שרוצים להשתמש בו לפענוח. מחליפים את key-ring בשם של אוסף המפתחות שבו המפתח ימוקם. מחליפים את הערך location במיקום של אוסף המפתחות ב-Cloud KMS. מחליפים את file-path-with-encrypted-data ואת file-path-to-store-plaintext בנתיבים של הקבצים המקומיים לקריאת הנתונים המוצפנים ולשמירת הפלט המפוענח.
כדי לקבל מידע על כל הדגלים והערכים האפשריים, מריצים את הפקודה עם הדגל --help.
כדי להציג את התוכן של הקובץ המפוענח, פותחים אותו בעורך או במסוף. הנה דוגמה שמציגה את תוכן הקובץ באמצעות הפקודה cat:
cat ./my-file.txt
C#
כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח בשפת C# ולהתקין את ה-SDK של Cloud KMS C# .
Go
כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח של Go ולהתקין את Cloud KMS Go SDK.
Java
כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח ב-Java ולהתקין את Cloud KMS Java SDK.
Node.js
כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח של Node.js ולהתקין את Cloud KMS Node.js SDK.
PHP
כדי להריץ את הקוד הזה, קודם צריך לקרוא על שימוש ב-PHP ב- Cloud de Confiance ולהתקין את Cloud KMS PHP SDK.
Python
כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח של Python ולהתקין את Cloud KMS Python SDK.
Ruby
כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח של Ruby ולהתקין את Cloud KMS Ruby SDK.
API
בדוגמאות האלה נעשה שימוש ב-curl כלקוח HTTP כדי להדגים את השימוש ב-API. מידע נוסף על בקרת גישה זמין במאמר גישה ל-Cloud KMS API.
משתמשים בשיטה
CryptoKeyVersions.asymmetricDecrypt.
פתרון בעיות
incorrect key purpose: ASYMMETRIC_SIGN
אפשר לפענח נתונים רק באמצעות מפתח עם מטרת מפתח ASYMMETRIC_DECRYPT.
invalid parameter כשמבטלים את ההצפנה ב-macOS
הגרסה של OpenSSL שמותקנת ב-macOS לא תומכת בדגלים שמשמשים לפענוח נתונים בנושא הזה. כדי לבצע את השלבים האלה ב-macOS, צריך להתקין את OpenSSL מ-Homebrew.
data too large for key size
גודל המטען הייעודי המקסימלי לפענוח RSA תלוי בגודל המפתח ובאלגוריתם הריפוד. כל פורמטי ההצפנה של RSA שבהם נעשה שימוש ב-Cloud KMS משתמשים ב-OAEP, שמתוקנן ב-RFC 2437. לעיון מהיר, האלגוריתמים הבאים תומכים בגדלים המקסימליים הבאים של מטען ייעודי (maxMLen, בבייטים):
| אלגוריתם | פרמטרים | אורך הודעה מקסימלי |
|---|---|---|
| RSA_DECRYPT_OAEP_2048_SHA256 | k = 256; hLen = 32; | maxMLen = 190 |
| RSA_DECRYPT_OAEP_3072_SHA256 | k = 384; hLen = 32; | maxMLen = 318 |
| RSA_DECRYPT_OAEP_4096_SHA256 | k = 512; hLen = 32; | maxMLen = 446 |
| RSA_DECRYPT_OAEP_4096_SHA512 | k = 512; hLen = 64; | maxMLen = 382 |
לא מומלץ להשתמש בהצפנה אסימטרית להודעות באורכים שונים, שיכול להיות שהן גדולות מהמגבלות האלה. במקום זאת, כדאי להשתמש בהצפנה היברידית. Tink היא ספרייה קריפטוגרפית שמשתמשת בגישה הזו.