@node ЧАВО @section Часто задаваемые вопросы @menu * Почему вы не используете TLS?: Почему не TLS. * Почему вы не используете SSH?: Почему не SSH. * Почему вы не используете IPsec?: Почему не IPsec. * Почему GoVPN написан на Go?: Почему Go. * Почему вы аутентифицируете по парольной фразе?: Почему парольные фразы. * Почему вся настройка сети делается вручную?: Почему ручная настройка сети. * Почему нет поддержки OS X или Windows?: Почему нет поддержки проприетарных ОС. * Что вы подразумеваете под совершенной прямой секретностью?: Что такое PFS. * Что вы подразумеваете когда говорите что клиенты анонимны?: Что такое анонимность. * Что вы подразумеваете под цензуроустойчивостью?: Что такое цензуроустойчивость. * Когда я должен использовать нешифрованный режим?: Когда нешифрованный режим. * Когда я должен использовать noise опцию?: Когда noise опцию. * Когда я должен использовать опцию синхронизации времени?: Когда синхронизацию времени. * Могу ли я сделать DoS (отказ в обслуживании) демона?: Можно ли DoS демона. * Почему YAML для конфигурации?: Почему YAML. @end menu @node Почему не TLS @subsection Почему вы не используете TLS? @itemize @item Это сложный плохо спроектированный протокол. @item Он использует Аутентификацию-затем-Шифрование порядок использования алгоритмов. @item Его библиотеки огромны и сложны для чтения, ревью и анализа. @end itemize @node Почему не SSH @subsection Почему вы не используете SSH? @itemize @item Его первые версии использовали Аутентификацию-и-Шифрование порядок, однако более поздние поддерживают даже ChaCha20-Poly1305 алгоритм. @item OpenSSH не поддерживает сильные протоколы аутентификации по паролю с нулевым неразглашением. @end itemize @node Почему не IPsec @subsection Почему вы не используете IPsec? В нём нет сильного протокола аутентификации по паролю с нулевым неразглашением и, снова, его код сложно читать. @node Почему Go @subsection Почему GoVPN написан на Go? Go очень легко читается, поддаётся ревью и поддержке. Он усложняет написание сложного кода. Он предоставляет всё что нужно для C языка: проверки границ массивов, сборщик мусора и конкурентные примитивы. Он обеспечивает меньшую производительность (хотя на моём ноутбуке даёт более чем 750 Mbps пропускной способности), но большую надёжность и гораздо меньше строк кода. @node Почему парольные фразы @subsection Почему вы аутентифицируете по парольной фразе? Человек способен запоминать достаточно длинные парольные фразы (не пароли): 100-200 символов, что даёт возможность использовать её как высокоэнтропийный ключ. Вам нужно доверять только себе, не аппаратному токену или другому устройству хранения. Это удобно. @node Почему ручная настройка сети @subsection Почему вся настройка сети делается вручную? Потому-что существует так много вариантов использования, конфигураций и установок, что или я поддерживаю их все, или использую громоздкие протоколы типы PPP, или просто даю право выбора администратору. VPN это всего-лишь прослойка. @node Почему нет поддержки проприетарных ОС @subsection Почему нет поддержки OS X или Windows? Любые проприетарные системы с закрытым исходным кодом не дают возможности управлять компьютером. Вы не можете безопасно использовать всё что касается криптографии без контроля над нижестоящим вычислительным устройством. Выбирайте другую операционную систему. @node Что такое PFS @subsection Что вы подразумеваете под совершенной прямой секретностью? Что вы не можете дешифровать ранее перехваченный трафик если ваши долгоживущие ключи будут скомпрометированы. Это свойство работает на уровне сессии: оно не спасёт если сессионный ключ скомпрометирован из памяти. @node Что такое анонимность @subsection Что вы подразумеваете когда говорите что клиенты анонимны? Что третьей лицо не может отличить одного клиента от другого, смотря на трафик (транспортный или рукопожатия). @node Что такое цензуроустойчивость @subsection Что вы подразумеваете под цензуроустойчивостью? Невозможность определить GoVPN ли это трафик или просто @code{cat /dev/urandom | nc somehost}. Если вы не можете отличить один вид трафика от другого, то при цензуре ваше единственный вариант это заблокировать все его виды. @node Когда нешифрованный режим @subsection Когда я должен использовать @ref{Encless, нешифрованный режим}? Если вы работаете под юрисдикциями где суды могут привлечь вас к ответственности за использование шифрования или могут вынудить вас как-либо выдать ваши ключи шифрования (хотя сессионные ключи шифрования генерируются каждую сессию). В большинстве случаев, эти суды не могут требовать аутентификационные ключи или ключи для ЭЦП. @strong{Не позволяйте} названию режима вас смутить: он всё-равно обеспечивает конфиденциальность и аутентичность передаваемых данных! Но имейте в виду, что этот режим требователен к ресурсам и трафику и пока работает только в TCP режиме. Если всё что не может быть прочитано кем-угодно считается шифрованием, то этот режим вам не поможет. Представьте что вы говорите на другом иностранном языке или просто используете другую схему кодирования данных. @node Когда noise опцию @subsection Когда я должен использовать @ref{Noise, noise} опцию? В большинстве случаев она вам не нужна без включённого @ref{CPR, постоянного по скорости трафика} (CPR). Без CPR и шума, в GoVPN трафике (так же как и в TLS, IPsec, SSH и других VPN протоколах) утекает информация о размерах и временных характеристиках пакетов нижележащего уровня. Вы можете делать анализ трафика и предполагать что происходить в сети. Без CPR опции вы можете только сказать в online ли кто или нет -- ни больше, ни меньше. @node Когда синхронизацию времени @subsection Когда я должен использовать опцию @ref{Timesync, синхронизации времени}? Без этой опции, если кто-либо перехватит первоначальный пакет рукопожатия от настоящего клиента, то он сможет его повторить и получить пакет рукопожатия от сервера в ответ. Это может быть использовано для определения известен ли определённый пользователь серверу и то что мы имеем дело именно с GoVPN сервером. Timesync опция заставляет добавлять временные штампы в пакеты рукопожатия, разрешая быть пакетам действительными только в указанном временном окне. Если вы имеете более или менее синхронизированные часы между вашими клиентами и сервером, то можете всего использовать эту опцию. @node Можно ли DoS демона @subsection Могу ли я сделать DoS (отказ в обслуживании) демона? Каждый транспортный пакет первым делом аутентифицируется очень быстрым UMAC алгоритмом -- в большинстве случаев потребление ресурсов TCP/UDP слоёв будет выше чем проверка UMAC. Каждое сообщение рукопожатия обрабатывается только если зашифрованный @ref{Identity, идентификатор} клиента найден: он использует быстрый PRP без потребления энтропии. @node Почему YAML @subsection Почему YAML для конфигурации? Есть не так много хорошо известных форматов позволяющих комментировать, легко редактировать людьми (XML совсем не дружелюбен к человеку, JSON более менее). Возможно самое важное свойство это шаблоны YAML: очень удобно сохранить много клиентов, имеющих схожие настройки, в одном конфигурационном файле.