Совместимое шифрование между C # и PHP, ColdFusion, Ruby, Python - PullRequest
7 голосов
/ 19 сентября 2008

Мы разрабатываем сервис, который будет принимать запрос POST. Некоторые данные POST должны быть зашифрованы до POST, поскольку они будут храниться в скрытых полях формы.

Приложение написано на C #, но мы хотим, чтобы сторонние клиенты могли легко интегрироваться с ним. Мы считаем, что большинство клиентов используют PHP, Classic ASP или VB.Net.

Третьи лица должны только выполнять шифрование. Мы сделаем расшифровку. Нет двусторонней связи.

Каковы наиболее совместимые комбинации алгоритма шифрования, режима заполнения и других параметров?

Ответы [ 8 ]

4 голосов
/ 19 сентября 2008

Предполагая, что у вас есть безопасный способ поделиться ключом (будь то шифрование RSA, получение по каналу SSH или HTTPS или вызов другого разработчика по защищенной телефонной линии), любой из основных современных методов шифрования (например, AES , как упомянуто @Ed Haber) будет подходящим. Я бы поддержал его предложение об AES. Должны быть библиотеки для PHP, VB, Ruby и т. Д.

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

3 голосов
/ 19 сентября 2008

Если вы имеете в виду, что для сторонних производителей должно быть невозможным расшифровать данные, тогда вы захотите использовать алгоритм асимметричного шифрования, например RSA. Это позволит третьим лицам зашифровать данные с помощью вашего открытого ключа, и тогда только вы сможете расшифровать данные с помощью своего закрытого ключа, который вы не раскрываете. Должны быть реализации RSA для всех языков, которые вы упомянули.

Если вам все равно, может ли стороннее устройство расшифровать данные, тогда AES - это то, что нужно. У вас будет один ключ, которым вы делитесь с третьими лицами. Этот ключ используется как для шифрования, так и для дешифрования.

2 голосов
/ 20 сентября 2008

Эд Хабер сказал

Я бы использовал AES для массовых данных шифрование и RSA для шифрования Ключ AES. Если данные достаточно малы затем просто зашифровать все это RSA.

Я думаю, что это хорошее решение. Я хотел бы, чтобы ваше приложение опубликовало API для получения открытого ключа RSA. Когда я третья сторона хочет отправить вам что-то, она получает открытый ключ. Затем он генерирует сеансовый ключ для выполнения фактического шифрования с использованием блочного шифра (то есть AES) и отправляет вам ключ с помощью шифрования с помощью вашего открытого ключа. Вы дешифруете сеансовый ключ своим закрытым ключом. Затем третье лицо шифрует данные, которые хочет отправить вам, с помощью AES (используя схему заполнения, которую вы также публикуете) и отправляет ее вам. Вы расшифровываете его, используя ключ сессии.

Есть некоторые проблемы с методом выше. Поскольку вы не отправляете никакой информации (кроме публикации своего открытого ключа, вы не можете контролировать, как генерируется ключ сеанса. Это означает, что третьи стороны могут использовать очень небезопасные способы генерации ключа сеанса, и вы никогда не узнаете. Вторая проблема каждый, кто хочет отправить вам данные, должен дополнять данные для AES так же, как вы. Поэтому вам нужно убедиться, что все координируются. Вторая проблема не слишком большая, но первая может быть проблемой особенно если вы не слишком доверяете сторонним разработчикам для создания действительно хороших ключей сеанса из хорошего криптографически безопасного генератора случайных чисел

2 голосов
/ 19 сентября 2008

Я бы использовал AES для массового шифрования данных и RSA для шифрования ключа AES. Если данные достаточно малы, просто зашифруйте все с помощью RSA.

1 голос
/ 20 сентября 2008

ColdFusion имеет функции шифрования и дешифрования, способные обрабатывать различные алгоритмы и кодировки, включая AES, рекомендованный выше.

Информация по адресу: http://www.cfquickdocs.com/cf8/?getDoc=encrypt#Encrypt

Быстрый пример кода:

Key = generateSecretKey( 'AES' , 128 )

EncryptedText = encrypt( Text , Key , 'AES' , 'Hex' )

Text = decrypt( EncryptedText , Key, 'AES' , 'Hex' )

Подобные функции доступны в этой библиотеке для PHP :
http://www.chilkatsoft.com/p/php_aes.asp

... и Java, Python, Ruby и другие ...
http://www.example -code.com / Java / crypt2_aes_matchPhp.asp
http://www.example -code.com / питон / aes_stringEncryption.asp

1 голос
/ 20 сентября 2008

Вы можете очень легко реализовать собственное битовое шифрование на основе ключей XOR. Немного подумав и сообразуясь, вы можете придумать что-то, что более чем подходит для вашего приложения.

Вот пример PHP:

function XOREncryption($InputString, $KeyPhrase){

    $KeyPhraseLength = strlen($KeyPhrase);

    for ($i = 0; $i < strlen($InputString); $i++){

        $rPos = $i % $KeyPhraseLength;

        $r = ord($InputString[$i]) ^ ord($KeyPhrase[$rPos]);

        $InputString[$i] = chr($r);
    }

    return $InputString;
}
0 голосов
/ 29 ноября 2008

Почему бы не выставить ваш сервер через HTTPS? Таким образом, любой клиент, который может обрабатывать HTTPS, может безопасно использовать сервис.

0 голосов
/ 19 сентября 2008

Похоже, RSA - это алгоритм для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...