WireGuard میگوید طول کلید خصوصی اشتباه است: حالا چه کنیم؟
یک کلید 32 بایتی در base64 برابر 44 نویسه است. پیش از هر بازسازی، تصمیم بگیرید متن آسیبدیده دارید یا هویت اشتباه.
پیام میگوید کلید خصوصی طول اشتباهی دارد، و این جمله اول به رمزگذاری اشاره میکند و بعد به رمزنگاری. کلیدهای WireGuard 32 بایت را به base64 تبدیل میکنند که 44 نویسه همراه با یک پد پایانی میدهد، پس مقداری با اندازه دیگر کلید نیست، هر چقدر هم تصادفی به نظر برسد. پر کردن رشته تا جایی که تجزیهگر آن را بپذیرد، مقداری خوشساخت تولید میکند که هیچ همتایی هرگز آن را نمیشناسد.
دو کار متفاوت پشت این خطا پنهان است: تعمیر متن یک کلید معتبر، و جایگزینی هویتی که دیگر در اختیار ندارید. پیامدهایشان متفاوت است، و یکی از آنها سر دیگر را بیاعتبار میکند.
تجزیهگر چه انتظاری دارد
کلید WireGuard 32 بایت ماده کلیدی در base64 با پد استاندارد است که رشتهای ثابت با 44 نویسه میدهد. ابزارها هر چیزی را که دقیقاً به 32 بایت رمزگشایی نشود رد میکنند، چون خم زیرین یک اسکالر 32 بایتی میگیرد و نه چیز دیگر. مقادیر عمومی و خصوصی از رمزگذاری یکسان استفاده میکنند، پس تجزیهگر فقط از روی قالب نمیتواند بگوید کدام را چسباندهاید. همین ابهام نیمی از سردرگمی پیرامون این خطا را میسازد.
wg genkey | tee private.key | wg pubkey > public.key
base64 -d private.key | wc -c
wc -c private.key
wg show wg0 public-key
اگر مقدار شما به 32 بایت رمزگشایی شود، طول درست است و شکایت از جای دیگری در فایل میآید. اگر به چیزی کوتاهتر رمزگشایی شود، ماده بریده دارید نه مشکل قالببندی.
آسیب قالببندی یا ماده اشتباه؟
آسیب قالببندی در لبهها جمع میشود: گیومههایی که یک پوسته اضافه کرده، برچسبی مثل private_key که همراه مقدار کپی شده، شکست خطی که یک کلاینت گفتگو درج کرده، یا فاصله پایانی که از چسباندن جان سالم به در برده. هر یک از اینها رشته را تغییر میدهد بیآنکه بایتها را تغییر دهد، پس حذف آن هویت اصلی را بازمیگرداند. فایل را نویسه به نویسه با رکورد تأمین مقایسه کنید، نه اینکه نقطهگذاری را بردارید تا تجزیهگر ساکت شود.
ماده اشتباه وضعیت دیگری است. یک گذرواژه، یک کلید گواهی یا یک مقدار عمومی میتوانند باورپذیر به نظر برسند و به اندازه اشتباه رمزگشایی شوند. هیچ پاکسازیای هیچیک را به اسکالری که همتا انتظار دارد تبدیل نمیکند. آن حالت هویت تازه میخواهد نه ویرایش.
کلید عمومی در فیلد خصوصی
رایجترین اشتباه، چسباندن یک مقدار عمومی در فیلد خصوصی است، یا برعکس. هر دو base64 معتبر 32 بایتی هستند، پس بررسی طول میگذرد و دستدادن بعداً بدون پیام مفید شکست میخورد. کلید خصوصی همان اسکالری است که کلید عمومی را میسازد، پس میتوانید با استخراج مقدار عمومی و مقایسه آن با آنچه همتا مجاز میکند روشن کنید. وقتی مقدار استخراجشده با رکورد نمیخواند، هویت اشتباه در دست دارید نه یک غلط تایپی.
جایگزینی کلید خصوصی کلاینت بدون بهروزرسانی کلید عمومی مجاز در سر دیگر، همان ناسازگاری را بازمیسازد، با این سردرگمی اضافه که فایل خود کلاینت حالا سازگار به نظر میرسد. هر دو سر را در یک عملیات تغییر دهید، وگرنه نفر بعدی نیمه اشتباه را اشکالزدایی میکند.
پروفایل را تعمیر کنید، سپس دستدادن را اثبات کنید
وقتی کلید به اندازه درست رمزگشایی شد و با جفت مجاز خواند، کار باقیمانده پروفایل و مسیر است. فرمانهای زیر هنگام نیاز یک جفت تازه میسازند، اندازه رمزگشاییشده یک کلید موجود را بررسی میکنند و مقدار عمومیای را که واسط واقعاً استفاده میکند میخوانند. هرگز مقدار خصوصی را در یک تیکت یا سایت رمزگشا نچسبانید.
wg genkey | tee new.key | wg pubkey > new.pub
base64 -d private.key | wc -c
ip route get 10.60.9.5
wg show wg0 latest-handshakes
بررسی اندازه پاسخ میدهد که آیا ماده شکل کلید دارد، و پرسوجوی مسیر پاسخ میدهد که آیا بستهای هرگز به واسط میرسد. خط دستدادنی که پس از گذشتن هر دو بررسی خالی میماند، تشخیص را به نقطه پایانی همتا و نشانیهای مجاز منتقل میکند. کلید عمومی واسط را یک بار آخر با رکورد تأمین بخوانید، چون یک پروفایل ذخیرهشده کهنه میتواند درست به نظر برسد در حالی که پروفایل فعال متفاوت است].
ثبت کنید کدام مقدار را جایگزین کردید و نسخه مجاز کجاست. هر کس دفعه بعد این همتا را لمس کند باید بداند کدام سر تغییر کرد.