Project

General

Profile

Actions

Bug #1221

closed

OTR

Added by Mellon over 11 years ago. Updated about 11 years ago.

Status:
Closed
Priority:
High
Assignee:
Category:
Plugins: Azoth
Target version:
Start date:
08/27/2013
Due date:
% Done:

100%

Estimated time:
12:00 h
Reported in:
master

Description

В общем и целом не работает. То есть невозможно установить OTR сессию между клиентами.

При попытке установки OTR-сессии со стороны LC происходит отсылка сообщений типа

→→→→→→ [18:31:51.618] →→→→→→
  <message type="chat" id="qxmpp9993" to="lctu0@jabbim.cz/cz">
    <body>hello                            </body>
    <request xmlns="urn:xmpp:receipts"/>
  </message>

→→→→→→ [18:31:51.621] →→→→→→
  <message type="chat" id="qxmpp9994" to="lctu0@jabbim.cz">
    <body>?OTR:AAICAAAAxKEdCoutHja0NmYAiTXzu7fHh+8EBSJ6A1SVcUE//OCUj3w3pEWuAKYjVio7Zq8cZx0O7rb7GoZRUZg3JNeizMf+xLlOQDEsaPn/x+aSBVOZ1ic/s+V+7d2Q0joeDB2sBip6wnYTmyFYwsW1tYwnywrf5M9GotZaqX9/JmDFoqxZ0fXBhGwqKsfu/sfKOix5PPu7RukbyOdjdGMj7P+rXE/+k394/kN1Qv+sVgUWwNI1TWBLuh1/vUK+olIarK7q1IRFEBQAAAAg9DhuHBw9RGWFHLAYho7Z8LebeoHxEKqRJ/q1Xm9PwZI=.</body>
    <request xmlns="urn:xmpp:receipts"/>
  </message>

→→→→→→ [18:31:51.623] →→→→→→
  <message type="chat" id="qxmpp9995" to="lctu0@jabbim.cz">
    <body>?OTR:AAIKAAAAwI4fe4rUml2U/F5WOf/GC5kSgcUybHhv3Zg2KPSsXUq40V/bYWaJnbxHYtSu55UMKOyxF5eGCVh2/ktRoK5FoGOVRnXmNBGCwser71SBD1Y37EdaHOHyDpE+ELWe7NBrCV2p58xmy1cK/ni4nsWpglB81E7GBqedT/UZOvoWRIoiOYgGoWxkFb7B3q9WRg+IW0UZ+iCEaIGkYoff2K/hsXPPQOZCyDfdn+oADsPN9mlk8zJi34OMmrVVJ/p+j6jYaw==.</body>
    <request xmlns="urn:xmpp:receipts"/>
  </message>

Реакции со стороны другого клиента на это - никакой, кроме отображения первого незашифрованного сообщения.

При этом кнопка OTR остается нажатой и у пользователя может сложится впечатления установления защищенного сеанса.

При попытке инициировать OTR-сессию со стороны другого клиента (В данном случае Psi+, но подобное поведение наблюдалось и с Pidgin). происходит такой диалог:

<message to='lctu0@jabber.ru' type='chat'><subject></subject><body>?OTR?v2? *lctu0@jabbim.cz* has requested an Off-the-Record private conversation.  However, you do not have a plugin to support that. See http://otr.cypherpunks.ca/ for more information.</body></message>

<message from="lctu0@jabber.ru/Azoth" type="chat" to="lctu0@jabbim.cz" id="qxmpp11418">
<body>?OTR:AAICAAAAxBdl4THzzQAnu0a3VAw3ab5Z7qKTOG5K81RSKRjDcqxKMavWA/zCGVPlEjbzDg6t0Ct1z1uim/sEJQnhJufphLr29LhDqGFYUSs6/3aGReBZYxBrIuof10mxzGS5wr9nmOlngW+40miFQpEH+q+wucB8MTJVpbWCJvTcge/VGXSLKmH7KVh5wrjjoS49mRsdPK5RD25ZulBhBPlrijQ1xkf6vHGKkZ41aOw652Qfd1UEmMpeMle41ra00AlsVQnQGjmCGIYAAAAgkVkr/RGy7lhEuasVcMENLJMTVqK9DsXaQhy5if/c8Yc=.</body>
<request xmlns="urn:xmpp:receipts"/>
</message>

<message to="lctu0@jabber.ru/Azoth" id="aae3a">
<received xmlns="urn:xmpp:receipts" id="qxmpp11418"/>
</message>

<message to='lctu0@jabber.ru' type='chat'><subject></subject><body>?OTR:AAIKAAAAwCrepSdb/pYENy3taVnHlh5eL3q5xoumjycATHuF0GTGSymkC5qOBXloS/3BtHQehx2C7J8QeeAnl4T22VDWP4Ng+5Kf2xykYS3WQYRvh5YeOIv9wdVm0vMN5OMvKb7ACbUgpY26b2T6bbNcFAhbl6aM8y814T07SniER0gRUF4C05FJ1V9Yw7CJEzZ5AGlqMW/pw2sEgXBs9S7ilPZGSGQJjiCslPdzpMxrdBFwl0I/WmdeeDl5Cs0ntH87wHPs/Q==.</body></message>

<message from="lctu0@jabber.ru/Azoth" type="chat" to="lctu0@jabbim.cz" id="qxmpp11419">
<body>?OTR:AAIKAAAAwEWTwo+ueH+aw2faSf7ivpcDvpqKApGNlRABaVvQfxpfDIU98CQee9r2/Fc2KJ6lV4oT1c4RUoEsRCMo198j4Nl3V8TqE8CTzErTL0OCXJKkIG0AGUuA4xLXC4O5Td+wNLHIiGhFxjMt7F3TbBR+ZatBx/P+DC8nGpSoehJtZk85UWYQuJvzi9YIBfHGsVpUwRduy9YhGe52PnvPDK3GnCm1HNERoujeChgjuZXNHWc4AgqqNu92fBTRoy7oVebmPw==.</body>
<request xmlns="urn:xmpp:receipts"/>
</message>

<message to="lctu0@jabber.ru/Azoth" id="aae4a">
<received xmlns="urn:xmpp:receipts" id="qxmpp11419"/>
</message>

<message type="chat" to="lctu0@jabber.ru/Azoth" id="aae5a">
<body>hello</body>
<active xmlns="http://jabber.org/protocol/chatstates"/>
<request xmlns="urn:xmpp:receipts"/>
</message>

<message from="lctu0@jabber.ru/Azoth" type="chat" to="lctu0@jabbim.cz/cz">
<received xmlns="urn:xmpp:receipts" id="aae5a"/>
</message>


И как в предыдущий раз, в личкрафтах показывается, что беседа защищена.

То есть, судя по всему, плагин лишь создает видимость защиты.

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

Кроме того, необходимо отметить, что в плагине не реализованы стандартные настройки:
1.поведения по инициализации зашишённой беседы;
2. генерации новых ключей и авторизации известных;
http://jabberworld.info/OTR

Actions #1

Updated by 0xd34df00d about 11 years ago

  • Status changed from New to Assigned
  • Target version set to 0.6.60
Actions #2

Updated by 0xd34df00d about 11 years ago

  • Status changed from Assigned to Resolved
  • % Done changed from 0 to 100

Applied in changeset main|commit:82b20aa1070dc41f0118cf5ddec5cdeecbeeceed.

Actions #3

Updated by 0xd34df00d about 11 years ago

  • Estimated time set to 8:00 h
Actions #4

Updated by Mellon about 11 years ago

Нет двух достаточно важных вещей.

1) При инициировании OTR сессии собеседником не происходит включения шифрования. Фактически, шифрование включается с приходом первого зашифрованного сообщения, а не при инициировании сессии. В итоге, собеседник может иницировать шифрованную сессию, но если вы отправите ему сообщение первым, то оно уйдет не зашифрованным.

2) Нет реакции на завершение сессии собеседником.

Так же, немаловажной деталью является явное уведомление пользователя о событиях OTR-сессии.
Крайне желательно выводить эти события в чат наподобие следующих:
  • При исходящих событиях
    ***  Попытка начать защищенную беседу
    ***  Непроверенная защищенная беседа начата
    ***  Защищенная беседа завершена
    
  • При входящих событиях
    ***  Непроверенная защищенная беседа начата
    ***  lctu0@jabbim.cz завершил(а) защищенную беседу, сделайте то же самое и вы.
    
Actions #5

Updated by 0xd34df00d about 11 years ago

  • Status changed from Resolved to Assigned
  • % Done changed from 100 to 60
  • Estimated time changed from 8:00 h to 12:00 h
Actions #6

Updated by Mellon about 11 years ago

В свете последних изменений можно сказать, что инициация и завершение сессии сделаны на 90%.

Остался один момент
В случае, когда собеседник завершил сеанс, а мы - ещё нет, не отображаются открытые сообщения которые нам посланы.
Они должны отображаться в виде:
[07:09:04] <> The following message received from was not encrypted: [test ]

Actions #7

Updated by Tehnick about 11 years ago

Mellon wrote:

В случае, когда собеседник завершил сеанс, а мы - ещё нет, не отображаются открытые сообщения которые нам посланы.
Они должны отображаться в виде:
[07:09:04] <> The following message received from was not encrypted: [test ]

В сборке с libotr 4.x они отображаются примерно так:
[07:09:04] <lctu1> The following message received from lctu1 was not encrypted:
[07:09:04] <lctu1> test

Для libotr 3.2.x надо пофиксить, согласен. У меня ее нет, но насколько я помню, нужно посмотреть в сторону notify(), которую удалили в libotr 4.x.

Actions #8

Updated by Tehnick about 11 years ago

Для libotr 3.2.x надо пофиксить, согласен. У меня ее нет, но насколько я помню, нужно посмотреть в сторону notify(), которую удалили в libotr 4.x.

Сорри, опечатался. Я про display_otr_message(), конечно.

Цитата:

3.1.1. Removed Operations

/* Display a notification message for a particular accountname /
 * protocol / username conversation. */
void (*notify)(void *opdata, OtrlNotifyLevel level,
    const char *accountname, const char *protocol,
    const char *username, const char *title,
    const char *primary, const char *secondary);

The notify() operation was removed since it was used to pass in
hardcoded English strings. This has been replaced by error and message
event callbacks, described below, which pass event codes rather than
hardcoded strings.

/* Display an OTR control message for a particular accountname /
 * protocol / username conversation.  Return 0 if you are able to
 * successfully display it.  If you return non-0 (or if this
 * function is NULL), the control message will be displayed inline,
 * as a received message, or else by using the above notify()
 * callback. */
int (*display_otr_message)(void *opdata, const char *accountname,
    const char *protocol, const char *username, const char *msg);

The display_otr_message() operation was removed for the same reasons as
above for the notify() operation.

В Psi+ это выглядит вот так:

int OtrInternal::display_otr_message(const char* accountname,
                                     const char* protocol,
                                     const char* username,
                                     const char* msg)
{
    Q_UNUSED(protocol);

    QString message = QString::fromUtf8(msg);

    if (QRegExp("^<b>The following message received " 
                "from .+ was <i>not</i> encrypted: " 
                "\\[</b>.+<b>\\]</b>$").exactMatch(message))
    {
        return -1;
    }
    else
    {
        return m_callback->displayOtrMessage(QString::fromUtf8(accountname),
                                             QString::fromUtf8(username),
                                             message)? 0 : -1;
    }
}

Actions #9

Updated by Tehnick about 11 years ago

Сорри, опечатался. Я про display_otr_message(), конечно.

Дедфуд уже пофиксил и молчит:
https://github.com/0xd34df00d/leechcraft/commit/3d33631

Actions #10

Updated by 0xd34df00d about 11 years ago

  • % Done changed from 60 to 100
Actions #11

Updated by 0xd34df00d about 11 years ago

  • Status changed from Assigned to Resolved
Actions #12

Updated by Mellon about 11 years ago

  • Status changed from Resolved to Closed

Отлично. Не всё гладко, но, думаю, пора закрывать этот баг. И открывать уже более частные.
Спасибо.

Actions

Also available in: Atom PDF