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