SSH -priv-key를 사용하여 파일을 암호화하시겠습니까?

SSH -priv-key를 사용하여 파일을 암호화하시겠습니까?

나만 읽을 수 있도록 SSH 개인 키 비밀번호를 알고 파일을 암호화하고 싶다고 가정해 보겠습니다. 민감한 정보를 암호화하거나 난독화하려는 저장소를 공유하고 있습니다. 저장소에는 정보가 포함되지만 특별한 경우에만 열겠습니다.

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

  2. 왜 GPG를 사용해야 하는지 모르겠습니다. 질문여기;기본적으로 나는 비밀번호를 알고 있으며 SSH 키와 동일한 비밀번호를 사용하여 파일을 해독하고 싶습니다. 가능합니까?

답변1

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

추리:

  1. 개인 키의 비밀번호는 개인 키를 보호하기 위한 것일 뿐이며 다른 어떤 것도 아닙니다.
  2. 이로 인해 다음과 같은 상황이 발생합니다. 개인 키를 사용하여 자신만이 해독할 수 있는 것을 암호화하려고 합니다. 여기에는 개인 키가 사용되지 않고 공개 키가 사용됩니다. 개인 키로 암호화한 것은 무엇이든 공개 키(서명)로 해독할 수 있지만 이는 물론 원하는 바가 아닙니다. (공개키로 암호화된 내용은 개인키로만 복호화할 수 있습니다.)
  3. 따라서 데이터를 암호화하려면 공개 키를 사용해야 하지만 이를 위해서는 개인 키 비밀번호가 필요하지 않습니다. 암호를 해독하려면 개인 키와 비밀번호만 필요합니다.

결론적으로:기본적으로 대칭 암호화를 위해 비밀번호를 재사용하려고 합니다. 비밀번호를 제공하려는 유일한 프로그램은 ssh-agent이며 해당 프로그램은 암호화/복호화에 비밀번호만 사용하지 않습니다. 이 비밀번호는 개인 키를 잠금 해제하는 데에만 사용되며 이후에는 잊어버립니다.

추천하다:비밀번호로 보호된 키 파일을 openssl enc사용 하여 암호화합니다. gpg -e --symmetric정보를 공유해야 하는 경우 두 프로그램의 공개 키 인프라를 사용하여 PKI/신뢰 네트워크를 만들 수 있습니다.

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(해시 기반 메시지 인증 코드)라고 합니다.

답변2

나는 이 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공개 키 크기를 변경할 수 있습니다.

답변3

보고 있다럭스/dm-암호화. 적절한 옵션을 사용하여 ssh-private-key를 암호화 키로 사용할 수 있습니다.

업데이트: LUKS 및 LV 블록 장치를 사용한 암호화의 예(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.

관련 정보