CHƯƠNG 2: GIAO THỨC MẠNG RIÊNG ẢO WIREGUARD
2.3. Nguyên lí hoạt động của giao thức mạng riêng ảo WireGuard
Đầu tiên, WireGuard loại trừ tính linh hoạt của mật mã. Đó là việc cung cấp các lựa chọn giữa thuật toán mã hóa, trao đổi khóa,… vì nó dẫn đến việc triển khai không an toàn với các công nghệ khác. Thay vào đó, giao thức của WireGuard sử dụng một lựa chọn các nguyên bản mã hiện đại.
WireGuard sử dụng khái niệm định tuyến khóa mã hóa, liên quan đến việc ràng buộc một khóa riêng với mỗi giao diện mạng và sử dụng nó để ràng buộc các khóa công khai. Việc trao đổi khóa công khai để thiết lập kết nối được thực hiện tương tự với SSH.
Để thương lượng các khóa và kết nối mà không cần khởi động một
daemon(một chương trình máy tính chạy dưới dạng một tiến trình nền)riêng biệt trong không gian người dùng, cơ chế Noise_IK của Noise được sử dụng, tương tự như việc giữ các khoá được uỷ quyền trong SSH. Dữ liệu được truyền thông qua đóng gói trong các gói UDP.
Để mã hoá, WireGuard sử dụng mã hoá luồng ChaCha20 để mã hóa đối xứng với Poly1305 cho xác thực thông điệp. Sự kết hợp này hiệu quả hơn AES trên các kiến trúc CPU được nhúng mà không có khả năng tăng tốc phần cứng mật mã (cryptographic hardware acceleration);
Để tạo khoá chung, Wireguard sử dụng Diffie‒Hellman (ECDH – trao đổi khoá dựa trên đường cong Elip) trong việc triển khai Curve25519.
Tiếp đó, Wireguard sử dụng BLAKE2s ( là một hàm băm mật mã được tối ưu hóa cho các nền tảng 8 đến 32 bit và tạo ra các thông báo có kích thước bất kỳ từ 1 đến 32 byte ) để băm, nhanh hơn SHA‒3; và 1.5‒RTT dựa trên nền tảng Noise. Ngoài ra, nó cũng bao gồm tính năng bảo vệ khỏi giả mạo, từ chối dịch vụ, và tấn công phát lại (replay attack).
Trong giao thức WireGuard, mỗi bên tham gia (peer) được xác định với những peer khác thông qua các khóa công khai ngắn. Việc này tương tự với cách xác thực dựa trên khóa trong OpenSSH. Các khóa công khai cũng được sử dụng
để thiết lập địa chỉ IP nào được chỉ định cho từng peer bên trong tunnel. Nó là một phần trong khái niệm mới được Wireguard gọi là “cryptokey routing”.
Giao thức này không phản hồi với bất kỳ gói tin nào mà nó không nhận ra. Vì vậy quá trình network scanning sẽ không cho thấy WireGuard đang chạy trên server. Hơn nữa, nó có thể hoạt động như cả server lẫn client cùng một lúc.