OpenSSL SSL шифрование - PullRequest
       26

OpenSSL SSL шифрование

2 голосов
/ 30 марта 2010

Я хочу обсудить метод openssl для записи и чтения.
Предположим, у меня есть структура данных, как показано ниже:

/-----------------------------------------------------\
|  my_header   |  PAYLOAD                             |
\-----------------------------------------------------/
       |                              |
      \ /                            \ /
 not encrypted                      encrypted

I think the proper algorithm would be like this :
   SEND:
   build my_header with my own header.
   encrypt PAYLOAD with encryption function
   attach my_header and PAYLOAD (encrypted) to one buffer
   send it using common POSIX function just like send or sendto
   RECV:
   using common POSIX function just like recv or recvfrom.
   extract my_header and PAYLOAD(encrypted)
   decrypt PAYLOAD with decryption function
   at last i got my_header and PAYLOAD(decrypted).

Каков ваш подход, если вы столкнулись с проблемой, как указано выше. Поскольку openssl шифрует все данные, которые отправляются в функцию SSL_write (CMIIW).

Спасибо.

Может быть, уместный вопрос: что за функция шифрования и дешифрования может использоваться для шифрования / дешифрования PAYLOAD в openssl?

Ответы [ 4 ]

2 голосов
/ 30 марта 2010

На самом деле вы можете позволить OpenSSL сделать для вас много тяжелой работы.

Вы можете создать свои сетевые примитивы, как и раньше, и связать файловые дескрипторы с контекстом Open SSL, который будет обрабатывать рукопожатие SSL, шифрование и дешифрование. Я приукрашиваю многие детали, но пример кода на сайте openssl и в этой книге:

http://www.amazon.com/Network-Security-OpenSSL-John-Viega/dp/059600270X

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

В дистрибутиве OpenSSL вы можете найти множество примеров кода, иллюстрирующих, как именно это сделать.

Удачи.

2 голосов
/ 30 марта 2010

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

http://www.openssl.org/docs/crypto/evp.html

Кроме того, био часть библиотеки может быть даже ближе к тому, что вы хотите: http://www.openssl.org/docs/crypto/bio.html

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

Если вы хотите, чтобы заголовок не был зашифрован, чтобы вы могли прочитать его в wireshark для отладки, тогда я предлагаю сделать флаг в вашем приложении, чтобы полностью включить / отключить шифрование для использования в среде отладки.

0 голосов
/ 30 марта 2010

Когда вы используете TLS / DTLS, у вас есть выбор: шифровать весь кадр или вообще ничего.

Если вы хотите, чтобы во фрейме было несколько незашифрованных данных, то вам, вероятно, не нужен TLS / DTLS. Однако вы можете использовать OpenSSL для вычисления хеша вашего заголовка (используя SHA или любой другой связанный алгоритм хеширования) и добавления его в конце кадра, чтобы избежать подделки.

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

Просто помните, что симметричные алгоритмы обычно быстрее, но сначала требуют обмена ключами. Для этого вы можете использовать асимметричный алгоритм, но затем вы заново изобретаете TLS / DTLS;)

0 голосов
/ 30 марта 2010

Если вы создаете зашифрованный протокол, это именно то, как я бы это делал, предполагая, что my_header содержит достаточно информации и ничего, что само по себе должно быть защищено, например, ключ сеанса. Сетевые пакеты на низком уровне (см. Tcpdump / libpcap) - это просто char * («строка»), и вы извлекаете разные заголовки, перемещаясь по массиву разной длины - то, что вы предлагаете, звучит именно так.

...