it-swarm-vi.com

Việc sử dụng khóa chung để đăng nhập vào SSH có tốt hơn việc lưu mật khẩu không?

Sử dụng cặp khóa công khai/riêng khá thuận tiện để đăng nhập vào các máy chủ thường xuyên, nhưng nếu tôi đang sử dụng cặp khóa không có mật khẩu, liệu có an toàn hơn (hoặc kém an toàn hơn) so với mật khẩu không? Bảo mật xung quanh tệp khóa riêng của tôi là tối quan trọng, nhưng nói rằng tệp khóa riêng kỳ diệu của tôi chỉ là một danh sách mật khẩu cho các máy chủ khác nhau, có sự khác biệt không?

69
Nick T

Câu trả lời của tôi là việc sử dụng các cặp khóa công khai là rất nhiều điều khôn ngoan hơn để làm so với sử dụng mật khẩu hoặc danh sách mật khẩu. Tôi sẽ tập trung vào những điều mà không được biết đến rộng rãi về các hình thức xác thực SSH khác nhau và tôi không thấy câu trả lời nào khác đề cập đến chúng.

Trước hết, bạn phải hiểu rằng xác thực người dùng là một quy trình khác biệt và riêng biệt so với việc thiết lập kênh bảo mật . Theo thuật ngữ laymans, điều này có nghĩa là gì trước tiên, khóa chung của máy chủ được sử dụng (nếu được chấp nhận!) Để xây dựng kênh SSH an toàn, bằng cách cho phép đàm phán khóa đối xứng sẽ được sử dụng để bảo vệ phiên còn lại, bật kênh bảo mật, bảo vệ tính toàn vẹn và xác thực máy chủ.

Sau khi kênh hoạt động và bảo mật, việc xác thực người dùng diễn ra. Hai cách thông thường để làm điều đó là sử dụng mật khẩu hoặc cặp khóa công khai. Xác thực dựa trên mật khẩu hoạt động như bạn có thể tưởng tượng: Máy khách gửi mật khẩu của mình qua kênh bảo mật, máy chủ xác minh rằng đây thực sự là mật khẩu của người dùng cụ thể và cho phép truy cập. Trong trường hợp khóa công khai, chúng ta có một tình huống rất khác. Trong trường hợp này, máy chủ có khóa chung của người dùng được lưu trữ. Điều xảy ra tiếp theo là máy chủ tạo ra một giá trị ngẫu nhiên (nonce), mã hóa nó bằng khóa chung và gửi nó cho người dùng. Nếu người dùng là người được cho là, anh ta có thể giải mã thách thức và gửi lại cho máy chủ, sau đó xác nhận danh tính của người dùng. Đó là kiểu cổ điển mô hình phản hồi thử thách. (Trong SSHv2, một cái gì đó hơi khác một chút nhưng gần như thực sự được sử dụng)

Như bạn có thể tưởng tượng, trong trường hợp đầu tiên, mật khẩu thực sự được gửi đến máy chủ (trừ khi SSH sẽ sử dụng phản hồi thách thức mật khẩu), trong lần thứ hai, khóa riêng của bạn không bao giờ rời khỏi máy khách. Trong kịch bản tưởng tượng rằng ai đó chặn lưu lượng SSL và có thể giải mã nó (sử dụng khóa riêng của máy chủ bị xâm nhập hoặc nếu bạn chấp nhận khóa công khai sai khi kết nối với máy chủ) hoặc có quyền truy cập vào máy chủ hoặc máy khách, mật khẩu của bạn sẽ được biết đến - với xác thực khóa công khai và mô hình phản hồi thách thức, các chi tiết riêng tư của bạn sẽ không bao giờ rơi vào tay kẻ tấn công. Vì vậy, ngay cả khi một máy chủ mà bạn kết nối bị xâm phạm, các máy chủ khác mà bạn sử dụng cùng khóa sẽ không được!

Có một số lợi thế khác của việc sử dụng cặp khóa công khai: Không nên lưu trữ khóa riêng trong Cleartext trong máy khách của bạn như bạn đề xuất. Điều này tất nhiên làm cho tệp khóa riêng mở ra để thỏa hiệp như một tệp mật khẩu không được mã hóa sẽ làm, nhưng nó dễ dàng hơn để giải mã (khi đăng nhập) và sử dụng khóa riêng. Nó nên được lưu trữ được mã hóa và cần bạn cung cấp một cụm mật khẩu dài thường để giải mã nó mỗi khi nó được sử dụng.

Tất nhiên, điều này có nghĩa là bạn sẽ phải cung cấp cụm mật khẩu dài mỗi khi bạn kết nối với máy chủ, để mở khóa khóa riêng của bạn - Có nhiều cách khác nhau. Bạn có thể tăng khả năng sử dụng của hệ thống bằng cách sử dụng tác nhân xác thực: Đây là một phần mềm mở khóa của bạn cho phiên hiện tại, khi bạn đăng nhập vào gnome chẳng hạn hoặc khi bạn lần đầu tiên vào máy khách của mình, vì vậy bạn chỉ có thể nhập 'ssh remote-system-ip' và đăng nhập, không cung cấp cụm mật khẩu và thực hiện nhiều lần cho đến khi bạn đăng xuất khỏi phiên.

Vì vậy, để tổng hợp, sử dụng cặp khóa chung cung cấp sự bảo vệ đáng kể hơn so với sử dụng mật khẩu hoặc danh sách mật khẩu có thể bị bắt nếu client, server = hoặc phiên bảo mật bị xâm phạm. Trong trường hợp không sử dụng cụm mật khẩu (không nên xảy ra), các cặp khóa công khai vẫn bảo vệ chống lại các phiên và máy chủ bị xâm nhập.

84
john

So với danh sách mật khẩu được lưu trữ (dài và ngẫu nhiên), khóa riêng SSH được lưu trữ cung cấp cùng bảo mật: mọi thứ đều an toàn miễn là tệp riêng tư của bạn vẫn ở chế độ riêng tư.

Tuy nhiên, khóa riêng là nhiều hơn thuận tiện, cả thực tế (ngay bây giờ, các máy khách SSH hỗ trợ nó bên ngoài, trái với tệp mật khẩu tùy chỉnh mà bạn phải sử dụng với một số mật khẩu sao chép và dán thủ công) và theo lý thuyết (bạn có thể sử dụng lại cùng một khóa cho mỗi Máy chủ bạn muốn kết nối, trong khi đó một danh sách mật khẩu sẽ tăng tuyến tính với số lượng máy chủ được liên hệ, trừ khi bạn sử dụng lại cùng một mật khẩu cho nhiều máy chủ, đó là - xấ).

15
Thomas Pornin

Nó phụ thuộc vào mối đe dọa mà bạn xem xét.

Điểm chính của xác thực khóa công khai/riêng là không để lộ bí mật của bạn, ngay cả với bên bạn đang xác thực. Vì lý do này, sử dụng các phím là tốt hơn, vì bạn không bao giờ gửi bí mật của bạn ra ngoài máy của bạn.

Tuy nhiên, nếu mối đe dọa mà bạn xem là cục bộ và nếu bạn không bảo vệ khóa riêng của mình bằng mật khẩu, thì việc lưu danh sách mật khẩu rõ ràng cũng giống như việc lưu trữ khóa riêng mà không cần bảo vệ.

Vì lý do này, việc bảo vệ các khóa riêng của bạn bằng mật khẩu và sử dụng các công cụ như ssh-agent (để thuận tiện) là rất hữu ích. Trên OSX, điều này cũng có thể được tích hợp với KeyChain, do đó bạn thậm chí không cần phải mở khóa riêng (ở cấp ứng dụng, chỉ ở cấp daemon bảo mật) để có thể sử dụng thông qua SSH (về cơ bản là KeyChain và daemon bảo mật chăm sóc ssh-agent).

13
Bruno

Sự khác biệt chính giữa việc sử dụng khóa riêng không có mật khẩ và sử dụng mật khẩu văn bản thuần túy cho ủy quyền SSH là ủy quyền bởi thứ gì đó bạn có (khóa riêng của bạn) hoặc bằng một cái gì đó bạn biết (mật khẩu ghi nhớ của bạn). Chúng là giống khác nhau, nhưng thật khó để nói rằng một con cuối cùng tốt hơn hoặc an toàn hơn.

Cho phép bởi thứ gì đó bạn có thường khó hơn cho kẻ tấn công sao chép ra khỏi màu xanh - dễ dàng hơn để bắt buộc/đoán mật khẩu đơn giản của bạn hơn là sao chép khóa của bạn. Nhưng nó có một nhược điểm lớn - bây giờ giữ bí mật riêng tư của bạn thực sự bí mật trở thành tối quan trọng. Nếu bạn sử dụng một cái gì đó chỉ bạn biết (mật khẩu ghi nhớ), sẽ dễ dàng hơn để giữ nó theo cách đó (ít nhất là về mặt lý thuyết). Nhưng nếu bạn phải ghi nhớ nó, thì có lẽ bạn sử dụng một cái gì đó không phức tạp.

Vì vậy, đó là để bạn quyết định, những gì có thể xảy ra hơn - khóa riêng tư mạnh mẽ của bạn bị đánh cắp hoặc mật khẩu không quá mạnh được đoán (hoặc có được theo cách khác).

Có một ngoại lệ ở đây - nếu bạn muốn nói rằng bạn sẽ lưu trữ mật khẩu thực sự dài, phức tạp và ngẫu nhiên trong tệp bí mật của mình thay vì sử dụng khóa riêng, thì có lẽ có sự khác biệt nhỏ giữa hai vẫn còn một số khác biệt (tôi đã bỏ lỡ phần này, xem @ john câu trả lời cho một bài viết hay về điều này). Trong trường hợp đó, cả hai đều là thứ gì đó bạn có , giữ bí mật các loại , nhưng sau đó tự hỏi - tại sao lại làm điều đó ngay từ đầu nếu đó là khóa riêng được thiết kế để làm gì? bạn nên ở lại với khóa riêng trong trường hợp đó.

10
Karol J. Piczak

Bài viết tham khảo đang thảo luận về mật khẩu được gõ trong một phiên ssh; Tôi nghĩ nó, và ý kiến ​​của Richard, đáng để giữ lại, nhưng không còn tin vào câu trả lời nữa. (Tôi vẫn thích khóa công khai.)

Song, Wagner và Tian đã chỉ ra rằng có thể tăng tốc độ tìm kiếm mật khẩu vũ phu khoảng 50 lần bằng cách sử dụng thông tin thời gian từ ssh phiên . Noack đã xem xét lại nghiên cứu của họ và thấy SSH2 cũng dễ bị phân tích thời gian.

Cuộc tấn công đưa ra hai giả định:

  • Băm mật khẩu có sẵn để bẻ khóa brute-force.
  • Kẻ tấn công có thể nhận được dấu thời gian chính xác trên các gói được gửi giữa các máy chủ hoặc có được thông tin về thời gian.

Khóa công khai không chỉ thuận tiện hơn mà còn an toàn hơn trước các mối đe dọa nhất định.

8
sarnold

Nếu bạn đang sử dụng các khóa "phần mềm" (có nghĩa là các khóa được lưu trong thư mục .ssh hoặc tương đương) thì về cơ bản bạn đang ở cùng cấp độ với việc lưu trữ mật khẩu.

OpenSSH hiện có hỗ trợ PKCS # 11 gần như khá, có sẵn trong KiTTY (một ngã ba PuTTY), do đó để thực sự sử dụng xác thực pubkey, hãy sử dụng thẻ thông minh. Sau đó, có sự khác biệt thực sự từ mật khẩu. Một keyfile phần mềm, được bảo vệ bằng mật khẩu, có thể được sao chép giống như mật khẩu đơn giản, trong khi thẻ thông minh thì không thể.

2
martin