id: Гость   вход   регистрация
текущее время 20:29 30/03/2020
Владелец: spinore (создано 10/02/2007 16:37), редакция от 13/02/2007 13:45 (автор: SATtva) Печать
Категории: софт, gnupg, стандарты, xmpp, свободный софт, операционные системы, расширения
https://www.pgpru.com/Новости/2007/02-10-ПоявиласьВозможностьРаботатьСEnd-to-endGpgВКонсольномJabber-клиентеПодBSD
создать
просмотр
редакции
ссылки

10.02 // Софт // Появилась возможность работать с end-to-end gpg в консольном jabber-клиенте под *BSD


До недавнего времени единственным консольным jabber-клиентом, поддерживающим end-to-end gpg в UNIX-подобных системах был centericq, поддерживаемый Константином Клягиным. Де-факто gpg в centericq работало только под Linux, собранные же с поддержкой gpg пакеты под BSD фактически не работали (при взаимном включении gpg при приходе шифрованного сообщения centericq разлогинивал аккаунт). Кроме того, centericq корректно не подписывает шифрованные сообщения, из-за чего постоянно пишутся предупреждения в не-centericq-клиентах: "Bad signature from <jabber_id@jabber_server.org/centericq>"


На основе centericq около года назад был создан проект mcabber – также консольный jabber-клиент, который исправил ряд ошибок в дизайне и реализации в centericq, предложил другой интерфейс, и в который недавно (версия 0.9.0) была добавлена поддержка end-to-end gpg (с корректной подписью). Фактически, это первая корректная работающая реализация консольного jabber-клиента с gpg. Рекомендуется в качестве альтернативы протоколу icq и клиенту centericq.


В ряде дистрибутивов Linux mcabber-0.9.0 есть в портах, а в OpenBSD и NetBSD может быть установлен из исходников.


Заметки по инсталляции на NetBSD 3.0:
Должен быть установлен пакет gpgme-1.0.3nb3 и новый curses (ncursesw-5.6 в случае необходимости поддержки unicode, или только ncurses-5.6nb1 – у меня был установлен ncursesw-5.6). Далее, в случае привязки к OpenSSL, имеющемуся базовой системе, а не к gnutls, инсталляция происходит следующим образом:



(Инсталляция произойдёт в каталог /usr/local, но в случае надобности параметр prefix, отвечающий за выбор каталога может быть изменён).


Источник: http://www.lilotux.net/~mikael/mcabber/files/ChangeLog


 
На страницу: 1, 2, 3 След.
Комментарии [скрыть комментарии/форму]
— SATtva (01/02/2015 11:41)   профиль/связь   <#>
комментариев: 11545   документов: 1036   редакций: 4094

Каждый закрытый подключ зашифрован отдельно, соответственно, будут отдельные запросы на подключ шифрования и подключ подписи, даже если на них одна и та же пассфраза.
— Гость (01/02/2015 12:48)   <#>
Ого! Тонко, не подумал бы, хотя ведь знал, что разным подключам можно назначить разные пассфразы...
— Гость (01/02/2015 16:21, исправлен 01/02/2015 18:13)   <#>

Помимо багов с fifo и с OTR при disconnect'е, ещё иногда такие глюки возникают:


(process:XXXXX): GLib-CRITICAL **: Source ID XXXXXXXXXX was not found when attempting to remove it
— SATtva (01/02/2015 17:11)   профиль/связь   <#>
комментариев: 11545   документов: 1036   редакций: 4094
Я на такой мусор в консоли даже внимания не обращаю.
— Гость (01/02/2015 17:56)   <#>
У mcabber'а традиционно мусора вообще не было, это ж консольное приложение. Потом начал падать в кору временами. Чем больше программа комбайн, тем больше глюков и ошибок.
— Гость (13/02/2015 05:56)   <#>

Сделал:
#!/bin/sh
 
HOME=$HOME/path/to
export HOME
TORSOCKS_CONF_FILE=$HOME/path/to/torsocks.conf
export TORSOCKS_CONF_FILE
 
PID=`cat "${HOME}/path/to/.gpg-agent-info" |sed 's/\(^.*\):\(.*\):\(.*\)$/\2/'`
 
if ! ps -p $PID > /dev/null
then
    gpg-agent --daemon \
              --write-env-file "${HOME}/path/to/.gpg-agent-info" \
              --default-cache-ttl XXX \
              --max-cache-ttl YYY
fi
 
. "${HOME}/path/to/.gpg-agent-info"
export GPG_AGENT_INFO
 
GPG_TTY=$(tty)
export GPG_TTY
 
torsocks mcabber
Скрипт, возможно, местами избыточен, но я такие тонкости уже не секу. Хотел сделать получение PID'а через
gpg-agent [options] & PID=$!
но при этом присваивается какой-то иной PID процессу — не тот, что у gpg-agent'а, хотя для тестовых команд в консоли этот метод работает правильно. То ли оно так, потому что gpg-agent порождает более одного процесса(?), то ли ещё какие причины... короче, решил выцеплять PID из самого файла .gpg-agent-info, благо он там явно пишется. Смысл был в том, чтобы на каждый mcabber был свой gpg-agent, т.к. разные jabber-клиенты работают с разными связками PGP-ключей.

Иногда при старте возникает ошибка
torsocks[XXXXX]: [syscall] Unsupported syscall number 202.
Denying the call (in tsocks_syscall()
но на работоспособность mcabber'а она вроде не влияет.


Кстати, это очень плохо для usability. При старте jabber-клиента вводится пассфраза, но она, получается, только для подписи статуса. Если я после старта клиента никому не писал, пассфраза для подключа шифрования так и не появляется в памяти. Если я потом куда-то отошёл, а мне кто-то написал (и я не заметил), то сообщения так и останутся непрочитанными, поскольку jabber-клиент сделает запрос на расшифрование, а пассфразу будет ввести некому; соответственно, по истечении таймаута пассфраза более не будет принята клиентом, и он напишет об ошибке.

Можно ли как-то сделать так, чтобы пассфразы на оба подключа [и (рас)шифрования и подписи] запрашивались ещё до старта jabber-клиента? Можно, конечно, написать фиктивный что-то расшифровывающий/подписывающий скрипт, завязанный на gpg2, но это будет костыль; хотелось бы, чтоб сам gpg-agent запрашивал эти пассфразы. В man gpg-agent не заметил опций на эту тему.
— Гость (13/02/2015 06:05)   <#>
P.S. При первом сыром старте будет ворох ошибок из-за того, что ps -p не получит никакого PID'а (файл .gpg-agent-info ещё не существует), но скрипт вроде как отработает правильно и запустит gpg-agent. Этот косяк можно было бы тоже в скрипте пофиксить, но он нужен лишь самый первый раз, поэтому я не стал описывать случай несуществования файла и, следовательно, никакого PID'а вообще.
— Гость (13/02/2015 06:26)   <#>

Костыль будет ещё более костыльным:

gpg exits the edit prompt with return value 2 whenever some secret key doesn't have its public part in the public keyring.

Если главного секретного ключа связки нет, gpg2 отказывается делать подпись (секретным) подключом. Впрочем, раз подключ подписи всё равно спрашивается после старта jabber-клиента для подписи статуса, достаточно сделать только фиктивное расшифрование чего-нибудь (чтобы закэшировать пассфразу ещё и на подключ шифрования).
— Гость (13/02/2015 07:15)   <#>
И с шифрованием та же фигня:
$ gpg2 -ae -r 0xXXXXXXXX filename
gpg: 0xXXXXXXXX: skipped: No public key
gpg: filename: encryption failed: No public key
Эта же команда с простой gpg работает. Попробовал на связке, где главный секретный ключ связки имеется — тоже не работает.

Короче, подошёл с другой стороны: запускаем обычное gpg, но с gpg-agent. Итак, в скрипте перед строками torsocks mcabber дописываем:
FILE_FOR_PASS=$HOME/path/to/.gpg_file_to_decrypt.asc
gpg -d --use-agent $FILE_FOR_PASS 1>/dev/null 2>/dev/null && \
gpg -s -u 0xXXXXXXXX --use-agent --yes $FILE_FOR_PASS && \
rm ${FILE_FOR_PASS}.gpg
Это делает всё хорошо. Теперь обе пассфразы запрашиваются до старта jabber-клиента. Файл $HOME/path/to/.gpg_file_to_decrypt.asc — какой-нибудь файл, зашифрованный секретным ключом 0xXXXXXXXX, используемым для jabber'а.

Вот такое костылестроение.
— Гость (13/02/2015 07:18)   <#>

Только сейчас понял, что они пишут о другом. Это, кстати, как раз хорошо коррелирует с тем, что

Попробовал на связке, где главный секретный ключ связки имеется — тоже не работает.

Ключи там обычные, никто никогда на отсутствие публичных не жаловался, связка ключей извращениям также не подвергалась.

Ладно, нужный костыль в любом случае уже сделан и работает.
— SATtva (13/02/2015 11:22)   профиль/связь   <#>
комментариев: 11545   документов: 1036   редакций: 4094

Согласен.


Хотел предложить именно такой вариант. Штатной функции на данный момент нет, это, насколько понимаю, архитектурное ограничение — каждую пассфразу и каждый подключ gpg-agent рассматривает отдельным объектом. В новых версиях должна появиться какая-то опция, связанная с историей вводимых пассфраз, может, это оно и есть, не знаю.
— Гость (13/02/2015 14:20)   <#>
А можно ли ввести пассфразу только один раз, но так, чтобы он её посчитал и для расшифрования и для подписи? Даже в рамках костыля мне не приходит в голову такая команда: обычно требуется только что-то одно из этих двух (и даже если б такая команда была, не факт, что он перестал бы запрашивать пассфразу дважды).

Ещё подумал: какую же охапку костылей надо сделать, чтобы получить хотя бы примерно тот же функционал, какой был до принудительной линковки gpgme с gpg-agent'ом. Вводилось это всё якобы для пущей безопасности, а в итоге, скорей всего, эффект будет ровно противоположным: люди запустят клиент; увидят, что PGP не работает, и просто отключат шифрование, т.к. мало кому захочется сидеть сутками и разбираться, что там и к чему. Такие вещи как жёсткая заивимость от gpg-agent'а надо делать опциональными. Не понимаю, каким местом думал автор gpgme (ну, или мейнтейнеры gpgme в популярных дистрах).
— SATtva (13/02/2015 14:40)   профиль/связь   <#>
комментариев: 11545   документов: 1036   редакций: 4094

Чтобы был ровно один запрос пароля? Не представляю. :)
— Гость (13/02/2015 15:05)   <#>
Да, ровно один. Вбивать один и тот же дважды — потеря в юзабельности, особенно если пароли длинные.
— Гость (19/03/2015 09:35)   <#>
Пофикс скрипта запуска джаббера [1], [2] с учётом новых замечаний [3] и некоторых мелких улучшений:
#!/bin/sh
 
KEYID=0xXXXXXXXXXXXXXXXX
HOME=/home/USER/path/to/dir
export HOME
TORSOCKS_CONF_FILE=$HOME/.mcabber/torsocks.conf
export TORSOCKS_CONF_FILE
 
PID=`cat "${HOME}/.mcabber/.gpg-agent-info" |sed 's/\(^.*\):\(.*\):\(.*\)$/\2/'`
 
if ! ps -p $PID > /dev/null
then
    gpg-agent --daemon --use-standard-socket \
        --write-env-file "${HOME}/.mcabber/.gpg-agent-info" \
        --default-cache-ttl XXX \
        --max-cache-ttl YYY
fi
 
. "${HOME}/.mcabber/.gpg-agent-info"
export GPG_AGENT_INFO
 
GPG_TTY=$(tty)
export GPG_TTY
 
FILE_FOR_PASS=$HOME/.mcabber/.gpg_file_to_decrypt.asc
gpg -d --use-agent $FILE_FOR_PASS 1>/dev/null 2>/dev/null && \
gpg -s -u $KEYID --use-agent --yes $FILE_FOR_PASS && \
rm ${FILE_FOR_PASS}.gpg
 
torsocks mcabber
На страницу: 1, 2, 3 След.
Ваша оценка документа [показать результаты]
-3-2-1 0+1+2+3