בדף הזה נסביר איך להשתמש בשדות ב-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 |
המאמרים הבאים
- מידע נוסף על הצפנה סימטרית ואסימטרית
- מידע נוסף על הצפנת נתוני אפליקציות
- שימוש ביומני ביקורת של Cloud