Bạn có thể đưa khóa công khai VPN của mình cho một đối tác, một nhà cung cấp hoặc một diễn đàn, và đường hầm vẫn hoạt động. Nhưng khóa riêng tư thì không thể trao, kể cả cho nhân viên hỗ trợ, mà không trao đi danh tính mà khóa đó chứng minh. Quyết định hiếm khi rõ ràng đến vậy, vì người ta nhầm lẫn đang xem nửa nào của cặp, và vì một số triển khai coi giá trị công khai như một cái tên. Ba kiểm tra giải quyết điều đó: bạn có nửa nào, triển khai ràng buộc nó với gì, và việc thay thế tốn bao nhiêu.

Kiểm tra một: nửa nào của cặp đang nằm trong bộ nhớ tạm

Khóa bất đối xứng đi theo cặp, và chiều dẫn xuất chính là toàn bộ vấn đề. Trong WireGuard khóa riêng tư là 32 byte ngẫu nhiên và khóa công khai được tính từ nó; chiều ngược lại không thể. wg genkey ghi giá trị riêng tư, wg pubkey dẫn xuất giá trị công khai, và chỉ cái thứ hai mới thuộc về một tin nhắn gửi cho đối tác.

wg genkey | tee private.key | wg pubkey > public.key
chmod 600 private.key
openssl x509 -noout -pubkey -in server.crt

Thế giới chứng chỉ dùng cách chia tương tự với nhiều bộ phận chuyển động hơn. Chứng chỉ máy chủ mang một khóa công khai cùng các tên, và được ký bằng khóa riêng tư của CA mà không bao giờ rời khỏi CA. Một máy khách xác minh máy chủ đó cần chứng chỉ của CA, vốn công khai, và không có ích gì với khóa ký riêng tư của CA.

Nếu không chắc mình đang giữ giá trị nào, hãy tìm dấu hiệu thay vì tên tệp. Một khối PEM bắt đầu bằng -----BEGIN PRIVATE KEY-----, hoặc dạng cũ hơn BEGIN RSA PRIVATE KEY, là nửa bí mật. Một giá trị bạn có thể dán mà không có dấu hiệu đó là ứng viên để chia sẻ, tùy thuộc hai kiểm tra tiếp theo.

Kiểm tra hai: triển khai ràng buộc giá trị công khai đó với gì

An toàn mật mã và tính ẩn danh là hai thuộc tính khác nhau. Khóa công khai của một đối tác WireGuard là định danh ổn định bên trong triển khai: cấu hình máy chủ liệt kê nó, quá trình bắt tay gọi tên nó, và quản trị viên đọc nhật ký thấy cùng chuỗi mỗi khi đối tác đó kết nối. Nếu bạn đăng khóa bên cạnh một câu hỏi về thiết lập của mình, bạn đã nối chuỗi đó với mọi thứ khác trong bài.

Chứng chỉ làm lộ danh tính theo thiết kế. Subject và subject alternative name đọc được, và với chứng chỉ TLS được công chúng tin cậy, bản thân chứng chỉ được công bố trong nhật ký Certificate Transparency, vốn có thể tìm kiếm. Không điều nào trong đó làm lộ khóa riêng tư, và tất cả đều làm lộ một mối quan hệ.

Đây là chỗ các triển khai khác nhau, và điều đó quyết định câu trả lời. Một đối tác thử nghiệm dùng một lần trên máy chủ phòng thí nghiệm là đối tượng khác với khóa nhận diện điểm cuối site-to-site của một công ty, dù các byte trông giống hệt nhau.

Kiểm tra ba: bạn có thể thu hồi gì, và nhanh đến đâu

Kiểm tra thứ ba tách hoàn toàn hai nửa. Một khóa công khai đã công bố có thể được thay theo lịch của bạn. Một khóa riêng tư đã công bố thì không thể thu hồi: xóa bản sao của bạn không đụng đến những bản sao đã bị lấy, và mọi đối tác từng tin nó nay tin vào thứ mà người ngoài đang giữ.

Thu hồi là hành động cấu hình, không phải mật mã. WireGuard không cung cấp danh sách thu hồi, nên bạn gỡ đối tác:

wg set wg0 peer <peer-public-key> remove
# then delete the [Peer] block from the config so it does not return on restart

OpenVPN các triển khai dựa trên chứng chỉ thu hồi chứng chỉ và công bố CRL mà máy chủ thực sự kiểm tra qua crl-verify. Không có chỉ thị đó, danh sách thu hồi chỉ là đồ trang trí. Dù thế nào, trình tự vẫn vậy: phát hành bản thay thế, phân phối qua kênh được hỗ trợ, rồi cho danh tính cũ nghỉ hưu.

Những sai lầm đến từ việc gộp ba kiểm tra làm một

Phần lớn rò rỉ thực tế không phải ai đó quyết định công bố khóa riêng tư. Đó là cả một hồ sơ bị dán lên diễn đàn, chẳng hạn một tệp .conf của WireGuard có dòng PrivateKey, một gói .ovpn có khối khóa nhúng bên trong, hoặc ảnh chụp cửa sổ máy khách vô tình có trường khóa. Giá trị công khai có lẽ vẫn ổn; nó đi cùng phần không ổn.

Các quy trình hỗ trợ là nguồn thứ hai. Không bước xác minh hợp lệ nào cần khóa riêng tư của bạn, vì bên kia dẫn xuất thứ cần thiết từ nửa công khai. Khi một biểu mẫu hoặc một người hỏi giá trị riêng tư, câu trả lời đúng là giá trị công khai cộng với lệnh cục bộ tạo ra nó.

Nhật ký và ảnh chụp màn hình thuộc cùng loại. Đầu ra chẩn đoán có thể mang vật liệu khóa, định danh phiên và địa chỉ nội bộ, và đăng tất cả những thứ đó để có câu trả lời cho một câu hỏi là đổi chút tiện lợi lấy mức phơi bày lớn hơn.

Sau khi giá trị riêng tư rò rỉ, hãy cho danh tính nghỉ hưu

Nếu một giá trị riêng tư thực sự lọt ra, hãy coi danh tính đó đã nghỉ hưu. Tạo một cặp mới, cài nửa công khai ở nơi các đối tác mong đợi, gỡ đối tác cũ hoặc thu hồi chứng chỉ cũ, và kiểm tra những nơi bạn đã công bố nó. Bạn không thể xóa những bản sao mình không kiểm soát, nên việc gỡ bỏ nói về tương lai, không phải quá khứ.

Sau đó ghi lại việc phân phối: khóa nào thuộc thiết bị nào, ai giữ một bản, bản thay thế được giao thế nào, và ai gỡ một đối tác đã nghỉ hưu. Đó là những phần người ta quên, và chúng quyết định một vụ rò rỉ còn hữu ích trong bao lâu.

Bài viết liên quan