Assured Open Source Software מספקת לכם חבילות, מטא-נתונים של חבילות וסקריפטים של כלי עזר. כל חבילת Assured OSS חתומה באמצעות אישור נפרד שהונפק על ידי Google, שמשתמש באלגוריתם ECDSA P256 ליצירת מפתחות. כל מטא-נתונים של חבילה וכל סקריפט של כלי עזר נחתמים גם הם באמצעות אישור יחיד שהונפק על ידי Google, שמשתמש באלגוריתם ECDSA P256 ליצירת מפתחות. האישורים האלה מונפקים באמצעות Certificate Authority Service, ואפשר למצוא את אישור הבסיס הציבורי המתאים בקטגוריה של Cloud Storage.
המסמך הזה רלוונטי לתוכנית בחינם. מידע על חתימות בגרסת הפרימיום זמין במאמר בנושא גישה למטא-נתוני אבטחה ואימות חבילות.
סקירה כללית על חתימות
החתימות מאוחסנות בקובץ signature.zip. קובץ signature.zip מכיל את הקבצים הבאים:
digest.txt: בקובץ הזה מאוחסן אלגוריתם הגיבוב יחד עם תקציר החבילה בפורמט מקודד הקסדצימלי. מקרה לדוגמה:SHA-256:c5feab6f4de0878e94cf2a3074039b4f16a0c93a03501f047ee6eea29a8e33e0`.
signature.txt: בקובץ הזה מאוחסן אלגוריתם החתימה יחד עם החתימה בקידוד הקסדצימלי. מקרה לדוגמה:ECDSAP256_DER:30450220585d2a01f20de98dfe6cfab2c01a8f11787dbafbc6541304d23cc582e61be016022100f05a19f5ce473144579dfefc47905fd650584a1c7a31bd9d5bf93ecce739a7cb`
cert.pem: הקובץ הזה מאחסן את האישור הציבורי.
certChain.pem: בקובץ הזה מאוחסנת שרשרת האישורים של האישור הציבורי.
אימות חתימות
אפשר לאמת חתימות באחת מהדרכים הבאות:
- הכלי aoss-verifier
- ידנית
- תסריט אימות
אימות חתימות באמצעות הכלי aoss-verifier
כדי לאמת את האותנטיות והשלמות של חבילות תוכנה בקוד פתוח, צריך להתקין את הכלי aoss-verifier.
כדי לאמת חבילה, מעבירים את הערכים LANGUAGE, PACKAGE_ID ו-VERSION ואת PATH_TO_DATA_FILE שרוצים לאמת באמצעות הדגלים
--language,--package_id,--versionו---artifact_path.aoss-verifier verify-package \ --language LANGUAGE \ --package_id PACKAGE_ID \ --version VERSION \ --artifact_path ARTIFACT_PATHמחליפים את מה שכתוב בשדות הבאים:
- LANGUAGE: שפת החבילה. הערך חייב להיות באותיות קטנות.
- PACKAGE_ID: ב-Java, הפורמט הוא groupId:artifactId. ב-Python, הפורמט הוא packageName. הערך חייב להיות באותיות קטנות.
- VERSION: הגרסה של החבילה.
- ARTIFACT_PATH: הנתיב לקובץ הנתונים בספרייה המקומית שרוצים לאמת. משתמשים בסיומות הבאות של שמות קבצים:
- סיומת הקובץ
jarלחבילת Java - סיומת הקובץ
whlלחבילת Python
- סיומת הקובץ
אימות חתימות באופן ידני
כדי לאמת את החתימות באופן ידני:
מתקינים את Google Cloud CLI ואת תוכנת OpenSSL, גרסה 3.0.1 ואילך.
מאמתים את ה-digest.
מזהים את אלגוריתם הגיבוב. הקובץ
digest.txtמכיל את אלגוריתם הגיבוב שמשמש לחישוב התמצית. מזהים את אלגוריתם הגיבוב באמצעות הפקודה הבאה:cut -d ':' -f1 digest.txtמוודאים שהפלט הוא
SHA256.חישוב תקציר של קובץ הנתונים. אפשר לחשב את הגיבוב של קובץ הנתונים באמצעות כלים שונים של שורת פקודה, בהתאם לאלגוריתם הגיבוב שבו נעשה שימוש. כדי ליצור את הגיבוב של קובצי נתונים וסקריפטים של Assured OSS, צריך להשתמש באלגוריתם הגיבוב SHA-256.
ב-Linux, משתמשים בפקודה הבאה כדי לחשב את הגיבוב:
sha256sum PATH_TO_DATA_FILE | cut -d ' ' -f1 > datadigest.txtכדי לאמת חבילה, מחליפים את PATH_TO_DATA_FILE בנתיב לחבילה בספרייה המקומית לאימות חבילה.
כדי לאמת את המטא-נתונים, מחליפים את PATH_TO_DATA_FILE בשם קובץ המטא-נתונים. לדוגמה,
buildInfo.json, vexInfo.jsonאוhealthInfo.json.ב-macOS, משתמשים בפקודה הבאה:
shasum -a 256 PATH_TO_DATA_FILE | cut -d ' ' -f1 > datadigest.txtמחולצים את הגיבוב מהקובץ
digest.txtבאמצעות הפקודה הבאה:cut -d ':' -f2 digest.txt > signaturedigest.txtמשווים בין שני הגיבובים באמצעות הפקודה הבאה:
diff datadigest.txt signaturedigest.txtאם אין הבדל, לא תהיה פלט.
אימות החתימה
כדי לקבל מפתח ציבורי מ-
cert.pem, משתמשים בפקודה הבאה:openssl x509 -pubkey -noout -in cert.pem > pubkey.pemמחולצים את החתימה בפורמט בינארי באמצעות הפקודה הבאה (אם היא לא קיימת, צריך להתקין את הפקודה
xxd):cut -d ':' -f2 signature.txt | xxd -r -p > sig.sigמחלקים את התמצית בפורמט בינארי באמצעות הפקודה הבאה:
cut -d ':' -f2 digest.txt | xxd -r -p > digest.binמאמתים את החתימה באמצעות אחת מהפקודות הבאות:
אפשרות 1
openssl pkeyutl -in digest.bin -inkey pubkey.pem -pubin -verify -sigfile sig.sigהפקודה מחזירה את הפלט הבא:
Signature Verified Successfullyאפשרות 2
openssl dgst -sha256 -verify pubkey.pem -signature sig.sig PATH_TO_DATA_FILEמחליפים את PATH_TO_DATA_FILE בנתיב לקובץ הנתונים בספרייה המקומית.
הפקודה מחזירה את הפלט הבא:
Verified OK
אימות האישור
כדי לאמת את האישור, מריצים את הפקודה הבאה:
openssl verify -verbose -CAfile ca.crt -untrusted certChain.pem cert.pem
ca.certהוא אישור הבסיס שאפשר להוריד באמצעות הפקודה הזו:curl -o PATH_TO_LOCAL_STORE https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crtאם הפעולה מצליחה, מתקבל הפלט הבא:
cert.pem: OK
אימות חתימות באמצעות סקריפט
כדי להשתמש בסקריפט אימות לאימות חתימות, פועלים לפי השלבים הבאים:
מורידים את סקריפט האימות.
מגדירים אימות באמצעות Application Default Credentials (ADC).
מורידים את
signatureverification.sh, README.mdואתsignature.zipלסקריפט האימות באמצעות הפקודה הבאה:gcloud storage cp "gs://cloud-aoss/utils/signature-verification/v1.0" PATH_TO_LOCAL_STORE --recursiveמחליפים את PATH_TO_LOCAL_STORE בנתיב המקומי שבו רוצים להוריד את הקובץ.
אפשר גם לבצע אימות של סקריפט כלי עזר באמצעות סקריפט האימות.
כדי להריץ את הסקריפט:
מתקינים את Google Cloud CLI ואת תוכנת OpenSSL, גרסה 3.0.1 ואילך.
מבצעים אימות באמצעות חשבון השירות שיש לו הרשאה לגשת ל-Assured OSS.
נותנים את ההרשאות הנדרשות להרצת הסקריפט באמצעות הפקודה הבאה:
chmod +x signatureverification.shאם לא הורדתם את הקובץ
signature.zip, מריצים את הסקריפט באמצעות הפקודה הבאה:./signatureverification.sh --data_file_path PATH_TO_DATA_FILE \ --signature_url SIGNATURE_ZIP_URL \ --root_cert_url ROOT_CERT_URLמחליפים את מה שכתוב בשדות הבאים:
- PATH_TO_DATA_FILE: הנתיב לקובץ הנתונים בספרייה המקומית שרוצים לאמת
- SIGNATURE_ZIP_URL: כתובת ה-URL של קובץ ה-ZIP של החתימה
- ROOT_CERT_URL: כתובת ה-URL של אישור הבסיס הציבורי
פלט לדוגמה
הפלט הבא מציין שסקריפט האימות פעל בהצלחה.
Signature verification successful
Certificate verification successful