OpenSSL - Найдите ключ AES

Я создал SSL-сокет на C между клиентом и хостом, используя библиотеку OpenSSL. Мне нужен ключ AES сеанса SSL для правильного шифрования сообщения, и я не могу использовать стандартные функции ssl_write и ssl_read. Я обнаружил, что существует структура под названием AES_KEY, но я не знаю, как ее найти!

SSL_write и SSL_read корректно работают только с типом пакета: 23 («Протокол приложения»)

Как я могу расшифровать, например, сообщение SSL Hello, пришедшее с сервера (я открыл канал SSL с этим сервером)? Как я могу зашифровать SSL Hello Client (он находится в clair), который исходит от другого клиента?

Я пытаюсь продемонстрировать атаку на этапе «повторного согласования TLS» протокола TLS. Я пытаюсь смоделировать атаку MITM с помощью кастомного прокси.

Теперь сервер отправляет прокси определенное количество зашифрованных сообщений типа 22 (рукопожатие) и 20 (ChangeCipherSpec). Как я могу прочитать эти сообщения и расшифровать их? Стандартная библиотека ssl_read работает только с сообщениями 23 (Приложение).

Кроме того, клиент отправляет прокси клиентское Hello и другие сообщения типа 22 и 20. Как я могу написать эти сообщения и зашифровать их? Я пробовал использовать ssl_write, но сервер не понимает эти сообщения.


person Michele    schedule 05.04.2011    source источник
comment
Я не могу использовать стандартные функции ssl_write и ssl_read Почему?   -  person Jumbogram    schedule 06.04.2011
comment
Потому что я хочу отправлять персонализированные сообщения о рукопожатии.   -  person Michele    schedule 06.04.2011
comment
Приятно, что вы хотите отправлять персонализированные сообщения о рукопожатии. Но это не отвечает на мой вопрос.   -  person Jumbogram    schedule 06.04.2011
comment
Во время фазы повторного согласования сообщения рукопожатия шифруются с помощью AES, а затем хешируются с помощью MD5. Я хочу расшифровать эти сообщения, не продолжая прозрачную фазу повторного согласования.   -  person Michele    schedule 06.04.2011


Ответы (2)


Вместо ручного (en | de) шифрования записей вы должны использовать SSL_CTX_set_info_callback, чтобы получить на нужную информацию.

person Jumbogram    schedule 05.04.2011
comment
Спасибо ... Итак, я должен вызвать обратный вызов для SSL_connect, сгенерировать ключ AES вручную, а затем вызвать другой обратный вызов для SSL_write () и SSL_read ()? Таким образом я могу персонализировать сообщения, но мне приходится решать множество проблем с генерацией ключей. Я не могу понять, где хранится закрытый ключ SSL, используемый для операций шифрования / дешифрования. - person Michele; 06.04.2011
comment
Вы не должны делать то, что пытаетесь сделать. - person Jumbogram; 06.04.2011
comment
Да, для нормального использования вы правы, но я пытаюсь продемонстрировать атаку типа TLS renegotiation, чтобы сдать экзамен. - person Michele; 06.04.2011
comment
Хорошо, но теперь мы достигли точки, когда я указываю, что это программное обеспечение с открытым исходным кодом. - person Jumbogram; 06.04.2011
comment
Я знаю, что это открытый исходный код: я прочитал часть кода, но не могу найти ключ AES сеанса. - person Michele; 06.04.2011
comment
Возможно, также потребуется больше работы, чем вы думаете. И, возможно, поскольку я не получил баллов за экзамен, я не склонен выполнять эту работу. - person Jumbogram; 09.04.2011
comment
Я нашел другую библиотеку TLS (polarssl.org), которая позволяет, например, создавать собственный ssl_clienthello ... Я не Не понимаю, почему OpenSSL не позволяет создавать сообщения такого типа с помощью простой библиотечной функции. - person Michele; 09.04.2011
comment
OpenSSL не позволяет этого, потому что, если вам нужно соединение с SSL-оболочкой, это не то, что вам когда-либо понадобится. Если вы хотите сделать что-то за пределами обычного использования протокола, напишите свою собственную библиотеку (или измените библиотеку с открытым исходным кодом) - person Yuliy; 29.04.2011

Я нашел решение. Функции:

int ssl3_read_bytes (SSL *s, int type, unsigned char *buf, int len, int peek);
int ssl3_write_bytes (SSL *s, int type, const void *buf_, int len);
person Michele    schedule 27.04.2011