• Взлом шифра Виженера с помощью частотного криптоанализа



    «Представьте себе такую ситуацию… Как-то раз, уходя со службы около часу ночи (руководитель должен подавать хороший пример), вы замечаете торчащий в дверях измятый клочок бумаги… Бумага отменная, слегка пахнет мускусом; почерк явно женский и веет от него этаким французским шармом. Теперь, по здравом размышлении, новая сотрудница мисс Хари начинает казаться вам, пожалуй, немножко слишком экзотичной. Ее французский акцент, неизменное черное платье для коктейля, нитка черного жемчуга, подчеркивающая декольте, и этот будоражащий запах мускуса, наполняющий комнату, когда она входит… Она говорит, что работала раньше в региональном вычислительном центре Мак-Дональда в Киокаке. Что-то тут не так. Подождите… Неужели мисс Хари шпионит в пользу знаменитой французской фирмы И Бей Эм? А эта записка — шифровка, в которой все секреты вашего новейшего чудо-компилятора? Чтобы уличить мисс Хари, записку нужно расшифровать. Но как?»

    На Хабре уже пару раз мелькали статьи о книге Чарльза Уэзерелла «Этюды для программистов». Перед вами фрагмент одного из самых интересных, на мой взгляд, этюдов — «Секреты фирмы», основной задачей в котором является взлом шифра Виженера. Не так давно я реализовал этот этюд, и в моей статье я расскажу о том, как я это сделал и что в итоге получилось.
    Читать дальше →
    • +40
    • 83.3k
    • 7
  • Развитие баз данных в Dropbox. Путь от одной глобальной базы MySQL к тысячам серверов

      Когда только Dropbox запустился, один пользователь на Hacker News прокомментировал, что реализовать его можно несколькими bash-скриптами с помощью FTP и Git. Сейчас такого сказать никак нельзя, это крупное облачное файловое хранилище с миллиардами новых файлов каждый день, которые не просто как-то хранятся в базе данных, а так, что любую базу можно восстановить на любую точку в течение последних шесть дней.

      Под катом расшифровка доклада Славы Бахмутова (m0sth8) на Highload++ 2017, о том, как развивались базы данных в Dropbox и как они устроены сейчас.


      О спикере: Слава Бахмутов — site reliability engineer в команде Dropbox, очень любит Go и иногда появляется в подкасте golangshow.com.

      Содержание




      Читать дальше →
      • +69
      • 16k
      • 9
    • Как мы писали сетевой код мобильного PvP шутера: синхронизация игрока на клиенте

        В одной из предыдущих статей мы провели обзор технологий, которые используются на нашем новом проекте — fast paced шутере для мобильных устройств. Теперь хочу поделиться, как устроена клиентская часть сетевого кода будущей игры, с какими трудностями мы столкнулись и как их решали.


        Читать дальше →
      • Особенности вызова функций в С++

          Не так давно у меня произошёл очередной разговор с коллегой на извечную тему: "по ссылке, или по значению". В результате возникла данная статья. В ней я хочу изложить результаты моего исследования по этой и смежным темам. Далее будут рассмотрены:


          • Регистры и их назначение при вызове функций.
          • Передача и возврат простых типов и структур.
          • Как передача по ссылке и по значению влияют на оптимизации тела функции компилятором.
          • Как используется место при многочисленных вызовах функций.
          • Механизм виртуальных вызовов.
          • Оптимизация хвостовых вызовов и рекурсии.
          • Инициализация структур, массивов и векторов.

          Осторожно! Статья содержит большое количество кода на C++ и ассемблере (Intel ASM с комментариями), а также множество таблиц с оценками производительности. Всё написанное актуально для x86-64 System V ABI, который используется во всех современных Unix операционных системах, к примеру, в Linux и macOS.

          Читать дальше →
        • NGINX изнутри: рожден для производительности и масштабирования

          • Translation
          NGINX вполне заслуженно является одним из лучших по производительности серверов, и всё это благодаря его внутреннему устройству. В то время, как многие веб-серверы и серверы приложений используют простую многопоточную модель, NGINX выделяется из общей массы своей нетривиальной событийной архитектурой, которая позволяет ему с легкостью масштабироваться до сотен тысяч параллельных соединений.

          Инфографика Inside NGINX сверху вниз проведет вас по азам устройства процессов к иллюстрации того, как NGINX обрабатывает множество соединений в одном процессе. Данная статья рассмотрит всё это чуть более детально.
          Поехали!
        • Обзор GUI-интерфейсов для управления Docker-контейнерами



            Работа с Docker в консоли — привычная для многих рутина. Тем не менее, бывают случаи, когда GUI-/веб-интерфейс может оказаться полезным даже для них. В статье представлен обзор наиболее заметных на сегодняшний день решений, авторы которых попытались предложить более удобные (или подходящие для каких-то случаев) интерфейсы для знакомства с Docker или даже обслуживания больших его инсталляций. Некоторые из проектов совсем молоды, а иные — наоборот, уже отмирают…
            Читать дальше →
          • Опубликована база с 320 млн уникальных паролей (5,5 ГБ)


              Проверка аккаунтов на живучесть

              Одно из главных правил при выборе пароля — не использовать пароль, который уже засветился в каком-нибудь взломе и попал в одну из баз, доступных злоумышленникам. Даже если в вашем пароле 100500 символов, но он есть там — дело плохо. Например, потому что в программу для брутфорса паролей можно загрузить эту базу как словарный список. Как думаете, какой процент хешей она взломает, просто проверив весь словарный список? Вероятно, около 75% (реальную статистику см. ниже).

              Так вот, откуда нам знать, какие пароли есть у злоумышленников? Благодаря специалисту по безопасности Трою Ханту можно проверить эти базы. Более того, их можно скачать к себе на компьютер и использовать для своих нужд. Это два текстовых файла в архивах: с 306 млн паролей (5,3 ГБ) и с 14 млн паролей (250 МБ).
              Читать дальше →
            • Криптовымогатель Petya денег не получит: генерируем ключ разлочки жесткого диска сами



                3 апреля на Habrahabr появилась информация по обнаружению нового криптовымогателя, который шифрует не отдельные файлы, а весь раздел диска (том). Программа получила название Petya, а ее целью является таблица размещения файлов NTFS. Ransomware работает с диском на низком уровне, с полной потерей доступа к файлам тома для пользователя.

                У Petya обнаружена также специальная схема маскировки для скрытия активности. Изначально криптовымогатель запрашивает у пользователя активацию UAC, маскируясь под легальные приложения. Как только расширенные привилегии получены, зловредное ПО начинает действовать. Как только том зашифрован, криптовымогатель начинает требовать у пользователя деньги, причем на выплату «выкупа» дается определенный срок. Если пользователь не выплачивает средства за это время, сумма удваивается. «Поле чудес», да и только.
                Читать дальше →
              • 7 способов отобразить видео с RTSP IP-камеры на веб-странице и 2 в мобильном приложении

                  В этой статье покажем 7 технологически разных способов отображения видеопотока с IP-камеры с поддержкой RTSP на web-странице браузера.

                  Браузеры, как правило, не поддерживают RTSP, поэтому поток будет конвертироваться для браузера через промежуточный сервер.
                  Читать дальше →
                  • +13
                  • 38.1k
                  • 3
                • Разрабатываем видеочат между браузером и мобильным приложением


                    Империи зла нередко получают лучи ненависти со стороны конечных пользователей. Не смотря на это, Uber частично оплачивает наши поездки, хоть и временно, а Google придал значительное ускорение технологии WebRTC, которая бы так и оставалась проприетарной и сильно платной софтиной для узких целей b2b, если бы не ИЗ.

                    После появления WebRTC, видеочаты стало делать проще. Появились различные API и сервисы, серверы и фреймворки. В данной статье мы подробно опишем еще один способ разработки видеочата между веб-браузером и нативным Android-приложением
                    Читать дальше →
                    • +16
                    • 15.6k
                    • 8
                  • История одного бага: выравнивание данных на x86

                    • Translation
                    Однажды мне пришлось вычислять сумму векторов целых чисел.

                    Звучит необычно. Кому понадобится делать это в реальной жизни? Обычно такие вычисления встречаются только в задачках из начальной школы или бенчмарках компилятора. Но сейчас это случилось на самом деле.

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

                    • её можно эффективно выполнить с помощью процессорной инструкции ADC (к сожалению, эта функция недоступна в C);
                    • её можно выполнить на словах любого размера (можете добавить по желанию восьмибайтные значения, только результат следует уменьшить до двух байт и добавить все биты переполнения);
                    • она нечувствительна к порядку следования байтов (удивительно, но это так).
                    Читать дальше →
                  • Работа с кортежами С++ (std::tuple). Функции foreach, map и call

                    Здесь я расскажу о работе с кортежами C++ (tuple), приведу несколько полезных функций, которые в состоянии существенно облегчить жизнь при использовании кортежей, а также приведу примеры использования этих функций. Всё из личного опыта.
                    Читать дальше →
                  • Как работает стриминг Netflix

                    • Translation
                    «Если вы можете кэшировать всё очень эффективным способом, то вы часто можете изменить правила игры»

                    Мы, разработчики программного обеспечения, часто сталкиваемся с проблемами, требующими распространения некоторого набора данных, который не соответствует названию «большие данные». Примерами проблем такого типа являются следующие:

                    • Метаданные продукта в интернет-магазине
                    • Метаданные документа в поисковой машине
                    • Метаданные фильмов и ТВ-шоу

                    Сталкиваясь с этим, мы обычно выбираем один из двух путей:

                    • Хранение этих данных в каком-то централизованном хранилище (например, реляционная СУБД, информационный склад NoSQL или кластер memcached) для удалённого доступа пользователей
                    • Сериализация (например, как json, XML и т.д.) и распространение среди потребителей, которые будут хранить локальную копию

                    Применение каждого из этих подходов имеет свои проблемы. Централизация данных может позволить вашему набору данных неограниченно расти, однако:
                    Читать дальше →
                    • +20
                    • 16.1k
                    • 3
                  • Краткая шпаргалка по tmux (менеджеру терминалов)

                      tmux — это менеджер терминалов, к которому удобно подключаться и отключаться, не теряя при этом процессы и историю. Как screen, только лучше (в первую очередь потому, что использует модель клиент—сервер).

                      image

                      Вашему вниманию предлагается минималистическая шпаргалка, позволяющая быстро начать использовать tmux, а уж тонкую настройку, продвинутые команды и бесконечные хот-кеи желающие найдут, набрав man tmux.

                      Читать дальше →
                    • Какой бывает HTML5-стриминг (и почему mp4-стриминга не существует)

                        image

                        Нередко клиенты спрашивают, умеет ли наш сервер «mp4-стриминг в HTML5». В 99% случаев спрашивающий не понимает о чём говорит. В этом сложно винить клиентов: из-за путаницы с терминами, технической сложности и большого разнообразия вариантов стриминга запутаться очень легко.

                        В этой статье мы расскажем, какой бывает HTML5-стриминг, какие варианты хорошие, и почему, чёрт побери, нельзя говорить «mp4-стриминг».
                        Читать дальше →
                      • Коротко об архитектуре компонента Symfony Config

                        • Tutorial


                        Компонент Symfony 2 Config предназначен для работы с конфигурационными файлами и предоставляет следующие возможности:

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

                        Официальная документация по этому компоненту содержит подробную информацию по его использованию. А мы давайте посмотрим на то, как устроен этот компонент внутри.
                        Читать дальше →
                        • +21
                        • 6.4k
                        • 6
                      • Мониторинг докер-хостов, контейнеров и контейнерных служб

                        • Translation
                        • Tutorial

                        Я искал self-hosted мониторинговое решение с открытым кодом, которое может предоставить хранилище метрик, визуализацию и оповещение для физических серверов, виртуальных машин, контейнеров и сервисов, действующих внутри контейнеров. Опробовав Elastic Beats, Graphite и Prometheus, я остановился на Prometheus. В первую очередь меня привлекли поддержка многомерных метрик и несложный в овладении язык запросов. Возможность использования одного и того же языка для графических изображений и уведомления сильно упрощает задачу мониторинга. Prometheus осуществляет тестирование по методу как черного, так и белого ящика, это означает, что вы можете тестировать инфраструктуру, а также контролировать внутреннее состояние своих приложений.


                        Читать дальше →
                      • Как избежать ошибок, используя современный C++


                          Одной из проблем C++ является большое количество конструкций, поведение которых не определено или просто неожиданно для программиста. С такими ошибками мы часто сталкиваемся при использовании статического анализатора кода на разных проектах. Но, как известно, лучше всего находить ошибки ещё на этапе компиляции. Посмотрим, какие техники из современного C++ позволяют писать не только более простой и выразительный код, но и сделают наш код более безопасным и надёжным.
                          Читать дальше →
                        • [ В закладки ] Алгоритмы и структуры данных в ядре Linux, Chromium и не только

                          • Translation
                          Многие студенты, впервые сталкиваясь с описанием какой-нибудь хитроумной штуки, вроде алгоритма Кнута – Морриса – Пратта или красно-чёрных деревьев, тут же задаются вопросами: «К чему такие сложности? И это, кроме авторов учебников, кому-нибудь нужно?». Лучший способ доказать пользу алгоритмов – это примеры из жизни. Причём, в идеале – конкретные примеры применения широко известных алгоритмов в современных, повсеместно используемых, программных продуктах.



                          Посмотрим, что можно обнаружить в коде ядра Linux, браузера Chromium и ещё в некоторых проектах.
                          Читать дальше →
                          • +140
                          • 79.5k
                          • 15
                        • Systemd: пишем собственные .service и .target

                            У меня появился Linux на домашнем компьютере, и я поспешил обжиться в новой ОС. Она была установлена с systemd init process. Это было мое первое знакомство с этим новым инструментом. Cвой ноутбук я использую для каждодневной жизни и для программирования. Мне хотелось включать рабочие программы (Apache2 и MySQL) только на время, пока я их использую, чтобы не тратить впустую ресурсы своего компьютера. Дополнительно, для тестирования я написал bash скрипт, который выгружает содержимое одной из MySQL БД c жесткого диска в ОЗУ (в tmpfs) – так тесты выполняются значительно быстрее. По идее, я мог бы начинать свой рабочий день вот так:
                            systemctl start apache2.service
                            systemctl start mysqld.service
                            /root/scripts/mysqld-tmpfs start
                            

                            И заканчивать его:
                            systemctl stop apache2.service
                            systemctl stop mysqld.service
                            /root/scripts/mysqld-tmpfs stop
                            

                            Но мне хотелось сделать вещи “как надо”.
                            Читать дальше →
                            • +17
                            • 48.1k
                            • 9