Как мне обрабатывать ключи при попытке использовать TripleDES для шифрования транзакций между клиентом GWT и сервером perl?

У меня есть клиент GWT, разговаривающий с perl-сервером через JSON через HTTP. Он отлично работает, но есть некоторые проблемы с конфиденциальностью, и мне нужно зашифровать транзакции. После небольшого исследования кажется, что самый простой/наилучший поддерживаемый вариант — это пользователь TripleDES, с gwt-crypto для клиента и Crypt:CBC для сервера. Проблема в том, что я не могу понять, как использовать один и тот же ключ для обоих концов, потому что то, как вы их настраиваете, кажется совершенно другим. На стороне java/gwt я делаю следующее:

_cipher.setKey(Hex.decode("dc7c62768f0d9d514373d520438ff8f8")); // 16 bytes

и на стороне perl я делаю:

my $cipher = Crypt::CBC->new( -key     => 'dc7c62768f0d9d514373d520438ff8f8',
                -cipher  => 'DES_EDE3');

Я пробовал различные схемы ключей, но кажется, что если я делаю gwt счастливым, то perl нет, и наоборот. Например, насколько я могу судить, следующий perl должен работать, но я получаю сообщение об ошибке «Неверный ключ» при попытке:

my $iv = Crypt::CBC->random_bytes(8);
my $key = pack("H*", 'dc7c62768f0d9d514373d520438ff8f8');
my $cipher = Crypt::CBC->new( -key     => $key,
            -literal_key => 1,
            -keysize => 16,
            -header => 'none',
            -padding => 'standard',
            -iv     => $iv,
            -cipher  => 'DES_EDE3'
);

Итак, я думаю, что в конечном итоге смогу выяснить проблемы с кодированием, с чем у меня возникают проблемы, когда я прыгаю через обручи, чтобы сказать каждой стороне, какой ключ использовать. Любая помощь приветствуется.


person James B    schedule 29.07.2013    source источник
comment
Есть ли архитектурная причина, по которой конфиденциальность, обеспечиваемая простой отправкой JSON через HTTPS (SSL), недостаточна?   -  person David-SkyMesh    schedule 30.07.2013
comment
Нет, нет жестких требований к шифрованию транзакций с помощью чего-либо помимо HTTPS. Я просто хотел дополнительный слой, чтобы придать мне теплую пушистость и похвастаться.   -  person James B    schedule 02.08.2013
comment
О, я забыл упомянуть, что наконец-то понял, что мне нужно использовать 24-байтовый ключ, и это продвинуло меня немного дальше, но в конце концов я сдался из-за проблемы с хешированием.   -  person James B    schedule 02.08.2013


Ответы (1)


Оказывается, то, как gwt-crypto реализует обработку ключей, несовместимо с тем, как это делает Crypt::DES_EDE3. Что-то, связанное с механизмом хеширования, так что эта идея есть. Я превысил свой бюджет времени на это, но если я когда-нибудь попробую еще раз, я попробую AES или старый добрый DES. Я бы предпочел использовать DES, потому что я полагаю, что это будет гораздо более легкая нагрузка и достаточная для моих нужд, но gwt-crypto не имеет наилучшей документации, и он достаточно отличается от того, на чем он был основан (bouncycastle), что bouncycastle примеры, которые я нашел, не переводятся.

person James B    schedule 01.08.2013