" title="Написать письмо">Написать письмо
Донаты на карту ВТБ:
2200 4002 2461 6363

Статистика

Пользователи : 1
Статьи : 2166
Просмотры материалов : 8052234
 
Взлом коротких паролей: начало (29.04.2025). Печать E-mail
2025 - Апрель
29.04.2025 18:55
Save & Share
Задачка для стажёра (которую пришлось писать целый час самому, т.к. стажёр не потянул даже такое простое - полная безнадёга). Проводилась в рамках подготовки ко взлому шифрованных носителей VirtualBox (с целью установки минимально необходимой длины пароля - объективно: по скорости расшифровки) и найденной проблемы длины паролей.



Как бы не стало как с токоограничителем из Arduino из-за какой-нибудь мелочи (провал - куча потерянного времени: раз, два, три); но результаты пока получились и предсказуемые, и прям наглядные. Особенно наглядно для людей, которые любят в качестве пароля ставить 6-значный ДР ребёнка (и это не блондинки-секретарши - берите гораздо выше, на уровни боссов; и не просто боссов, а боссов-технарей).

Неспешный гуглёж выдал, что пароли, в большинстве случаев, шифруются с помощью хеширования - вопрос лишь в алгоритме: MD5, SHA и т.д.

Набросал исходники (в конце материала - для ознакомления), перебирающие целочисленные пароли с помощью MD5, - с оговорками. Максимальная длина пароля и сам пароль известны изначально, и отсутствует задержка ответа объекта взлома - но и исходник не шибко оптимизированный, и среда программирования днище полное, и ОС какашечка, и режим дебага вместо релиза, и однопоточность. Измерил скорость ядра в turbo-режиме с помощью HWiNFO: 4.25ГГц средняя у Intel i5-10400. Использовался класс QDateTime для отличия времени, затраченного на перекомпиляцию программы, от времени отгадывания пароля.

Скорость взлома 6-значного пароля - менее секунды, одним-единственным ядром. И неважно, с какой цифры будет начинаться: разница во времени ничтожна: 123456 - 0.11с, 999999 - 0.56с (нелинейная скорость перебора паролей за единицу времени). При прибавлении каждого нового символа - линейно увеличивается время отгадывания: 7 девяток - 5.58с, 8 - 57.76с, 9 - 572с (а дальше - уже близко к переполнению uint). При работе с 9-ю девятками - ОС сама решает, внезапно, перебросить нагрузку на другой поток - бесит, несколько раз.


Осталось разделить на 12 потоков CPU - и получить ещё более кислый теоретический результат на всём CPU по коротким численным паролям, при использовании многопоточности.

#include "QCryptographicHash"
#include "qdatetime.h"

    QCryptographicHash qchEncryptor(QCryptographicHash::Md5); //Может разными методами: SHA256 и т.д.
    const QString qsPassword_Needed = "130385"; //ДР сыночки, ути-пути.
    const QByteArray qbaPassword_Needed = qchEncryptor.hash(QByteArray::fromStdString(qsPassword_Needed.toStdString()), QCryptographicHash::Md5);

    QByteArray qbaPassword;
    QString qsPassword = "";

    unsigned int uiResult = 0;

    quint64 qui64Begin = QDateTime::currentMSecsSinceEpoch();

    for (uiResult=0; uiResult<=999999999; uiResult++)
    {
        qsPassword = QString::number(uiResult);

        while (qsPassword.length() < qsPassword_Needed.length()+1) //9, 09, 009, 0009 и т.д.
        {
            qbaPassword = qchEncryptor.hash(QByteArray::fromStdString(qsPassword.toStdString()), QCryptographicHash::Md5);

            if (qstrcmp(qbaPassword, qbaPassword_Needed) == 0) goto End; //Если кто-нибудь упрекнёт в использовании goto - $~#@*()(%^^%#^%^!

            qsPassword= "0" + qsPassword;
        }
    }

    End:

    quint64 qui64End = QDateTime::currentMSecsSinceEpoch();

    float fTime_Work = (qui64End-qui64Begin)/1000.0;

    int iStop_Here = 0;

Обновлено ( 29.04.2025 21:14 )
 
 

Последние новости


©2008-2025. All Rights Reserved. Разработчик - " title="Сергей Белов">Сергей Белов. Материалы сайта предоставляются по принципу "как есть". Автор не несет никакой ответственности и не гарантирует отсутствие неправильных сведений и ошибок. Вся ответственность за использование материалов лежит полностью на читателях. Размещение материалов данного сайта на иных сайтах запрещено без указания активной ссылки на данный сайт-первоисточник (ГК РФ: ст.1259 п.1 + ст.1274 п.1-3).

Много статей не имеет срока устаревания. Есть смысл смотреть и 2011, и даже 2008 год. Политика сайта: написать статью, а потом обновлять ее много лет.
Рекламодателям! Перестаньте спамить мне на почту с предложениями о размещении рекламы на этом сайте. Я никогда спамером/рекламщиком не был и не буду!
Top.Mail.Ru