ssh-rsa 공개 키를 사용하여 텍스트를 암호화하는 방법은 무엇입니까?


55

시나리오는 다음과 같습니다. Bob이라고 가정하면 Alice의 메시지를 암호화하고 싶습니다. 내가 가진 유일한 공개 키는 ssh-rsa다음과 같이 그녀의 id_rsa.pub입니다.

SSH-RSA AAAAB3NzaC1yc2EAAAABIwAAAQEAyb + qaZLwgC7KAQJzYikf3XtOWuhlMXVv2mbTKa5dp0sHPRd2RaYnH8ZRkt7V8bjqct1IHGCuxI8xyoEp4at3FHe6j9RfWiarc1ldLUCmTtryI0GGpRs6Zpvqdtpcq / 1NCIYtUQAvsImyEFCtqmB2suDo1ZSllZQ0x9TCKHdCANYIOeaniuFzR57POgE3vxk / r6PO24oy8BIWqxvi29r0n1LUigVBJ7CmMHuzb4 / i1v6PxV1Lqnj6osPP9GpXpsh8kLUCby + / + KcmcryWNdSP0esyCdDxkA5hlIuk8qL1vzsyPluUQuc0BEHu6nuw8WQlCF1mFFxcpJL MhWEr01WIIw == sikachu@Sikachus-Notebook.local

따라서이 공개 키를 사용하여 문자열을 암호화하여 id_rsa(에서 생성 된 ssh-keygen) 개인 키를 사용 하여 메시지를 해독 할 수있는 방법이 있습니까?

( .pem키 페어 파일을 사용하는 경우 즉시 가능하다는 것을 알고 있습니다. openssl지원 하는 형식으로 변환하는 방법을 보여 주면 좋을 것입니다!)

감사!


5
당신과 앨리스는 정말 gpg를 조사해야합니다 ... gnupg.org ; D
— tink

4
하하하! 그러나 내가 가지고있는 시나리오는 ssh-rsa이미 공개 키에 액세스 할 수 있으며 수신자가 gpg를 설치하도록 요청하는 등의 복잡성 계층을 추가하고 싶지 않다는 것입니다.
— sikachu

답변:


71

ssh 공개 키를 PEM 형식으로 변환 할 수 있습니다 ( 'openssl rsautl'에서 읽을 수 있음).

예:

ssh-keygen -f ~/.ssh/id_rsa.pub -e -m PKCS8 > id_rsa.pem.pub

'myMessage.txt'가 공개 키 암호화되어야하는 메시지라고 가정합니다.

그런 다음 일반적으로 하듯이 openssl rsautl 및 변환 된 PEM 공개 키를 사용하여 메시지를 암호화하십시오.

openssl rsautl -encrypt -pubin -inkey id_rsa.pem.pub -ssl -in myMessage.txt -out myEncryptedMessage.txt

결과는 'myEncryptedMessage.txt'의 암호화 된 메시지입니다.

Alice의 개인 키로 암호 해독 작업을 테스트하려면 :

openssl rsautl -decrypt -inkey ~/.ssh/id_rsa -in myEncryptedMessage.txt -out myDecryptedMessage.txt

5
이것을 GitHub에서 사용자 공개 키를 가져 오는 스크립트에 넣었습니다. github.com/twe4ked/catacomb
— twe4ked

이것은 나를 위해 작동하지 않습니다. 내가 ssh-keygen이없는 -m옵션을 선택합니다. 교체 (나는. 그것의 버전에 SSH-Keygen은을 요청하는 방법을 알아낼 수 없습니다) -m와 함께 -t작동하지만 다음 openssl"공개 키를로드 할 수 없습니다"나에게 알려줍니다. stackoverflow.com/questions/18285294/…를 참조하십시오 .
— Jason Gross

1
Jason이 MaxOS Mavericks와 동일한 문제입니다. keygen 사용 가능 키 생성을 위해 -m을 -t로 대체했습니다.
— Robert Christian

8
파일이 충분히 작은 경우에만 작동합니다. 예를 들어 200 바이트. stackoverflow.com/questions/7143514/…를
— h__

1
@hyh가 말한 것처럼, 이것은 입력 파일이 작은 경우에만 작동합니다 (행은 약 254 바이트 정도입니다). 그렇지 않으면 "rsa 루틴 : RSA_padding_add_SSLv23 : data가 키 크기에 비해 너무 큽니다 : 2 / src / crypto / rsa / rsa_ssl.c : 73 "오류
— Devy

1

하는 시도해 ssh를-볼트 는 "볼트의 내용보기"를 해독하고 SSH-RSA 개인 키 "볼트를 만들"암호화하기 위해 SSH-RSA 공개 키를 사용


-3

자신의 암호를 굴릴 필요가없는 매우 명백한 방법을 사용하십시오.

Alice는 alice@bobserver.com으로 sftps를 사용하여 alice 계정에 공개 키 인증 만 허용하도록 설정됩니다. ssh의 속성은 Alice만이 인증 할 수 있도록합니다. DH를 사용하는 초기 통신은 alice와 bob 모두에게 알려진 값을 생성하지만 중간에는 어떤 사람에게도 알려진 값을 생성하지 않으므로 인증을 통해 사용될 수 있기 때문에 (ssh1을 비활성화하고 올바른 설정을 요구한다고 가정 할 때) 중간 공격에있는 사람도 실패합니다. 응답이나 MITM 공격이 커뮤니 카 티노의 내용을 볼 수 없습니다.

Alice sftp를 상자에 넣고 파일을 다운로드하십시오.


9
openssl을 사용하여 자체 암호화를 어떻게 롤링합니까?
— cmc

예를 들어, 메시지 크기로 인해 RSA를 사용하여 1024 자 문자열을 암호화하는 것은 실패합니다. 이 문제를 극복하기 위해 구현자는 특히 메시지가 반복되는 경우 불안정한 상황에 처해 있습니다. RSA를 사용하여 반복 할 가능성이없는 새로운 대칭 암호 키 및 초기화 벡터를 암호화하는 것이 더 안전하므로 메시지를 보낼 때마다 고유 한 암호 텍스트를 생성하고 대칭 암호 속도를 얻고 암호 및 일반 텍스트의 양을 줄입니다. RSA 키를 공격합니다. 이해가 되길 바랍니다. :)
— Sam

이 방법을 사용하려면 Bob이 Alice를 신뢰하거나 bobserver.com을 잠 가서 Alice가 악성 작업을 수행 할 수 없도록해야합니다.
— mwfearnley

앨리스는 기본 수학이 자신의 롤이라는 의미에서 해독하기 위해 상당한 양의 비정상적인 연산을 던져야한다는 의미에서 자신의 롤링을 수행합니다. 이것은 API 또는 이론적 관점보다는 명령 줄 유틸리티 측면에서 요청되었으므로 개인은 실제로 ssh 위에 새로운 프로토콜을 피기 백하지 않고 구체적인 정보를 전송하기를 원한다고 가정했습니다. 실제로 sftp는 훨씬 쉬워 보였으므로 서버를 내려다보고, Alice를 신뢰하거나 나중에 서버를 닦아야합니다.
— Peter Gerdes

위의 코드에서 Alice가이 특이한 메시지를 해독하는 방법을 정확하게 설명하고 Charlie의 MITM 메시지를 안전하게 해독하는 명령 시퀀스를 제공하는 이메일을 가로채는 누군가에게 실제로 취약한 것 같습니다 (openssl 명령은 마술과 같습니다) 서버 아이디어는 많은 사람들이 익숙한 표준 명령을 선호 하여이 모든 것을 피하고 bob이 컴퓨터에서 실행하면 암호화하고 있습니다. 분명히 가장 좋은 대답은 위협 모델에 따라 다르지만 q 컨텍스트에서 더 나은 결과를 제공 할 것입니다.
— Peter Gerdes
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.