חתימה ואימות של הנתונים

חתימות דיגיטליות משמשות כדי להבטיח את התקינות והאותנטיות של הנתונים. במאמר הזה מוסבר איך משתמשים ב-CLI של gdcloud כדי לחתום על נתונים ולאמת חתימות באמצעות מפתחות אסימטריים שמנוהלים על ידי Key Management System‏ (KMS).

הדף הזה מיועד לקהלים בקבוצת מפעילים של אפליקציות, כמו צוותי DevOps, שמבצעים פעולות של ניהול מפתחות ב-Google Distributed Cloud‏ (GDC) עם בידוד פיזי. מידע נוסף מופיע במאמרי העזרה בנושא קהלים ב-GDC עם פער אבטחה.

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

כדי לחתום על נתונים ולאמת אותם באמצעות מפתחות, צריך לבקש את ההרשאות הנדרשות, להכין את הסביבה וליצור מפתח חתימה אם עדיין אין לכם כזה.

שליחת בקשה לתפקידי IAM

פנו לאדמין של IAM בארגון כדי להקצות לכם את התפקיד הבא במרחב השמות של הפרויקט:

  • ‫KMS Developer (kms-developer): הצגת מפתחות וביצוע פעולות קריפטוגרפיות כמו הצפנה, פענוח, חתימה ואימות של נתונים בפרויקט.

הכנת הסביבה

  1. מתקינים ומפעילים את CLI של gcloud, אם עוד לא עשיתם זאת.

  2. מבצעים אימות ל-GDC באמצעות ה-CLI של gdcloud. התהליך הזה מחייב את אישור רשות האישורים (CA) של הקונסולה של הארגון:

    1. מורידים את אישור ה-CA:

      echo -n | openssl s_client -showcerts -connect CONSOLE_URL:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > CA_CERT_PATH
      

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

      • ‫CONSOLE_URL: כתובת ה-URL של המסוף של הארגון (למשל console.org-1.zone1.google.gdch.test)
      • ‫CA_CERT_PATH: הנתיב המלא שבו רוצים לשמור את קובץ אישור ה-CA (לדוגמה, /tmp/my-org-ca.crt)
    2. נכנסים באמצעות אישור ה-CA שהורד:

      gdcloud auth login --login-config-cert=CA_CERT_PATH
      

מוודאים שיש מפתח חתימה

כדי לחתום על נתונים ולאמת אותם, צריך להשתמש במפתח חתימה. כדי ליצור מפתח ולאמת אותו צריך הרשאות נפרדות ב-IAM, כמו שמפורט בדפים המקושרים.

נתוני חתימה

כדי לחתום על נתונים, משתמשים בפקודה gdcloud kms keys asymmetric-sign. הפקודה הזו יוצרת חתימה דיגיטלית של קובץ קלט באמצעות מפתח חתימה, ושומרת את החתימה בקידוד base64:

  gdcloud kms keys asymmetric-sign \
  namespaces/NAMESPACE/signingKeys/KEY_NAME \
  --input-file=INPUT_PATH \
  --signature-file=SIGNATURE_FILE

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

  • ‫NAMESPACE: מרחב השמות של הפרויקט לדוגמה: kms-test1
  • ‫KEY_NAME: השם של המפתח שמשמש לחתימה לדוגמה: key-1
  • ‫INPUT_PATH: הנתיב של קובץ הקלט שרוצים לחתום עליו
  • ‫SIGNATURE_FILE: הנתיב של קובץ הפלט לשמירת החתימה בקידוד base64

אחרי שמריצים את הפקודה, רואים קובץ פלט שצוין בדגל --signature-file ומכיל את החתימה בקידוד base64.

אימות הנתונים

אחרי שחותמים על הנתונים, מאמתים את החתימה הדיגיטלית בפורמט base64 באמצעות הפקודה gdcloud kms keys asymmetric-verify. הפקודה הזו בודקת אם החתימה הדיגיטלית שמקודדת ב-Base64 שמתקבלת אחרי שמריצים את הפקודה gdcloud kms keys asymmetric-sign היא חוקית:

gdcloud kms keys asymmetric-verify \
namespaces/NAMESPACE/signingKeys/KEY_NAME \
  --input-file=INPUT_PATH \
  --signature-file=SIGNATURE_FILE

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

  • ‫NAMESPACE: מרחב השמות של הפרויקט לדוגמה: kms-test1
  • ‫KEY_NAME: השם של המפתח שמשמש לחתימה ‒ לדוגמה: key-1
  • ‫INPUT_PATH: הנתיב של קובץ הקלט המקורי שנחתם
  • ‫SIGNATURE_FILE: הנתיב של הקובץ שמכיל את החתימה בקידוד base64 לאימות

אחרי שמריצים את הפקודה, אם היא מצליחה, הפלט Verification OK מוצג. אם התגובה נכשלה, תראו את פלט הכישלון Verification Failure.