Недостаточная длина ключа подписи
![]() |
Критичность: НИЗКИЙ |
| Способ обнаружения: SAST, APK |
Описание
Ключ, используемый для подписи APK файла, имеет недостаточную длину.
Официальные рекомендации NIST (SP 800-131A Rev. 2, разделы по согласованию ключей и цифровым подписям) признают ключи RSA длиной менее 2048 бит (в том числе 1024-битные) недопустимыми (disallowed): минимально допустимая длина модуля RSA — 2048 бит. Запрет на использование коротких RSA-ключей действует с 2014 года (см. также практическое руководство Guardian Project по миграции ключа подписи). Это не означает, что 1024-битный RSA уже скомпрометирован, скорее это превентивный шаг, чтобы быть на шаг впереди атакующих. Основная опасность использования слабого ключа заключается в том, что злоумышленник может взломать его, чтобы создать поддельные подписи для APK. Затем эти вредоносные APK, подписанные вашим ключом, могут быть установлены в качестве обновлений для приложения. Существуют и ряд других атак с использованием скомпрометированного ключа, которые зависят от использования ключа в приложении.
Также некоторые магазины приложений, например от Huawei, не рекомендуют подписывать приложения при помощи ключа с длинной меньше, чем 2048 бит. И более того, не принимает такие приложения для загрузки.
Рекомендации
Для исправления данной уязвимости необходимо подписывать приложение с использованием современных алгоритмов, к примеру таких как SHA256withRSA или SHA512withRSA с использованием ключа с длинной не менее 2048-бит (рекомендуемая длина — 4096 бит) Обратите внимание на то что ранние версии Android могут не поддерживать алгоритмы выше SHA1. Данная проблема и процесс замены подписи подробно описан в данной статье.
Пример генерации с использованием SHA512withRSA
keytool -genkey -v -keystore test.keystore -alias testkey -keyalg RSA -keysize 4096 -sigalg SHA512withRSA -dname "cn=Test,ou=Test,c=CA" -validity 10000
Пример подписи с использованием сгенерированного ключа
jarsigner -verbose -sigalg SHA512withRSA -digestalg SHA512 -keystore test.keystore test.apk testkey
Ссылки
-
NIST SP 800-131A Rev. 2 — Transitioning the Use of Cryptographic Algorithms and Key Lengths — официальные требования NIST к минимальной длине ключей (для RSA — не менее 2048 бит).
-
OWASP MASTG — Testing Code Quality and Build Settings (Android)
-
Guardian Project — How to migrate your Android app's signing key (вспомогательный материал)
