הצפנה של שכבת האפליקציה

ממשקי Standard Payments API תומכים ב-PGP או ב-JWE להצפנה של שכבות אפליקציות.

הצפנת PGP

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

כשמשתמשים ב-PGP להצפנת מטענים ייעודיים (payload), השותפים חייבים לתמוך:

  • הצפנה ופענוח של מטענים ייעודיים (payloads) באמצעות מפתחות PGP מרובים.
  • חתימה על מטענים ייעודיים (payloads) באמצעות מפתחות PGP מרובים.
  • אימות מטען ייעודי (payload) עם מספר חתימות, שכל אחת מהן יכולה לשמש כחתימה עם המפתח ש-Google מספקת.
  • פענוח של מטענים ייעודיים (payloads) בקידוד base64 שבטוחים לשימוש באינטרנט.

במפתחות ציבוריים מסוג PGP ל-Google צריך להיות מפתח משנה שמשמש להצפנה. מפתח המשנה מאפשר לבצע רוטציה עצמאית מהמפתח הראשי. מפתח המאסטר משמש לאימות הזהות. מפתחות פרטיים צריכים להיות מפתחות RSA של 2048 ביט (או יותר) שהתוקף שלהם פג תוך שנה עם משך חיים מקסימלי של שנתיים.

לפני התחלת הפיתוח, עליך להחליף מפתחות PGP עם Google. בשלב הזה, תיצרו זוג מפתחות PGP ציבורי-פרטי, תספקו ל-Google את המפתח הציבורי ותקבלו מ-Google מפתח ציבורי בחזרה. במהלך הפיתוח, תצטרכו להחליף רק מפתחות של ארגז חול שמשמשים לפיתוח ולבדיקה מחוץ לסביבת הייצור. לפני הבדיקה וההשקה בסביבת הייצור, תצטרכו לבצע החלפה נוספת של מפתחות ייצור.

יצירת מפתח PGP חדש

בהנחה שיש לכם קובץ בינארי של GPG בנתיב המערכת, אתם יכולים להשתמש בפקודת POSIX הבאה כדי ליצור זוג מפתחות חדש.

$ gpg --full-generate-key

כשמופיעה בקשה, צריך לבחור מפתח RSA עם אנטרופיה של 2048 ביט לפחות עם תפוגה של שנה-שנתיים. הפקודה הזו צריכה ליצור מפתח ראשי (שמסומן בתווית SC, ל-'S'igning ול 'C'ertificate Gen) וגם מפתח משנה (שמסומן בתווית E, ל-'E'ncryption).

הגדרת ספריית PGP

מתבצעת שליחה של מטענים ייעודיים

  1. במהלך החתימה, צריך להשתמש ב-SHA384 כאלגוריתם התקציר. אין להשתמש ב-SHA1 או ב-MD5
  2. במהלך ההצפנה, יש להשתמש ב-AES256 כאלגוריתם הסימטרי של ההצפנה. אין להשתמש ב-CAST5 או ב-IDEA
  3. כשמצפינים הודעות או חותמים עליהן, חשוב לבחור את מפתח המשנה למטרה המתאימה. להצפנה, צריך להשתמש במפתח CAN_SIGN לחתימה ובמפתח ENCRYPT_COMMS/ENCRYPT_STORAGE

מתקבלות מטענים ייעודיים (payloads)

  1. כשמאמתים מטען ייעודי (payload), חשוב לוודא שהספרייה תומכת באלגוריתמים מודרניים של גיבוב (hash) כמו SHA384. Google תתחיל להשתמש בו בכל המפתחות החדשים החל מ-14 במאי 2023.
  2. בזמן פענוח של מטען ייעודי (payload), חשוב לוודא שהספרייה תומכת באלגוריתמים מודרניים של הצפנה סימטרית, כמו AES256. Google תתחיל להשתמש בו בכל המפתחות החדשים החל מ-14 במאי 2023.

דוגמה להצפנת מטען ייעודי (payload) של GPG

הפקודה הבאה היא דוגמה לאופן שבו בוחרים אפשרויות מאובטחות כשמשתמשים ב-GPG. צפוי שהפעולה הזו תתבצע בסביבה מהימנה שבה לאנשים אין גישה למפתחות הפרטיים או לקובצי הקלט הרגישים.

gpg --output signed-and-encrypted.pgp \
  --sign --digest-algo SHA384 \
  --encrypt --cipher-algo AES256 \
  --armor \
  --recipient {key_id} \
  input.txt

GPG יבחר באופן אוטומטי את המפתח המתאים מהחבילה לכל פעולה שתבקשו לבצע.

הצפנת JWE עם חתימת JWS

הצפנת JSON Web (JWE) היא תקן שמוגדר על ידי rfc7516 להצפנת תוכן ברמת האפליקציה. חתימת רשת JSON (JWS) היא תקן שמוגדר על ידי rfc7515 לחתימה על תוכן ברמת האפליקציה.

הבקשות והתשובות יהיו אסימוני JWE שהוצפנו באמצעות הצפנה אסימטרית (מפתח ציבורי) עם האפשרות 'compact Serialization'. אסימון ה-JWE יכיל את המטען הייעודי (payload) החתום כאסימון JWS. JWS משתמש גם במפתחות אסימטריים, מפתח פרטי לחתימה ומפתח ציבורי לאימות.

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

בעת שימוש ב-JWE, שותפים חייבים לתמוך באפשרויות הבאות:

  • עריכה טורית קומפקטית.
  • פענוח מטענים ייעודיים ממפתחות JWE מרובים.
  • האלגוריתם RSA-OAEP, RSA-OAEP-256 או ECDH-ES לניהול מפתחות.
  • האלגוריתם A256GCM, A128GCM , A128CBC-HS256 או A256CBC-HS512 להצפנת תוכן.
    • השדה הזה מאוכלס בכותרת enc.
  • הכותרת kid לזיהוי מפתח ההצפנה הציבורי.
  • מטענים ייעודיים של הודעות שמשתמשים בהצפנת JWE חייבים להשתמש בסוג התוכן application/jose; charset=utf-8.

כשמשתמשים ב-JWS, השותפים חייבים לתמוך באפשרויות הבאות:

  • עריכה טורית קומפקטית.
  • אימות מטענים ייעודיים מאחד ממפתחות JWS מרובים.
  • ליצירת חתימה: HS256, HS384, HS512, RS256, RS384, RS512, ES256, PS256, PS384 או PS512.
  • הכותרת kid לזיהוי מפתח החתימה הפרטי.

מחרוזות JWE/JWS יקודדו כמחרוזות UTF-8, והמטען הייעודיים (payloads) שלהן עשויים להיות בייטים שרירותיים.

המפתחות הפרטיים חייבים להיות מפתחות RSA/ECDH-ES שהתוקף שלהם פג תוך שנה, עם משך חיים מקסימלי של שנתיים. כל זהויות המפתח הפרטי צריכות להישאר תמיד בשרת של השותף, ולכן צריך לחשב את כל ערכי החתימה בשרת של השותף.

לפני תחילת הפיתוח, עליך להחליף מפתחות JWE ו-JWS עם Google. יש להחליף מפתחות בפורמט JWK, כפי שמוגדר ב-rfc7517. בשלב הזה, יוצרים זוג מפתחות ציבורי-פרטי, מספקים את המפתח הציבורי ל-Google ומקבלים מפתח ציבורי בחזרה מ-Google. במהלך הפיתוח, תצטרכו להחליף רק מפתחות של ארגז חול שמשמשים לפיתוח ולבדיקה מחוץ לסביבת הייצור. לפני הבדיקה וההשקה בסביבת הייצור, תצטרכו לבצע החלפה נוספת של מפתחות ייצור.