Загрузка...

We make any symmetric encryption algorithm asymmetric.

Thread in Virology created by LazersBoy Oct 26, 2019. 482 views

  1. LazersBoy
    LazersBoy Topic starter Oct 26, 2019 Banned 163 Oct 10, 2019
    План статьи:
    1. Теория
    2. Теория
    3. Практика

    Теория:
    Начнём с терминов

    Шифрование: изменение информации с целью скрытия сути сообщения от всех кроме
    получателя. Это всякие алгоритмы подписи, хеширования, шифрования и тп...
    Симметричное шифрование: шифрование информации определённым ключем, такие алгоритмы
    принимают на вход информацию и ключ, а отдают зашифрованную информацию этим ключём.
    Ассиметричное шифрование: шифрование на основе публичного и приватного ключа,
    публичным ключём можно зашифровать информацию, приватным расшифровать. Имея публичный ключ
    расшифровать информацию 'нормальными' способа не получится.
    Алгоритм Диффи Хелльмена: алгоритм который позволяет создать 1 ключ на основе твоего приватного ключа и
    публичного ключа собеседника, если он сделает это со своим приватным ключём и моим публичным то получится тот-же
    самый ключ.
    Эллептические кривые: аналог RSA, алгоритм для подписи сообщений, с помощью
    приватного ключа можно подписать сообщения, а с помощью публичного проверить подпись.
    Это можно использовать для проверки отправителя, но мы будем использовать их для шифрования.

    Что нужно для шифрования используя эту идею:
    1) Эллептические кривые
    2) Алгоритм Диффи Хелльмена
    3) Любой симметричный алгоритм шифрования

    Пример:
    Пример использования алгоритма Диффи Хелльмена:
    Алиса и Кирито создали пару ключей:
    Публичный ключ алисы: APUBLIC
    Приватный ключ алисы: APRIVATE

    Публичный ключ Кирито: KPUBLIC
    Приватный ключ Кирито: KPRIVATE

    APUBLIC + KPRIVATE = FEDEADXXXXXXXX
    APRIVATE + KPUBLIC = FEDEADXXXXXXXX

    Этот алгоритм хотели использовать с целью защищённой передачи информации
    через интернет. Если кто-то перехватит публичные ключи, то ничего сделать с ними он не сможет.
    Но у меня возникла другая мысль. А что если хранить в коде публичный ключ и при каждом шифровании информации
    генерировать новую пару ключей, на основе сохранённого публичного ключа и сгенерированного ключа создать ключ используя
    алгоритм Диффи Хелльмена и сохранить сгенерированный публичный ключ в зашифрованной версии сообщения. С помощью
    этого способо можно использовать любой симметричный алгоритм шифрования в ассиметричном виде!

    Практика:
    Вот примерный на c++

    Code
    //функция принимает буффер, длинну буффера и публичный ключ
    byte* encrypt(byte* buffer, int buflen, byte* pubkey){
    byte* local_priv_key, local_pub_key, secret;
    //генерируем два ключа
    ECCGenKeys(local_priv_key, local_pub_key);
    //создаём сессионный ключ на основе вшитого публичного ключа и сгенерированного приватного
    ECCGenSessionKey(secret, pubkey, local_private_key);

    byte* temp_buffer = (byte*)alloc(buflen);
    byte* return_buffer = (byte*)alloc(buflen + 32);
    copy(temp_buffer, buflen, buffer);
    //шифруем буффер с использованием сгенерированного сессионного ключа
    aes_encrypt(temp_buffer, secret);
    copy(return_buffer, 32, local_pub_key);
    copy(return_buffer + 32, buflen, temp_buffer);
    memfree(temp_buffer);

    memfree(local_priv_key);
    memfree(local_pub_key);
    memfree(secret);
    return return_buffer;
    }

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

    Для расшифровки нам нужно использовать сохранённый приватный ключ и публичный ключ (первые 32 байта буффера)
    Примерно так будем выглядить код расшифровки

    Code
    //функция принимает буффер, длинну буффера и приватный ключ
    byte* decrypt(byte* buffer, *buflen, byte* prikey){
    byte* secret, byte* data = (byte*)alloc(buflen - 32), byte* pubkey = (byte*)alloc(32);//выделение памяти...

    copy(data, buffer + 32, buflen - 32);
    copy(pubkey, buffer, 32);

    //восстанавливаем сессионный ключ на основе нашего приватного и публичного что сохранён в сообщении
    ECCGenSessionKey(secret, pubkey, prikey);
    //расшифровываем сообщение полученным ключём
    aes_decrypt(data, secret);

    memfree(pubkey);
    memfree(secret);
    return data;
    }
    После выполнения этого кода мы получим расшифрованный вариант сообщения.

    Получается что можно использовать любой симметричный алгоритм шифрования
    в ассиметричном виде, хоть AES, Salsa20, GOST, да хоть XOR

    Конец.
     
  2. Jmayonezze
    Jmayonezze Oct 26, 2019 Banned 623 Mar 3, 2019
    че за хуйня
     
  3. СловилТрипак
    СловилТрипак Oct 26, 2019 Спайсуха опять накрыла 1225 May 27, 2019
    Jmayonezze, ааааа нихуа хуа не понимать
     
  4. tiredangelz
    tiredangelz Oct 26, 2019 426 Oct 31, 2018
    нихуя не прочитал, нихуя не понял, нихуя не интересно:2011_like:
     
  5. Kom1SsAr
    Kom1SsAr Oct 26, 2019 Ищу работу 163 Sep 3, 2018
    Копипаст? Или сам писал?
     
  6. LazersBoy
    LazersBoy Topic starter Oct 26, 2019 Banned 163 Oct 10, 2019
  7. tiredangelz
    tiredangelz Oct 26, 2019 426 Oct 31, 2018
Loading...
Top