]> Cypherpunks.ru repositories - cypherpunks-www.git/blob - faq/telegram.texi
Добавить раздел FAQ с вопросами про выбор messenger
[cypherpunks-www.git] / faq / telegram.texi
1 @node FAQ Telegram
2 @section Безопасен ли Telegram?
3
4 @strong{Ни в коем случае}. Сосед вряд ли сможет прочитать ваши
5 сообщения, но сами сервера Telegram или спецслужбы смогут без проблем.
6
7 В данном разделе рассматривается только @emph{MTProto} протокол
8 шифрования. MTProto и соответствующий конкурс по его взлому являются
9 классическим примером
10 @url{https://www.schneier.com/crypto-gram/archives/1999/0215.html#snakeoil, шарлатанской криптографии}.
11
12 @menu
13 * Отсутствует аутентификация пользователя: FAQ Telegram аутентификация.
14 * DH использует сервер: FAQ Telegram DH сервер.
15 * Априори известные небезопасные алгоритмы: FAQ Telegram алгоритмы.
16 * Но конкурс по взлому же никто не выиграл!: FAQ Telegram конкурс.
17 * Существующие протоколы замедляют передачу данных: FAQ Telegram медленный.
18 @end menu
19
20 @node FAQ Telegram аутентификация
21 @subsection Отсутствует аутентификация пользователя
22
23 Это самый серьёзный и фатальный (после чего его бессмысленно
24 использовать) недостаток. При установлении соединения между
25 пользователями они никак не аутентифицируют друг друга. То есть
26 пользователь не знает действительно ли он разговаривает с нужным ему
27 собеседником или с сервером который просто переотправляет собеседнику
28 сообщения. То есть это то что называется атакой человек-по-середине.
29
30 @node FAQ Telegram DH сервер
31 @subsection DH использует сервер
32
33 Первый выложенный исходный код протокола имел код при котором в
34 протоколе Диффи-Хельмана принимал участие и сервер: от него принимались
35 данные которые надо было подмешивать в DH сообщения. Потенциально он мог
36 полностью ослабить общий установленный ключ, опять же сведя безопасность
37 на нет и для внешнего наблюдателя (не только для серверов Telegram).
38
39 Это похоже исправили и убрали, мотивируя тем что это была защита от
40 устройств где плохой генератор случайных чисел. Возможно действительно
41 было сделано не со зла.
42
43 @node FAQ Telegram алгоритмы
44 @subsection Априори известные небезопасные алгоритмы
45
46 Любое сообщение должно быть зашифровано и аутентифицировано (то есть
47 добавлена информация гарантирующая что сообщение пришло именно от
48 нужного пользователя и без изменений). Как правило используют код
49 аутентичности сообщения (MAC) для аутентификации.
50
51 Есть разные вариант порядка как провести шифрование и аутентификацию:
52
53 @table @asis
54 @item Encrypt-then-MAC
55 Зашифровать, затем добавить MAC от шифротекста (так делают в IPsec)
56 @item MAC-then-Encrypt
57 Добавить MAC от открытого текста, затем зашифровать (так делают в TLS)
58 @item Encrypt-and-MAC
59 Зашифровать, затем добавить MAC от открытого текста (так делали в SSH)
60 @end table
61
62 Первый вариант @strong{всегда} правильный и не имеет недостатков. Второй
63 вариант при некоторых режимах работы даёт возможность очень серьёзных
64 атак типа @url{https://en.wikipedia.org/wiki/Transport_Layer_Security#BEAST_attack, BEAST}.
65 Третий даёт ещё большее количество атак, но на момент создания SSH об
66 этом мир криптографии ещё просто не знал. Не имеет смысла использовать
67 ничего кроме первого варианта.
68
69 MTProto использует фактически третий вариант. Если при первом варианте
70 нужно будет вычислить например HMAC и если он даст отрицательный
71 результат, то больше ничего не предпринимать, то в MTProto нужно
72 вычислить И хэш И дешифровать сообщение чтобы понять что оно не
73 аутентифицировано. То есть самая плохая производительность и
74 безопасность.
75
76 Подробнее можно прочитать
77 @url{http://unhandledexpression.com/2013/12/17/telegram-stand-back-we-know-maths/,
78 тут}
79 и
80 @url{http://www.cryptofails.com/post/70546720222/telegrams-cryptanalysis-contest, тут}.
81
82 SHA1 используемый MTProto является deprecated алгоритмом, не безопасным
83 для современного использования. Telegram говорит что он выбран из-за
84 производительности. Возможно и так, но он не намного медленнее (на
85 современных процессорах) SHA2, который безопасен.
86
87 Более того, MTProto использует
88 @url{https://www.mgp25.com/AESIGE/, IGE режим шифрования}
89 более никому не известный. Абсолютно непонятно зачем. Если им надо было
90 достичь того что ошибка дешифрования распространялась бы и дальше, то
91 почему не использовать
92 @url{https://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher_Feedback_.28CFB.29, CFB}?
93 В любом случае если есть аутентификация сообщений, то error propagation
94 не имеет никакого смысла. Разумнее было бы выбрать например режим
95 счётчика
96 @url{https://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Counter_.28CTR.29, CTR}
97 позволяющий распараллеливать шифрование и дешифрование.
98
99 Ключ шифрования зависит от открытого текста. В целом это плохо это
100 возможные атаки, статистический анализ, но не означает что фатально.
101 Ничто не мешало бы сделать ключ независимым от открытого текста. Кроме
102 того, получается что для каждого сообщения необходимо проводить
103 процедуру инициализации AES ключа -- это дорогая (медленная) операция.
104 Везде стараются не менять ключ блочного шифра как можно дольше ради
105 производительности.
106
107 @node FAQ Telegram конкурс
108 @subsection Но конкурс по взлому же никто не выиграл!
109
110 И вряд ли выиграет, так как практически всегда подобные конкурсы не
111 несут
112 @url{https://www.schneier.com/crypto-gram/archives/1998/1215.html#contests, никакого смысла}.
113
114 @itemize
115
116 @item Конкурсы нечестны. Они часто выставляют условия не
117 соответствующие реальному миру, реальным атакам. Telegram предлагает
118 перехватить шифротексты и их дешифровать, но не даёт возможности
119 проводить общение с сервером или пользователям, не даёт проводить анализ
120 шифротекста зная открытый текст (known plaintext attack), не даёт
121 отправлять и смотреть реакцию на специально подготовленный открытый
122 текст (chosen plaintext attack) или шифротекст (chosen ciphertext
123 attack). То есть это можно сравнить с: попробуйте взломать мою квартиру,
124 но условимся что вы безрукий инвалид без инструментов.
125
126 @item Конкурсы не компенсируют затраты за взлом. Telegram не предлагает
127 показать как можно совершить атаку, а предлагает её выполнить до конца.
128 Криптография, криптоанализ может показать что, например, вам надо
129 перехватить сообщение и сделать перебор каких-нибудь данных в количестве
130 2**64. Это криптографически несерьёзное число: с ним могут справится
131 суперкомпьютеры которые есть у многих корпораций и государств, но их нет
132 у простых людей. Аренда вычислительных мощностей для проведения 2**64
133 операций может стоить дороже чем выигрыш в конкурсе.
134
135 @end itemize
136
137 Поэтому участвовать в конкурсах просто и не выгодно и не интересно, так
138 как они не отражают весь спектр возможных атак.
139
140 @node FAQ Telegram медленный
141 @subsection Существующие протоколы замедляют передачу данных
142
143 В мобильных сетях связи самое главное это уменьшить количество
144 round-trip пакетов данных, уменьшить количество пакетов, так как очень
145 большие задержки, но хорошая пропускная способность.
146
147 Если речь про транспортные протоколы: XMPP, HTTP и подобные -- то
148 действительно они не очень эффективны и визуально будут сильно медленнее
149 из-за задержек между round-trip.
150
151 Если речь про именно про уровень обеспечивающий шифрование, то в TLS
152 тоже действительно много round-trip-ов при установлении соединения, при
153 процессе рупопожатия. Этот процесс идёт только один раз за сеанс связи с
154 пользователем. Дальше, как и в преобладающем большинстве протоколов
155 шифрования: одно сообщение пользователя -- один сетевой пакет.
156
157 Если речь про производительность именно алгоритмов шифрования, то
158 MTProto использует симметричные алгоритмы "как у всех": AES, SHA1, DH и
159 RSA. AES и RSA не самые быстрые. Асимметричные алгоритмы DH и RSA
160 существенно медленнее чем их аналоги основанные на эллиптических кривых.
161 Так что производительность MTProto далеко не лучшая, особенно учитывая
162 смену ключей AES для каждого сообщения.