Có gì khác biệt giữa khóa openssh và khóa putty?


48

Tôi đã thấy rằng ssh-keygen(gói "ssh") tạo ra các khóa khác nhau từ puttygen(gói "putty").

Nếu tôi tạo khóa chung và khóa riêng với ssh-keygenmột số máy chủ ssh sẽ không chấp nhận khóa của tôi. Nếu tôi tạo khóa puttygenchỉ có một máy chủ sẽ chấp nhận nó.

Tại sao các kho lưu trữ linux không đề xuất một số giải pháp chung (gói) cho nó? Tôi đã tìm thấy một gói ssh-3.2.9.1 khác tạo ra các khóa hoạt động với putty. Nhưng tại sao không có giải pháp tiện dụng trong SSH?


1
Đối với người mới bắt đầu, PuTTYGen cung cấp rõ ràng để chuyển đổi khóa. Vì vậy, các định dạng gốc mà OpenSSH và PuTTY sử dụng để lưu trữ khóa là khác nhau. Tuy nhiên, các thuật toán được hỗ trợ là tương thích. Tôi đoán là bạn đã nhập một số giá trị thú vị vào trường cho phép bạn đưa ra số bit (ví dụ DSA dường như yêu cầu 1024 bit) cho khóa được tạo trong PuTTYGen hoặc cách khác là bạn đã chọn một cái gì đó như RSA-1 mà hầu hết các máy chủ sẽ bị vô hiệu hóa những ngày này. Thật không may, câu hỏi không thực sự nêu những gì bạn đã cố gắng và mong đợi.
0xC0000022L

Câu trả lời:


47

OpenSSH là triển khai tiêu chuẩn thực tế của giao thức SSH. Nếu PuTTY và OpenSSH khác nhau, PuTTY là thứ không tương thích.

Nếu bạn tạo một khóa với OpenSSH bằng ssh-keygencác tùy chọn mặc định, nó sẽ hoạt động với hầu hết mọi máy chủ ngoài kia. Một máy chủ không chấp nhận khóa như vậy sẽ là cổ, sử dụng cách triển khai SSH khác hoặc được định cấu hình theo cách hạn chế kỳ lạ. Các khóa thuộc loại không mặc định có thể không được hỗ trợ trên một số máy chủ, đặc biệt là các khóa ECDSA giúp thiết lập phiên nhanh hơn một chút nhưng chỉ được hỗ trợ bởi các phiên bản OpenSSH gần đây.

PuTTY sử dụng một định dạng tệp chính khác nhau. Nó đi kèm với các công cụ để chuyển đổi giữa .ppkđịnh dạng của chính nó và định dạng của OpenSSH.

Ssh-3.2.9.1 này bạn tìm thấy là một sản phẩm thương mại có định dạng khóa riêng khác nhau. Không có lý do để sử dụng nó thay vì OpenSSH, nó chỉ có thể ít tương thích hơn, nó yêu cầu phải trả tiền và không có hướng dẫn nào về cách sử dụng nó ngoài đó.


24

Hầu hết các bản phân phối Linux đều có puttysẵn cho Linux. Bạn có thể cài đặt puttyở phía Linux và sử dụng puttygenđể chuyển đổi các tệp .ppk thành các tệp khóa kiểu ssh thông thường (được gọi là tệp PEM - mặc dù chúng không nhận được .pem trong tên tệp).

puttygen id_dsa.ppk -O private-openssh -o id_dsa

LƯU Ý: Bạn cũng có thể sử dụng puttygenđể nhập các tệp PEM kiểu ssh trở lại putty.

Tác giả của PuTTY đã chọn cách đơn giản để các khóa chung và khóa riêng tạo nên bảo mật cơ bản được sử dụng bởi xác thực khóa putty / ssh 2 được lưu trữ trong một tệp .ppk độc quyền. Thông thường các khóa này được duy trì dưới dạng 2 tệp riêng biệt bởi ssh.

Trên Linux, các tệp chính thường được lưu trong thư mục, .ssh.

Có một cái nhìn tổng quan về quá trình chuyển đổi ở đây trong câu hỏi Stack Overflow này có tiêu đề: Chuyển đổi PEM sang định dạng tệp PPK .

Tác giả của putty cũng thảo luận về lý do của mình khi sử dụng các tệp .ppk trong puttyhướng dẫn sử dụng . Bạn có thể đọc về nó ở đây trong phần 8.2.12.


Ý bạn là Linux của tôi có SSH-1 lỗi thời và dễ bị tổn thương (nếu tôi không sử dụng putty)? Và nó có phải chăng? Các lỗ hổng của SSH-1 được mô tả trong wikipedia
YarLinux

Không chắc chắn nơi bạn có được điều đó. Không, bạn sẽ ổn thôi. Phiên bản Linux nào bạn đang sử dụng? Bạn đang sử dụng Linux Distro nào? Chạy lệnh này để tìm hiểu phiên bản Linux của bạn : uname -a. Bản phân phối Linux : lsb_release -a.
slm

Tôi sử dụng Ubuntu 12.04. Ý bạn là SSH-2 có các định dạng khác nhau? Tôi chỉ nhầm lẫn giữa tên của gói và lệnh "ssh".
YarLinux

Tôi hiểu rồi. Công cụ ssh mà bạn đang đề cập thường là một phần của gói được gọi là openssh. Phiên bản của phần mềm này không liên quan gì đến SSH-1 và SSH-2 mà bạn đang đề cập. Thuật ngữ đó (SSH-1 & SSH-2) đang đề cập đến loại tệp chính mà bạn đang làm việc. Loại tệp này không phải là vấn đề đối với bạn miễn là bạn đang sử dụng các phiên bản openssh gần đây.
slm

Có ba định dạng khác nhau của khóa? OpenSSH, ssh.com và PuTTY?
YarLinux

12

Cả hai đều lưu trữ "cặp khóa RSA cho phiên bản 2 của giao thức SSH" và có thể được chuyển đổi thay thế cho nhau; tuy nhiên, về sự khác biệt định dạng được lưu trữ thực tế:

từ https://www.chiark.greenend.org.uk/~sgtatham/putty/wishlist/key-formats-nively.html

Ưu điểm của định dạng khóa PuTTY là:

  • Một nửa khóa công khai được lưu trữ trong bản rõ . Định dạng khóa riêng của OpenSSH mã hóa toàn bộ tệp khóa , để khách hàng phải hỏi bạn mật khẩu của bạn trước khi nó có thể làm bất cứ điều gì với khóa. Cụ thể, điều này có nghĩa là nó phải yêu cầu cụm mật khẩu của bạn trước khi nó thậm chí có thể cung cấp khóa chung cho máy chủ để xác thực. Định dạng của PuTTY lưu trữ khóa công khai trong bản rõ và chỉ mã hóa một nửa riêng tư, điều đó có nghĩa là nó có thể tự động gửi khóa chung tới máy chủ và xác định xem máy chủ có sẵn sàng chấp nhận xác thực với khóa đó hay không và nó sẽ chỉ yêu cầu một mật khẩu nếu nó thực sự cần.

    Tôi nghĩ OpenSSH sẽ đọc một.pubtập tin cho mục đích này nếu nó xuất hiện cùng với tập tin khóa riêng, nhưng đây là một sự nhầm lẫn thường xuyên vì sự tiện lợi (tôi đã thấy mọi người thay thế một tập tin khóa riêng và để lại lỗi thời .pubbên cạnh nó, và sau đó rất bối rối bởi quá trình xác thực SSH kết quả!).
  • Key được bảo vệ hoàn toàn. Các định dạng khóa lưu trữ khóa công khai trong bản rõ có thể dễ bị tấn công giả mạo, trong đó một nửa khóa công khai được sửa đổi theo cách các chữ ký được tạo bằng thông tin rò rỉ khóa bị khóa về một nửa riêng tư. Vì lý do này, định dạng khóa của PuTTY chứa MAC (Mã xác thực thư), khóa cụm mật khẩu và bao gồm các nửa công khai và riêng tư của khóa.Do đó, chúng tôi cung cấp sự tiện lợi khi có khóa công khai có sẵn trong bản rõ nhưng chúng tôi cũng ngay lập tức phát hiện bất kỳ nỗ lực nào trong một cuộc tấn công giả mạo, mang lại sự kết hợp giữa bảo mật và tiện lợi mà tôi không tin là có ở bất kỳ định dạng khóa nào khác. Là một lợi ích phụ, MAC cũng bao gồm nhận xét của khóa, ngăn chặn mọi sự nghịch ngợm có thể xảy ra nếu ai đó trao đổi hai khóa và trao đổi các bình luận.

    Cách tiếp cận của việc giữ chìa khóa công cộng được mã hóa OpenSSH của sức mạnhcũng cung cấp một số bảo mật chống lại kiểu tấn công này, nhưng không rõ là nó cung cấp sự bảo vệ đúng đắn: mã hóa được thiết kế để bảo mật thường để lại những cách mà dữ liệu được mã hóa có thể được sửa đổi một cách hữu ích bởi kẻ tấn công. Để bảo vệ tính toàn vẹn thực sự, bạn muốn có một MAC chuyên dụng thực sự, được thiết kế để thực hiện chính xác điều đó.

[ nhấn mạnh thêm]

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.