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
유틸리티가 상당히 보편적 인 것처럼 보이기 때문에 유틸리티 를 사용하는 것을 선호합니다 .
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
공개 키의 크기로 변경 하면됩니다.
답변
봐 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
.