Myślę, że twoje wymagania są prawidłowe, ale z drugiej strony jest to również trudne, ponieważ miksujesz szyfrowanie symetryczne i asymetryczne. Proszę popraw mnie jeżeli się mylę.
Rozumowanie:
- Hasło do twojego klucza prywatnego służy do ochrony twojego klucza prywatnego i niczego więcej.
- Prowadzi to do następującej sytuacji: Chcesz użyć swojego klucza prywatnego do zaszyfrowania czegoś, co tylko Ty możesz odszyfrować. Twój klucz prywatny nie jest przeznaczony do tego, twój klucz publiczny jest do tego celu. Cokolwiek szyfrujesz za pomocą klucza prywatnego, może zostać odszyfrowane przez klucz publiczny (podpisywanie), to z pewnością nie to, czego chcesz. (Wszystko, co zostanie zaszyfrowane za pomocą klucza publicznego, można odszyfrować tylko za pomocą klucza prywatnego).
- Musisz więc użyć klucza publicznego do szyfrowania danych, ale do tego nie potrzebujesz hasła klucza prywatnego. Tylko jeśli chcesz go odszyfrować, potrzebujesz klucza prywatnego i hasła.
Wniosek: Zasadniczo chcesz ponownie użyć hasła do szyfrowania symetrycznego. Jedynym programem, który chciałbyś podać swojemu hasłu, jest ssh-agent i ten program nie wykonuje szyfrowania / deszyfrowania tylko za pomocą hasła. Hasło służy tylko do odblokowania klucza prywatnego, a następnie zostało zapomniane.
Zalecenie: do szyfrowania używaj plików kluczy chronionych hasłem openssl enc
lub gpg -e --symmetric
z nimi. Jeśli potrzebujesz udostępnić informacje, możesz użyć infrastruktury klucza publicznego obu programów, aby utworzyć PKI / Web of Trust.
W openssl coś takiego:
$ openssl enc -aes-256-ctr -in my.pdf -out mydata.enc
i odszyfrowanie czegoś podobnego
$ openssl enc -aes-256-ctr -d -in mydata.enc -out mydecrypted.pdf
Aktualizacja: Należy zauważyć, że powyższe polecenia openssl NIE zapobiegają manipulowaniu danymi. Proste odwrócenie pliku enc spowoduje również uszkodzenie uszkodzonych odszyfrowanych danych. Powyższe polecenia nie mogą tego wykryć, musisz to sprawdzić na przykład za pomocą dobrej sumy kontrolnej, takiej jak SHA-256. Istnieją kryptograficzne sposoby na zrobienie tego w zintegrowany sposób, nazywa się to HMAC (Hash-based Message Authentication Code).
"gpg -e something"
różnymi przypadkami?$ gpg -e --symmetric
?openssl enc -aes-256-cbc -in my.pdf -out mydata.enc
:, odszyfruj za pomocą:openssl enc -aes-256-cbc -d -in mydata.enc -out mydecrypted.pdf
oba polecenia proszą o hasło. Zobaczman enc
(na rh / fedora / centos) wszystkie opcje, takie jak pliki kluczy, kodowanie base64 itp.Wolałbym używać tego
openssl
narzędzia, ponieważ wydaje się ono dość wszechobecne.Konwertuj klucz publiczny i prywatny RSA na format PEM:
Szyfrowanie pliku za pomocą klucza publicznego:
Deszyfrowanie pliku za pomocą klucza prywatnego:
Ale, jak skomentował powyżej Gilles, jest to odpowiednie tylko do szyfrowania plików mniejszych niż twój klucz publiczny, więc możesz zrobić coś takiego:
Wygeneruj hasło, zaszyfruj je symetrycznie i zaszyfruj hasło publicznie, zapisując je w pliku:
Odszyfruj hasło kluczem prywatnym i użyj go do odszyfrowania pliku:
Skończysz na dwóch plikach, zaszyfrowanym pliku i zaszyfrowanym haśle, ale wstawienie do skryptu będzie działało dobrze.
Możesz nawet dodać
tar cvf file file.enc file.enc.key
porządek.Optymalnie można zmaksymalizować rozmiar hasła, a także zmienić
rand 64
rozmiar klucza publicznego.źródło
KEYLEN_BYTES=$(ssh-keygen -l -f $PRIV_KEY | awk '{printf("%d", ($1 - 96) / 8)}')
do autogenizacji długości klucza. Biorąc pod uwagę, że ssh-keygen ma minimalną długość klucza wynoszącą 768 bitów, nadal prowadzi to do uzyskania minimalnego klucza symetrycznego wynoszącego 672 bitów lub 84 bajtów.Spójrz na luks / dm-crypt . Możesz użyć klucza prywatnego ssh jako klucza szyfrowania, korzystając z odpowiedniej opcji.
Aktualizacja: Przykład szyfrowania przy użyciu LUKS z urządzeniem blokowym LV (test LV w systemie VG):
Powinno to udoskonalić blokowe urządzenie / dev / mapper / test_crypt, w którym możesz przechowywać swoje dane (po sformatowaniu ich w wybranym systemie plików).
Aby się go pozbyć, zamontuj go i użyj
cryptsetup luksClose test_crypt
.źródło
"$ sudo apt-get install cryptmount crypt-setup; cat '...' > bin/myEncrypt.sh; chmod +x bin/myEncrypt.sh; ./bin/myEncrypt.sh; ...; ..."
Jeśli dobrze rozumiem, ta metoda jest szyfrowaniem na poziomie systemu plików. Szyfruje fs, którego potrzebujesz umount / mount, czy też źle to interpretuję?--key-file
Opcja cryptsetup wykorzystuje rzeczywistą zawartość pliku jako jeden wielki hasło. Nie czyta klucza openssl z pliku i po prostu go używa. Możesz użyć pliku losowych bajtów,--key-file
jeśli chcesz.--key-file
to naprawdę źle wybrana nazwa opcji, powinna być--password-file