• Стоит ли использовать RSA?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    И да и нет одновременно.

    (обновлено, ибо внезапно прочитал и половину не понял - видимо писал на "потоке")
    RSA стоит использовать лишь для шифрования других ключей - ключей симметричных алгоритмов шифрования. AES, ГОСТ 28147-89, 3DES и другие. Почему? Во-первых, симметричные алгоритмы более устойчивы к взлому при большом известном закрытом тексте, тогда как ассиметричное шифрование потенциально имеет изъяны. В том смысле, что (почти) любое ассиметричное шифрование использует задачу NP-класса (точнее - NP-полную задачу): факторизация числа (RSA), декодирование полных (общих) линейных кодов (McEliece), вычисление дискретного логарифма на элептической кривой (ГОСТ Р 34.10-2012), или в конечном поле (Elgamal). Другое дело, что любая эта задача потенциально - решаемая. В случае с симметричным шифрованием действительно стоит лишь надеяться на чудо (в ГОСТе разрешено выбирать любые s-блоки, так что криптоаналитику ничего не остаётся, как молиться пролетариату в надежде на терморектальный криптоанализ). В случае же с ассиметричным шифром в дело вступают две вещи - высокая сложность реализации действительно стойкого алгоритма (ассиметричные шифры очень сложны и полны нюансов, не учитывая которые можно запросто порушить систему), низкая скорость работы (в силу того, что приходиться использовать очень абстрактные математические функции, сложно реализуемые аппаратно и таящие в себе множество низкоуровневых операций) при требовании к очень длинным ключам заставляют использовать небольшие ключи для того, чтобы не ждать вечность.

    Однако. Здесь имеется странный парадокс. Если данные очень важные и на их защиту можно убить несколько миллионов енотов, то надо использовать только ассиметричный шифр. Потому что, он потенциально даёт большую стойкость. Парадокс здесь в том, что если классы P и NP неравны, то мы получаем едва ли не идеальную и приемлемую по стоимости защиту, так как есть возможность сложной организационной защиты.
    (здесь было многое отправлено в топку)

    Окай, посмотрим на стандартную схему с Алисой, Бобом и Евой:
    Алиса -> c = E(m, Eb) -> -------- -> D(c, Db) -> Боб (
                                     |
                                     |
                                     v
                         Ева <- c, E, D, d

    здесь m - текст, который надо передать (сообщение)
    c - шифротекст
    E - функция шифрования (получения из сообщения шифротекста)
    D - функция дешифрования, иначе - обратная функция шифрования (получения из шифротекста - сообщения)
    Eb, Db - секретный и открытый ключи Боба (в литературе используется различное обозначение, здесь так)
    Собственно, Ева знает всё о функциях шифрования и дешифрования, имеет доступ к шифротексту и будем считать, что она получает и открытый ключ.

    Теперь, что нам это даёт? А это нам даёт возможность наплодить большое количество ключей и шифровать каждое сообщение отдельным ключём. Потенциально, но если есть $$$, то можно скупить половину серверов страны, если не планеты и радоваться жизни. Хотя ровно так же можно поступить и с симметричным шифрованием, и называется это одноразовым блокнотом, используют и различные режимы шифрования и всё равно выходит профитнее. Где же профит здесь?
    Во-первых, если нужно передавать по каналу, а не хранить, то можно генерировать ключи налету и после расшифровки их уничтожать. По сути, получиться что для того, чтобы получить сообщение длины l бобу потребуется передать и ключей в общей сумме длины l. Много? Да. Профитно? Очень - ибо мы реализуем
    ассиметричный одноразовый блокнот (упс), который, однако, нет никакого смысла использовать нет - слишком дорого. Да и не всегда возможно - порой обратный канал чрезвычайно узкий.
    Во-вторых, есть способ организовать защиту, основанную на иерархии пользователей. То есть майор Алиса написала отчёт, который ей надо отправить подполковнику Бобу. При этом читать этот отчёт должны иметь право все, кто равен или выше подполковника.
    В-третьих, как писалось выше, сложность взлома достаточно велика. И не только потому, что P != NP. Даже P довольно большое получается, поэтому и используют асимметричный шифр для передачи ключей симметричных ключей. Но и взлом получается очень не простым из-за тяжёлых математических абстракций. Обычно. Да, RSA можно "взломать" перебрав все возможные делители, но это долго из-за астрономического размера ключа. А способы обхода или упрощения опираются на такой зубодробительный матан, что попытка как-то это реализовать заставит использовать сами по себе очень тяжёлые операции. Так это при работе с банальными числами (и это показывает, насколько плохо развита теория чисел), а что если уйти на эллиптическую кривую - аналитическая геометрия развита может чуть лучше, но абстракции намного тяжелее для компьютеров. И даже использование графических карт не помогает, ведь есть ещё и макэлис. Я к тому, что O(2^32) для симметричного шифра и O(2^32) для асимметричного шифра не очень таки равны. Так же не равны, как не равны день и месяц.

    Но самое главное. Сегодня всё что угодно можно взломать. А то, что нельзя взломать - бесполезно (ибо либо уничтожено полностью, либо предоставляет такие же непосильные сложности для расшифровки и получателю). Во-первых, атака может быть не на сами шифры, а на организационные методы (которые, можно улучшить применением асимметричного шифра). Во-вторых, некоторые шифры таки имеют изъяны, просто возможно о них знают ограниченный круг лиц; привет масонам. И, наконец, криптоаналитик может быть просто ну очень удачлив.

    Поэтому шифрование надо использовать соразмерно цене риска. Чем выше риск - тем сильнее шифрование, но самое главное - сложнее и дисциплинированнее организационные меры. Согласитесь - бесполезно иметь централизованное хранилище сертификатов с одним сервером в бункере за 200 км под землей и круглосуточной охраной из армии маленькой страны, всего лишь одним портом торчащим во внешний мир с каналом около 200 бит в секунду и постоянным наблюдением за организационными методами (авторизация, доступ и подобной)... Имея пароль на суперюзер - qwerty, и держа на винчестере архив с котиками.
    Ответ написан
    Комментировать
  • Как лучше хранить телефонный номер в БД?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    "Обожаю" такие вопросы.
    Начнем с того - сколько у Вас номеров в базе, что Вам актуальна экономия места?
    По теме - строки.
    Ответ написан
    12 комментариев
  • Почему в файле теневых паролей для групп (/etc/gshadow) пароли не шифруются?

    Rrooom
    @Rrooom
    Потому что читаем документацию, а не тыкаем пальцем в небо. Стало интересно, первой ссылкой в гуголе - www.computerhope.com/unix/groupadd.htm

    Читаем. И выясняем, что опция -p просит не сам пароль, а строку уже зашифрованную crypt.
    Ответ написан
    Комментировать
  • * Restarting nginx nginx [fail]. Где смотреть логи?

    alexclear
    @alexclear
    A cat
    Сделайте для начала nginx -t - это тест конфига, он покажет ошибки
    А логи смотрите в /var/log/nginx/error.log, обычно они там
    Ответ написан
    Комментировать
  • Как правильно настроить cубдомен в nginx?

    Kinozol
    @Kinozol
    Тёплый LAMPовый вебдев :)
    Ваш конфиг должен работать, но исправьте ошибку, есть лишняя точка в конце пути.

    root /usr/share/nginx/www/site1.;
    Ответ написан
    2 комментария
  • Как сложить объекты в JS?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    function Foo(value) {
        this.value = value;
    }
    Foo.prototype.valueOf = function () {
        return this.value;
    };
    
    var first = new Foo(2) // first.val = 2
    var two = new Foo(3) // first.val = 3
    
    alert( first + two ) // должно вывести 5
    Ответ написан
    4 комментария
  • Как поживает sylus?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    3 130 downloads in the last day
    48 091 downloads in the last week
    190 401 downloads in the last month


    Скажем статистика для less

    5 752 downloads in the last day
    102 954 downloads in the last week
    421 915 downloads in the last month


    и для scss/sass

    125 downloads in the last day
    2 258 downloads in the last week
    10 445 downloads in the last month


    так что можно сказать что у sylus все очень даже неплохо с популярностью. Что до отсутствия материалов на русском, ну это во первых не показатель. во вторых sylus использует тот же yandex ну и в третьих на русском информации о нем предостаточно. Просто в этом мало смысла.
    Ответ написан
    3 комментария
  • Что необходимо понимать при реализации криптоалгоритма?

    @throughtheether
    human after all
    У меня релевантного образования нет, выскажу свое мнение дилетанта.
    Чем, например, моя реализация хуже той, что представлена в каком-нибудь криптопровайдере (я говорю не о скорости работы, а о безопасности)?
    Тем, что существующие реализации имеют некоторую историю эксплуатации или даже прикладного криптоанализа. Поэтому авторы этих реализаций имеют внешнюю оценку своих решений. У вас такой оценки, я полагаю, нет. Будет очень грустно, когда об уязвимости вы узнаете уже после того, как при помощи эксплуатации этой уязвимости будет нанесен ущерб.
    В общем, что стоит помнить/знать/понимать, чтобы сделать свою реализацию такой же надёжной, как и промышленные аналоги?
    Следует иметь в виду, что одна лишь математически корректная реализация не гарантирует надежности/безопасности. Следует учитывать поведение системы в целом. Если ваше решение - некий общедоступный сервер, то имейте в виду, что третья сторона может с некоей точностью замерять ответы вашей системы на поступающие запросы и делать из этого выводы. Если ваше решение - смарт-карта, то будьте готовы к тому, что третья сторона может измерять потребление электричества в разные моменты времени и делать из этого выводы, целенаправленно изменять напряжение питания и тактовую частоту процессора, подвергать систему воздействию ионизирующего излучения с целью нарушения работы алгоритма и анализа данных, полученных в ходе наблюдения. Если вы даже всего лишь пишете простую программу на языке высокого уровня, будьте готовы к тому, что нюансы этого языка приведут к некоторым последствиям.
    Вкратце, наивное математически корректное решение не защитит вас, в общем случае, от атак по времени и прочим сторонним каналам.
    Вышесказанное не означает, что кто-то в общем случае вправе вам запретить самостоятельно реализовывать криптоалгоритмы, но с вашей стороны было бы разумно оценить возможные последствия.
    Ответ написан
    Комментировать
  • Как заставить на винде работать Nginx быстрее ?

    @neol
    В настоящий момент в качестве метода обработки соединений используется только select(), поэтому не стоит ожидать высокой производительности и масштабируемости. В силу этого и ряда других известных проблем версия nginx под Windows рассматривается пока как бета-версия.

    nginx.org/ru/docs/windows.html
    Ответ написан
    Комментировать
  • Как настроить Nginx reverse proxy для всех портов?

    shurph
    @shurph
    Похоже, что проксировать все порты автоматически не получится. Для каждого порта нужно будет прописывать в конфиге строчки отдельно. Для вашего примера понадобится что-то такое:
    server {
        listen 22;
        server_name example1.com;
        location / {
            proxy_pass http://192.168.1.1:22;
        }
    }
    server {
        listen 22;
        server_name example2.com;
        location / {
            proxy_pass http://192.168.1.2:22;
        }
    }


    про remote_addr почитайте вот это:
    habrahabr.ru/post/177113
    На сколько я понимаю, поместить в remote_addr адрес пользователя не получится на стороне nginx'а.

    UPD (на основе дискуссии в комментариях):
    у меня есть сомнения, что такое возможно настроить с помощью nginx (да и вообще — настроить).
    Во первых, nginx — это http сервер и, соответственно, http прокси (разве что ещё почтовые протоколы он поддерживает). Если нужны другие протоколы, то и использовать стоит другие решения.

    Во вторых, я очень не уверен, что при подключении по другим протоколам вы сможете определить, что пользователь подключается к домену example1.com, а не к example2.com.
    Ведь как определяется домен в случае http? Браузер передаёт такой запрос на сервер, подключаясь к example1.com:

    GET / HTTP/1.0
    Host: example1.com
    Ответ написан
    3 комментария