کلید از پیش به اشتراکگذاشته در IPsec، OpenVPN و WireGuard چه میکند
یک راز مشترک میتواند طرف مقابل را احراز هویت کند یا یک لایه حفاظت اضافه کند، و نقش آن با پروتکل تغییر میکند. آن را با گذرواژه کاربر اشتباه نگیرید.
عبارت کلید از پیش به اشتراکگذاشته در مستندات IPsec، OpenVPN و WireGuard دیده میشود، اما به سه شیء متفاوت اشاره دارد. یکی راز احراز هویت است، دیگری یک کانال کنترل را محافظت میکند، و سومی به دستدهی که از قبل هویت دارد موادی اضافه میکند. برخورد با آنها بهعنوان چیزهایی قابل تعویض، اتصالی میسازد که در مرحلهای شکست میخورد که هیچکس انتظارش را نداشت. پیش از کپی کردن یک مقدار در آن، بخوانید که این فیلد در آن پروتکل چه میکند.
سه پروتکل، سه معنا
هر پروتکل وظیفه کلید را در مشخصات خود تعریف میکند و این وظایف همپوشانی ندارند. راز احراز هویت اثبات میکند که دو طرف یک مقدار را میدانند. کلید کانال کنترل از مذاکرهای که پس از آن میآید محافظت میکند. افزونه دستدهی زمانبندی کلیدها را تغییر میدهد بیآنکه تغییر دهد طرفها چه کسانی هستند.
هیچیک از این نقشها یک انسان را احراز هویت نمیکند، و همین اشتباه بیشترین زمان را میگیرد. کلید از پیش به اشتراکگذاشته پیش از تبادل روی دستگاهها یا دروازهها قرار میگیرد، پس هر دارنده از دید طرف مقابل یکسان است. این ویژگی برای پیوند نقطهبهنقطه بین دو روتر یک مزیت است و برای سرویس دسترسی از راه دور با کارمندان نامدار یک ریسک. اعتبارنامه حساب و راز رمزنگاری را در ستونهای جداگانه هر سندی که استقرار را توصیف میکند نگه دارید.
IPsec و OpenVPN کلمه را متفاوت به کار میبرند
IKEv2 میتواند طرف مقابل را بهجای گواهیها با یک راز از پیش به اشتراکگذاشته احراز هویت کند، و مقدار باید در دو طرف یکسان باشد. چون همین راز معمولاً برای گروهی از طرفها تنظیم میشود، هر دارنده میتواند خود را جای دیگران جا بزند، و تبادل هیچ محرمانگی روبهجلو از کلیدهای هویتی که هرگز نداشته به دست نمیآورد.
گزینههای tls-auth و tls-crypt در OpenVPN یک کلید ایستا به کانال کنترل متصل میکنند، یا امضای HMAC اضافه میکنند یا خود مذاکره را رمز میکنند. این کلید گذرواژه کاربر نیست و جای گواهی کلاینت را نمیگیرد. تشخیص این دو در زمان تمدید اهمیت دارد، چون تغییر گذرواژه کلید کانال کنترل را دستنخورده باقی میگذارد.
PSK در WireGuard اضافه میکند، شناسایی نمیکند
طرفهای WireGuard از قبل کلیدهای عمومی و خصوصی Curve25519 دارند و دستدهی همین هویتها را احراز میکند. کلید از پیش به اشتراکگذاشته اختیاری در کلید زنجیرهای آمیخته میشود و موادی متقارن روی تبادل کلیدهای عمومی میافزاید.
بهتنهایی نه هویتی میدهد و نه حساب کاربری، پس یک اپراتور نمیتواند دو دارنده را با PSK آنها از هم تشخیص دهد. دو طرف باید یک مقدار را حمل کنند، وگرنه دستدهی بدون پیام خطای مفید شکست میخورد. به همین دلیل چرخش کلید باید برای هر دو سو همزمان برنامهریزی شود، نه بهصورت ویرایش یک فایل.
توزیع، چرخش و حذف را بررسی کنید
توزیع نقطه ضعف هر طرحی است که یک راز را در جاهای زیادی به کار میبرد. مقداری که در پنجره گفتوگو جایگذاری شود، در مخزنی ذخیره شود یا میان محیطها بازاستفاده شود، نسخههایی جمع میکند که هیچکس نمیتواند برشمرد، و هر نسخه بیصدا دامنه آسیب را گسترش میدهد.
متن Base64 رمزنگاری نیست. رازی که کنار یک گواهی عمومی در همان پوشه نگهداری میشود، هنوز رازی در متن آشکار است.
openssl rand -base64 32
sudo wg show wg0 preshared-keys
sudo grep -R -n 'psk' /etc/ipsec.d/ 2>/dev/null
بر اساس برنامه و پس از هر افشای مشکوک چرخش کنید و پیش از باطل کردن مقدار قدیمی، هر طرف مورد نظر را بهروز کنید. سپس پیوند را از هر دو سو آزمایش کنید، چون کلید ناهمخوان در دستدهی شکست میخورد و دقیقاً شبیه مشکل دیوار آتش به نظر میرسد.
مستند کنید که کدام راز کدام مرحله را محافظت میکند، تا بازنشانی گذرواژه هرگز با تمدید یک کلید رمزنگاری اشتباه گرفته نشود. همان یک خط هر بار که کسی استقرار را بازبینی میکند یک ساعت صرفهجویی میکند.