[:ru]
Во всех системах кибербезопасности используются так называемые генераторы случайных чисел. Это алгоритмы, предназначенные для выбора случайной величины из бесконечного количества или ограниченного набора вариантов. ГЧС используется в разработке многих приложений.
Например, для ввода капчи, определения победителей в лотереях и для генерации бонусных купонов используется ГЧС. Первые попытки реализовать идеальный рандомайзер не были слишком успешны, ведь после нескольких раз использования сторонние программы могут понять принцип работы алгоритма и взломать его. Уже больше десяти лет ведутся разработки идеального и действительно случайного генератора.
Сложность генератора случайных чисел, вашего приложения зависит от того, какие виды задач оно должно решать. Необходимо оценить уровень безопасности ГСЧ в приложении, который должен быть обеспечен. Данный параметр зависит от того, является ли взлом вашего ГСЧ потенциально привлекательным для хакеров. Если ГСЧ вашего приложения выполняет второстепенную функцию и не может дать никаких существенных преимуществ пользователю, то можно принимать во внимание только то, насколько приближены ваши значению к нормальному распределению. В противоположном случае вам следует задуматься о серьезной защите ваших случайных чисел, вплоть до сертификации вашего ГСЧ у организаций, специализирующихся в данной области. Такой подход, к примеру, использует PokerStars – крупнейший разработчик приложений индустрии интеллектуальных карточных игр. Шифрование ГСЧ позволяет практически нивелировать возможные риски предугадывания получаемых показателей.
Как обстоят дела с ГЧС для разработки Android-приложений? В любом языке программирования, главной задачей генератора случайных чисел является непосредственно рандомная выдача цифр или их комбинаций и шифрование данных. Первый параметр обеспечивает надлежащую работу приложения и алгоритма, а второй отвечает за кибербезопасность.
Благодаря обработке информации в зашифрованном виде, приложение недоступно для взлома посторонними программами. Даже при попытке проникнуть в код, без ключа хакеры просто не смогут распознать принцип работы алгоритма или зашифрованную информацию.
Современные разработчики на Android используют несколько фреймворков для реализации безопасной разработки ГЧС. Это API Java Crypto и Open SSL. Первый – это внешнее программное обеспечение от Java. Вторая система нативная для Android. Кратко рассмотрим оба способа реализации генератора случайных чисел.
Программное решение от Java довольно просто и быстро интегрируется в мобильную разработку под Android. Первоначально нужно сгенерировать индивидуальный ключ шифрования. Для этого уже создан класс Key Generator. Он располагается в javax.crypto package. После генерации индивидуального ключа только вы будете иметь возможность шифровать данные по единому алгоритму. Для этого нужно будет зашифровать байтовые блоки в AES при помощи того же crypto.
API, поставляемая нативно в Android (Open SSL), также довольно проста. Для работы с ней используется «родной» код С (он поддерживается Java через JNI-вызовы). В целом, использование нативного протокола гораздо более затратно по времени, но результат и эффективность его применения заметно выше.
Для начала шифрования данных в ГЧС по Open SSL, нужно также сгенерировать ключ. Сгенерированный ключ нужно использовать для индивидуального шифрования. Для этого используется EVP_EncryptUpdate. Последний из байтовых блоков «скармливается» функции encrypt final.
После получения ключей для шифрования, следует переходить непосредственно к генерации случайных чисел. Именно такая система становится критически важной для существования приложения и его безопасности. Даже если вы защитите алгоритм при помощи шифрования, оно не будет оставаться надежным в случае, если сам генератор случайных чисел дает определенные сои.
Эксперты рекомендуют помимо использования индивидуального ключа шифрования применять в Android разработке RNG с аппаратной поддержкой. Опять же, для его реализации предусмотрено несколько способов – через Open SSL и Java.
В нативном Open SSL не рекомендуются использовать родной класс random. По словам экспертов в области кибербезопасности, родной класс легко взломать. Свидетельством этому стали недавние происшествия с нарушением безопасности электронных кошельков биткоин на Андроид. Ниже приведем три метода, которые более безопасны и надежны.
Random Number from Java API. Принцип работы заключается в том, что после вызова функции возвращается случайное четырехбайтное значение. Максимальное количество возможных вариантов – двести тридцать два. Алгоритм подойдет в том случае, когда нужно несколько контролировать работу генератора случайных чисел.
В Java функциях есть два варианта – random util и random secure. Последний также вернет четырехбайтное значение, но более безопасен с криптографической точки зрения, нежели его альтернатива. Многие эксперты советуют сначала «безопасно» генерировать случайное число при помощи random, и использовать его в качестве стартовой величины для random util. Это увеличит безопасность работы ГЧС. Функции также предусматривают возможность получения стартовой величины из ядра приложения. Для этого используется файл с прописанной стартовой величиной.
В нативном Open SSL API ГЧС реализован недостаточно хорошо. Однако, многие разработчики используют байтное значение родного фреймворка в качестве стартовой величины для дальнейшей обработки функциями Java. Как правило, чем больше «пирамида» их алгоритмов, ответственных за выдачу случайного значения, тем безопаснее будет работа самого приложения.
Так как в Android относительно слабая родная система безопасности, эксперты советуют усиливать ее программными возможностями Java и встраивать ГЧС с несколькими уровнями в стартовых значениях.[:]