Случайности третьего сорта: как плохая рандомизация опустошила кошельки пользователей Android Евгений Золотов
Случайности третьего сорта: как плохая рандомизация опустошила кошельки пользователей Android
Евгений Золотов
Опубликовано 20 августа 2013
Неделю назад Bitcoin-сообщество было растревожено серией наглых краж. Стало известно, что из нескольких кошельков, заведённых и используемых их владельцами на Android-устройствах, увели суммарно около полусотни BTC. В общем-то мелочь, ибо в переводе на доллары это примерно пять тысяч — ерунда на фоне многомиллионных ограблений, которыми нынче забавляются чёрные хакеры. Шум, однако, поднялся такой, что вмешаться в происходящее сочла необходимым даже Google. Причин тому несколько. Во-первых, мелкое воровство вскрыло фундаментальную недоработку в Android, поставившую под удар всех пользователей Bitcoin на этой платформе. Во-вторых, когда пыль улеглась, стало ясно, что пострадать могут и пользователи множества других Android-приложений, включая криптографические. Наконец, в-третьих, проблема не решена по сей день и в ближайшие годы будет висеть дамокловым мечом над андроидовской экосистемой.
Впрочем, давайте по порядку. Формальным началом этой истории стало появившееся 11 августа на сайте Bitcoin.org предупреждение: биткойновые кошельки, сгенерированные с помощью Android-приложений, небезопасны. Чтобы понять причину, не нужно быть специалистом по виртуальным деньгам: достаточно вспомнить основы так называемого асимметричного шифрования, называемого также шифрованием с открытым ключом. Основано оно на использовании двух длинных чисел, одно из которых («открытый ключ») доступно всем (с его помощью можно, например, зашифровать сообщение, отправляемое владельцу ключа), другое («секретный ключ») хранится в тайне, поскольку нужно для расшифровки, постановки цифровой подписи и прочих операций, право выполнять которые имеет только владелец ключа.
Bitcoin-кошелёк — не что иное, как такие вот два длинных числа. Несколько упрощая, можно сказать, что первое — открытое — служит в качестве номера кошелька, а второе — секретное — в качестве ключа, который позволяет содержимым кошелька распоряжаться. Таким образом, чтобы злоумышленник смог вывести деньги из чужого кошелька, ему нужно знать второе число. Отгадать его подбором лучше даже не пытаться (256 бит). Но можно попробовать его вычислить, если владелец, скажем, переслав деньги пару раз, опирался на некачественный генератор случайных чисел. Дело в том, что для подписи каждой биткойн-транзакции используется секретный ключ в смеси с произвольным случайным числом. Если вместо случайного было дважды использовано одно и то же число, вычислить секретный ключ становится легче лёгкого.
Тут-то и кроется проблема. Генераторы случайных чисел (ГСЧ), реализованные программно, на самом деле, конечно, выдают псевдослучайные последовательности: числа в таком ряду друг от друга не зависят, но сам ряд всегда одинаков. Чтобы каждый раз после включения компьютера не начинать с одного и того же места, приступая к работе, следует «крутануть рулетку» (инициализировать начальное состояние генератора, передав ему полученное каким-либо образом одно истинно случайное число). Так вот: оказалось, что ГСЧ в Android (конкретно — соответствующий компонент Java-машины) «рулетку» не крутил. И — хоть и не всегда — мог выдать одинаковые числа.
Так что злоумышленнику достаточно просмотреть все транзакции, сделанные владельцем конкретного кошелька, и, обнаружив хотя бы две с одинаковыми «случайными» подписями, вычислить секретный ключ. Если вас интересует математика, весь процесс (с опорой на open source-пакет Sage) подробно, ещё зимой, описал в своём блоге некто Нильс Шнайдер. Остаётся загадкой, почему Bitcoin-сообществу потребовалось полгода, чтобы оценить важность его открытия.
Ответ, впрочем, очевиден. Публика в массе своей имеет весьма смутные представления о стойкой криптографии и брезгует или боится заглядывать глубже пользовательского интерфейса. Вот и сейчас от внимания многих популярных ресурсов, написавших о происшествии, ускользнул важный нюанс: под угрозой опустошения находятся не только кошельки, сгенерированные Android-приложениями, но все биткойн-кошельки, которыми пользовались на Android-устройствах. (Ведь слабость не в ключах, а в подписях транзакций!) Так что если вы пересылали биткойны через Android, задумайтесь над обновлением софта и переводом средств в новый кошелёк.
Что касается таинственного вора, воспользовавшегося находкой Шнайдера (а может быть, обнаружившего проблему самостоятельно), он продолжает красть: последняя операция по его кошельку датирована вчерашним днём. И вообще говоря, пока в кошельках, скомпрометированных Android-транзакциями, остаются какие-то средства, кражи будут продолжаться, ведь в системе Bitcoin абсолютно все транзакции открыты. А вернуть деньги законным владельцам, естественно, не удастся, потому что откат транзакций в Bitcoin невозможен принципиально.
Но довольно о Bitcoin. Я предлагаю поменять действующих лиц. Вместо программ, работающих с биткойн-кошельками, пусть на сцену выйдут программы асимметричного шифрования документов — скажем, GPG или PGP. Вместо биткойн-транзакций будут текстовые сообщения, передаваемые от пользователя А к пользователю Б. Конечно, схема шифрования и подписи будет отличаться от реализованной в Bitcoin, но принцип останется тем же: мелкая недоработка в генераторе случайных чисел приведёт к катастрофическим последствиям для стойкости шифра (посторонний наблюдатель сможет восстановить секретный ключ и читать либо подделывать часть корреспонденции). И тут самое время вспомнить о подозрениях, высказанных недавно в связи с шумихой вокруг Эдварда Сноудена. Помните, как пару недель назад эксперты предположили, что в микропроцессорах Intel и AMD по инициативе АНБ организованы искусственные «слабые места»? Глядя на происходящее с Bitcoin на мобильных устройствах, легко представить, чем такие мелочи могут аукнуться.
Но и для Android история не завершена. Google отреагировала оперативно и уже разослала производителям устройств соответствующий патч для операционной системы. Так что в ближайшие недели и месяцы владельцы поддерживаемых Android-устройств, вероятно, его получат. Однако сотни миллионов пользователей сидят на мобильных устройствах, которые уже не поддерживаются и прошивки которых никогда не будут обновлены. Для них уязвимость ГСЧ останется навсегда. И хорошо, если разработчики прикладных программ, использующих ГСЧ, знают об уязвимости и самостоятельно позаботились о том, чтобы её обойти (как сделали авторы всех популярных мобильных Bitcoin-приложений). Но ведь останутся тысячи программ, создатели которых о проблеме и не подозревают.
Сотрудники Symantec не поленились оценить численность армии приложений, пользующихся ущербным ГСЧ в андроидовской Java. Это 360 тысяч программ, из которых только каждая девятая, обращаясь к ГСЧ, не ленится принудительно рандомизировать стартовую точку генератора, тогда как остальные надеются, что ГСЧ позаботится об этом сам. И хорошо, если программа, которой понадобились случайные числа, использует их, скажем, для расстановки виртуальных врагов на игровом поле. Вот только игрушек в списке Symantec всего 10 процентов…
В статье использованы иллюстрации Robert Scarth, Jon Callas, Cory Doctorow, Jesse S.
К оглавлению
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
8.1.10. Рандомизация массива
8.1.10. Рандомизация массива Иногда нужно переставить элементы массива в случайном порядке. Первое, что приходит на ум, — тасование карточной колоды, но есть и другие применения — например, случайная сортировка списка вопросов.Для решения этой задачи пригодится метод rand из
Windows + Android: больше — значит лучше? Евгений Золотов
Windows + Android: больше — значит лучше? Евгений Золотов Опубликовано 09 января 2014 Перспектива превращения Android в операционную систему для «полноразмерных вычислительных машин» нарисовалась ещё полгода назад. К тому моменту на рынке уже имелось или
Визуальное программирование для Google Android Крестников Евгений
Визуальное программирование для Google Android Крестников Евгений Опубликовано 19 июля 2010 года Google постоянно экспериментирует со средствами разработки для платформы Android, иногда из этих экспериментов даже выходит что-то толковое. Последний из них —
SPB Software о продаже приложений для Android Евгений Крестников
SPB Software о продаже приложений для Android Евгений Крестников Опубликовано 11 июля 2011 года Число работающих под управлением Android устройств растет огромными темпами, однако создатели приложений часто жалуются на трудности с их продажей через магазин Android
Предварительный обзор ОС Android 3.0 Honeycomb Евгений Лебеденко, Mobi
Предварительный обзор ОС Android 3.0 Honeycomb Евгений Лебеденко, Mobi Опубликовано 09 февраля 2011 годаСпустя год после выхода легендарной системы iOS 3.2, на которой заработал самый популярный планшет в мире, другой лидер рынка мобильных платформ, компания Google, пробует повторить успех
Мелочь, а неприятно! Как АНБ читает шифрованные чаты Skype и Outlook — и можно ли положиться на Android Евгений Золотов
Мелочь, а неприятно! Как АНБ читает шифрованные чаты Skype и Outlook — и можно ли положиться на Android Евгений Золотов Опубликовано 15 июля 2013 Нам недолго осталось наслаждаться разоблачениями Эдварда Сноудена. Пояснив, что владеет материалами, способными
Поставят ли Android на iPhone 6? О пользе сумасшедших идей Евгений Золотов
Поставят ли Android на iPhone 6? О пользе сумасшедших идей Евгений Золотов Опубликовано 11 февраля 2014 Организуй кто-нибудь конкурс на самую сумасшедшую идею года, фаворитом гонки в данный момент без всяких сомнений был бы Стив Возняк. На днях, общаясь с
Microsoft и Nokia будут дружить с Android. Но поможет ли это им? Евгений Золотов
Microsoft и Nokia будут дружить с Android. Но поможет ли это им? Евгений Золотов Опубликовано 18 февраля 2014 «Сумасшедшая» идея подружить iPhone и Android, общем-товыдвинутая неделей ранее Стивом Возняком, была принята всерьёз немногими. Большинство пользователей,
Чем хорош новый Nexus 7, что такое Chromecast и когда ждать слияния Android с Chrome OS Евгений Золотов
Чем хорош новый Nexus 7, что такое Chromecast и когда ждать слияния Android с Chrome OS Евгений Золотов Опубликовано 25 июля 2013 Если я скажу, что Google только что провела совершенно бездарную презентацию, это будет не слишком грубо? И если спрошу: «Как вам не стыдно?» —
Маленькие игры, большие игроки: производителям Android-консолей уже тесно Евгений Золотов
Маленькие игры, большие игроки: производителям Android-консолей уже тесно Евгений Золотов Опубликовано 01 июля 2013 По состоянию на май 2013 года — меньше чем через пять лет после своего рождения — операционная система Android управляет почти одним
Очки Google в руках простых пользователей: первые впечатления, первые вопросы, первые проблемы Евгений Золотов
Очки Google в руках простых пользователей: первые впечатления, первые вопросы, первые проблемы Евгений Золотов Опубликовано 19 апреля 2013 Однажды это непременно случается: долгожданный продукт попадает в руки первых пользователей и происходит
Без окон, без дверей, или Facebook Home против Android-сообщества Евгений Золотов
Без окон, без дверей, или Facebook Home против Android-сообщества Евгений Золотов Опубликовано 08 апреля 2013 Презентовав в минувшую пятницу свой Home, Facebook дала толчок интереснейшей дискуссионной волне. Редко какой продукт при такой простоте — а ведь Home может
Балмер всё Евгений Золотов
Балмер всё Евгений Золотов Опубликовано 26 августа 2013 Стив Балмер уходит из Microsoft. Честно, думали ли вы дожить до этого дня? Стив оставит пост CEO и компанию в течение следующих двенадцати месяцев, как только для него будет подобран достойный