• Протоколы распространения ключей на симметричных шифрах

      Данный текст будет являться одной из переписанных глав для учебного пособия по защите информации кафедры радиотехники и систем управления МФТИ (ГУ). Полностью учебник доступен на github (см. также draft releases). На хабре я же планирую выкладывать новые «большие» куски, во-первых, чтобы собрать полезные комментарии и замечания, во-вторых, дать сообществу больше обзорного материала по полезным и интересным темам.

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

      • В результате работы протокола должен между двумя абонентами должны быть сформирован секретный сессионный ключ.
      • Успешное окончание работы протокола распространение ключей должно означать успешную взаимную аутентификацию абонентов. Не должно быть такого, что протокол успешно завершился с точки зрения одной из сторон, а вторая сторона при этом представлена злоумышленником.
      • К участию в работе протокола должны допускаться только легальные пользователи сети. Внешний пользователь не должен иметь возможность получить общий сессионный ключ с кем-либо из абонентов.
      • Добавление нового абонента в сеть (или исключение из неё) не должно требовать уведомления всех участников сети.
      Читать дальше →
    • Blockchain

        Данный текст будет являться новой главой для учебного пособия по защите информации кафедры радиотехники и систем управления МФТИ (ГУ). Полностью учебник доступен на github. На хабре я же планирую выкладывать новые «большие» куски, во-первых, чтобы собрать полезные комментарии и замечания, во-вторых, дать сообществу больше обзорного материала по полезным и интересным темам.

        Когда у вас есть знания о том, что такое криптографически стойкая хеш-функция, понять, что такое blockchain («цепочка блоков») очень просто. Blockchain – это последовательный набор блоков (или же, в более общем случае, ориентированный граф), каждый следующий блок в котором включает в качестве хешируемой информации значение хеш-функции от предыдущего блока.

        Технология blockchain используется для организации журналов транзакций, при этом под транзакцией может пониматься что угодно: финансовая транзакция (перевод между счетами), аудит событий аутентификации и авторизации, записи о выполненных ТО и ТУ автомобилей. При этом событие считается случившимся, если запись о нём включена в журнал.

        В таких системах есть три группы действующих лиц:

        • источники событий (транзакций)
        • источники блоков (фиксаторы транзакций)
        • получатели (читатели) блоков и зафиксированных транзакций.

        В зависимости от реализации эти группы могут пересекаться. В системах типа BitCoin, например, все участники распределённой системы могут выполнять все три функции. Хотя за создание блоков (фиксацию транзакций) обычно отвечают выделенные вычислительные мощности, а управляющими их участников называют майнерами (см. раздел про децентрализованный blockchain далее).

        Основное требование к таким журналам таково:

        • Невозможность модификации журнала: после добавления транзакции в журнал должно быть невозможно её оттуда удалить или изменить.
        Читать дальше →
      • Квантовый протокол распределения ключей BB84

          Данный текст будет являться новой главой для учебного пособия по защите информации кафедры радиотехники и систем управления МФТИ (ГУ). Полностью учебник доступен на github. На хабре я же планирую выкладывать новые «большие» куски, во-первых, чтобы собрать полезные комментарии и замечания, во-вторых, дать сообществу больше обзорного материала по полезным и интересным темам.

          В 1984 году Чарлз Беннет (англ. Charles Henry Bennett) и Жиль Брассар (фр. Gilles Brassard) предложили новый квантовый протокол распределения ключа. Как и другие протоколы его целью является создание нового сеансового ключа, который в дальнейшем можно использовать в классической симметричной криптографии. Однако особенностью протокола является использование отдельных положений квантовой физики для гарантии защиты получаемого ключа от перехвата злоумышленником.

          До начала очередного раунда генерации сеансового ключа предполагается, что у Алисы и Боба, как участников протокола, имеется:

          • квантовый канал связи;
          • классический канал связи.

          Протокол гарантирует, что вмешательство злоумышленника в протокол можно заметить вплоть до тех пор, пока злоумышленник не сможет контролировать и на чтение, и на запись все каналы общения сразу.
          Читать дальше →
        • Восстановление Apache Derby без резервной копии

            Для собственного удовольствия у меня на личном компьютере крутится робот для Википедии (аккаунт1, аккаунт2, исходный код). Бот держит локальный кеш версий страниц Википедии — чтобы не ходить каждый раз на удалённый сервер за ними, а также набор специфичных данных, которые собирались последние пару лет и очень важны для работы бота. Данные собираются в базу данных под управлением Apache Derby, и, вместе с кешем, БД занимает около 50 Гб.

            И вот, в один прекрасный выходной день, когда бот обрабатывал данные в 8 потоков на 4-х CPU, Abbyy Finereader распознавал 14-ый том русского биографического словаря под редакцией А. А. Половцева, а противники делали свой ход в Civilization Age of Kings… возник он — синий экран смерти. Давненько не виделись, подумал я, перезагружая компьютер. С причиной ладно — скорее всего проблемы с видеоадаптером на аппаратной почве. Вот только когда компьютер загрузился и я попробовал запустить бота ещё раз, возникло это:
            ERROR XSDG2: Invalid checksum on Page Page

            А прошлый бэкап, как обычно, датирован мартом месяцем…
            Читать дальше →
          • Re: Сравнение производительности платформ .NET и Java на примере бинарного дерева

              Как же надоели некорректные сравнения платформ. Оставив в стороне различия между .NET и Java, которые не были учтены в тесте, покажу на шагах оптимизацию времени исполнения.

              Читать дальше →
            • Меня записали в «минусяторы»…

                В процессе чтения комментариев к посту habrahabr.ru/blogs/society_2/94847 поставил 6 «плюсов» комментариям, с которыми согласился. Также хотел поставить «минусы» тем, с которыми не согласен. Но Хабр не дал — после 8-го минуса возможность голосования была заблокирована (а так хотел поставить ещё парочку).

                Хабр, я что, виноват, что не согласен с большинством комментариев? Я виноват, что к топику так много неадекватных комментариев? Если я один такой уникальный — ну так после меня придут и наставят плюсов. Верни возможность оценивать комментарии!
              • Использование apr_socket_sendfile() из сервлетов под Tomcat

                  В этом топике расскажу о маленьком, но эффективном способе передачи файлов пользователю из сервлета по HTTP протоколу. Используется:
                  • Apache Tomcat
                  • Apache Portable Runtime Library
                  • Apache Tomcat Native Library
                  • Ваш сервлет, которому нужно отдавать файлы пользователю
                  Читать дальше →
                • SoftReference Read-Write Cache для Hibernate — с «хвостами» для реализации кластера

                    В этом топике попробую рассказать о реализации системы кеширования данных в CMS ArpSite. Эта подсистема уже не раз переписывалась, но она является именно тем, что позволяет системе вообще работать с приемлимым временем отклика.

                    Использование SoftReference даёт возможность оставить поведение кеширования «на самотёк» — за пореблением памяти следит сама JVM, она же очищает старые элементы.

                    «Cluster» означает, что кеш самостоятельно отслеживает события инвалидации (устаревания, обновления) значений и следит за тем, чтобы на других серверах в кластере устаревшие элементы выкидывались из кеша. Есть и другие определения кластерного кеша. Например, основной режим работы JBoss Cache может даже «вытягивать» элементы с других узлов кластера, если их нет на текущей машине. Но для нашей системы, где скорость получения элемента с другой машины ненамного меньше скорости генерации элемента, достаточно инвалидации.

                    Read-Write означает, что мы не используем блокировку элементов кеша и вообще не думаем (почти) о том, что в нашей системе есть какие-то независимые транзакции. Для CMS это нормально, но, разумеется, для какого-нибудь enterprise application это было бы недопустимо.
                    Читать дальше →