Mã hóa mật khẩu tạm thời bằng khóa ssh công khai


9

Tôi quản lý một văn phòng ảo và nhân viên của chúng tôi sử dụng cả khóa SSH và mật khẩu để xác thực. Nếu một trong các nhân viên của chúng tôi quên mật khẩu của anh ấy, có cách nào để mã hóa mật khẩu tạm thời bằng khóa ssh RSA công khai của anh ấy để tôi có thể gửi nó cho anh ấy qua e-mail không?

Tôi đã thấy các câu hỏi khác liên quan đến câu hỏi này, tuy nhiên "câu trả lời" thường khuyên bạn không nên sử dụng khóa SSH công khai / riêng tư để thực hiện mã hóa / giải mã chung và không thực sự nêu nếu điều này là có thể. Tôi muốn biết nếu nó thực sự có thể và các bước để mã hóa và sau đó giải mã mật khẩu là gì.

Câu trả lời:


8

Cuối cùng tôi đã tìm thấy cách chuyển đổi khóa công khai OpenSSH sang định dạng PEM trên blog và có thể mã hóa và giải mã thành công một chuỗi bằng khóa riêng / chung của tôi.

Tôi đã phác thảo các bước tôi đã sử dụng để thực hiện mã hóa và giải mã.

Để mã hóa một chuỗi:

# convert public key to PEM format
ssh-keygen -f ~/.ssh/id_rsa.pub -e -m PKCS8  > ~/.ssh/id_rsa.pub.pem

# encrypt string using public key
echo "String to Encrypt" \
   | openssl rsautl -pubin -inkey ~/.ssh/id_rsa.pub.pem -encrypt -pkcs \
   | openssl enc -base64 \
   > string.txt

Để giải mã một chuỗi (từ tệp):

openssl enc -base64 -d -in string.txt \
    | openssl rsautl -inkey ~/.ssh/id_rsa -decrypt

Vì mục tiêu của tôi là gửi e-mail mật khẩu, tôi đã viết một tập lệnh cực kỳ cơ bản để tự động hóa mọi thứ một chút:

#!/bin/sh
if test "x${1}" == "x";then
   echo "Usage: ${0} <username>"
   exit 1
fi
SSHUSER=${1}
printf "Enter Password: "
read PASS1
echo ""
echo ""
ssh-keygen -f /home/${SSHUSER}/.ssh/id_rsa.pub -e -m PKCS8 \
    > /tmp/ssh-pubkey-${SSHUSER}.pem
echo 'cat << EOF |openssl enc -base64 -d |openssl rsautl -inkey ~/.ssh/id_rsa -decrypt'
echo "New Password: ${PASS1}" \
   | openssl rsautl -pubin -inkey /tmp/ssh-pubkey-${SSHUSER}.pem -encrypt -pkcs \
   | openssl enc -base64
echo "EOF"
echo ""
rm -f /tmp/ssh-pubkey-${SSHUSER}.pem

Sau đó tôi có thể gửi đầu ra của tập lệnh trong e-mail để người dùng giải mã.

Kịch bản hoàn chỉnh có sẵn trên Github: https://gist.github.com/3078682


4

Có thể vì nó chỉ là khóa RSA. Sử dụng openssl:

openssl rsautl -encrypt -inkey alice.pub >message.encrypted

Tôi đặt biệt danh cho câu hỏi này trên Unix / Linux SE.

Tôi phải nói rằng PGP phù hợp hơn cho việc này.


1
Vấn đề là khóa công khai SSH không ở định dạng mà OpenSSL nhận ra. Tôi cần biết cách chuyển đổi khóa thành thứ gì đó có thể được sử dụng bởi bộ công cụ như OpenSSL.
David M. Syzdek

1

Nói chung, có điều này là có thể. Tất cả SHH làm là tạo Modulus N và hai khóa e (khóa chung) và d (khóa riêng). Cơ chế được sử dụng thường là RSA hoặc DSA và Khóa được tạo có thể được sử dụng để mã hóa. Tất cả những gì bạn phải làm là trích xuất chúng từ blob cơ sở 64 là khóa chung và sau đó sử dụng một chương trình phù hợp để mã hóa dữ liệu bằng các khóa này. Bạn có thể quan tâm đến Monkeysphere có thể chuyển giữa định dạng khóa ssh và khóa gnupg. Điều này sẽ cho phép bạn cũng sử dụng các khóa để mã hóa.


0

Thông thường, người ta không thực hiện 'mã hóa hàng loạt' với các khóa giả định. Nhưng điều đó không thành vấn đề vì bạn không nên xử lý mức độ chi tiết đó. Sử dụng bộ công cụ (openssl là một bộ tốt http://www.openssl.org/docs/apps/openssl.html ) để thực hiện công việc cho bạn. Những gì bạn muốn làm là tạo một tin nhắn được mã hóa chứa mật khẩu tạm thời mới và chỉ định cặp khóa của người dùng là người nhận. Ví dụ galore trên trang này: http://www.openssl.org/docs/apps/smime.html

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.