Обмен паролями через незащищенные каналы

Безопасный обмен сообщениями
Решил поделиться простым способом как обмениваться сообщениями через незащищенные каналы связи. При этом под незащищенными каналами я имею ввиду не каналы, которые без шифрования и без паролей, хотя и это тоже конечно. А Вообще любое место, в котором сохранение данных вами не контролируется и данные откуда могут попасть куда угодно. 
 
Так что этот способ например хорошо подойдет если нужно побыстрому переслать например пароль или еще какие-то данные для доступов или еще что-то. При этом для админов это работает быстро и удобно, поскольку у всех есть сгенерированные пары ssh ключей и они всегда под рукой. Итак

1. Публичный ssh rsa ключ получателя

Создаем файл с публичным ключом получателя сообщения. Этим ключом сообщение будет зашифровано. Расшифровать сообщение сможет только владелец соответствующего приватного ключа, поэтому необходимо быть на 100% уверенным, что для шифрования используется нужный публичный ключ.
 
$ echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDQ5GVyTlgZGvlxD2qch4UpzMWXMjGMvDjSAJIxt4k18VdNbh1VjBTJD0F5rQbdFoeTyaxFL/u1iU0C/GpC/4V35yTP5Wtlc32jNpYAKu7xPKnRlClSj3whNIK6DWIeysXqdMB8efQLuWnCQQ/NNN86x4IjqokH2qvW/YDzy8xaYUPxaqqiQJ02UfGV+iQL3hyvqm8C/vLNizigOYBXA1MtkRtkfuhkC1sO04y+5vRHYGY156NXVsR6i6IFEwhJpjdH2pDVSH8GNdQ2ncWPJESuyvSwlTkAudvD8t/XyjDJloR1Lb4Hm/DyW70YmJDLaJgT+JE91le4VRrmrdHDYzOP user' > ~/ssh_public_keys/user
 

2. Шифрование сообщения на стороне отправителя

$ echo 'Plain Text Message' | openssl rsautl -encrypt -oaep -pubin -inkey <(ssh-keygen -e -f ~/ssh_public_keys/user -m PKCS8) | base64 -w0

TuVPM+DFtsNlieOAmsM/mZQbCbzrEAatntcDhu7G2YXXMUoVONJDLLOQcADpkzHxaOiGFOJvoPr2KZarg6725F0wf7Y0b0fj5vgrMXU0ykEC0J6zmo4hUclxc55jMLdw5goG7oAWL0aq7GO6Eg1KtuGRCkMAZug5+pX4MHYfpnWHuBK8kcZ9TCN4F4hClDXfiab9dH9nEnddewja68eGBrfBB6EPCt0LbyF916EVODkZo7I4Zk/B4wqMZ2v3QAuel3ZmsxtZNW+hQXAn/bwpkUtezKHS2Z5om8yoTCRBmALD4imhPYRcBCI3UqgV2+91Ss6YYkSX/cfZe6xQmfg1Rg==
 
Полученное зашифрованное сообщение преобразовано в текстовую форму, пригодную для передачи через текстовые мессенджеры.
 

3. Расшифровка сообщения на стороне получателя

 
$ echo 'TuVPM+DFtsNlieOAmsM/mZQbCbzrEAatntcDhu7G2YXXMUoVONJDLLOQcADpkzHxaOiGFOJvoPr2KZarg6725F0wf7Y0b0fj5vgrMXU0ykEC0J6zmo4hUclxc55jMLdw5goG7oAWL0aq7GO6Eg1KtuGRCkMAZug5+pX4MHYfpnWHuBK8kcZ9TCN4F4hClDXfiab9dH9nEnddewja68eGBrfBB6EPCt0LbyF916EVODkZo7I4Zk/B4wqMZ2v3QAuel3ZmsxtZNW+hQXAn/bwpkUtezKHS2Z5om8yoTCRBmALD4imhPYRcBCI3UqgV2+91Ss6YYkSX/cfZe6xQmfg1Rg==' | base64 --decode | openssl rsautl -decrypt -oaep -inkey ~/.ssh/id_rsa
 
Вот в общем и все, посылаем получившуюся строчку получателю через почту или мессенджер и его сможет расшифровать только обладатель приватного ключа. В текущей ситуации, когда многие работают удаленно и в распределенных командах, бывает полезно переслать пароль побыстрому или еще какие-то данные, которые в открытом виде слать совсем не хочется.
 
Вы можете сказать, для подобных вещей есть GPG ключи и в общем все это и все уже давно придумано. Но не у всех они подключены и настроены, а вот что касается админов, то у них всегда под рукой есть rsa ключи для доступа по ssh.
 
Ну и не забывайте, что пароли писать на бумажках нельзя 🙂