केवल SSH -priv-key के साथ फाइल एन्क्रिप्ट करना?


22

मान लीजिए मैं एक फ़ाइल को एन्क्रिप्ट करना चाहता हूं ताकि केवल मैं इसे पढ़ सकूं, मेरे एसएसएच निजी कुंजी पासवर्ड को जानकर। मैं एक रेपो साझा कर रहा हूं जहां मैं संवेदनशील जानकारी को एन्क्रिप्ट या बाधित करना चाहता हूं। उसके द्वारा, मेरा मतलब है कि रेपो में जानकारी होगी लेकिन मैं इसे विशेष मामलों में ही खोलूंगा।

  1. मान लीजिए मैं SSH- एजेंट का उपयोग कर रहा हूं, क्या केवल बाद में इसे खोलने के लिए फाइल को एन्क्रिप्ट करने का कोई आसान तरीका है?

  2. मैं यह नहीं देख सकता कि मुझे इसके लिए GPG का उपयोग क्यों करना चाहिए, यहाँ प्रश्न ; मूल रूप से मुझे पासवर्ड पता है और मैं केवल उसी पासवर्ड से फाइल को डिक्रिप्ट करना चाहता हूं जो मेरी SSH कुंजी है। क्या यह संभव है?

जवाबों:


27

मुझे लगता है कि आपकी आवश्यकता वैध है, लेकिन दूसरी ओर यह मुश्किल भी है, क्योंकि आप सममित और असममित एन्क्रिप्शन का मिश्रण कर रहे हैं। कृपया मुझे सुधारें अगर मैं गलत हूं।

तर्क:

  1. आपकी निजी कुंजी का पासफ़्रेज़ आपकी निजी कुंजी की सुरक्षा करता है और कुछ नहीं।
  2. यह निम्न स्थिति की ओर जाता है: आप अपनी निजी कुंजी का उपयोग किसी ऐसी चीज़ को एन्क्रिप्ट करने के लिए करना चाहते हैं जिसे केवल आप डिक्रिप्ट कर सकते हैं। आपकी निजी कुंजी उस के लिए अभिप्रेत नहीं है, ऐसा करने के लिए आपकी सार्वजनिक कुंजी है। आप अपनी निजी कुंजी के साथ जो भी एन्क्रिप्ट करते हैं, उसे आपकी सार्वजनिक कुंजी (हस्ताक्षर) द्वारा डिक्रिप्ट किया जा सकता है, यह निश्चित रूप से वह नहीं है जो आप चाहते हैं। (जो कुछ भी आपकी सार्वजनिक कुंजी द्वारा एन्क्रिप्ट किया जाता है, उसे केवल आपकी निजी कुंजी द्वारा डिक्रिप्ट किया जा सकता है।)
  3. इसलिए आपको अपने डेटा को एन्क्रिप्ट करने के लिए अपनी सार्वजनिक कुंजी का उपयोग करने की आवश्यकता है, लेकिन इसके लिए, आपको उसके लिए अपने निजी कुंजी पासफ़्रेज़ की आवश्यकता नहीं है। केवल यदि आप इसे डिक्रिप्ट करना चाहते हैं तो आपको अपनी निजी कुंजी और पासफ़्रेज़ की आवश्यकता होगी।

निष्कर्ष: मूल रूप से आप सममित एन्क्रिप्शन के लिए अपने पासफ़्रेज़ का फिर से उपयोग करना चाहते हैं। एकमात्र प्रोग्राम जिसे आप अपना पासफ़्रेज़ देना चाहते हैं, वह ssh- एजेंट है और यह प्रोग्राम केवल पासफ़्रेज़ के साथ एन्क्रिप्शन / डिक्रिप्शन नहीं करता है। पासफ़्रेज़ केवल आपकी निजी कुंजी को अनलॉक करने और फिर भूल जाने के लिए है।

अनुशंसा: एन्क्रिप्शन के लिए पासफ़्रेज़-संरक्षित कीफ़ाइल्स का उपयोग करें openssl encया उसके gpg -e --symmetricसाथ। यदि आपको जानकारी साझा करने की आवश्यकता है, तो आप पीकेआई / वेब ऑफ ट्रस्ट बनाने के लिए दोनों कार्यक्रमों के सार्वजनिक कुंजी उल्लंघन का उपयोग कर सकते हैं।

खुलने के साथ, कुछ इस तरह:

$ openssl enc -aes-256-ctr -in my.pdf -out mydata.enc 

और डिक्रिप्शन जैसे कुछ

$ openssl enc -aes-256-ctr -d -in mydata.enc -out mydecrypted.pdf

अपडेट: यह ध्यान रखना महत्वपूर्ण है कि उपरोक्त ओपनसेल कमांड डेटा से छेड़छाड़ होने से नहीं रोकते हैं। एनक फ़ाइल में एक साधारण सा फ्लिप के रूप में अच्छी तरह से भ्रष्ट डिक्रिप्ट डेटा में परिणाम होगा। उपरोक्त आदेश यह पता नहीं लगा सकते हैं, आपको इसे SHA-256 जैसे अच्छे चेकसम के साथ जांचना होगा। एकीकृत तरीके से इसे करने के क्रिप्टोग्राफ़िक तरीके हैं, इसे एचएमएसी (हैश-आधारित संदेश प्रमाणीकरण कोड) कहा जाता है।


5
आप सही कह रहे हैं कि SSH कुंजी एक असममित कुंजी है, जो किसी फ़ाइल को एन्क्रिप्ट करने के लिए उपयुक्त नहीं है। और एक परिणाम के रूप में, आपके द्वारा अंत में प्रदान की गई कमांड काम नहीं करेगी। आप आरएसए के साथ एक फ़ाइल को एन्क्रिप्ट करने का प्रयास कर रहे हैं, लेकिन आप केवल आरएसए (मापांक के आकार का पेडिंग) के साथ बहुत कम पेलोड को एन्क्रिप्ट कर सकते हैं। सामान्य विधि एकल-उपयोग सममित कुंजी उत्पन्न करना है, जिसे RSA के साथ एन्क्रिप्ट करें और सममित कुंजी के साथ वास्तविक डेटा को एन्क्रिप्ट करें। Spg कुंजी को gpg में आयात करना संभव हो सकता है, यह hhh की आवश्यकता को कार्यान्वित करने का एक महत्वपूर्ण तरीका होगा - लेकिन gpg कुंजी के साथ gpg का उपयोग करना सही काम है।
गिल्स एसओ- बुराई को रोकें '

1
आप सिम्पट्रिक -फ्लैग के साथ gpg का सुझाव क्यों देते हैं? यह "gpg -e something"अलग-अलग मामलों के लिए भी काम करता है ?

1
@ हह मैंने मान लिया कि आप अपनी फ़ाइलों को साझा नहीं करेंगे, इसलिए सार्वजनिक कुंजी क्रिप्टोग्राफी का उपयोग करने की तुलना में सिर्फ सादे सममित का उपयोग करना अधिक सुरक्षित है। सार्वजनिक / निजी कीपर इत्यादि के लिए pgp.net/pgpnet/pgp-faq/… : की आवश्यकता नहीं है, "यह अभी भी माना जाता है कि RSA PGP श्रृंखला की सबसे कमजोर कड़ी है।" यह अन्य पबकी तंत्रों जैसे x509 पर भी लागू होता है।
वास्क्यूज

1
ओप्सनल-लाइनर कैसा दिखेगा? के बराबर कुछ $ gpg -e --symmetric?

1
एन्क्रिप्ट करने के लिए इसका उपयोग करें: openssl enc -aes-256-cbc -in my.pdf -out mydata.encसाथ डिक्रिप्ट करें: openssl enc -aes-256-cbc -d -in mydata.enc -out mydecrypted.pdfदोनों कमांड पासवर्ड मांगते हैं। man encसभी विकल्पों के लिए देखें (rh / fedora / centos पर) जैसे कीफाइल्स, बेस 64 एन्कोडिंग आदि
vasquez

21

मैं opensslउपयोगिता का उपयोग करना पसंद करूंगा क्योंकि यह काफी सर्वव्यापी लगता है।

RSA सार्वजनिक कुंजी और निजी कुंजी को PEM प्रारूप में रूपांतरित करें:

$ openssl rsa -in ~/.ssh/id_rsa -outform pem > id_rsa.pem
$ openssl rsa -in ~/.ssh/id_rsa -pubout -outform pem > id_rsa.pub.pem

अपनी सार्वजनिक कुंजी के साथ फ़ाइल एन्क्रिप्ट करना:

$ openssl rsautl -encrypt -pubin -inkey id_rsa.pub.pem -in file.txt -out file.enc

फ़ाइल को अपनी निजी कुंजी के साथ डिक्रिप्ट करना:

$ openssl rsautl -decrypt -inkey id_rsa.pem -in file.enc -out file.txt

लेकिन, जैसा कि ऊपर गिल्स ने कहा, यह केवल आपकी सार्वजनिक कुंजी से छोटी फ़ाइलों को एन्क्रिप्ट करने के लिए उपयुक्त है, इसलिए आप ऐसा कुछ कर सकते हैं:

एक पासवर्ड बनाएं, इसे सममित रूप से फ़ाइल को एन्क्रिप्ट करें, और पासवर्ड को अपने सार्वजनिक, कुंजी को इसे फ़ाइल में सहेजने के साथ एन्क्रिप्ट करें:

$ openssl rand 64 | 
tee >(openssl enc -aes-256-cbc -pass stdin -in file.txt -out file.enc) |
openssl rsautl -encrypt -pubin -inkey id_rsa.pub.pem  -out file.enc.key

पासफ़्रेज़ को अपनी निजी कुंजी के साथ डिक्रिप्ट करें और फ़ाइल को डिक्रिप्ट करने के लिए इसका उपयोग करें:

$ openssl rsautl -decrypt -inkey id_rsa.pem -in file.enc.key | 
openssl enc -aes-256-cbc -pass stdin -d -in file.enc -out file.txt

आप दो फ़ाइलों, अपनी एन्क्रिप्टेड फ़ाइल और अपने एन्क्रिप्टेड पासफ़्रेज़ के साथ समाप्त हो जाएंगे, लेकिन एक स्क्रिप्ट में इसे अच्छी तरह से काम करेंगे।

तुम भी tar cvf file file.enc file.enc.keyसाफ करने के लिए जोड़ सकते हैं ।

वैकल्पिक रूप से, आप अपने पासफ़्रेज़ के आकार को अधिकतम करने के साथ-साथ rand 64अपनी सार्वजनिक कुंजी के आकार में भी परिवर्तन करेंगे ।


बहुत अच्छी तरह से किया, ओपी की विचित्र आवश्यकताओं को देखते हुए।
rsaw

2
केवल यह पाया, अच्छा पोस्ट। मैंने पाया कि ssh-key से आप अधिकतम आकार की सममित कुंजी उत्पन्न कर सकते हैं, जो स्वयं ssh-key से 12 बाइट्स की होती है अन्यथा रोसुटल "कुंजी आकार के लिए डेटा बहुत बड़ा" के साथ विफल हो जाएगा। इसलिए इसने एक स्क्रिप्ट में काम किया: KEYLEN_BYTES=$(ssh-keygen -l -f $PRIV_KEY | awk '{printf("%d", ($1 - 96) / 8)}')एक महत्वपूर्ण लंबाई को ऑटोजेन करने के लिए। यह देखते हुए कि ssh-keygen की 768 बिट्स की न्यूनतम कुंजी है, यह अभी भी 672 बिट्स या 84 बाइट्स की न्यूनतम सममित कुंजी की ओर जाता है।
मार्क डेफ

6

को देखो luks / dm-तहखाने । आप उपयुक्त विकल्प का उपयोग करके एन्क्रिप्शन कुंजी के रूप में अपनी ssh-private-key का उपयोग कर सकते हैं।

अद्यतन: एलवी-ब्लॉक-डिवाइस (वीजी सिस्टम में एलवी परीक्षण) के साथ एलयूकेएस का उपयोग करके उदाहरण एन्क्रिप्शन:

KEY=/home/youraccount/.ssh/id_dsa
DEVICE=/dev/system/test
cryptsetup luksFormat $DEVICE $KEY
cryptsetup luksOpen $DEVICE test_crypt --key-file $KEY

यह एक ब्लॉक-डिवाइस / dev / mapper / test_crypt को प्राप्त करना चाहिए, जिसका उपयोग आप अपने डेटा को अपनी पसंद के फाइल सिस्टम के साथ प्रारूपित करने के बाद कर सकते हैं।

इससे छुटकारा पाने के लिए, इसे umount करें, और उपयोग करें cryptsetup luksClose test_crypt


क्या आप एमवीओ को दे सकते हैं ताकि पुन: उपयोग करना आसान हो? "$ sudo apt-get install cryptmount crypt-setup; cat '...' > bin/myEncrypt.sh; chmod +x bin/myEncrypt.sh; ./bin/myEncrypt.sh; ...; ..."अगर मैं सही समझ सकता हूं, तो यह विधि एक फाइल-सिस्टम-स्तरीय एन्क्रिप्शन है। यह उन एफएस को एन्क्रिप्ट करता है जिनकी आपको umount / Mount की जरूरत है या क्या मैं इसे गलत बता रहा हूं?

2
मुझे नहीं लगता कि यह आपको लगता है कि यह क्या करता है। --key-fileCryptsetup करने का विकल्प एक बड़ा पासवर्ड के रूप में फ़ाइल की वास्तविक सामग्री का उपयोग करता है। यह फाइल से खुलने वाली कुंजी को नहीं पढ़ता है और बस उसी का उपयोग करता है। आप चाहें --key-fileतो रैंडम बाइट्स की फाइल का उपयोग कर सकते हैं।
पैट्रिक

@ हाँ यह एक FS- स्तर-एन्क्रिप्शन है।
निल्स

4
@ निल्स लेकिन क्या होता है जब वह अपनी निजी कुंजी पर पासवर्ड बदलता है, वह अब अपनी फ़ाइलों को डिक्रिप्ट करने में असमर्थ होगा क्योंकि कुंजी फ़ाइल में डेटा बदल गया है। --key-fileविकल्प के लिए वास्तव में एक खराब चुना हुआ नाम है, यह होना चाहिए--password-file
पैट्रिक

1
@ पैट्रिक यह सच है - पासफ़्रेज़ बदलने से फ़ाइल बदल जाएगी और इस प्रकार कुंजी (लुक्स के दृष्टिकोण से)। लेकिन ssh के नजरिए से भी मैं इसे पासवर्ड फाइल नहीं कहूंगा। मुझे पता है कि मेरा जवाब निशान नहीं मारता है - लेकिन मुझे लगता है कि यह कुछ विचार प्रदान करेगा।
निल्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.