Генерация пары ключей RSA на стороне клиента в приложении Google Web Toolkit через Google App Engine с библиотекой gwt-crypto

1

Я несколько дней пытался реализовать схему RSA для приложения Google Web Toolkit, работающего под Google App Engine. Клиентское шифрование и управление ключами - это требование, поэтому я использую gwt-crypto (gwt-crypto-2.3.0.jar). Часть документации нарушена, поэтому я следил за ссылками из Bouncy Castle, как этот ответ. У меня есть статический метод для создания AsymmetricCipherKeyPair, который, как предполагается, должен содержать закрытый и открытый ключи.

public static AsymmetricCipherKeyPair getRsaKeyPair() {
    RSAKeyPairGenerator keyPairGenerator = new RSAKeyPairGenerator();
    RSAKeyGenerationParameters param = new RSAKeyGenerationParameters(RSA_PUBLIC_EXPONENT_FERMAT, SECURE_RANDOM, RSA_STRENGTH, RSA_CERTAINTY);
    keyPairGenerator.init(param);
    /* RSAKeyPairGenerator.generateKeyPair() freezes on Google App Engine */
    return keyPairGenerator.generateKeyPair();
}

Он работает нормально, пока я запускаю режим разработки в localhost (я полагаю, из Eclipse с Jetty). Однако, когда я развертываю его в Google App Engine, он зависает при keyPairGenerator.generateKeyPair(). Я использую параметры ниже. Я пробовал масштабировать RSA_STRENGTH с 256 до 1024 и RSA_CERTAINTY от 1 до 80. Я также пробовал RSA_PUBLIC_EXPONENT_FERMAT либо 3 (F0, 0x3), либо 65537 (F4, 0x10001)

private static final int RSA_STRENGTH = 1024;
private static final int RSA_CERTAINTY = 4;
private static final BigInteger RSA_PUBLIC_EXPONENT_FERMAT = new BigInteger("3", 16);
private static final SecureRandom SECURE_RANDOM = SecureRandom.getInstance("SHA1PRNG");

Я попробовал несколько браузеров, но они всегда говорят, что скрипт перестает отвечать или занимает слишком много времени, и если я попытаюсь продолжить, они замерзнут или сбой. Других ошибок на стороне сервера, консоли или среды приложения Google App Engine нет. Я не знаю, что делать, поскольку он работает отлично и быстро в браузере во время работы на локальном хосте, но я не могу заставить его работать после развертывания в облаке, и я не знаю, как его отладить. Может кто-нибудь мне помочь? Проблема может заключаться в структуре Google App Engine? Или какое-то ограничение ресурсов?

Я также использую SmartGWT, не уверен, если это имеет значение. Я действительно застрял здесь.

Заранее спасибо.

Теги:
encryption
google-app-engine
rsa
gwt

1 ответ

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

Некоторое время назад я закодировал приложение gwt, чтобы сделать то же самое. После долгого взлома gwt-crypto я закончил использование внешнего js-решения.

Генерация ключа gwt-crypto была ужасно медленной, логически она работает в dev-mode, потому что она запускает java, но когда код скомпилирован, BigInteger выполняет очень плохо.

Прочтите мой ответ на вопрос: как импортировать java.security. * В мое приложение gwt.

Ещё вопросы

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