مدیریت فایل‌های رمزگذاری شده سمت کلاینت با Drive API

رمزگذاری سمت کلاینت (CSE) تضمین می‌کند که داده‌های شما قبل از رسیدن به سرورهای Drive رمزگذاری می‌شوند و به شما امکان کنترل داده‌هایتان را می‌دهند. این راهنما شما را در فرآیند رمزگذاری و آپلود و همچنین دانلود و رمزگشایی فایل‌های CSE با استفاده از API Drive راهنمایی می‌کند. همچنین رویکردهای توصیه‌شده برای آزمایش و اعتبارسنجی پیاده‌سازی شما را پوشش می‌دهد.

قبل از اینکه شروع کنی

قبل از مدیریت فایل‌های رمزگذاری‌شده، دامنه Google Workspace خود را با استفاده از چک‌لیست زیر تنظیم کنید:

احراز هویت و مجوز

برای تعامل با Drive API و KACLS خود، باید یک روش احراز هویت انتخاب کنید. این انتخاب بر نحوه تعامل شما با هر دو سرویس تأثیر می‌گذارد:

  • فردی: برای احراز هویت به عنوان یک فرد، از جریان OAuth برای اقدام از طرف آن کاربر استفاده کنید. از نقاط پایانی استاندارد /wrap و /unwrap استفاده کنید و توکن مجوز گوگل را برای آن کاربر ارائه دهید.
  • مدیر: برای جعل هویت سایر کاربران در دامنه، از یک حساب کاربری سرویس با مجوز نمایندگی در سطح دامنه (DWD) استفاده کنید. از نقاط پایانی /privilegedwrap و /privilegedunwrap ، بدون توکن مجوز گوگل، استفاده کنید.

برای جزئیات بیشتر در مورد ایجاد اعتبارنامه‌ها، به راهنمای ایجاد اعتبارنامه‌های دسترسی مراجعه کنید.

احراز هویت دامنه IdP

برای احراز هویت با IdP خود، باید یک شناسه کلاینت OAuth پیکربندی کنید و فایل مخفی کلاینت آن را دانلود کنید. برنامه شما باید یک توکن احراز هویت از IdP شما دریافت کند تا درخواست‌های ارسالی به KACLS شما را احراز هویت کند. این توکن برای دسترسی برنامه شما به کلید رمزگذاری داده‌ها لازم است.

مدیریت ایمن اعتبارنامه‌ها

برنامه شما اعتبارنامه‌های حساسی را برای احراز هویت در Drive API و IdP شما مدیریت می‌کند. این موارد عبارتند از:

  • اطلاعات محرمانه از IdP، مانند فایل محرمانه مشتری
  • اطلاعات محرمانه گوگل، مانند فایل کلید خصوصی حساب کاربری سرویس
  • اطلاعات مخفی ذخیره شده توسط برنامه، مانند اطلاعات کاربری ذخیره شده

شما باید مطمئن شوید که تمام این اعتبارنامه‌ها به طور ایمن ذخیره می‌شوند.

محدودیت‌ها و سهمیه‌ها

فایل‌های رمزگذاری شده سمت کلاینت مشمول محدودیت‌ها و سهمیه‌های استاندارد درایو هستند. از محدودیت‌های درایو مشترک ، محدودیت‌های کلی فایل و پوشه و نحوه مدیریت سهمیه خود آگاه باشید. علاوه بر این، ابزار وارد کردن شما باید محدودیت‌های نرخ را از سرویس لیست کنترل دسترسی کلیدی (KACLS) و ارائه دهنده هویت (IdP) شما مدیریت کند.

ساختار فایل رمزگذاری شده

درایو فرمت فایل رمزگذاری شده سمت کلاینت زیر را برای آپلود و دانلود در نظر می‌گیرد.

+-------------------+
| Magic header      |
+-------------------+
| Encrypted Chunk 1 |
+-------------------+
| Encrypted Chunk 2 |
+-------------------+
| ...               |
+-------------------+
| Encrypted Chunk N |
+-------------------+

هدر جادویی

یک هدر جادویی (که با نام امضای فایل یا شماره جادویی نیز شناخته می‌شود) یک توالی ثابت از بایت‌ها است که در ابتدای یک فایل قرار می‌گیرد تا فرمت آن را به طور منحصر به فرد مشخص کند. فایل باید با بایت‌های 0x99 0x5E 0xCC 0x5E شروع شود.

تکه‌های رمزگذاری شده

فایل باید به تکه‌های ۲ مگابایتی تقسیم شود. هر تکه با استفاده از روش رمزگذاری احراز هویت شده با داده‌های مرتبط (AEAD) کتابخانه Google Tink با نوع کلید AES-GCM رمزگذاری می‌شود و از اندیس تکه و یک پرچم تکه نهایی به عنوان داده‌های مرتبط استفاده می‌شود. برای نمونه کدی که از Drive API استفاده می‌کند و با این مشخصات مطابقت دارد، به نسخه آزمایشی متن‌باز مراجعه کنید.

رمزگذاری و آپلود فایل

برای آپلود یک فایل CSE، برنامه شما باید احراز هویت کند، یک توکن CSE درخواست کند، محتوای فایل را به صورت محلی رمزگذاری کند، کلید رمزگذاری را در آن قرار دهد و در نهایت محتوای رمزگذاری شده و فراداده را در Google Drive آپلود کند.

دریافت توکن CSE

با فراخوانی متد Files:generateCseToken از API درایو، یک توکن CSE از گوگل درایو درخواست کنید. مطمئن شوید که پارامتر کوئری fileId را در درخواست وارد نمی‌کنید. برای ایجاد فایل در یک پوشه خاص، پارامتر کوئری parent را به همراه شناسه پوشه وارد کنید. اگر parent حذف شود، فایل در پوشه My Drive کاربر در ریشه ایجاد می‌شود. پاسخ شامل یک شناسه فایل منحصر به فرد برای آپلود و یک توکن مجوز JWT است که برای مرحله بسته‌بندی کلید مورد نیاز است.

رمزگذاری داده‌ها به صورت محلی

  1. از گوگل تینک برای ایجاد یک کلید رمزگذاری داده (DEK) منحصر به فرد برای فایل استفاده کنید.
  2. محتوای فایل را طبق ساختار فایل رمزگذاری شده رمزگذاری کنید.

هش کلید منابع محاسباتی

برای محاسبه هش کلید منبع:

  1. resource_name و perimeter_id را از توکن مجوز jwt که از generateCseToken دریافت شده است، استخراج کنید. اگر perimeter_id وجود ندارد، از یک رشته خالی استفاده کنید.
  2. HMAC-SHA256 را با استفاده از متن ساده DEK به عنوان کلید و رشته ResourceKeyDigest:my_resource_name:my_perimeter_id به عنوان داده‌ای که باید امضا شود، محاسبه کنید.
  3. هش حاصل را با Base64 کدگذاری کنید.

برای جزئیات بیشتر، به هش کلید منابع مراجعه کنید.

کلید رمزگذاری را در جای خود قرار دهید

برای محافظت از DEK، آن را با استفاده از KACLS خارجی خود رمزگذاری (wrap) کنید.

  1. نقطه پایانی مناسب را فراخوانی کنید:
  2. DEK متن ساده، توکن احراز هویت IdP خود، توکن مجوز گوگل (در صورت لزوم)، resource_name از JWT و یک reason را ارسال کنید.
  3. DEK بسته‌بندی‌شده (WDEK) را از KACLS دریافت کنید.

آپلود در درایو

از نقطه پایانی files.create در API درایو برای انجام آپلود استاندارد فایل از blob فایل رمزگذاری شده استفاده کنید. فیلدهای زیر را در متادیتای فایل تنظیم کنید:

  • id : شناسه منحصر به فرد فایل دریافتی از پاسخ generateCseToken .
  • mimeType : application/vnd.google-gsuite.encrypted; content="application/octet-stream" .
    • پارامتر content را می‌توان روی نوع MIME فایل اصلی تنظیم کرد.
  • clientEncryptionDetails :
    • encryptionState : "encrypted" .
    • decryptionMetadata :
      • wrappedKey : کلید رمزگشایی‌شده (WDEK) که از KACLS دریافت شده است.
      • kaclsId : شناسه KACLS دریافتی از پاسخ generateCseToken .
      • keyFormat : "tinkAesGcmKey" .
      • aes256GcmChunkSize : "default" .
      • encryptionResourceKeyHash : هش محاسبه شده در Compute Resource Key Hash .

مثال متن‌باز

برای نمایش عملی فرآیند رمزگذاری و آپلود، به نسخه آزمایشی متن‌باز مراجعه کنید. این یک راه‌حل کاربردی ارائه می‌دهد و می‌تواند به عنوان یک مرجع ارزشمند عمل کند.

دانلود و رمزگشایی یک فایل

دانلود فایل CSE مستلزم بازیابی محتوای رمزگذاری‌شده و فراداده از گوگل درایو، درخواست DEK متن ساده از KACLS شما و رمزگشایی فایل به صورت محلی است.

بازیابی فراداده فایل و محتوای رمزگذاری شده

متد Files:get از API درایو را برای بازیابی فراداده و محتوای فایل فراخوانی کنید. clientEncryptionDetails شامل DecryptionMetadata است که شامل Wrapped DEK (WDEK) و JWT حاوی اطلاعات KACLS می‌شود.

کلید رمزگذاری را باز کنید

  1. نقطه پایانی مناسب را فراخوانی کنید:
  2. WDEK، توکن احراز هویت IdP، توکن مجوز گوگل (در صورت لزوم)، resource_name و یک reason را وارد کنید.
  3. DEK متن ساده را از KACLS دریافت کنید.

رمزگشایی داده‌ها به صورت محلی

  1. رمز را با استفاده از DEK متن ساده دریافتی از KACLS مقداردهی اولیه کنید.
  2. بایت‌های جادویی اولیه را نادیده بگیرید و محتوای باقی‌مانده را طبق ساختار فایل رمزگذاری‌شده رمزگشایی کنید.

مثال متن‌باز

برای نمایش عملی فرآیند دانلود و رمزگشایی، به نسخه آزمایشی متن‌باز مراجعه کنید. این یک راه‌حل کاربردی ارائه می‌دهد و می‌تواند به عنوان یک مرجع ارزشمند عمل کند.

اعتبارسنجی فایل‌های وارد شده

از آنجا که گوگل به کلیدهای رمزگذاری دسترسی ندارد، نمی‌تواند فایل‌های شما را در سمت سرور رمزگشایی و اعتبارسنجی کند. خطاهای پیاده‌سازی در طول مراحل رمزگذاری محلی یا بسته‌بندی کلید، منجر به خطا در هنگام رمزگشایی فایل‌ها در سمت کلاینت خواهد شد. اعتبارسنجی کامل قبل از استفاده از پیاده‌سازی خودتان بسیار مهم است.

برای اینکه محتوای آپلود شده در Google Drive CSE به درستی کار کند، باید به درستی رمزگذاری شده و حاوی فراداده‌های صحیح باشد. شما مسئول اطمینان از معتبر بودن و قابل رمزگشایی بودن محتوا هستید.

انجام تست‌های رمزگذاری و رمزگشایی رفت و برگشتی

برای اعتبارسنجی پیاده‌سازی خود، آزمایش جریان سرتاسری بسیار مهم است. این شامل گرفتن مجموعه‌ای از فایل‌های آزمایشی، رمزگذاری آنها با استفاده از منطق محلی شما، آپلود آنها در Drive با استفاده از API و سپس دانلود و رمزگشایی آنها می‌شود. پس از رمزگشایی، محتوای حاصل را با فایل‌های اصلی مقایسه کنید تا از یکسان بودن آنها اطمینان حاصل شود. این فرآیند به شناسایی هرگونه مشکل در رمزگذاری، بسته‌بندی کلید یا مدیریت فراداده کمک می‌کند. نسخه آزمایشی متن‌باز نشان می‌دهد که چگونه می‌توانید چنین فرآیند اعتبارسنجی را در برنامه خود پیاده‌سازی کنید.

بررسی دقیق با گوگل درایو

تأیید کنید که فایل‌های آپلود شده شامل یک نماد قفل در کلاینت وب درایو هستند. تعداد کمی از فایل‌های آپلود شده را به صورت دستی دانلود کنید تا تأیید شود که آنها طبق انتظار عمل می‌کنند. این بررسی از پیاده‌سازی CSE گوگل برای رمزگشایی استفاده می‌کند و به جداسازی مشکلات در رمزگذاری یا منطق بسته‌بندی کلید شما کمک می‌کند. فایل‌هایی را از هر دو درایو My Drive و Shared اضافه کنید.

نسخه آزمایشی متن‌باز

بسته متن‌باز Drive CSE Upload یک کتابخانه پایتون کامل و کارآمد و یک مثال خط فرمان ارائه می‌دهد که جریان‌های آپلود و دانلود CSE شرح داده شده در این راهنما را پیاده‌سازی می‌کند. بررسی کد آزمایشی قبل از ساخت یکپارچه‌سازی CSE خودتان اکیداً توصیه می‌شود.