امنیت و حریم خصوصی
آنچه ساختهایم، و آنچه ادعا نمیکنیم
فایلهای صوتی تماس از حساسترین دادههای یک شرکتاند. این صفحه کنترلهایی را شرح میدهد که امروز در محصول وجود دارند، همانطور که در تصمیمهای معماری ما ثبت شدهاند، و فهرست میکند چه چیزهایی را ادعا نمیکنیم.
از میان لایهها
چهار لایه میان یک فایل صوتی و کسی که نباید آن را ببیند
اسکرول کنید: از هر لایه عبور کنید
دیوار شبکه
در بستهٔ خودمیزبان هیچ کانتینر برنامه مسیری به اینترنت ندارد.
جداسازی مستأجران
ماتریس مجوز برنامه و امنیت سطر PostgreSQL، دو بار اعمال میشود.
پوشاندن دادههای شخصی
شماره تلفن، ایمیل، کد ملی و شماره کارت در رونوشت به جاینگهدار ثابت تبدیل میشوند.
نگهداری و حذف
حالتهای صریح نگهداری و حذفی که اول دسترسی را میبندد و بعد بایتها را پاک میکند.
پوشاندن، شبیهسازیشده
ببینید یک شمارهٔ تلفن چطور از متن مکالمه ناپدید میشود
۱ شمارهٔ تلفن پوشانده شد
اسکرول کنید: شماره محو میشود
شمارهٔ من [PHONE_1] است؛ بعد از ساعت پنج تماس بگیرید.
پوشاندن دادههای شخصی در متن
هر فضای کاری میتواند پوشاندن را روشن کند. دادههای شخصی در متن با جانگهدارهای ثابتی مثل [PHONE_1] جایگزین میشوند و از آن پس تحلیل، جستوجو و خروجیها از نسخهٔ پوشاندهشده استفاده میکنند.
چه چیزی تشخیص داده میشود
- نشانیهای ایمیل.
- شماره تلفن: موبایل و ثابت ایران با همهٔ املاهای رایج، و شمارههای بینالمللی با پیشوند + یا ۰۰.
- کد ملی ایران، با بررسی رقم کنترل.
- شمارهٔ کارت بانکی، با بررسی قاعدهٔ Luhn.
- شبا (IBAN)، با بررسی قاعدهٔ mod-97.
- کد پستی ایران، فقط در نزدیکی کلیدواژهٔ کد پستی.
چه چیزی تشخیص داده نمیشود، بهروشنی
- نامها، نشانیها، تاریخ تولد و پلاک خودرو.
- اعدادی که با حروف نوشته شدهاند یا بین بخشهای متن تقسیم شدهاند.
- خود فایل صوتی پوشانده نمیشود. پوشاندن روی متن اعمال میشود.
نسخهٔ اصلی چطور محافظت میشود
- نسخههای پوشاندهشده تغییرناپذیرند. تغییر سیاست، نسخهٔ جدیدی میسازد و نسخهٔ قبلی را بازنویسی نمیکند.
- دیدن متن اصلی به مجوزی جداگانه و مخصوص مالک نیاز دارد و در گزارش ممیزی ثبت میشود.
- هر مقدار جایگزینشده فقط بهصورت رمزشده با AES-256-GCM ذخیره میشود و کلیدها بیرون از پایگاه داده نگه داشته میشوند. بدون کلید، هیچ نسخهٔ اصلیای نگه داشته نمیشود.
- آشکار کردن یک جانگهدار به ذکر دلیل نیاز دارد و بدون ثبت خود مقدار ممیزی میشود.
جداسازی مستأجرها
جداسازی دو بار اعمال میشود: با ماتریس مجوزهای برنامه و با امنیت سطح سطر PostgreSQL.
- هر پرسوجو زیر نقشی از پایگاه داده اجرا میشود که نمیتواند امنیت سطح سطر را دور بزند. راهاندازی در محیط تولید، نقش ابرکاربر یا نقش دورزننده را رد میکند.
- سیاستها اجباریاند؛ بنابراین حتی مالک جدول هم مشمول آنهاست. اتصالی که زمینهٔ مستأجر ندارد، هیچ سطری از مستأجرها را نمیبیند.
- زمینهٔ مستأجر برای هر تراکنش از نشست، کار یا توکن اشتراک تأییدشده تعیین میشود؛ بنابراین نمیتواند در استفادهٔ مجدد از اتصال باقی بماند.
- مجموعهٔ آزمونهای بکاند با همان نقش محدود اجرا میشود و آزمونهای خواندن، نوشتن و جابهجایی بین مستأجرها را شامل میشود.
نگهداری و حذف
نگهداری سه حالت صریح دارد و حذف طوری طراحی شده که داده را واقعاً پاک کند، نه فقط پنهان.
- حالتهای نگهداری: محدود (۱ تا ۳۶۵۰ روز پس از ورود)، نامحدود (فقط حذف صریح داده را پاک میکند) یا فوری (بهمحض پایان پردازش واجد شرایط حذف). مقدارهای مبهم رد میشوند و هرگز حدس زده نمیشوند.
- نگهداشت قانونی بر نگهداری اولویت دارد. نگهداری هرگز مکالمهٔ نگهداشتهشده را حذف نمیکند.
- حذف با سنگقبر شروع میشود: دسترسی بلافاصله بسته میشود، لینکهای اشتراک باطل میشوند و سپس یک پاکسازی پایدار در تلاشهای تکرارشونده متنها، تحلیلها، شواهد، خلاصهها و بایتهای رسانه را حذف میکند.
- آنچه میماند یک رسید بدون محتواست: شناسهها، شمارندهها، زمانها و یک کد خطا. عنوانها و نام فایلها خالی میشوند.
- سنگقبرها بیرون از پایگاه داده ثبت میشوند تا پشتیبانِ بازیابیشده، حذفها را دوباره اعمال کند.
- لینک دانلود امضاشدهای که پیش از حذف صادر شده، تا انقضای کوتاه خودش یا تا حذف بایتها معتبر میماند. ما این را میگوییم، بهجای وعدهٔ ابطال فوری.
نصب روی سرور شما: بدون مسیر به اینترنت
در بستهٔ نصب محلی، ممنوعیت خروج داده هم در لایهٔ برنامه و هم در لایهٔ شبکه اعمال میشود.
- هیچ کانتینر برنامهای مسیر خروجی ندارد. شبکههای برنامه داخلیاند و فقط nginx یک پورت منتشر میکند.
- ترافیک خروجی اختیاری HTTP(S) فقط از یک پراکسی با پیشفرضِ رد عبور میکند که به خطوط دقیق میزبان و پورتِ فهرست مجازِ شما ارسال میکند. پیشفرض بدون اینترنت، هیچ پراکسیای اجرا نمیکند.
- در لایهٔ برنامه، یک آداپتور شبکهای هوش مصنوعی فقط با مجوزی که برای همان نقطهٔ پایانی تأییدشده در سیاست صادر شده فراخوانی میشود. بدون آن، درخواست پیش از هر اتصالی رد میشود.
- نشانیهای فراداده ابری، link-local، loopback و نشانیهای خصوصی برای نقاط پایانی ابری رد میشوند. نقاط پایانی خصوصی در شبکهٔ داخلی شما بهصراحت تأیید میشوند.
ارائهدهندههای هوش مصنوعی و مسیریابی
اینکه کدام مدل دادهٔ شما را میبیند، یک تصمیم سیاستی است که با هر اجرا ثبت میشود.
- هر فضای کاری یک سیاست هوش مصنوعی دارد: نوع نقاط پایانی، منطقهها و مدلهای مجاز برای هر مرحله، و هر مدل از بررسی مجوز میگذرد. نامزدها پیش از هر چیز با سیاست فیلتر میشوند و نامزد ردشده هرگز فراخوانی نمیشود و هرگز جایگزین نیست.
- اگر تبدیل گفتار به متن رد شود، تلاش با ذکر دلیل شکست میخورد و چیزی فرستاده نمیشود. اگر تحلیل رد شود، مرحله «در دسترس نیست» گزارش میشود و متن نگه داشته میشود.
- نقطهٔ پایانی تحلیل ابری بهطور پیشفرض متنی را میگیرد که با همهٔ کلاسهای پشتیبانیشده پوشانده شده، حتی وقتی فضای کاری نسخهٔ اصلی را نشان میدهد.
- مجوز متن هرگز صدا را شامل نمیشود. تشخیص گفتار ابری به سیاست مرحلهٔ خودش نیاز دارد.
- مدل محلیِ ناموفق روی همان نقطهٔ پایانی دوباره تلاش میشود. اعتبارنامههای ابری موجود روی سرور هرگز برای فضای کاریِ فقطمحلی استفاده نمیشوند.
دسترسی و احراز هویت
- توکن نشست JWT روی مسیرهای API کاربران واردشده، که با یک نشست فعال بررسی میشود؛ رمزها با Argon2 هش میشوند.
- دسترسی مبتنی بر نقش با نقشهای مالک، مدیر، عضو و بیننده، بهعلاوهٔ سرپرست و اپراتور در تیمها.
- محدودیت نرخ برای هر مسیر، مثلاً برای ورود، بارگذاری و کلیدهای API.
- ورود با Google همراه با PKCE و بررسی توکن هویت، در کنار ایمیل و رمز عبور.
- مدیریت سراسری خطا تا هرگز stack trace به کلاینت برنگردد.
آنچه ادعا نمیکنیم
ما فقط رفتار آزمودهشده را منتشر میکنیم.
- هیچ گواهینامه یا تأییدیهٔ ISO 27001 یا SOC 2 ادعا نمیشود.
- هیچ گزارش آزمون نفوذی منتشر نشده است.
- هیچ SLA در دسترسبودنی منتشر نشده است.
- پوشاندن، بینامسازی نیست. اطلاعات حساس میتواند در متن یک مکالمه باقی بماند.