אימות של תקינות הנתונים מקצה לקצה

בדף הזה נסביר איך להשתמש בשדות ב-Cloud Key Management Service API כדי לזהות ולמנוע שינויים לא מכוונים בנתונים בזמן שהם עוברים בין מערכות לקוח לבין Cloud KMS. ההנחיות האלה הן בנוסף לדרכים שבהן Google Cloud הנתונים שלכם מוגנים באופן אוטומטי כשהם במנוחה ובזמן העברה.

הגנה אוטומטית על נתונים

כל הנתונים ב- Google Cloud מוצפנים אוטומטית בזמן ההעברה ובמנוחה בתוךGoogle Cloud.

ב-Cloud KMS נעשים צעדים נוספים כדי להגן על מפתחות הצפנה במצב מנוחה. כל מפתח הצפנה מוצפן באמצעות מפתח קריפטוגרפי אחר שנקרא מפתח להצפנת מפתחות הצפנה (KEK). למידע נוסף על הטכניקה הזו, אפשר לעיין במאמר בנושא הצפנת מעטפה.

כל פעולה קריפטוגרפית ב-Cloud KMS כוללת בדיקות אוטומטיות של פגיעה בנתונים. אם מזוהה נזק, הפעולה מבוטלת ושגיאה מפורטת נרשמת ביומן.

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

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

חישוב ואימות של סכומי ביקורת

הבקשה והתגובה של כל פעולה קריפטוגרפית כוללות שדות של סכום ביקורת CRC32C, כמו plaintext_crc32c. אפשר לחשב את סכום הביקורת ולהשוות בין הערכים המחושבים והמוחזרים.

בשרת, Cloud Key Management Service API מגדיר שדות בוליאניים, כמו verified_plaintext_crc32c, לערך true כדי לציין שהוא קיבל את סכום הביקורת הרלוונטי, ומחזיר שגיאה INVALID_ARGUMENT אם סכום הביקורת לא תואם לערך שחושב על ידי השרת.

כשמחשבים ומבצעים השוואה של סכומי ביקורת, חשוב לזכור את ההנחיות הבאות:

  • חישוב סכומי ביקורת באמצעות קידוד בינארי, ברגע שהנתונים נשלחים או מתקבלים.
  • אל תאחסנו סכומי ביקורת של טקסט רגיל לא מוצפן אל Cloud Key Management Service API או ממנו. לדוגמה, אל תשמרו את התוכן הלא מוצפן של השדות EncryptRequest.plaintext_crc32c או DecryptResponse.plaintext_crc32c. כדי לשמור רשומה של סכום ביקורת, צריך לבצע סריאליזציה שלו יחד עם הנתונים הרלוונטיים ולהעביר את האובייקט המורכב ל-Cloud KMS להצפנה. כשמפענחים נתונים, אפשר לאמת את סכום הביקורת מול הערך הצפוי המחושב.
  • אם פעולת הפענוח מניבה סכומי ביקורת לא תואמים, כדאי לתכנן את האפליקציה כך שתנסה שוב את הפעולה מספר מוגבל של פעמים, במקרה של בעיות זמניות.
  • אם פעולת הצפנה מובילה לסיכומי ביקורת לא תואמים של הנתונים המוצפנים (הטקסט המוצפן), צריך לבטל את התוצאה המוצפנת ולנסות שוב.

לגבי בקשות הצפנה:

  • אם כוללים את שדה סכום הבדיקה בבקשה, השרת מגדיר שדה אימות קשור בתשובה לערך true כדי לציין שהוא קיבל את סכום הבדיקה וניסה לאמת את הערך שלו.

  • אם כוללים את שדה סכום הבדיקה אבל התגובה מגדירה את שדה האימות ל-false, השרת לא קיבל את שדה סכום הבדיקה, ויכול להיות שמידע אחר חסר בתגובה. כדאי לנסות לשלוח את הבקשה שוב מספר מוגבל של פעמים אם השגיאה היא זמנית.

  • אם סכום הביקורת התקבל אבל לא היה תואם, תוצג השגיאה INVALID_ARGUMENT. השגיאה כוללת את שם השדה ואת סכום הביקורת שלא תאם. לדוגמה:

    The checksum in field plaintext_crc32c did not match the data in field plaintext.
    

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

בבקשות פענוח, אפשר לחשב את סכום הביקורת ולהשוות אותו לערך של DecryptResponse.plaintext_crc32c בתגובה.

השדות הבאים של סכומי ביקורת נכללים בבקשות אל Cloud Key Management Service API ובתשובות ממנו.

שדה בבקשה שדה בתשובה
EncryptRequest.plaintext_crc32c EncryptResponse.verified_plaintext_crc32c
EncryptionRequest.additional_authenticated_data_crc32c EncryptionResponse.verified_additional_authenticated_data_crc32c
AsymmetricSignRequest.digest_crc32c AsymmetricSignResponse.verified_digest_crc32c
AsymmetricSignRequest.signature_crc32c AsymmetricSignResponse.verified_signature_crc32c
AsymmetricSignRequest.signature_crc32c AsymmetricSignResponse.verified_signature_crc32c
לא רלוונטי GetPublicKeyResponse.pem_crc32c
לא רלוונטי GetPublicKeyResponse.public_key.crc32c_checksum
לא רלוונטי DecryptResponse.plaintext_crc32c
MacSignRequest.data_crc32c MacSignResponse.verified_data_crc32c
MacVerifyRequest.data_crc32c MacVerifyResponse.verified_data_crc32c
MacVerifyRequest.mac_crc32c MacVerifyResponse.verified_mac_crc32c
לא רלוונטי MacVerifyResponse.verified_success_integrity
DecapsulateRequest.ciphertext_crc32c DecapsulateResponse.verified_ciphertext_crc32c
לא רלוונטי DecapsulateResponse.shared_secret_crc32c

אימות שמות המשאבים

התשובות ל-Encrypt,‏ GetPublicKey,‏ AsymmetricSign,‏ AsymmetricDecrypt,‏ Decapsulate,‏ MacSign ו-MacVerify כוללות את השדה name שמכיל את השם של אובייקט ה-API הרלוונטי של Cloud Key Management Service. אפשר להשוות את הערך בשדה name לערך שאתם מצפים לו, ולבטל תוצאות שלא תואמות.

תרשים של אימות נתונים

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

תרשים שמציג שדות שונים של אימות נתונים והפעולות שהם מתאימים להן

סיכום שדות אימות הנתונים

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

הצפנה

API אימות קלט בצד השרת אימות משאבים בצד הלקוח אימות הפלט בצד הלקוח אימות בצד הלקוח של קלט בצד השרת
EncryptRequest plaintext_crc32c, additional_authenticated_data_crc32c
EncryptResponse name ciphertext_crc32c verified_plaintext_crc32c, verified_additional_authenticated_data_crc32c

פענוח

API אימות קלט בצד השרת אימות משאבים בצד הלקוח אימות הפלט בצד הלקוח אימות בצד הלקוח של קלט בצד השרת
DecryptRequest ciphertext_crc32c, additional_authenticated_data_crc32c
DecryptResponse plaintext_crc32c

AsymmetricSign

API אימות קלט בצד השרת אימות משאבים בצד הלקוח אימות הפלט בצד הלקוח אימות בצד הלקוח של קלט בצד השרת
AsymmetricSignRequest digest_crc32c
AsymmetricSignResponse name signature_crc32c verified_digest_crc32c

AsymmetricDecrypt

API אימות קלט בצד השרת אימות משאבים בצד הלקוח אימות הפלט בצד הלקוח אימות בצד הלקוח של קלט בצד השרת
AsymmetricDecryptRequest ciphertext_crc32c
AsymmetricDecryptResponse plaintext_crc32c verified_ciphertext_crc32c

הסרת האנקפסולציה

API אימות קלט בצד השרת אימות משאבים בצד הלקוח אימות הפלט בצד הלקוח אימות בצד הלקוח של קלט בצד השרת
DecapsulateRequest ciphertext_crc32c
DecapsulateResponse shared_secret_crc32c verified_ciphertext_crc32c

PublicKey

API אימות קלט בצד השרת אימות משאבים בצד הלקוח אימות הפלט בצד הלקוח אימות בצד הלקוח של קלט בצד השרת
PublicKey name pem_crc32c, public_key.crc32c_checksum

MacSign

API אימות קלט בצד השרת אימות משאבים בצד הלקוח אימות הפלט בצד הלקוח אימות בצד הלקוח של קלט בצד השרת
MacSignRequest data_crc32c
MacSignResponse mac_crc32c verified_data_crc32c

MacVerify

API אימות קלט בצד השרת אימות משאבים בצד הלקוח אימות הפלט בצד הלקוח אימות בצד הלקוח של קלט בצד השרת
MacVerifyRequest data_crc32c mac_crc32c
MacVerifyResponse verified_data_crc32c verified_mac_crc32c verified_success_integrity

המאמרים הבאים