Khóa chia sẻ trước làm gì trong IPsec, OpenVPN và WireGuard
Một bí mật chung có thể xác thực đầu kia hoặc thêm một lớp bảo vệ, và vai trò của nó thay đổi theo giao thức. Đừng nhầm nó với mật khẩu người dùng.
Cụm từ khóa chia sẻ trước xuất hiện trong tài liệu của IPsec, OpenVPN và WireGuard, nhưng lại chỉ ba đối tượng khác nhau. Một là bí mật xác thực, một bảo vệ kênh điều khiển, và một thêm vật liệu vào bắt tay vốn đã có danh tính. Coi chúng như thứ thay thế được sẽ tạo ra kết nối hỏng ở giai đoạn không ai lường trước. Hãy đọc trường đó làm gì trong giao thức ấy trước khi sao chép giá trị vào.
Ba giao thức, ba ý nghĩa
Mỗi giao thức định nghĩa nhiệm vụ của khóa trong đặc tả riêng, và các nhiệm vụ đó không chồng lên nhau. Bí mật xác thực chứng minh hai bên cùng biết một giá trị. Khóa của kênh điều khiển bảo vệ cuộc thương lượng diễn ra sau đó. Phần bổ sung cho bắt tay thay đổi lịch khóa mà không đổi việc hai bên là ai.
Không vai trò nào trong số đó xác thực một con người, và chính sự nhầm lẫn này tốn thời gian nhất. Khóa chia sẻ trước được nạp vào thiết bị hoặc cổng trước khi trao đổi, nên mọi người giữ đều trông giống nhau với phía bên kia. Đặc tính đó là lợi thế cho liên kết giữa hai bộ định tuyến và là rủi ro cho dịch vụ truy cập từ xa có nhân viên được nêu tên. Hãy giữ thông tin đăng nhập tài khoản và bí mật mật mã ở hai cột riêng trong tài liệu mô tả triển khai.
IPsec và OpenVPN dùng từ này khác nhau
IKEv2 có thể xác thực một bên bằng bí mật chia sẻ trước thay cho chứng chỉ, và giá trị phải khớp ở cả hai đầu. Vì cùng một bí mật thường được cấu hình cho một nhóm bên, bất kỳ người giữ nào cũng có thể mạo nhận những người khác, và trao đổi không nhận được tính bí mật tiến về phía trước từ những khóa danh tính mà nó chưa từng có.
Tùy chọn tls-auth và tls-crypt của OpenVPN gắn một khóa tĩnh vào kênh điều khiển, bằng cách thêm chữ ký HMAC hoặc mã hóa chính cuộc thương lượng. Khóa đó không phải mật khẩu người dùng và không thay thế chứng chỉ máy khách. Phân biệt hai thứ này quan trọng khi gia hạn, vì đổi mật khẩu không động đến khóa của kênh điều khiển.
PSK của WireGuard thêm vào, không nhận diện
Các bên WireGuard đã có khóa công khai và riêng tư Curve25519, và bắt tay xác thực những danh tính đó. Khóa chia sẻ trước tùy chọn được trộn vào khóa chuỗi, đóng góp vật liệu đối xứng bên trên trao đổi khóa công khai.
Nó không tự cung cấp danh tính và cũng không có tài khoản người dùng, nên người vận hành không thể phân biệt hai người giữ qua PSK của họ. Cả hai đầu phải mang cùng giá trị, nếu không bắt tay thất bại mà không có thông báo lỗi hữu ích. Vì vậy phải hoạch định việc luân chuyển cho cả hai phía cùng lúc, chứ không phải sửa một tệp.
Kiểm tra phân phối, luân chuyển và loại bỏ
Phân phối là điểm yếu của mọi thiết kế dùng một bí mật ở nhiều nơi. Một giá trị bị dán vào cửa sổ trò chuyện, lưu trong kho hay dùng lại giữa các môi trường sẽ tích lũy những bản sao không ai liệt kê nổi, và mỗi bản sao lặng lẽ mở rộng phạm vi thiệt hại.
Văn bản Base64 không phải mã hóa. Một bí mật đặt cạnh chứng chỉ công khai trong cùng thư mục vẫn là bí mật ở dạng rõ.
openssl rand -base64 32
sudo wg show wg0 preshared-keys
sudo grep -R -n 'psk' /etc/ipsec.d/ 2>/dev/null
Luân chuyển theo lịch và sau mọi lần lộ nghi ngờ, cập nhật từng bên dự định trước khi thu hồi giá trị cũ. Sau đó kiểm tra liên kết từ cả hai đầu, vì khóa không khớp sẽ hỏng ở bước bắt tay và trông y hệt sự cố tường lửa.
Ghi lại bí mật nào bảo vệ giai đoạn nào, để việc đặt lại mật khẩu không bao giờ bị nhầm với gia hạn khóa mật mã. Dòng đó tiết kiệm một giờ mỗi lần ai đó kiểm toán triển khai.