پرش به مستندات
پایگاه دانش

رمزنگاری سرتاسری

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

جزئیات

  • هر دو نیمه سرتاسر سیم‌کشی شده‌اند. نوشتن پیام برای گیرنده‌ای که کلیدش منتشر شده، متن را در مرورگر و پیش از آنکه درخواست از آن خارج شود مهروموم می‌کند؛ به سرور یک بستهٔ armor تحویل داده می‌شود که نمی‌تواند بخواندش، آن را pgp-mime علامت می‌زند و یک پیام واقعی multipart/encrypted می‌سازد. خواندن به همان شکل و در جهت عکس انجام می‌شود: متن رمزشده واکشی می‌شود، در تب رمزگشایی می‌گردد و مثل ایمیل معمولی نمایش داده می‌شود.
  • الگوریتم همان چیزی است که همهٔ دیگران پیش‌تر از آن استفاده می‌کنند: OpenPGP، از طریق openpgp.js، و PGP/MIME روی سیم. یک کلید v4 روی Curve25519، همان شکلی که Proton صادر می‌کند و gpg با الگوریتم مدرن پیش‌فرضش تولید می‌کند. پس نامه‌ای که این‌جا خوانده می‌شود، در اصل همان نامه‌ای است که Thunderbird و gpg و Proton تولید می‌کنند، و هیچ‌چیز این‌جا قالبی از آنِ خودمان نیست که بعدها نیاز به باز کردن داشته باشد.
  • در عمل اما، این رمزنگاری از OpenEmail به OpenEmail است. در هیچ‌جای این مجموعه‌کد نه Web Key Directory هست، نه جست‌وجو در keyserver و نه تجزیهٔ هدر Autocrypt: تنها جایی که کلید گیرنده از آن پیدا می‌شود، دایرکتوری خودمان است که کلیدهای منتشرشده از همین برنامه را نگه می‌دارد، از سوی کسانی که نشانی‌شان روی دامنه‌ای میزبانی‌شده در این‌جاست. راهی هم برای دادن کلیدتان به بیرون وجود ندارد. برنامه نیمهٔ عمومی کلید شما را در آن دایرکتوری منتشر می‌کند و هیچ نسخه‌برداری یا خروجی‌ای از آن ارائه نمی‌دهد، پس مخاطبی که روی Thunderbird است هیچ راه پشتیبانی‌شده‌ای برای گرفتن آن ندارد. هم‌کارپذیری با دنیای گستردهٔ PGP ویژگیِ خودِ قالب است، نه کاری که محصول هنوز برای شما انجام دهد.
  • خواندن این‌گونه محدود نیست، چون رمزگشایی به دایرکتوری نیاز ندارد. هر پیام PGP/MIME یا PGP درون‌خطی که مهروموم‌شده برای کلیدی در این مرورگر به این صندوق برسد باز می‌شود، هر کسی که فرستاده باشد و با هر کلاینتی. این شامل پیام‌هایی هم می‌شود که برای کلیدی مهروموم شده‌اند که از آن زمان تا کنون چرخانده‌اید: کلیدهای بازنشسته در جاکلیدی می‌مانند و کنار کلید فعلی آزموده می‌شوند، پس چرخاندن کلید به قیمت از دست دادن نامه‌هایی که پیش‌تر دریافت کرده‌اید تمام نمی‌شود.
  • سبز یعنی باز شده است، و از هیچ راه دیگری به دست نمی‌آید. ردیف جزئیات ← امنیت تنها زمانی سبز می‌شود که رمزگشایی واقعاً در همین تب متن آشکار برگردانده باشد؛ هرگز از روی فیلدی روی پیام، و هرگز از روی این واقعیت که پاکتی رمزشده رسیده است. متنش این است: «رمزشده به‌صورت سرتاسری. با کلید شما در این مرورگر باز شد». هر حالتی کمتر از این، جملهٔ خودش را دارد نه جمله‌ای مشترک: هنوز در حال بررسی، کلید قفل است، مهروموم‌شده برای کلیدی که این مرورگر ندارد، باز نشد، اصلاً هیچ کلیدی این‌جا نیست، و این مرورگر اجازهٔ بررسی نداد. «نتوانستیم بررسی کنیم» و «شما کلید را ندارید» دو گزارهٔ متفاوت‌اند و این ردیف وادارتان می‌کند بخوانید کدام‌یک نصیبتان شده است.
  • S/MIME همچنان باز نمی‌شود. آن CMS زیر یک گواهی X.509 است، openpgp.js نمی‌تواند به آن دست بزند، و اگر هم می‌توانست هیچ انبار گواهی در محصول وجود ندارد که کلید را نگه دارد؛ پس پیام S/MIME می‌گوید OpenEmail نمی‌تواند بازش کند، و باز کردن قفلی که هیچ کاری نمی‌کند به آن پیشنهاد نمی‌شود.
  • نیمهٔ خصوصی در مرورگر شما ساخته می‌شود و هرگز از آن بیرون نمی‌رود: نه رمزشده، نه درون یک پشتیبان، نه در ابزار پشتیبانی. هرگز برای سرور فرستاده نمی‌شود، پس این‌جا چیزی نیست که تحویل داده شود، با حکم قضایی گرفته شود یا نشت کند. قفل‌شده با عبارت عبور، در پایگاه‌دادهٔ IndexedDB مخصوص خودش یعنی openemail-keyring ذخیره می‌شود؛ عمداً بیرون از دسترس توصیهٔ «کش خود را پاک کنید» و بازنشانیِ کنسول اشکال‌زدایی: هر دوی این‌ها کش کوئری را پاک می‌کنند، و کلیدی که کنار آن ذخیره شده باشد باعث می‌شد یک توصیهٔ معمولیِ پشتیبانی، هر نامهٔ رمزشده‌ای را که حساب تا آن روز گرفته برای همیشه نابود کند. حذف حسابتان آن را حذف می‌کند، چون در آن صورت نامه‌ها هم می‌روند. باز کردن قفل، کلید را 15 دقیقه بی‌فعالیتی و حداکثر 8 ساعت در حافظه نگه می‌دارد؛ پس از آن، خواندن پیام مهروموم‌شدهٔ بعدی دوباره عبارت عبور را می‌خواهد.
  • هیچ سپرده‌گذاری کلید و هیچ بازیابی‌ای وجود ندارد، و این تصمیمی همیشگی است نه چیزی ساخته‌نشده. عبارت عبور شما تنها راه ورود است؛ فراموشش کنید و هر پیامی که کسی برای شما مهروموم کرده روی سرورهای ما به‌صورت متن رمز می‌ماند که هیچ‌کس، از جمله خود ما، نمی‌تواند بخواندش. آن نامه‌ها رفته‌اند و هیچ اندازه درخواست کردنی برشان نمی‌گرداند. صفحهٔ ثبت‌نام این را پیش از آن‌که نخستین کلید وجود داشته باشد می‌گوید، پشت چک‌باکسی که باید تیکش بزنید؛ فایل پشتیبان اجباری است و دکمهٔ «انجام شد» تا وقتی دانلودش نکرده‌اید غیرفعال می‌ماند. آن فایل عمداً بدون سخت‌سازیِ افزودهٔ در حالت سکون که این مرورگر به کار می‌برد نوشته می‌شود تا همچنان در نسخه‌های قدیمی‌تر gpg وارد شود: پشتیبانی که جای دیگری باز نشود پشتیبان نیست. ضمناً کلید در یک مرورگر روی یک دستگاه زندگی می‌کند، و گوشی یا لپ‌تاپ دوم تا وقتی آن فایل را آن‌جا وارد نکنید هیچ‌چیز ندارد.
  • دایرکتوری فقط کلیدهای عمومی را نگه می‌دارد و بس، و کلید به یک شخص تعلق دارد نه به یک صندوق؛ چون کلیدی که به یک نشانی بسته شده باشد باید میان همهٔ کسانی که آن نشانی با آن‌ها به اشتراک گذاشته شده کپی شود، که همان سپرده‌گذاری است با نامی دیگر. جست‌وجوی یک کلید به نشستِ واردشده و مجوز ارسال نیاز دارد، هرگز به یک endpoint عمومی؛ چون کاوشِ آزادِ نشانی‌ها یک اوراکل است که به هر کسی می‌گوید کدام نشانی‌ها این‌جا صندوق فعال‌اند. پاسخ آن برای «ما میزبان آن نیستیم» و «میزبانش هستیم و کسی کلیدی منتشر نکرده» یکسان است، چون تفکیک این دو صرفاً اوراکل را پشت یک ورود منتقل می‌کند به‌جای آن‌که حذفش کند. و کلید از همان لحظه‌ای که صاحبش دسترسی‌اش را به نشانی از دست می‌دهد دیگر تحویل داده نمی‌شود، نه هنگامی که کسی به یاد بیاورد ابطالش کند.
  • هر بایت در همان لحظه‌ای که می‌نویسیدش در مرورگر مهروموم می‌شود، و اصلاً همین است که ارسال‌های تأخیری را ممکن می‌کند: پیام زمان‌بندی‌شده یا پیامی که در پنجرهٔ لغو نشسته، به‌صورت متن رمز ذخیره می‌شود و بعداً به دست صفی فرستاده می‌شود که هیچ کلیدی ندارد و هیچ‌چیز از آن را نمی‌تواند بخواند. گیرنده‌ای که جست‌وجوی دایرکتوری‌اش FAILED شده، جلوی ارسال را می‌گیرد، به‌جای آن‌که خاموشانه چنین تلقی شود که کلیدی ندارد. و پیام مهروموم‌شده فقط از مسیری بیرون می‌رود که پیام را یکپارچه حمل می‌کند. مسیر خروجی‌ای که به‌جای آن بدنهٔ HTML می‌گیرد، armor را به‌عنوان متن دیدنی ارسال می‌کرد و موفقیت گزارش می‌داد، پس ارسالی که سر از آن‌جا درآورد پیش از آن‌که بایتی خارج شود رد می‌شود، نه پس از آن.
  • هزینهٔ مهروموم کردن، اندازه‌گیری‌شده و نه حدسی: armor حدود 1.86 برابر بایت‌های خام است، پس تقریباً 2.7 مگابایت پیوست در سقف 5 مگابایتیِ مسیر ارسال جا می‌شود، و نگارشگر باری بزرگ‌تر از آن را پیش از آن‌که ثانیه‌ها صرف رمزگذاری چیزی کند که انتقال ردش می‌کند، نمی‌پذیرد. نامهٔ رمزشده هیچ باز شدن و هیچ کلیکی گزارش نمی‌کند، چون ردیابی به‌ازای هر گیرنده با تغییر دادن بدنه برای هر شخص کار می‌کند و یک بلوک مهروموم‌شده نمی‌تواند تغییر کند، و پیوندِ بازنویسی‌شده پیوندی است که ما می‌توانیم بخوانیمش، که درست خلاف همین ادعاست. یک ارسال رمزشده هرگز با کلید idempotency هم قابل حذفِ تکراری نیست: کلید نشستِ تازه باعث می‌شود متن رمز در هر تلاش بایت‌های متفاوتی باشد، پس تلاش دوباره هرگز اثرانگشتی مانند نسخهٔ اصلی خود ندارد.
  • زمان‌بندی، در لحظهٔ نگارش مهروموم می‌کند نه در لحظهٔ ارسال. نگارشگر متن رمز را بر پایهٔ کلیدهایی می‌سازد که گیرندگان در روزِ نوشتن شما دارند، نه روزی که پیام قرار است برود؛ همان قاعده‌ای که این محصول پیش‌تر دربارهٔ قالب‌ها و ترجمه‌ها به کار می‌برد، جایی که پیام زمان‌بندی‌شده همان چیزی را حمل می‌کند که شما تأیید کرده‌اید، نه هر چیزی را که بعداً تغییر کرده است. تفاوت این است که قالبِ کهنه صرفاً از مد افتاده است و کلیدِ کهنه خواندنی نیست، پس نگارشگر به‌جای آن‌که تبصره‌ای بدهد، تاریخ را با کلمات نام می‌برد: «اکنون مهروموم شد، در ... فرستاده می‌شود. هر کسی که روی آن است به کلیدی نیاز خواهد داشت که امروز دارد.» ردی که نیمهٔ دیگر را نگه می‌دارد نوشته شده اما هرگز عمل نکرده است، چون هنوز چنین پیامی نمی‌تواند وجود داشته باشد: اگر وجود داشت، ویرایش بعدیِ آن به‌جای آن‌که خاموشانه اجازه داده شود رد می‌شد، چون وصله زدن به بدنه یعنی نوشتن متن آشکار روی متن رمز، و تغییر گیرندگان یعنی تغییر کسانی که پیام برایشان مهروموم شده بود، و هر کدام از این دو پیام را آشکار تحویل می‌دهد در حالی که هر صفحه هنوز آن را رمزشده می‌نامد.
  • دو چیز هست که نگارشگر اصلاً پیشنهادشان نمی‌کند و همین را می‌گوید، به‌جای آن‌که سرِ سیم شکست بخورد. قالب روی سرور از یک نسخهٔ منتشرشده رندر می‌شود، پس در این مرورگر چیزی برای مهروموم کردن وجود ندارد. پاسخ، گفت‌وگو را زیر خودش نقل می‌کند و آن نقل‌قول پس از جایی که بدنه مهروموم می‌شد افزوده می‌شود و نسخه‌ای خواندنی از کل رشته را بیرون از مهروموم باقی می‌گذارد، پس پاسخ‌ها و ارجاع‌ها تا وقتی تاریخچهٔ نقل‌شده درون متن رمز تا نشود، نمی‌توانند رمز شوند.
  • هیچ‌کدام از این‌ها موضوع پیام، گیرندگان یا زمان نوشتن شما را پنهان نمی‌کند. موضوع روی پیام مهروموم‌شده دقیقاً مانند هر پیام دیگری آشکار سفر می‌کند، و صفحهٔ خواندن همین را روی خود پیام می‌گوید: «موضوع و نشانی‌ها آشکار سفر کردند؛ این متن نه.» PGP بدنه را می‌پوشاند و هیچ پیاده‌سازی‌ای از آن بقیه را نمی‌پوشاند. پیش‌نویس‌ها هم مهروموم نیستند، چون ذخیرهٔ خودکار در حین نگارش مدام متن آشکار را در صندوق شما می‌نویسد، چون ذخیره‌نکردنِ خاموشانه کارتان را از بین می‌برد، و قفل این را با کلمات اعلام می‌کند.
  • شناختن نامه‌ای که مهروموم‌شده می‌رسد، نخست آمد و هنوز پابرجاست. PGP/MIME، armor درون‌خطیِ PGP و S/MIME پیش‌تر به‌صورت بدنه‌ای خالی با دو پیوست بی‌معنا رندر می‌شدند، چون تجزیه‌گر فقط متن ساده و HTML را خواندنی می‌داند و بقیه را در نوار فایل‌ها می‌ریخت. آن بخش‌ها اکنون شناسایی می‌شوند، اثاثیهٔ پروتکل بیرون از فهرست پیوست‌ها نگه داشته می‌شود، متن رمز دست‌نخورده ذخیره می‌شود — که خواننده از همان رمزگشایی می‌کند نه از چیزی که تازه واکشی شود — و پیامی که هیچ‌کس این‌جا نمی‌تواند بازش کند، همچنان همین را روشن می‌گوید.
  • پیام امضاشده چیزی جداگانه در نظر گرفته می‌شود، چون هست. بدنهٔ چنین پیامی خواندنی است، پس جست‌وجو و قواعد و هر چیز دیگر روی آن کار می‌کنند؛ هرگز پشت قفل قرار نمی‌گیرد و هرگز از مسیر رمزگشایی نمی‌گذرد. آن ردیف می‌گوید «امضاشده توسط فرستنده. امضا بررسی نشد»، کم‌رنگ، و تا وقتی چیزی در این‌جا واقعاً بتواند امضایی را تأیید کند کم‌رنگ می‌ماند؛ کاری که هنوز هیچ‌چیز انجام نمی‌دهد، حتی روی پیامی که با موفقیت رمزگشایی شده است. دیدن این‌که پیامی مهروموم‌شده است با باز کردن آن یکی نیست، و باز کردنش با دانستن این‌که چه کسی مهرومومش کرده یکی نیست.
  • روی پیام رمزشده، بدنه از هر چیزی که در حالت عادی آن را می‌خواند دریغ می‌شود: خلاصهٔ جست‌وجو، گذرِ بدنه در امتیازدهی فیشینگ، بررسی نگارش با هوش مصنوعی، شرط‌های مبتنی بر بدنه در قواعد، درون‌ریزی دعوت‌های تقویم، و خلاصهٔ رشته‌ها. نیمهٔ احراز اصالتِ بررسی فیشینگ همچنان اجرا می‌شود، چون DMARC و DKIM و SPF از هدرهایی خوانده می‌شوند که متن رمز آن‌ها را پنهان نمی‌کند. رمزگشایی هیچ‌کدام از این‌ها را تغییر نمی‌دهد. متن آشکار فقط در همان تبی وجود دارد که بازش کرده است، پس پیام مهروموم‌شده حتی پس از آن‌که خواندیدش غیرقابل‌جست‌وجو می‌ماند و بیرون از قابلیت‌های هوش مصنوعی می‌ماند، و ترجمه هم روی آن ارائه نمی‌شود. این هزینهٔ همان ادعاست، نه یک قلم‌افتادگی.