it-swarm-vi.com

Sử dụng lại khóa riêng / khóa công khai

Tôi có tài khoản trên một số trang web của bên thứ ba - Bitbucket, Bluehost, v.v.

Từ những gì tôi đã thu thập được, thông thường sử dụng một cặp khóa cho tất cả [id_rsa, id_rsa.pub], nhưng chỉ đưa ra khóa chung

Đó có phải là cách sử dụng chính xác hay tốt hơn là tạo một cặp mới cho mỗi trang web?

Dường như với tôi rằng điều này không an toàn - bất kỳ trang web nào tôi tin tưởng với mục đích bất chính [hoặc bị hack] đều có thể lấy khóa riêng của tôi khi tôi kết nối lần đầu tiên và sử dụng nó để đi vào các trang web khác.

Ai đó có thể hiểu SSH có thể xác minh rằng an toàn khi sử dụng một cặp khóa ở mọi nơi không, và nếu vậy, có lẽ giải thích tại sao?

Ngoài ra, nếu tôi có hai máy tính gia đình, có lý do nào để sử dụng các cặp khóa khác nhau không?

Cảm ơn tất cả.

45
SamGoody

Khóa riêng của bạn không bao giờ được gửi đến trang khác, vì vậy việc sử dụng lại khóa chung là hoàn toàn an toàn. Bạn cũng có thể sử dụng lại cùng một khóa máy tính cục bộ của mình. Tuy nhiên, hãy nhớ rằng nếu ai đó đánh cắp chìa khóa, thì họ có quyền truy cập vào tất cả chúng. Điều này có thể hoặc không phải là một mối quan tâm.

42
artbristol

Có một vài cặp khóa trong SSH. Người bạn đang nói đến là cặp khóa client . Máy khách (nghĩa là máy đặt trên bàn của bạn, dưới sự kiểm soát vật lý của bạn) lưu trữ khóa riêng - và khóa riêng không bao giờ được gửi đến máy chủ. Khóa công khai được lưu trữ trên máy chủ (thường là trong $HOME/.ssh/authorized_keys tập tin).

Khi máy khách kết nối với máy chủ, máy khách sử dụng khóa riêng để chứng minh với máy chủ rằng anh ta điều khiển khóa riêng và có thể tính toán với nó (cụ thể là một chữ ký số ). Máy chủ xác minh chữ ký nhờ khóa công khai. Kiến thức về khóa công khai không không mang lại sức mạnh để tạo chữ ký mới, đó là lý do tại sao nó được gọi là khóa "công khai": nó có thể được công khai , không có ảnh hưởng xấu. Cụ thể, sao chép khóa công khai của bạn trên bất kỳ số lượng máy chủ nào sẽ không cung cấp năng lượng cho bất kỳ máy chủ nào trong số các máy chủ này, vì chúng trung thực hoặc hoàn toàn do kẻ tấn công kiểm soát.

Như @artbristol chỉ ra, đó là khóa riêng rất quan trọng. Nếu bạn sao chép khóa công khai của mình vào mười máy chủ và ai đó đánh cắp khóa riêng (có thể bằng cách hack vào hệ thống máy tính để bàn của bạn hoặc thuần hóa vật lý), thì rằng ai đó có được quyền truy cập ngay vào mười máy chủ trong một lần. Khóa riêng là có giá trị .

18
Thomas Pornin

Dường như với tôi rằng điều này không an toàn - bất kỳ trang web nào tôi tin tưởng với mục đích bất chính [hoặc bị hack] đều có thể lấy khóa riêng của tôi khi tôi kết nối lần đầu tiên và sử dụng nó để đi vào các trang web khác.

Ai đó có thể hiểu SSH có thể xác minh rằng an toàn khi sử dụng một cặp khóa ở mọi nơi không, và nếu vậy, có lẽ giải thích tại sao?

Khóa công khai hoạt động dựa trên xác thực thách thức. Về cơ bản, bạn cung cấp cho một số trang web khóa công khai của bạn, vì vậy mỗi trang web có thể đưa ra một thách thức cho bạn. Thử thách này là duy nhất mỗi lần và chỉ có thể được trả lời bởi một người có khóa riêng.

Một ví dụ đơn giản sẽ là nếu máy chủ lấy khóa công khai của bạn và mã hóa một thông báo như "Khóa phiên cho người dùng X vào ngày 19 tháng 12 16: 30,351213 UTC là XPa7sK35WjMgAezrPmG1Sq4CV7nsFN1Uc3TRW8. Máy tính khách của bạn nhận được tin nhắn được mã hóa, giải mã nó bằng khóa riêng của bạn và sau đó gửi lại khóa phiên đã giải mã cho máy chủ, xác thực rằng bạn có khóa riêng trong quyền sở hữu mà máy chủ xác thực bạn. (Trong thực tế, nó thường phức tạp hơn với máy chủ thường có khóa Máy chủ công khai/riêng tư, do đó bạn có thể mã hóa tin nhắn của mình đến máy chủ và xác thực rằng máy chủ đó là người nói nó là gì).

Có khóa công khai của bạn không cung cấp cho máy chủ độc hại các phương thức tấn công bổ sung ngoại trừ việc cố gắng lấy yếu tố mô đun từ khóa chung của bạn để tạo lại khóa riêng của bạn. Điều này chỉ có thể nếu khóa của bạn quá nhỏ, đó là khóa 512 bit đã bị bẻ khóa một thập kỷ trước, khóa RSA 768 bit đã được báo cáo bị bẻ khóa năm ngoái (với khoảng 10 ^ 20 thao tác hoặc 2000 năm trên một lõi của bộ xử lý hiện đại); Các khóa 1024 bit vẫn an toàn và mặc định ssh là các khóa 2048 bit.

6
dr jimbob

Tài liệu này có tất cả các chi tiết về cách xác thực khóa công khai hoạt động trong SSH. Tôi đã tóm tắt nó dưới đây.

Máy khách gửi gói sau:

 mô tả/giá trị loại dữ liệu 
[.__.] byte SSH_MSG_USERAUTH_REQUEST [.__.] chuỗi tên người dùng [.__.] chuỗi dịch vụ [.__.] chuỗi "publickey" [.__.] boolean TRUE [.__.] ____.] khóa công khai chuỗi được sử dụng để xác thực [.__.] Chữ ký chuỗi

trong đó chữ ký là chữ ký sử dụng khóa riêng trên dữ liệu sau:

[.__.] Mã định danh phiên chuỗi [.__.] byte SSH_MSG_USERAUTH_REQUEST [.__.] tên người dùng chuỗi [.__.] chuỗi dịch vụ [.__.] chuỗi "publickey" [.__.] boolean TRUE [.__. ] tên thuật toán khóa công khai chuỗi [.__.] chuỗi khóa chung được sử dụng để xác thực [.__.]

Sau đó, máy chủ sẽ xem liệu khóa công khai được chỉ định có được cấp phép cho khóa chung đã cho hay không (@Thomasuckingin thảo luận về cách thực hiện trong câu trả lời của mình). Sau đó, máy chủ sẽ kiểm tra để đảm bảo chữ ký là chính xác (điều này được thực hiện bằng khóa chung). Nếu điều đó thành công, thì xác thực là thành công.

Như bạn có thể thấy (và như được chỉ ra trong câu trả lời của @ artbristol), khóa riêng không bao giờ được truyền đến máy chủ. Bạn chỉ phải chứng minh rằng bạn biết khóa riêng bằng cách gửi chữ ký điện tử.

4
mikeazo