İstemci tarafı şifreleme (CSE), verilerinizin Drive sunucularına ulaşmadan önce şifrelenmesini sağlayarak verileriniz üzerinde kontrol sahibi olmanızı sağlar. Bu kılavuzda, Drive API'yi kullanarak CSE dosyalarını programatik olarak şifreleme ve yükleme, ayrıca indirme ve şifre çözme süreci açıklanmaktadır. Ayrıca, uygulamanızı test etme ve doğrulama için önerilen yaklaşımları da kapsar.
Başlamadan önce
Şifrelenmiş dosyaları yönetmeden önce aşağıdaki yapılacaklar listesini kullanarak Google Workspace alanınızı ayarlayın:
Alanınız için istemci tarafı şifrelemeyi (İTŞ) yapılandırın.
Kimlik sağlayıcınızı (IdP) ayarlayın.
Anahtar Erişim Kontrol Listesi Hizmetinizin (KACLS)
/wrap,/unwrap,/privilegedwrap,/privilegedunwrapve/digestuç noktalarını desteklediğini doğrulayın.Google Cloud Console'da proje oluşturun ve Drive API'yi etkinleştirin.
Kimlik doğrulama ve yetkilendirme
Drive API ve KACLS'nizle etkileşim kurmak için bir kimlik doğrulama yöntemi seçmeniz gerekir. Bu seçim, her iki hizmetle etkileşim kurma şeklinizi etkiler:
- Bireysel: Bireysel olarak kimlik doğrulaması yapmak için OAuth akışını kullanarak söz konusu kullanıcı adına işlem yapın. Standart
/wrapve/unwrapuç noktalarını kullanın ve söz konusu kullanıcı için Google yetkilendirme jetonunu sağlayın. - Yönetici: Alan genelinde yetki (DWD) ile hizmet hesabı kullanarak alandaki diğer kullanıcıların kimliğine bürünün. Google yetkilendirme jetonu olmadan
/privilegedwrapve/privilegedunwrapuç noktalarını kullanın.
Kimlik bilgileri oluşturma hakkında daha fazla bilgi için Erişim kimlik bilgileri oluşturma kılavuzuna bakın.
Alan IdP Kimlik Doğrulaması
IdP'nizle kimlik doğrulaması yapmak için bir OAuth istemci kimliği yapılandırmanız ve istemci gizli anahtarı dosyasını indirmeniz gerekir. Uygulamanız, KACLS'nize yapılan isteklerin kimliğini doğrulamak için IdP'nizden bir kimlik doğrulama jetonu almalıdır. Bu jeton, uygulamanızın Veri Şifreleme Anahtarı'na erişmesine izin vermek için gereklidir.
Kimlik bilgilerini güvenli bir şekilde işleme
Uygulamanız, Drive API ve IdP'nizde kimlik doğrulaması yapmak için hassas kimlik bilgilerini işliyor. Bunlardan bazıları:
- IdP'den alınan gizli materyal (ör. istemci gizli anahtarı dosyası)
- Google'a ait gizli materyaller (ör. service-account-private-key-file)
- Uygulama tarafından depolanan gizli materyaller (ör. kaydedilmiş kimlik bilgileri)
Bu kimlik bilgilerinin tamamının güvenli bir şekilde saklandığından emin olmanız gerekir.
Sınırlar ve kotalar
İstemci tarafında şifrelenmiş dosyalar, standart Drive sınırlarına ve kotalarına tabidir. Ortak Drive sınırları, genel dosya ve klasör sınırları ve kotanızı yönetme hakkında bilgi edinin. Ayrıca, içe aktarma aracınız, Anahtar Erişim Kontrol Listesi Hizmetiniz (KACLS) ve kimlik sağlayıcınızın (IdP) hız sınırlarını yönetmelidir.
Şifrelenmiş dosya yapısı
Drive, yükleme ve indirme işlemleri için aşağıdaki istemci tarafında şifrelenmiş dosya biçimini kullanır.
+-------------------+
| Magic header |
+-------------------+
| Encrypted Chunk 1 |
+-------------------+
| Encrypted Chunk 2 |
+-------------------+
| ... |
+-------------------+
| Encrypted Chunk N |
+-------------------+
Sihirli başlık
Sihirli başlık (dosya imzası veya sihirli sayı olarak da bilinir), biçimini benzersiz şekilde tanımlamak için dosyanın en başına yerleştirilen sabit bir bayt dizisidir. Dosya, 0x99 0x5E 0xCC 0x5E baytlarıyla başlamalıdır.
Şifrelenmiş parçalar
Dosya, 2 MiB'lik parçalara bölünmelidir. Her parça, Google Tink kitaplığının AES-GCM anahtar türüyle, İlişkili Verilerle Kimliği Doğrulanmış Şifreleme (AEAD) ilkel kullanılarak şifrelenir. İlişkili Veriler olarak parça dizini ve son parça işareti kullanılır. Drive API'yi kullanan ve bu spesifikasyona uygun bir kod örneği için açık kaynaklı demoya bakın.
Dosyaları şifreleme ve yükleme
Bir CSE dosyası yüklemek için uygulamanızın kimlik doğrulaması yapması, bir CSE jetonu istemesi, dosya içeriğini yerel olarak şifrelemesi, şifreleme anahtarını sarmalaması ve son olarak şifrelenmiş içeriği ve meta verileri Google Drive'a yüklemesi gerekir.
İTŞ jetonu edinme
Drive API Files:generateCseToken yöntemini çağırarak Google Drive'dan bir CSE jetonu isteyin. İsteğe fileId sorgu parametresini eklemediğinizden emin olun. Dosyayı belirli bir klasörde oluşturmak için klasör kimliğiyle birlikte parent sorgu parametresini ekleyin. parent atlanırsa dosya, kullanıcının kök Drive'ım klasöründe oluşturulur. Yanıt, yükleme için benzersiz bir dosya kimliği ve anahtar sarmalama adımı için gerekli olan bir JWT yetkilendirme jetonu içerir.
Verileri yerel olarak şifreleme
- Dosya için benzersiz bir veri şifreleme anahtarı (DEK) oluşturmak üzere Google Tink'i kullanın.
- Dosya içeriğini şifrelenmiş dosya yapısına göre şifreleyin.
İşlem Kaynağı Anahtarı Karması Hesaplama
Kaynak anahtarı karmasını hesaplamak için:
generateCseToken'dan alınanjwtyetkilendirme jetonundanresource_nameveperimeter_iddeğerlerini ayıklayın.perimeter_ideksikse boş bir dize kullanın.- Anahtar olarak şifrelenmemiş metin DEK'sini, imzalanacak veri olarak da
ResourceKeyDigest:my_resource_name:my_perimeter_iddizesini kullanarak HMAC-SHA256'yı hesaplayın. - Elde edilen karmayı Base64 ile kodlayın.
Daha fazla bilgi için Kaynak Anahtarı Karma Değeri başlıklı makaleyi inceleyin.
Şifreleme anahtarını sarmalama
DEK'yi korumak için harici KACL'lerinizi kullanarak şifreleyin (sarmalayın).
- Uygun uç noktayı arayın:
- Bireysel:
/wrap - Yönetici:
/privilegedwrap
- Bireysel:
- Şifrelenmemiş DEK'yi, IdP kimlik doğrulama jetonunuzu, Google yetkilendirme jetonunu (gerekirse), JWT'den
resource_namedeğerini vereasondeğerini iletin. - Sarmalanmış DEK'yi (WDEK) KACLS'den alın.
Drive'a yükle
Şifrelenmiş dosya blob'unun standart dosya yükleme işlemini gerçekleştirmek için Drive API
files.create uç noktasını kullanın. Dosya meta verilerinde aşağıdaki alanları ayarlayın:
id:generateCseTokenyanıtından alınan benzersiz dosya kimliği.mimeType:application/vnd.google-gsuite.encrypted; content="application/octet-stream".contentparametresi, orijinal dosyanın MIME türüne ayarlanabilir.
clientEncryptionDetails:encryptionState:"encrypted".decryptionMetadata:wrappedKey: KACLS'den alınan sarmalanmış DEK (WDEK).kaclsId:generateCseTokenyanıtından alınan KACLS kimliği.keyFormat:"tinkAesGcmKey".aes256GcmChunkSize:"default".encryptionResourceKeyHash: Compute Resource Key Hash içinde hesaplanan karma.
Açık kaynak örneği
Şifreleme ve yükleme sürecinin pratik bir gösterimi için açık kaynaklı demoya bakın. Bu, çalışan bir çözüm sunar ve değerli bir referans olarak kullanılabilir.
Dosya indirme ve şifre çözme
ÖÖM dosyası indirmek için şifrelenmiş içerik ve meta verilerin Google Drive'dan alınması, KACLS'nizden düz metin DEK'nin istenmesi ve dosyanın yerel olarak şifresinin çözülmesi gerekir.
Dosya meta verilerini ve şifrelenmiş içeriği alma
Dosyanın meta verilerini ve içeriğini almak için Drive API Files:get yöntemini çağırın. clientEncryptionDetails, KACLS bilgilerini içeren JWT ve Wrapped DEK (WDEK) dahil olmak üzere DecryptionMetadata içerir.
Şifreleme anahtarının paketini açma
- Uygun uç noktayı arayın:
- Bireysel:
/unwrap - Yönetici:
/privilegedunwrap
- Bireysel:
- WDEK'yi, IdP kimlik doğrulama jetonunuzu, Google yetkilendirme jetonunu (gerekirse),
resource_namevereasondeğerini iletin. - KACLS'den düz metin DEK'yi alın.
Verileri yerel olarak şifre çözme
- KACLS'den alınan şifrelenmemiş metin DEK'yi kullanarak şifreyi başlatın.
- İlk sihirli baytları atlayın ve kalan içeriği şifrelenmiş dosya yapısına göre şifre çözün.
Açık kaynak örneği
İndirme ve şifre çözme sürecinin pratik bir gösterimi için açık kaynaklı demoya bakın. Bu, çalışan bir çözüm sunar ve değerli bir referans olarak kullanılabilir.
İçe aktarılan dosyaları doğrulama
Google, şifreleme anahtarlarına erişemediği için dosyalarınızın şifresini çözemez ve dosyalarınızı sunucu tarafında doğrulayamaz. Yerel şifreleme veya anahtar sarmalama aşamalarındaki uygulama hataları, istemci tarafında dosyaların şifresi çözülürken hatalara neden olur. Kendi uygulamanızı kullanmadan önce kapsamlı doğrulama yapmanız çok önemlidir.
Yüklenen Google Drive ÖAE içeriğinin doğru şekilde çalışması için uygun şekilde şifrelenmesi ve doğru meta verileri içermesi gerekir. İçeriğin geçerli ve şifresinin çözülebilir olmasını sağlamak sizin sorumluluğunuzdadır.
Gidiş dönüş şifreleme ve şifre çözme testleri yapma
Uygulamanızı doğrulamak için uçtan uca akışı test etmeniz çok önemlidir. Bu işlemde, bir dizi test dosyası alınır, yerel mantığınız kullanılarak şifrelenir, API kullanılarak Drive'a yüklenir, ardından indirilir ve şifresi çözülür. Şifre çözme işleminden sonra, sonuçtaki içeriği orijinal dosyalarla karşılaştırarak aynı olduklarından emin olun. Bu işlem, şifreleme, anahtar sarmalama veya meta veri işleme ile ilgili sorunları tespit etmeye yardımcı olur. Açık kaynak demoda, bu tür bir doğrulama sürecini kendi uygulamanızda nasıl uygulayabileceğiniz gösterilmektedir.
Google Drive ile örnek kontrolü yapma
Yüklenen dosyaların Drive web istemcisinde kilit simgesi içerdiğini doğrulayın. Yüklenen dosyalardan küçük bir bölümünü manuel olarak indirerek beklendiği gibi çalıştıklarını doğrulayın. Bu kontrol, Google'ın İTŞ uygulamasını kullanarak şifre çözmeyi dener. Böylece, şifreleme veya anahtar sarmalama mantığınızdaki sorunları tespit etmenize yardımcı olur. Hem Drive'ım hem de ortak Drive'lardaki dosyaları ekleyin.
Açık kaynak demo
Açık kaynaklı Drive CSE Upload paketi, bu kılavuzda açıklanan CSE yükleme ve indirme akışlarını uygulayan eksiksiz ve çalışan bir Python kitaplığı ile komut satırı örneği sağlar. Kendi ÖAE entegrasyonunuzu oluşturmadan önce demo kodunu incelemeniz önemle tavsiye edilir.