ENCFS(1) Encrypted Filesystem ENCFS(1)

encfs - سوار کردن یا ایجاد یک سیستم‌فایل مجازیِ رمزگذاری‌شده

encfs [--version] [-v|--verbose] [-c|--config] [-t|--syslogtag] [-s] [-f] [--annotate] [--standard] [--paranoia] [--insecure] [--reverse] [--reversewrite] [--extpass=program] [-S|--stdinpass] [--anykey] [--forcedecode] [-require-macs] [-i MINUTES|--idle=MINUTES] [-m|--ondemand] [--delaymount] [-u|--unmount] [--public] [--nocache] [--noattrcache] [--nodatacache] [--no-default-flags] [-o FUSE_OPTION] [-d|--fuse-debug] [-H|--fuse-help] rootdir mountPoint [-- [Fuse Mount Options]]

برنامهٔ EncFS یک سیستم‌فایل مجازیِ رمزگذاری‌شده ایجاد می‌کند که داده‌های رمزگذاری‌شده را در دایرکتوری rootdir ذخیره کرده و داده‌های رمزگشایی‌شده (متن‌آشکار) را در دایرکتوری mountPoint قابل مشاهده می‌سازد. کاربر باید گذرواژه‌ای وارد کند که برای رمزگذاری (غیرمستقیم) نام فایل‌ها و محتویات آن‌ها به کار می‌رود.

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

نسخهٔ EncFS را نمایش می‌دهد. استفاده از گزینهٔ --verbose پیش از --version ممکن است اطلاعات بیشتری را نشان دهد.
باعث می‌شود EncFS از فایل ارائه‌شده به عنوان فایل پیکربندی استفاده کند.
باعث فعال‌سازی ثبت وقایع در کانال‌های مختلف اشکال‌زدایی درون EncFS می‌شود. در حالت عادی، این پیام‌های ثبت وقایع غیرفعال بوده و تأثیری ندارند. توصیه می‌شود هنگام فعال بودن گزارش تفصیلی، برنامه در حالت پیش‌زمینه (-f) اجرا شود.
این گزینه امکان تعیین برچسب syslog را فراهم می‌کند که هنگام ثبت پیام‌ها از طریق syslog به کار خواهد رفت. به‌طور پیش‌فرض، برچسب syslog برابر با encfs تنظیم شده است.
گزینهٔ -s (single threaded) باعث می‌شود EncFS در حالت تک‌نخی اجرا شود. به‌طور پیش‌فرض، EncFS در حالت چندنخی اجرا می‌شود. این گزینه در طول فرایند توسعهٔ EncFS برای ساده‌سازی اشکال‌زدایی و امکان اجرا با ابزارهای تحلیل حافظه به کار می‌رود.
گزینهٔ -f (foreground) باعث می‌شود EncFS در پیش‌زمینه اجرا شود. در حالت عادی EncFS به عنوان یک دیمن (daemon) اجرا شده و به پس‌زمینه می‌رود و کنترل را به پوستهٔ فراخواننده بازمی‌گرداند. با گزینهٔ -f، در پیش‌زمینه اجرا خواهد شد و تمام پیام‌های هشدار و اشکال‌زدایی در خروجی خطای استاندارد نمایش داده می‌شوند. در حالت پیش‌فرض (پس‌زمینه)، تمام این پیام‌ها از طریق syslog ثبت می‌شوند.
چاپ خطوط توضیحی و راهنما در stderr در طول فرایند پیکربندی.
در صورت ایجاد یک سیستم‌فایل جدید، این گزینه به‌طور خودکار گزینه‌های پیکربندی استاندارد را انتخاب می‌کند تا به ساخت خودکار سیستم‌فایل کمک نماید. این همان مجموعه‌گزینه‌هایی است که باید مورد استفاده قرار گیرد، مگر اینکه دقیقاً بدانید چه کاری انجام می‌دهید و مستندات را خوانده باشید.

هنگامی که سیستم‌فایلی ساخته نمی‌شود، این پرچم هیچ عملی انجام نمی‌دهد.

مشابه --standard، اما برای حالت paranoia (امنیت فوق‌العاده بالا).
به شما امکان می‌دهد رمزگذاری داده‌ها را غیرفعال کنید و داده‌ها را همان‌گونه که هستند به صورت متن‌آشکار منتقل نمایید. البته استفاده از آن اکیداً نهی می‌شود!
به‌طور معمول EncFS در صورت درخواست، یک نمای متن‌آشکار از داده‌ها فراهم می‌کند: داده‌های رمزنگاری‌شده را ذخیره کرده و داده‌های متن‌آشکار را نمایش می‌دهد. با استفاده از --reverse، داده‌های متن‌آشکار را به عنوان منبع دریافت کرده و داده‌های رمزنگاری‌شده را بر حسب نیاز تولید می‌کند. این ویژگی می‌تواند برای تهیهٔ پشتیبان‌های رمزگذاری‌شدهٔ راه‌دور، در مواردی که تمایلی به نگهداری فایل‌های محلی به صورت رمزگذاری‌شده ندارید، مفید باشد.

برای مثال، دستور زیر یک نمای رمزگذاری‌شده در دایرکتوری /tmp/crypt-view ایجاد می‌کند:

encfs --reverse /home/me /tmp/crypt-view

سپس می‌توانید دایرکتوری /tmp/crypt-view را کپی کنید تا یک نسخه از داده‌های رمزگذاری‌شده در اختیار داشته باشید. همچنین باید یک نسخه از فایل /home/me/.encfs6.xml را که حاوی اطلاعات سیستم‌فایل است، نزد خود نگه دارید. این دو در کنار یکدیگر می‌توانند برای بازیابی داده‌های رمزگشایی‌شده به کار روند:

ENCFS6_CONFIG=/home/me/.encfs6.xml encfs /tmp/crypt-view /tmp/plain-view

اکنون دایرکتوری /tmp/plain-view دقیقاً حاوی همان داده‌های دایرکتوری /home/me خواهد بود.

توجه داشته باشید که حالت --reverse تنها با گزینه‌های پیکربندی محدودی کار می‌کند، بنابراین ممکن است هنگام استفاده از آن بسیاری از تنظیمات غیرفعال شوند. گزینه‌های ناسازگار تا این لحظه عبارتند از: Filename Initialization Vector Chaining و External IV Chaining.

مشابه --reverse است اما در صورت امکان، اجازهٔ نوشتن را نیز می‌دهد (پیکربندی باید UniqueIV را غیرفعال کرده باشد). گزینهٔ ناسازگار: Per-File Initialization Vectors.
یک برنامهٔ خارجی را برای دریافت گذرواژهٔ کاربر مشخص می‌کند. هنگامی که برنامهٔ خارجی اجرا می‌شود، متغیر محیطی "RootDir" تنظیم خواهد شد تا حاوی مسیر دایرکتوری ریشه باشد. این برنامه باید گذرواژه را در خروجی استاندارد چاپ کند.

برنامهٔ EncFS تمام مقادیر بازگردانده‌شده از برنامه را به عنوان گذرواژه در نظر می‌گیرد، به جز خط جدید انتهایی (\n) که حذف خواهد شد.

برای مثال، مشخص کردن --extpass=/usr/lib/ssh/ssh-askpass باعث می‌شود EncFS از برنامهٔ اعلان گذرواژهٔ ssh استفاده کند.

نکته: برنامهٔ EncFS حداکثر 2k داده از برنامهٔ دریافت گذرواژه می‌خواند و هرگونه خط جدید انتهایی را حذف می‌کند. نسخه‌های پیش از 1.4.x تنها ۶۴ بایت متن را می‌پذیرفتند.

خواندن گذرواژه از ورودی استاندارد، بدون نمایش پیام درخواست. این گزینه می‌تواند برای اسکریپت‌نویسی فرایندهای سوار کردن در encfs مفید باشد.

توجه داشته باشید که ابتدا باید از وجود سیستم‌فایل و نقطهٔ اتصال اطمینان حاصل کنید. در غیر این صورت encfs گزینه‌های ساخت سیستم‌فایل را به صورت تعاملی اعلان خواهد کرد که ممکن است با اجرای اسکریپت شما تداخل ایجاد کند.

بررسی اعتبارسنجی کلید را غیرفعال می‌کند. این گزینه به EncFS امکان می‌دهد با گذرواژه‌های ثانویه استفاده شود. از این سازوکار می‌توان برای ذخیرهٔ مجموعه‌ای مجزا از فایل‌ها در یک سیستم‌فایل رمزگذاری‌شده استفاده کرد. EncFS فایل‌هایی را که به‌درستی رمزگشایی نشوند نادیده می‌گیرد؛ از این رو فایل‌های ایجادشده با گذرواژه‌های مجزا تنها زمانی قابل مشاهده خواهند بود که سیستم‌فایل با گذرواژهٔ مرتبط با آن‌ها سوار شده باشد.

توجه داشته باشید که در صورت تغییر گذرواژهٔ اصلی (با استفاده از encfsctl)، سایر گذرواژه‌ها دیگر قابل استفاده نخواهند بود مگر اینکه گذرواژهٔ اصلی به حالت پیشین خود بازگردانده شود، زیرا سایر گذرواژه‌ها به یک رمزگشایی نامعتبر از کلید حجم متکی هستند که در صورت تغییر گذرواژهٔ اصلی، همان مقدار باقی نخواهد ماند.

هشدار: از این گزینه با مسئولیت شخصی خود استفاده کنید..IP --forcedecode 4 این گزینه تنها روی سامانه‌های فایلی که از سرایندهای بلوک MAC استفاده می‌کنند تأثیر دارد. به‌طور پیش‌فرض، اگر یک بلوک رمزگشایی شود و MAC ذخیره‌شده با مقدار محاسبه‌شده مطابقت نداشته باشد، یک خطای IO به برنامه بازگردانده شده و بلوک تحویل داده نمی‌شود. با این حال، با تعیین --forcedecode، تنها یک خطا ثبت می‌شود و داده‌ها همچنان به برنامه تحویل داده خواهند شد. این امر ممکن است برای تلاش جهت خواندن فایل‌های آسیب‌دیده مفید باشد.

در صورت ایجاد یک سامانه فایل جدید، فعال بودن سرایندهای کد اصالت‌سنجی بلوک را اجباری می‌کند. هنگام سوار کردن یک سامانه فایل موجود، در صورتی که سرایندهای کد اصالت‌سنجی بلوک فعال نباشند، باعث خروج encfs می‌شود.

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

پیاده کردن (unmount) خودکار سامانه فایل را پس از یک دوره عدم فعالیت فعال می‌کند. این دوره بر حسب دقیقه مشخص می‌شود، بنابراین کوتاه‌ترین مدت زمان وقفه‌ای که می‌توان درخواست کرد یک دقیقه است. اگر فایل‌هایی درون سامانه فایل باز باشند، حتی اگر در حالت فقط‌خواندنی باز باشند، EncFS به‌طور خودکار آن را پیاده نخواهد کرد. با این حال، صرفاً باز بودن فایل‌ها به عنوان فعالیت محسوب نمی‌شود.
سوار کردن سامانه فایل بر حسب تقاضا. این گزینه در حال حاضر تنها در ترکیب با گزینه‌های --idle و --extpass معنا دارد. هنگامی که سامانه فایل غیرفعال می‌شود، EncFS به جای خروج، با رها کردن داخلی ارجاع خود به آن، دسترسی به سامانه فایل را متوقف می‌کند. اگر کسی مجدداً برای دسترسی به سامانه فایل تلاش کند، برنامه extpass برای درخواست گذرواژه از کاربر به کار گرفته می‌شود. در صورت موفقیت، سامانه فایل دوباره در دسترس قرار می‌گیرد.
هنگام شروع encfs، سامانه فایل را سوار نمی‌کند؛ در عوض، سوار کردن را تا اولین استفاده به تأخیر می‌اندازد. این گزینه تنها به همراه --ondemand معنا دارد.
نقطه اتصال (mountPoint) مشخص‌شده را پیاده می‌کند.
تلاش می‌کند تا encfs مانند یک سامانه فایل چندکاربره معمول رفتار کند. به‌طور پیش‌فرض، تمام سامانه‌های فایل مبتنی بر FUSE تنها برای کاربری که آن‌ها را سوار کرده قابل مشاهده هستند. هیچ کاربر دیگری (از جمله root) نمی‌تواند محتوای سامانه فایل را مشاهده کند. گزینه --public دو کار انجام می‌دهد: هنگام سوار کردن سامانه فایل پرچم‌های FUSE به نام‌های "allow_other" و "default_permission" را اضافه می‌کند که به FUSE می‌گوید به سایر کاربران اجازه دسترسی به سامانه فایل را داده و از مجوزهای مالکیتی که توسط سامانه فایل ارائه شده استفاده کند. ثانیاً، پرچم --public نحوه کارکرد توابع ایجاد گره در encfs را تغییر می‌دهد - زیرا آن‌ها تلاش خواهند کرد مالکیت گره‌های جدید را بر اساس شناسه فراخواننده تنظیم کنند.

هشدار: برای اینکه این قابلیت کار کند، encfs باید به عنوان root اجرا شود -- در غیر این صورت توانایی تغییر مالکیت فایل‌ها را نخواهد داشت. توصیه می‌شود قبل از در نظر گرفتن استفاده از --public، ابتدا بررسی کنید آیا گزینه allow_other مربوط به fuse می‌تواند آنچه را می‌خواهید برآورده سازد یا خیر.

حافظه پنهان صفات فایل در هسته را غیرفعال می‌کند. تنظیم این گزینه باعث می‌شود EncFS مقادیر "attr_timeout=0" و "entry_timeout=0" را به FUSE ارسال کند. این امر تضمین می‌کند که تغییرات اعمال‌شده در صفات فایل‌های پشتیبان خارج از EncFS، بلافاصله در نقطه اتصال EncFS نمایان شوند. حافظه پنهان داده‌های داخلی EncFS نیز غیرفعال می‌شود. کاربرد اصلی --nocache در حالت معکوس (reverse mode) است.
مشابه --nocache اما تنها برای صفات (attributes).
مشابه --nocache اما تنها برای داده‌ها (data).
Encfs از نسخه 1.2.2 به بعد به‌طور پیش‌فرض پرچم‌های FUSE به نام‌های "use_ino" و "default_permissions" را اضافه می‌کند، چرا که این کار سازگاری با برخی از برنامه‌ها را بهبود می‌بخشد. اگر به هر دلیلی نیاز دارید یک یا هر دوی این پرچم‌ها را غیرفعال کنید، از گزینه --no-default-flags استفاده نمایید.

خطوط فرمان زیر نتیجه یکسانی ایجاد می‌کنند:

encfs raw crypt
encfs --no-default-flags raw crypt -- -o use_ino,default_permissions
آرگومان‌های FUSE را مستقیماً به کتابخانه زیرین ارسال می‌کند. این کار ارسال گزینه‌های FUSE را هنگام سوار کردن EncFS از طریق mount (و /etc/fstab) آسان می‌سازد. به عنوان مثال:
mount encfs#/home/me-crypt /home/me -t fuse -o kernel_cache

توجه داشته باشید که آرگومان‌های encfs را نمی‌توان به این روش تنظیم کرد. اگر نیاز به تنظیم آرگومان‌های encfs دارید، یک اسکریپت پوششی (wrapper) ایجاد کنید، مانند encfs-reverse؛

#!/bin/sh
encfs --reverse "$@"

سپس با استفاده از مسیر اسکریپت اقدام به سوار کردن نمایید:

mount encfs-reverse#/home/me /home/me-crypt -t fuse
اشکال‌زدایی را در کتابخانه FUSE فعال می‌کند. این گزینه تنها زمانی باید استفاده شود که به وجود مشکلی در خود FUSE (نه EncFS) مشکوک هستید، زیرا حجم بالایی از داده‌های سطح پایین را تولید می‌کند و احتمالاً در ردیابی عمومی مشکلات چندان مفید نخواهد بود. ابتدا حالت پرحرف (verbose با پرچم -v) را امتحان کنید که نمای سطح بالاتری از آنچه درون EncFS رخ می‌دهد ارائه می‌دهد.
راهنمای FUSE را نمایش می‌دهد.
--
گزینه -- به EncFS دستور می‌دهد تا هرگونه آرگومان باقی‌مانده را مستقیماً به FUSE ارسال کند. به نوبه خود، FUSE این آرگومان‌ها را به fusermount پاس می‌دهد. برای کسب اطلاعات درباره دستورهای موجود، صفحه راهنمای fusermount را مشاهده کنید.

مشخص می‌کند که از کدام فایل پیکربندی (معمولاً با نام .encfs6.xml) استفاده شود. به‌طور پیش‌فرض، فایل پیکربندی از دایرکتوری رمزشده خوانده می‌شود. استفاده از این گزینه امکان نگهداری فایل پیکربندی را به‌صورت جدا از فایل‌های رمزشده فراهم می‌کند.

هشدار: در صورت از دست دادن فایل پیکربندی، محتویات فایل‌های رمزشده به‌طور غیرقابل بازگشتی از دست خواهند رفت. این فایل حاوی کلید اصلی (master key) است که با گذرواژه شما رمزگذاری شده است. بدون کلید اصلی، حتی در صورت دانستن گذرواژه، بازیابی اطلاعات غیرممکن خواهد بود..SH "مثال‌ها (EXAMPLES)" ایجاد یک سیستم‌فایل رمزگذاری‌شده جدید. داده‌های خام (رمزگذاری‌شده) در «~/.crypt» ذخیره شده، و داده‌های رمزگذاری‌نشده در «~/crypt» قابل مشاهده می‌شوند. در این مثال هر دو دایرکتوری در دایرکتوری خانگی قرار دارند. این مثال خروجی کامل encfs را هنگام پرسش از کاربر برای ساخت سیستم‌فایل نشان می‌دهد:

% encfs ~/.crypt ~/crypt
Directory "/home/me/.crypt" does not exist, create (y,n)?y
Directory "/home/me/crypt" does not exist, create (y,n)?y
Creating new encrypted volume.
Please choose from one of the following options:
 enter "x" for expert configuration mode,
 enter "p" for pre-configured paranoia mode,
 anything else, or an empty line will select standard mode.
?> 
Standard configuration selected.
Using cipher Blowfish, key size 160, block size 512
New Password: <password entered here>
Verify: <password entered here>

سیستم‌فایل اکنون سوار (mount) شده و در ~/crypt قابل مشاهده است. اگر فایل‌ها در آنجا ایجاد شوند، به شکل رمزگذاری‌شده در ~/.crypt دیده خواهند شد. برای پیاده کردن (unmount) سیستم‌فایل، از fusermount با گزینهٔ -u (پیاده‌سازی) استفاده کنید:

% fusermount -u ~/crypt

مثالی دیگر. برای سوار کردن همان سیستم‌فایل، اما نام‌گذاری نقطهٔ اتصال توسط fusermount به نام '/dev/foo' (همان‌طور که در df و ابزارهای دیگری که /etc/mtab را می‌خوانند نمایش داده می‌شود)، و همچنین درخواست حافظهٔ موقت (caching) در سطح کرنل برای داده‌های فایل (که هر دو آرگومان‌های ویژه‌ای برای fusermount هستند):

% encfs ~/.crypt ~/crypt -- -n /dev/foo -c

یا، در صورتی که هنگام کار در یک سیستم‌فایل رمزگذاری‌شده با رفتاری غیرعادی تحت برنامه‌ای خاص مواجه شدید، اجرای برنامه در حالت پرگویی (verbose mode) هنگام بازتولید مشکل و ارسال خروجی آن به همراه گزارش خطا می‌تواند مفید باشد:

% encfs -v -f ~/.crypt ~/crypt 2> encfs-report.txt

به منظور جلوگیری از نشت اطلاعات حساس از طریق کانال‌های اشکال‌زدایی، تمام هشدارها و پیام‌های اشکال‌زدایی (همان‌طور که در حالت پرگویی خروجی داده می‌شوند) تنها شامل نام‌های رمزگذاری‌شدهٔ فایل‌ها هستند. در صورت تمایل می‌توانید از تابع decode در برنامهٔ encfsctl برای رمزگشایی نام فایل‌ها استفاده کنید.

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

یکی از این محدودیت‌ها، طول نام فایل است. اگر سیستم‌فایل زیرین شما طول نام فایل را به N نویسه محدود کند، آن‌گاه EncFS شما را تقریباً به 3*(N-2)/4 محدود خواهد کرد. به عنوان مثال، اگر سیستم‌فایل میزبان نام فایل‌ها را به ۲۵۵ نویسه محدود کند، EncFS به ۱۸۹ نویسه برای نام فایل محدود خواهد شد. این امر به این دلیل است که نام‌های فایل رمزگذاری‌شده همیشه طولانی‌تر از نام‌های فایل متنی ساده (plaintext) هستند.

هنگامی که به EncFS دایرکتوری ریشه‌ای داده شود که شامل سیستم‌فایل موجود EncFS نباشد، گزینهٔ ایجاد آن را ارائه می‌دهد. توجه داشته باشید که گزینه‌ها فقط در زمان ایجاد سیستم‌فایل قابل تنظیم هستند. هیچ پشتیبانی برای تغییر درجا (in-place) گزینه‌های یک سیستم‌فایل وجود ندارد.

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

چندین نمونه از encfs می‌توانند به طور هم‌زمان اجرا شوند، از جمله نگارش‌های متفاوتی از encfs، تا زمانی که با ماژول FUSE فعلی روی سیستم شما سازگار باشند.

امکان انتخاب بین دو پیکربندی از پیش تنظیم‌شده (حالت‌های 'standard' و 'paranoia') به همراه حالت پیکربندی کارشناسانه (expert) فراهم شده است.

حالت Standard از تنظیمات زیر استفاده می‌کند:
رمزنگار: AES
اندازهٔ کلید: ۱۹۲ بیت
الگوریتم PBKDF2 با زمان اجرای ۰٫۵ ثانیه، سالت ۱۶۰ بیتی
اندازهٔ بلوک سیستم‌فایل: ۱۰۲۴ بایت
کدگذاری نام فایل: کدگذاری بلوکی همراه با زنجیره‌سازی IV
سرایندهای فایل با بردار مقداردهی اولیهٔ (IV) یکتا
عبور دادن حفره‌های فایل (File holes passed through)

حالت Paranoia از تنظیمات زیر استفاده می‌کند:
رمزنگار: AES
اندازهٔ کلید: ۲۵۶ بیت
الگوریتم PBKDF2 با زمان اجرای ۳ ثانیه، سالت ۱۶۰ بیتی
اندازهٔ بلوک سیستم‌فایل: ۱۰۲۴ بایت
کدگذاری نام فایل: کدگذاری بلوکی همراه با زنجیره‌سازی IV
سرایندهای فایل با بردار مقداردهی اولیهٔ (IV) یکتا
سرایندهای بلوک کد احراز اصالت پیام (MAC)
زنجیره‌سازی بردار مقداردهی اولیهٔ خارجی (External IV Chaining)
عبور دادن حفره‌های فایل (File holes passed through)

در حالت پیکربندی کارشناسانه / دستی، هر یک از گزینه‌های بالا قابل پیکربندی است. در اینجا فهرستی از گزینه‌های فعلی همراه با نکاتی دربارهٔ معنای آن‌ها آمده است:

از نگارش 1.5 به بعد، EncFS از PBKDF2 به عنوان تابع پیش‌فرض اشتقاق کلید استفاده می‌کند. تعداد تکرارها در تابع کلیدسازی بر اساس زمان واقعی ساعت دیواری برای تولید کلید انتخاب می‌شود. در حالت استاندارد زمان هدف ۰٫۵ ثانیه و در حالت پارانویا زمان هدف ۳٫۰ ثانیه در نظر گرفته شده است.

روی یک سیستم 1.6GHz AMD 64، تقریباً ۶۴ هزار تکرار تابع اشتقاق کلید در نیم ثانیه پردازش می‌شود. تعداد دقیق تکرارهایی که باید استفاده شود در فایل پیکربندی ذخیره می‌گردد، زیرا برای سوار کردن مجدد سیستم‌فایل به آن نیاز است.

اگر پیکربندی سیستم‌فایل EncFS از نگارش 1.4.x با نگارش 1.5 تغییر داده شود (مانند زمان استفاده از encfsctl برای تغییر گذرواژه)، تابع جدید PBKDF2 اعمال شده و سیستم‌فایل دیگر توسط نگارش‌های قدیمی‌تر قابل خواندن نخواهد بود.

کدام الگوریتم رمزنگاری استفاده شود. این فهرست به طور خودکار بر اساس الگوریتم‌های پشتیبانی‌شده‌ای که EncFS در کتابخانه‌های رمزنگاری یافته تولید می‌شود. هنگام استفاده از نگارشی جدید از OpenSSL، گزینه‌های معمول Blowfish و AES هستند.

الگوریتم Blowfish یک رمزنگار ۸ بایتی است - که در هر بار ۸ بایت را کدگذاری می‌کند. الگوریتم AES یک رمزنگار ۱۶ بایتی است.

بسیاری از الگوریتم‌های پشتیبانی‌شده، اگر نگوییم همه، از چندین طول کلید پشتیبانی می‌کنند. واقعاً نیازی به داشتن طول کلیدهای بسیار عظیم نیست. حتی ۱۶۰ بیت (مقدار پیش‌فرض) احتمالاً بیش از حد نیاز است.
این اندازه (به بایت) مقداری است که EncFS در هر بار با آن سروکار دارد. هر بلوک بردار مقداردهی اولیهٔ (IV) مخصوص به خود را دریافت می‌کند و در حالت زنجیره‌سازی بلوک رمز (cipher-block-chaining) الگوریتم کدگذاری می‌شود. یک بلوک ناقص در انتهای فایل با استفاده از حالت جریانی (stream mode) کدگذاری می‌شود تا از نیاز به ذخیرهٔ اندازهٔ فایل در جایی دیگر جلوگیری شود.

داشتن اندازه‌های بلوک بزرگ‌تر سربار EncFS را اندکی کاهش می‌دهد، اما اگر برنامه‌های شما بخش‌های کوچکی از فایل‌ها را بخوانند، می‌تواند سربار اضافه کند. برای خواندن یک بایت منفرد از یک فایل، کل بلوک حاوی آن بایت باید خوانده و رمزگشایی شود، بنابراین اندازهٔ بلوک بزرگ به درخواست‌های کوچک سربار تحمیل می‌کند. در فراخوانی‌های نوشتن وضعیت حتی بدتر است، زیرا یک بلوک باید خوانده و رمزگشایی شود، تغییرات اعمال گردد، و سپس بلوک دوباره کدگذاری شده و نوشته شود.

مقدار پیش‌فرض از نگارش 1.0 برابر ۵۱۲ بایت است. این مقدار در نگارش 0.x روی ۶۴ بایت به طور ثابت برنامه‌نویسی شده بود، که برای کاربردهای عمومی به اندازهٔ تنظیمات فعلی کارآمد نبود.

جدید در 1.1. انتخابی بین کدگذاری جریانی (stream) نام فایل و کدگذاری بلوکی (block) ارائه می‌شود. مزیت کدگذاری جریانی این است که نام‌های فایل کدگذاری‌شده تا حد امکان کوتاه خواهند بود. اگر نام فایلی با یک حرف داشته باشید، در شکل کدگذاری‌شده بسیار کوتاه خواهد بود، در حالی که در کدگذاری بلوکی نام فایل‌ها همیشه به سمت بالا گرد شده و مضربی از اندازهٔ بلوک رمزنگاری می‌شوند (۸ بایت برای Blowfish و ۱۶ بایت برای AES).

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

بر اساس سیستم‌فایل زیرینی که حداکثر از ۲۵۵ نویسه در نام فایل‌ها پشتیبانی می‌کند، حداکثر طول ممکن نام فایل بسته به طرح کدگذاری انتخاب‌شده به این شرح است: stream (۱۸۹)، block (۱۷۶)، block32 (۱۴۳). توجه داشته باشید در صورتی که نام‌های فایل حاوی نویسه‌های خاص (چندبایتی) باشند، بهتر است از بایت صحبت کنیم.

پیش از نگارش 1.1، تنها کدگذاری جریانی پشتیبانی می‌شد.

جدید در 1.1. در نگارش‌های پیشین EncFS، هر بخش از نام فایل در یک مسیر به طور جداگانه کدگذاری می‌شد؛ بنابراین اگر "foo" به "XXX" کدگذاری می‌شد، با داشتن یک کلید رمزنگاری یکسان، همیشه به همان شکل کدگذاری می‌شد، صرف‌نظر از این‌که مسیر "a/b/foo" باشد یا "aa/foo/cc" و غیره. این بدان معنا بود که فرد ناظر بر داده‌های رمزگذاری‌شده می‌توانست متوجه شود که دو فایل در دایرکتوری‌های مختلف دارای نام یکسانی هستند، حتی اگر نمی‌دانست آن نام پس از رمزگشایی چیست.

با زنجیره‌سازی بردار مقداردهی اولیه (IV chaining)، هر دایرکتوری بردار مقداردهی اولیهٔ اختصاصی خود را دریافت می‌کند؛ بنابراین "a/foo" و "b/foo" نام‌های کدگذاری‌شدهٔ کاملاً متفاوتی برای "foo" خواهند داشت. این ویژگی تقریباً هیچ تأثیری بر کارایی ندارد (برای اغلب عملیات‌ها)، و به همین دلیل در همهٔ حالت‌ها به عنوان پیش‌فرض فعال است.

نکته: یک استثنای چشمگیر در زمینهٔ کارایی، تغییر نام دایرکتوری‌ها است. از آن‌جا که بردار مقداردهی اولیه برای کدگذاری نام فایل به مسیر دایرکتوری وابسته است، هرگونه تغییر نام نیازمند کدگذاری مجدد تمام نام‌های فایل در درخت دایرکتوریِ در حال تغییر است. اگر هزاران فایل وجود داشته باشد، EncFS مجبور خواهد بود هزاران تغییر نام انجام دهد. همچنین ممکن است EncFS در حین عملیات تغییر نام با فایلی مواجه شود که قادر به رمزگشایی آن نیست یا اجازهٔ انتقال آن را ندارد؛ در این حالت تلاش خواهد کرد تمام تغییراتی را که تا آن لحظه انجام داده به حالت قبل بازگرداند و عملیات تغییر نام با شکست مواجه خواهد شد.

جدید در 1.1. در نگارش‌های پیشین EncFS، هر فایل به روشی یکسان کدگذاری می‌شد. هر بلوک در یک فایل همواره بردار مقداردهی اولیهٔ مختص به خود را داشت، اما به روشی معین و قطعی (deterministic)، به طوری که بلوک N در یک فایل درست مانند بلوک N در فایلی دیگر کدگذاری می‌شد. این امر باعث می‌شد کسی بتواند با مقایسهٔ داده‌های کدگذاری‌شده متوجه شود که آیا دو فایل یکسان هستند (یا بخش‌هایی از فایل یکسان است) یا خیر.

با بردارهای مقداردهی اولیهٔ مجزا برای هر فایل، هر فایل بردار مقداردهی اولیهٔ تصادفی ۶۴ بیتی اختصاصی خود را دریافت می‌کند، به طوری که هر فایل به روشی متفاوت رمزگذاری می‌شود.

این گزینه به صورت پیش‌فرض فعال است.

حالت معکوس (Reverse mode) بردار IV را از شمارهٔ inode مشتق می‌کند؛ بنابراین ممکن است به عنوان مثال هنگام کپی شدن فایل‌های مبدأ از یک سیستم‌فایل به سیستم‌فایلی دیگر تغییر کند..IP "External IV Chaining" 4 جدید در ۱.۱.۳. این گزینه ارتباط نزدیکی با «بردارهای مقداردهی اولیه به ازای هر فایل» (Per-File Initialization Vectors) و «زنجیره‌سازی بردار مقداردهی اولیه نام فایل» (Filename Initialization Vector Chaining) دارد. اساساً این قابلیت، زنجیره‌سازی بردار مقداردهی اولیه را از نام‌های فایل به بردار مقداردهی اولیه به ازای هر فایل گسترش می‌دهد.

هنگامی که این گزینه فعال باشد، بردار مقداردهی اولیه به ازای هر فایل با استفاده از بردار مقداردهی اولیه مشتق‌شده از کد زنجیره‌سازی بردار مقداردهی اولیه نام فایل کدگذاری می‌شود. این بدان معناست که داده‌های درون یک فایل به نام فایل گره می‌خورند. اگر یک فایل رمزگذاری‌شده در خارج از encfs تغییر نام یابد، دیگر درون encfs قابل رمزگشایی نخواهد بود. توجه داشته باشید که مگر در صورت فعال بودن سرایندهای Block MAC، خطای رمزگشایی شناسایی نخواهد شد و در نتیجه داده‌هایی خوانده می‌شوند که ظاهراً تصادفی به نظر می‌رسند.

این امر هزینه‌هایی نیز به همراه دارد. هنگامی که External IV Chaining فعال باشد، پیوندهای سخت (hard links) در فایل‌سیستم مجاز نخواهند بود، زیرا راهی برای رمزگشایی صحیح دو نام فایل مختلف که به یک داده یکسان اشاره می‌کنند، وجود نخواهد داشت.

همچنین، تغییر نام یک فایل مستلزم تغییر سرایند فایل است؛ بنابراین، تغییر نام تنها زمانی مجاز خواهد بود که کاربر دسترسی نوشتن به فایل را داشته باشد.

به دلیل این محدودیت‌ها، این گزینه به طور پیش‌فرض برای حالت استاندارد غیرفعال است (و به طور پیش‌فرض برای حالت پارانویا فعال است).

این گزینه ممکن است با برخی از ارائه‌دهندگان ابری ناسازگار باشد، زیرا در هنگام تغییر نام، محتوای فایل تغییر می‌کند، اما برچسب زمانی آن تغییری نمی‌کند. به همین دلیل، تغییرات فایل ممکن است توسط برنامه‌های همگام‌سازی ارائه‌دهندگان ابری به درستی دیده نشود. از این رو استفاده از آن برای فضاهای ابری توصیه نمی‌شود.

جدید در ۱.۱. اگر این گزینه فعال باشد، هر بلوک در هر فایل همراه با یک چِک‌سام رمزنگاری (کد اصالت‌سنجی پیام یا Message Authentication Code) ذخیره می‌شود. این کار عملاً تغییر یک فایل بدون شناسایی شدن توسط EncFS را غیرممکن می‌سازد. EncFS از خواندن داده‌هایی که چِک‌سام را تأیید نکنند خودداری کرده، خطا را ثبت می‌کند و یک خطای I/O به برنامه برمی‌گرداند.

این امر بار اضافی قابل توجهی ایجاد می‌کند (پیش‌فرض ۸ بایت در هر بلوک فایل‌سیستم است)، به علاوه بار محاسباتی، و به طور پیش‌فرض به جز در حالت پارانویا فعال نیست.

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

باعث می‌شود encfs در فایل‌ها حفره‌ها (holes) را باقی بگذارد. اگر یک بلوک کاملاً به صورت صفر خوانده شود، فرض می‌شود که یک حفره است و در هنگام خواندن به صورت صفر رها می‌شود (رمزگشایی نمی‌شود). در صورت دسترسی به encfs با استفاده از پروتکل SMB، این گزینه الزامی است.

به طور پیش‌فرض فعال است. می‌تواند در حالت خبره (expert mode) غیرفعال شود.

هدف اصلی EncFS محافظت آفلاین از داده‌ها است. بدین معنا که روشی مناسب برای ذخیره فایل‌ها فراهم می‌کند تا در صورت به دست آمدن بعدی فایل‌ها، هر تلاشی برای خواندن آن‌ها خنثی شود.

برخی از الگوریتم‌ها در EncFS همچنین برای خنثی کردن حملات آنلاین طراحی شده‌اند؛ جایی که فرض می‌شود مهاجم توانایی دستکاری فایل‌ها را دارد.

در برابر نفوذی‌ترین حملات، که در آن‌ها مهاجم کنترل کاملی بر روی دستگاه کاربر دارد (و بنابراین می‌تواند خودِ EncFS، یا FUSE، یا خود هسته را تغییر دهد)، هیچ محافظتی صورت نمی‌گیرد. تصور نکنید که اگر رمز عبور خود را در یک رایانه به خطر افتاده وارد کنید، فایل‌های رمزگذاری‌شده از داده‌های حساس شما محافظت خواهند کرد. این که چگونه تشخیص دهید رایانه برای استفاده ایمن است، خارج از محدوده این مستندات است.

با این اوصاف، در اینجا نمونه‌هایی از حملات و تکنیک‌های جمع‌آوری داده از محتویات فایل‌سیستم به همراه الگوریتم‌هایی که EncFS برای دفع آن‌ها پشتیبانی می‌کند، آورده شده است:

حمله: تغییر چند بایت از یک فایل رمزگذاری‌شده (بدون دانستن اینکه به چه چیزی رمزگشایی خواهند شد).
EncFS از هیچ شکلی از رمزگذاری XOR که به بایت‌های منفرد اجازه دهد بدون تأثیر بر سایر بایت‌ها تغییر یابند، استفاده نمی‌کند. بیشتر تغییرات ده‌ها بایت یا بیشتر را تحت تأثیر قرار می‌دهند. علاوه بر این، می‌توان از سرایندهای Block MAC برای شناسایی هرگونه تغییر در فایل‌ها استفاده کرد.
حمله: کپی کردن یک بلوک تصادفی از یک فایل به یک بلوک تصادفی از فایلی دیگر.
هر بلوک دارای بردار مقداردهی اولیه [قطعی] ویژه خود است.
حمله: کپی کردن بلوک N به بلوک N از فایلی دیگر.
هنگامی که پشتیبانی از Per-File Initialization Vector فعال باشد (پیش‌فرض در فایل‌سیستم‌های 1.1.x)، یک بلوک کپی‌شده هنگام انتقال به فایلی دیگر به درستی رمزگشایی نخواهد شد.
حمله: کپی کردن یک فایل به صورت کامل به فایلی دیگر.
می‌توان با فعال کردن حالت External IV Chaining از این کار جلوگیری کرد.
حمله: تشخیص یکسان بودن دو نام فایل با نگاه کردن به نام‌های رمزگذاری‌شده.
زنجیره‌سازی بردار مقداردهی اولیه نام فایل (Filename Initialization Vector chaining) با اختصاص دادن یک بردار مقداردهی اولیه ۶۴-بیتی مشتق‌شده از نام مسیر کامل به هر فایل، از این امر جلوگیری می‌کند.
حمله: مقایسه اینکه آیا دو فایل حاوی داده‌های یکسانی هستند یا خیر.
پشتیبانی از Per-File Initialization Vector از این امر جلوگیری می‌کند.

این کتابخانه به این امید که مفید واقع شود توزیع شده است، اما بدون هرگونه ضمانت؛ حتی بدون ضمانت ضمنی قابل فروش بودن یا مناسب بودن برای یک هدف خاص. لطفاً برای جزئیات کامل به فایل «COPYING» توزیع‌شده با EncFS مراجعه کنید.

EncFS توسط Valient Gough <vgough@pobox.com> نوشته شده است.

وبگاه: https://vgough.github.io/encfs.

پشتیبانی، گزارش‌های باگ...: https://github.com/vgough/encfs.

فهرست پستی: ندارد.

پورت‌های Cygwin و Windows: https://github.com/vgough/encfs/wiki.

encfsctl(1)

2025-03-21 1.9.5