Секретные ключи различаются между Android и сервером - PullRequest
1 голос
/ 03 августа 2010

Я работаю над приложением одноразового пароля, используя алгоритм hotp (RFC 4226). У меня есть Android-приложение (с помощью симулятора) для генерации OTP и серверное приложение для проверки. Сами по себе оба работают нормально и проходят тесты.

Однако секретный ключ, который я генерирую на своем устройстве, не совпадает с секретным ключом, который я генерирую на сервере, даже если входные данные жестко закодированы и совпадают между ними. Это приводит к тому, что на устройстве и на сервере генерируются разные одноразовые пароли, что лишает меня возможности генерировать действительные одноразовые пароли. Я пытаюсь понять, почему это происходит, и могу ли я что-то с этим сделать.

Код идентичен между сервером и имитатором устройства для создания SecretKeys и генерации одноразовых паролей из ключей. Я проверил байты в спецификациях ключей на устройстве и сервере, и они идентичны. Тем не менее, ключи, сгенерированные SecretKeyFactories (оба из DESedeKeySpecs), имеют небольшие различия, когда я просматриваю байты из secretKey.getEncoded (). Я вижу подобные различия, если я использую DES вместо тройного DES.

Что интересно, так это то, что в моем проекте Android байты в KeySpec и сгенерированном SecretKey согласованы (хотя и урезаны), но на сервере иногда возникают отдельные различия в байтах между KeySpec и сгенерированным Секретный ключ. Это нормально? Я читал кое-что об изменениях битов четности при использовании DES и тройного DES, поэтому я не уверен, что это проблема.

Я также знаю, что Android использует Bouncy Castle, но мой сервер использует SunJCE. Насколько я понимаю, это не должно вызывать проблем, и я хотел бы знать, является ли это известным случаем при использовании двух разных провайдеров. У меня очень ограниченные возможности получить серверную часть Bouncy Castle.

Советы и просвещение, пожалуйста?

1 Ответ

1 голос
/ 03 августа 2010

Похоже, кто-то еще уже обнаружил проблему и временное решение.Это разница между тем, как реализация BC на телефоне и SunJCE обрабатывают биты четности при генерации секретных ключей.Похоже, что Bouncy Castle может выпустить обновление, чтобы решить эту проблему:

...