суббота, 4 августа 2012 г.

Ahtung. Пользователям программного обеспечения, которое использует библиотеку QCA.


QCA (Qt Cryptographic Architecture )  задумывался авторами, как кросс-платформенная библиотека надстройка над Qt, для функций шифрования.  Создавалась в те времена, когда в самой Qt функции шифрования не были встроены. 

Website: http://delta.affinix.com/qca/

После того как в самой Qt появились классы QSslSocket, QSslCertificates и.т.д.  разработка библиотеки была брошена авторами, однако многие продолжают ее использовать, например PSI. Кроме того последняя версия QCA (и плагина к ней для OpenSSL, датированного 2002 г. ) лежит во многих репозитариях Linux. Собственно всей криптография занимается OpenSSL, а QCA (с плагином для OpenSSL) выполняет роль прокладки между OpenSSL и Qt.  Криптографические функции в OpenSSL реализованы очень хорошо, однако требуют их грамотного использования, чем QCA похвастаться не может.

В частности OpenSSL требует грамотной инициализации пула случайных чисел (PRND)

А вот как инициализируется пул случайных чисел в QCA.

      srand(time(NULL));
      char buf[128];
      for(int n = 0; n < 128; ++n) buf[n] = rand();
      RAND_seed(buf, 128);

Как видно для инициализации используется «родная» функция rand() из библиотеки C, которая возвращает псевдослучайную последовательность чисел от 0 до 32767, а инициализируется генератор при помощи стандартной функции time, которая возвращает текущее время в виде количества секунд от 1 января 1970г. Фактически для взлома требуется небольшой перебор возможных значений времени в секундах от старта программы (порядка 12 бит.)

2 комментария: