Секретные ключи различаются между Android и сервером

1

Я работаю над одноразовым приложением паролей, используя алгоритм 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
    Можете ли вы привести примеры, показывающие входы и выходы?
Теги:
cryptography
bouncycastle
otp

1 ответ

1
Лучший ответ

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

http://code.google.com/p/android/issues/detail?id=3143

  • 0
    Кстати, вы можете принять свой собственный ответ;)
  • 0
    Не до завтра, согласно всплывающему окну.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню