SSH 개인 키 비밀번호를 알고 파일 만 읽을 수 있도록 파일을 암호화하려고한다고 가정하십시오. 중요한 정보를 암호화하거나 난독 처리하려는 리포지토리를 공유하고 있습니다. 즉, 리포지토리에 정보가 포함되지만 특별한 경우에만 정보를 열 것입니다.
SSH 개인 키 비밀번호를 알고 파일 만 읽을 수 있도록 파일을 암호화하려고한다고 가정하십시오. 중요한 정보를 암호화하거나 난독 처리하려는 리포지토리를 공유하고 있습니다. 즉, 리포지토리에 정보가 포함되지만 특별한 경우에만 정보를 열 것입니다.
답변:
귀하의 요구 사항은 유효하다고 생각하지만 대칭 및 비대칭 암호화를 혼합하기 때문에 어렵습니다. 내가 틀렸다면 정정 해주세요.
추리:
결론 : 기본적으로 암호 암호화를 대칭 암호화에 재사용하려고합니다. 암호를 제공하려는 유일한 프로그램은 ssh-agent이며이 프로그램은 암호 만 사용하여 암호화 / 복호화를 수행하지 않습니다. 암호는 개인 키를 잠금 해제 한 다음 잊어 버리기위한 것입니다.
권장 사항 : 사용 openssl enc
또는 gpg -e --symmetric
암호화를위한 암호로 보호 된 키 파일과 함께. 정보를 공유해야하는 경우 두 프로그램의 공개 키 인프라를 사용하여 PKI / Web of Trust를 작성할 수 있습니다.
openssl을 사용하면 다음과 같습니다.
$ openssl enc -aes-256-ctr -in my.pdf -out mydata.enc
그리고 해독 같은
$ openssl enc -aes-256-ctr -d -in mydata.enc -out mydecrypted.pdf
업데이트 : 위의 openssl 명령으로 인해 데이터가 변경되는 것을 막을 수는 없습니다. enc 파일에서 간단한 비트 플립으로 인해 해독 된 데이터도 손상됩니다. 위의 명령으로이를 감지 할 수 없으므로 SHA-256과 같은 양호한 체크섬으로이를 확인해야합니다. 통합 방식으로이를 수행하는 암호화 방법이 있으며이를 HMAC (해시 기반 메시지 인증 코드)라고합니다.
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
키 파일, base64 인코딩 등과 같은 모든 옵션에 대해서는 (rh / fedora / centos에서)를 참조하십시오 .
나는 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
그러나 Gilles가 위에서 언급했듯이 이것은 공개 키보다 작은 파일을 암호화하는 데만 적합하므로 다음과 같이 할 수 있습니다.
비밀번호를 생성하고 파일을 대칭으로 암호화 한 다음 공개 키로 비밀번호를 암호화하여 파일로 저장하십시오.
$ 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
공개 키의 크기로 변경 하면됩니다.
KEYLEN_BYTES=$(ssh-keygen -l -f $PRIV_KEY | awk '{printf("%d", ($1 - 96) / 8)}')
키 길이를 자동 생성하는 스크립트에서 작동했습니다 . ssh-keygen의 최소 키 길이가 768 비트 인 경우 여전히 672 비트 또는 84 바이트의 최소 대칭 키가됩니다.
봐 LUKS / dm-crypt와 . 적절한 옵션을 사용하여 ssh-private-key를 암호화 키로 사용할 수 있습니다.
업데이트 : LV 블록 장치에서 LUKS를 사용한 암호화 예 (VG 시스템의 LV 테스트) :
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 를 선택해야합니다 (선택한 파일 시스템으로 포맷 한 후).
제거하려면 마운트 해제하고을 사용하십시오 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가 필요한 fs를 암호화합니까? 아니면 이것을 잘못 읽습니까?
--key-file
으로 cryptsetup에 대한 옵션은 하나의 큰 암호와 파일의 실제 내용을 사용합니다. 파일에서 openssl 키를 읽지 않고 그냥 사용하십시오. --key-file
원하는 경우 임의의 바이트 파일을 사용할 수 있습니다 .
--key-file
실제로 옵션에 대해 잘못 선택된 이름입니다.--password-file