SSH thực sự làm gì
Mặc dù Splync sử dụng HTTPS để bảo vệ đường dẫn giữa điện thoại thông minh của bạn và máy chủ của chúng tôi, chúng tôi vẫn cần bảo vệ máy chủ để đảm bảo an toàn cho dữ liệu người dùng. Các nhà phát triển ứng dụng và quản trị viên hệ thống cần một cách để truy cập vào máy chủ đó để duy trì và triển khai cập nhật một cách an toàn. Đó là nơi SSH (Secure Shell) xuất hiện. Đây là giao thức cho phép người dùng được phép đăng nhập vào máy tính từ xa một cách an toàn, ngay cả khi qua các mạng không tin cậy. SSH thay thế các phương pháp cũ và không an toàn như Telnet, vốn gửi tên người dùng và mật khẩu dưới dạng văn bản rõ ràng.
Ý tưởng đằng sau “Keys”
SSH không dựa vào mật khẩu thông thường. Thay vào đó, nó sử dụng các khóa mã hóa — một cặp khóa công khai và khóa riêng tư tương ứng. Hãy tưởng tượng chúng như một ổ khóa và chìa khóa chỉ khớp với nhau. Khóa công khai nằm trên máy chủ, còn khóa riêng tư thuộc về người dùng. Khi bạn kết nối, máy chủ thách thức bạn chứng minh rằng bạn giữ khóa riêng tư mà không bao giờ tiết lộ nó. Điều này khiến cho gần như không thể ai đó nghe lén mạo danh bạn. Trong khi mật khẩu thông thường có thể đoán được, bị lộ hoặc tái sử dụng, các khóa SSH là các chuỗi mã hóa dài, ngẫu nhiên — gần như không thể đoán. Ngay cả khi ai đó nghe lén kết nối, tất cả những gì họ thấy chỉ là tiếng ồn mã hóa. Và vì các khóa SSH không bao giờ được gửi qua mạng, không có gì để đánh cắp trong quá trình truyền.
Khóa SSH thực sự trông như thế nào
Nếu bạn chưa bao giờ thấy một khóa SSH trước đây, nó có thể nghe có vẻ trừu tượng — nhưng thực ra nó chỉ là một khối văn bản mã hóa dài. Một khóa công khai thường dài vài trăm ký tự, trong khi một khóa riêng tư có thể dài hơn một nghìn ký tự. Cả hai đều được lưu trữ dưới dạng tệp văn bản, nhưng nội dung của chúng trông giống như tiếng ồn ngẫu nhiên — sự kết hợp của các chữ cái, số và ký hiệu. Khóa công khai an toàn để chia sẻ; nó giống như bạn đặt ổ khóa của mình trên máy chủ. Ngược lại, khóa riêng tư là danh tính kỹ thuật số độc đáo của bạn và không bao giờ được chia sẻ. Nó được lưu trữ cục bộ trên máy tính của bạn và chỉ dùng để chứng minh bạn là người bạn nói rằng bạn là — mà không bao giờ tiết lộ chính khóa.
Khóa công khai và khóa riêng tư
Khóa công khai giống như ổ khóa bạn gắn vào nhà của mình. Ai cũng có thể thấy nó từ bên ngoài, giống như ổ khóa trên cửa nhà bạn. Nhưng việc nhìn vào ổ khóa không cho ai biết cách mở nó. Nói cách khác, ai cũng có thể thấy nó, nhưng chỉ có đúng chìa khóa mới mở được. Ngược lại, khóa riêng tư là chìa khóa mở ổ khóa — và nó được giữ an toàn với bạn. Nếu ai đó lấy được khóa riêng tư của bạn, họ có thể vào nhà như thể họ là bạn. Đó là lý do tại sao nó luôn phải được giữ bí mật.
Cơ chế SSH
Mỗi cặp khóa công khai và khóa riêng tư tạo thành một cặp độc nhất vô nhị. Chúng được tạo ra cùng nhau qua một quá trình toán học để chỉ khóa riêng tư đó mới có thể khớp với khóa công khai tương ứng của nó. Bạn có thể nghĩ chúng như một ổ khóa và chìa khóa được tạo riêng — được rèn cùng nhau, và không có chìa khóa nào khác trên thế giới vừa với ổ khóa đó. Ngay cả khi bạn tạo một cặp khác bằng cùng thuật toán (như RSA hoặc Ed25519), các số bên trong sẽ hoàn toàn khác. Toán học liên kết hai khóa là một chiều: bạn có thể dễ dàng suy ra khóa công khai từ khóa riêng tư, nhưng gần như không thể đảo ngược quy trình và tìm ra khóa riêng tư từ khóa công khai. Đó là lý do tại sao mỗi cặp khóa SSH là duy nhất và an toàn.
Cách SSH xác minh danh tính của bạn
Khi bạn đăng nhập vào máy chủ bằng SSH, khóa riêng tư của bạn không bao giờ rời khỏi máy tính của bạn. Thay vào đó, máy chủ gửi một thử thách ngẫu nhiên — giống như một câu đố một lần — mà chỉ khóa riêng tư của bạn có thể giải. Máy tính của bạn ký xác nhận thử thách đó bằng toán học, tạo ra một câu trả lời ngắn mà máy chủ có thể kiểm tra bằng khóa công khai của bạn. Nếu câu trả lời khớp, máy chủ biết bạn giữ khóa riêng tư đúng — mà không bao giờ thấy nó. Đây là phép màu của mật mã hiện đại: bạn có thể chứng minh danh tính mà không tiết lộ bí mật. Xác thực SSH hoạt động vì khóa riêng tư của bạn chứa tất cả thông tin để suy ra khóa công khai, nhưng việc làm ngược lại gần như không thể.
Cách các nhà phát triển sử dụng SSH trong thực tế
Mỗi lần các nhà phát triển triển khai mã, cập nhật cơ sở dữ liệu hoặc khởi động lại dịch vụ, họ thường kết nối với máy chủ từ xa của họ qua SSH. Sau khi xác thực, họ có kết nối dòng lệnh an toàn với máy chủ. Từ đó, họ có thể quản lý tệp, khởi động lại dịch vụ hoặc kiểm tra nhật ký — tất cả đều được mã hóa từ đầu đến cuối. Trong trường hợp của Splync, SSH là cách chúng tôi quản lý an toàn máy chủ đám mây của mình. Mọi hành động quản trị — triển khai cập nhật, kiểm tra nhật ký, sao lưu dữ liệu — đều được thực hiện qua kết nối SSH được bảo vệ bằng khóa mã hóa. Không ai có thể truy cập máy chủ nếu không có khóa riêng tư đúng. Ngay cả khi ai đó biết địa chỉ IP của chúng tôi, mà không có khóa đó, cửa vẫn không mở được.
Tiếp theo: Mã hóa bên trong máy chủ
SSH bảo vệ lối vào máy chủ, còn HTTPS bảo vệ dữ liệu trong quá trình truyền. Nhưng khi dữ liệu đã nằm trong cơ sở dữ liệu, làm thế nào để chúng tôi giữ nó an toàn? Đó là lúc hàm băm và mã hóa xuất hiện — lớp bảo vệ cuối cùng.