Thông báo nói rằng khóa riêng có độ dài không đúng, và cách diễn đạt đó trước hết chỉ vào việc mã hóa rồi mới đến mật mã học. Khóa của WireGuard mã hóa 32 byte thành base64, tạo ra 44 ký tự bao gồm phần đệm cuối, nên một giá trị có kích thước khác không phải là khóa dù trông ngẫu nhiên đến đâu. Việc độn chuỗi cho đến khi bộ phân tích chấp nhận sẽ tạo ra một giá trị đúng định dạng mà không peer nào sẽ nhận ra.

Đằng sau lỗi này là hai công việc khác nhau: sửa văn bản của một khóa hợp lệ và thay thế một danh tính mà bạn không còn giữ. Chúng có hậu quả khác nhau, và một trong hai vô hiệu hóa đầu bên kia.

Bộ phân tích mong đợi điều gì

Khóa của WireGuard là 32 byte vật liệu khóa ở dạng base64 với phần đệm tiêu chuẩn, cho ra một chuỗi cố định 44 ký tự. Các công cụ từ chối mọi thứ không giải mã đúng thành 32 byte, vì đường cong bên dưới nhận một vô hướng 32 byte và không gì khác. Giá trị công khai và riêng tư dùng cùng một cách mã hóa, nên bộ phân tích không thể chỉ từ định dạng mà biết bạn đã dán cái nào. Chính sự mơ hồ đó gây ra một nửa sự nhầm lẫn quanh lỗi này.

wg genkey | tee private.key | wg pubkey > public.key
base64 -d private.key | wc -c
wc -c private.key
wg show wg0 public-key

Nếu giá trị của bạn giải mã thành 32 byte thì độ dài là đúng và khiếu nại đến từ chỗ khác trong tệp. Nếu nó giải mã thành thứ ngắn hơn, bạn có vật liệu bị cắt chứ không phải vấn đề định dạng.

Hỏng định dạng hay vật liệu sai?

Hỏng định dạng thường tập trung ở các mép: dấu ngoặc kép do shell thêm vào, một nhãn như private_key bị sao chép cùng giá trị, một lần xuống dòng do ứng dụng trò chuyện chèn vào, hoặc một khoảng trắng cuối còn sót lại sau khi dán. Mỗi thay đổi đó làm thay đổi chuỗi mà không đổi byte, nên gỡ bỏ nó sẽ khôi phục danh tính ban đầu. Hãy so tệp với bản ghi cấp phát theo từng ký tự thay vì gỡ dấu câu cho đến khi bộ phân tích im lặng.

Vật liệu sai là tình huống khác. Mật khẩu, khóa chứng chỉ hay giá trị công khai đều có thể trông hợp lý và giải mã ra kích thước sai. Không có cách làm sạch nào biến chúng thành vô hướng mà peer mong đợi. Trường hợp đó cần một danh tính mới chứ không phải chỉnh sửa.

Khóa công khai nằm trong trường riêng tư

Nhầm lẫn phổ biến nhất là dán một giá trị công khai vào trường riêng tư, hoặc ngược lại. Cả hai đều là base64 hợp lệ 32 byte, nên kiểm tra độ dài qua được và bắt tay thất bại về sau mà không có thông báo hữu ích. Khóa riêng là vô hướng tạo ra khóa công khai, nên bạn có thể phân định bằng cách suy ra giá trị công khai và so với điều peer cho phép. Khi giá trị suy ra không khớp bản ghi, bạn đang giữ danh tính sai chứ không phải lỗi đánh máy.

Thay khóa riêng của máy khách mà không cập nhật khóa công khai được cấp phép ở đầu bên kia sẽ tái tạo đúng sự không khớp đó, kèm thêm sự nhầm lẫn rằng tệp của chính máy khách giờ trông tự nhất quán. Hãy đổi cả hai đầu trong một thao tác, nếu không người tiếp theo sẽ gỡ lỗi nhầm nửa.

Sửa hồ sơ, rồi chứng minh bắt tay

Khi khóa giải mã đúng kích thước và khớp với cặp được cấp phép, công việc còn lại là hồ sơ và tuyến đường. Các lệnh dưới đây tạo cặp mới khi cần, xác minh kích thước đã giải mã của một khóa hiện có và đọc giá trị công khai mà giao diện thực sự dùng. Không bao giờ dán giá trị riêng tư vào phiếu hỗ trợ hay trang giải mã.

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

Kiểm tra kích thước trả lời vật liệu có hình dạng khóa hay không, và truy vấn tuyến đường trả lời một gói tin có bao giờ đến được giao diện hay không. Một dòng bắt tay vẫn trống sau khi cả hai kiểm tra đều qua sẽ chuyển chẩn đoán sang điểm cuối của peer và các địa chỉ được phép. Đọc khóa công khai của giao diện đối chiếu với bản ghi cấp phát một lần cuối, vì một hồ sơ đã lưu cũ có thể trông đúng trong khi bản đang hoạt động lại khác].

Ghi lại bạn đã thay giá trị nào và bản sao được cấp phép nằm ở đâu. Người tiếp theo chạm vào peer này cần biết đầu nào đã thay đổi.

Bài viết liên quan