[unix] SSH -priv-key로만 파일 암호화?

SSH 개인 키 비밀번호를 알고 파일 만 읽을 수 있도록 파일을 암호화하려고한다고 가정하십시오. 중요한 정보를 암호화하거나 난독 처리하려는 리포지토리를 공유하고 있습니다. 즉, 리포지토리에 정보가 포함되지만 특별한 경우에만 정보를 열 것입니다.

  1. SSH 에이전트를 사용한다고 가정하면 나중에 파일을 열 수 있도록 파일을 암호화하는 쉬운 방법이 있습니까?

  2. 여기에 왜 GPG를 사용해야하는지 알 수 없습니다 . 여기서 질문 하십시오 . 기본적으로 나는 비밀번호를 알고 있으며 SSH 키와 동일한 비밀번호로만 파일을 해독하려고합니다. 이것이 가능한가?



답변

귀하의 요구 사항은 유효하다고 생각하지만 대칭 및 비대칭 암호화를 혼합하기 때문에 어렵습니다. 내가 틀렸다면 정정 해주세요.

추리:

  1. 개인 키의 암호는 개인 키를 보호하는 것입니다.
  2. 이로 인해 다음과 같은 상황이 발생합니다. 개인 키를 사용하여 해독 할 수있는 것을 암호화하려고합니다. 당신의 개인 키는 그것을위한 것이 아니며, 당신의 공개 키는 그렇게하기위한 것입니다. 개인 키로 암호화 한 것이 무엇이든 공개 키 (서명)로 해독 할 수 있습니다. 공개 키로 암호화 된 것은 개인 키로 만 해독 할 수 있습니다.
  3. 따라서 공개 키를 사용하여 데이터를 암호화해야하지만이를 위해서는 개인 키 암호가 필요하지 않습니다. 암호를 해독하려는 경우에만 개인 키와 암호가 필요합니다.

결론 : 기본적으로 암호 암호화를 대칭 암호화에 재사용하려고합니다. 암호를 제공하려는 유일한 프로그램은 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.


답변