Добро пожаловать на DevsAid.Com

У нас выложены дампы других форумов в разделе дампов. Среди них - open-hide.biz, slivskladchik.com, seoxa.net, slivup.biz, openssource.info, coga.biz (ex cogamesmoney.ru) и прочие.
Ссылка там умерла? Поищите в разделе курсов торрент.
Есть что предложить? Возникли вопросы?
Хотите обсудить или поделиться новостью? Хотите что-то купить или продать?
Надеемся Вам у нас понравится ;)

Файлы лицензий и подписи RSA и с чем их едят

Тема в разделе "Панель лицензирования", создана пользователем mizaider, 10 окт 2016.

  1. Панель умеет выдавать файлы *.lic которые шифрованы mcrypt и подписаны приватным RSA ключом. Приватный ключ заложен в конфигурации панели и его никто не знает. Можно указать свои ключи.
    В итоге получается файл зашифрованный mcrypt'ом с данными которые могут быть выведены в интерфейсе клиента и подписью для защиты этих данных от изменения с помощью приватного RSA ключа.
    Возьмем за пример ключ полученный из панели
    Код:
    fMJNuTccHRxw5fOuT7yqUuW3651Dk3FRVTv
    uzCvCqVuCvk+NlrxErMOmdo+1XgGmOAiKZq
    zviRROrDQT9OYjZ45NQ+TtZQXh4oc+1/T91
    y66exDtn8HkQrCm+1NZWteX95hVF9uR1pnn
    avWdnG57RYIAyOKZf4nnAOWq+aoWw0tJ3S2
    /aduyaO0JSWe+1ZeOhRSIuGX7AqnAr+2PPb
    Avaxt4HfFz4Vb9V46oXxdCdbWUX4Kcmv0gi
    UyTPs6JJBQtD3kbda9mW1Mh+VcPT1IX/aCp
    M6bS2nWbN5E5b6Uo7aockSTSBEupko3HXBi
    yo7lziAAh0/61vzjDzpuoJVfAtR2TBj1ZZI
    ZsEm/MDyZi2iMhUKk+3pQhlVjRaSuw9XjAy
    IKRAFa4pF7j/F2e1oSLU7OwDvC6VgtzHLjX
    bNAi0TrmEWppX/9UVQgvSFqbAezldck503H
    EeMOPL/22PEuoysIai5ZWXviPJetXa8Sm9J
    cMmMPBMBMH4sHsR7luuGVL1hZH4037rI82W
    dsTqL2q50pwpIdGaX5fmmSfAz0ud+ofEKh/
    PXIDYHxQq1fOFzlDZNZkbONlWsELP+whCkL
    t2o4eJcUIJtwc/9dP10uPU3DN5iheibyfpf
    0uchOM58xNRQXHXuHcFAyl4EB9SS5OfuXgT
    L+EuLcWP2dUbPcq2YY73mTDF5TNO/LZ0oHp
    w4/EFGw3GlDQVY7uYrnpoZii7pGA9wAJ+A3
    j3acIquTSEkqbkHNyDtFQ/6kgokN8GyoqC1
    pAmJiXouTfOY4FF1/H8pNSHvu0Oetk8Jb4d
    HwnDMT7k76E46S4Cz0P42UjnIOsDCrAievW
    nXLbic0DCqs/21HQRoODD54iLM2vdTQXizN
    zDdP7dJJYlzDaFHGGmWEjbJQQIeEIshgazd
    0VXD31Vmf+LoWJuK6QBvZiZJ6n9YJlTeGyW
    oTg3hzOevjNkmxE0uz57T1pLYqd4eEUUfa7
    YIOV/p3TYVasWVUtAHte+TURSy1leMPV1mm
    lZd5Et3nVz63cmJnhM4ArPQ9Cm+rRl+Rgev
    rPtfzASND+XORAI1vbquEawi01uqADO1EMH
    DMVcGeQ7wSsemKWaKPhYRzzLKSZaBiDuiOG
    j3dEXSVvwsiUBeTrdglnd+Oi2uYBFMyxG6G
    ekFEC2yyLf2+8kC76wC0utksjh9k9XNSEGI
    0MPIkf4j86CGyoIViUOrZPXLm9K8GVPgKHq
    AWplr081uB7UYswyrnVsxX+NTsWkYBcFAjG
    Mym7McU696WhYfj9i9vtp11AlGqqQ+58vKq
    Bb3UkxZXJQdgBAmQbB8orqjCz3rJQMHtH27
    uF06BemGSZ9Pt0IciPw1gKLxI7Yet9XvD3o
    XP2jhOGBpTPeUk/7kgYDjzxFqX0wPqjXb5q
    6XIOfG4Er2Yuv2mdjjNYL434ed/Aq5eNnQt
    wAx11apnIgh7HkBigLkbux+wEMjcSZfTPFu
    SEWPPypmPguA6OqWBJtsDLAXiyzwM0K9PwC
    GFuv31x+qywzIKlByLzhiFljGz5fj0h
    Валидация этого ключа производится по следующему алгоритму:

    Первое это расшифровка этого ключа.
    Расшифровка производится с помощью функции:
    Mcrypt ключ и готовая функция для расшифровки *.lic файла:
    PHP:
     function decrypt($string "")
        {
            
    $key base64_decode("PSVJQRk9QTEpNVU1DWUZCRVFGV1VVT0ZOV1RRU1NaWQ=");
            
    $iv base64_decode("YWlFLVEZZUFNaWlhPQ01ZT0lLWU5HTFJQVFNCRUJZVA=");

            
    $string base64_decode($string);

            return 
    strippadding(mcrypt_decrypt(MCRYPT_RIJNDAEL_256$key$stringMCRYPT_MODE_CBC$iv));
        }
    Допустим что ключ выше это переменная "$string" и расшифровываем его функцией выше.
    В результате получается (в данном примере формат файла XML, в настройках можно указать другой):
    HTML:
    <?xml version="1.0"?>
    <licensefile>
    <VendorID>99</VendorID>
    <IssuedIn>1476063061</IssuedIn>
    <CustomerEmail>mizaider@gmail.com</CustomerEmail>
    <ProductID>0</ProductID>
    <LicenseKey>Vt-2G-NfU-2B1-IklYH</LicenseKey>
    <ExpirationDate>1477861200</ExpirationDate>
    <Hosts>["license.devsaid.com","127.0.0.1"]</Hosts>
    <Comments>Test license file</Comments>
    <AuthenticationToken>5c8cb735a1ce65dac514233cbd5576d6</AuthenticationToken>
    <signature>fGi6sXht1wmESheEOMsWvh2g0gUrZxH+njzrG2jguYHPvQIpjSB9dPWRT73fpU87mkPF7IVO68LmBGH0m2lZyf/78D31ev45GRv/8RakyD55T/uQ/F/1eBEb1k4xkZSCLY3Bu60w3tJd9xoIFcpXNHYgUqI+i2H51ev0HKRCTMB9hkAtMp5vDBMjacyGFW5k5N+ZWmE2Or6uvJpGFsdtwoD1q8rpd+cAB1OTR5z6ShpQHn3pBrmocC+cyfcCUYR/lYHAiARmfTS+2baTu6e2/XlD6GRYCGJtBGZ8DUrGyvb0ybR5Ke9YQ1mUlY/wp+e9TNlLIADuGekQIPyDMdQDexKu4+hk6WYTr85QpLUkr/YMhdooLFEbV8LQjyAEElMkqPr2QKv2tnmdr9Mhi6APeoncL2FoTI0VR5t56uYqBWgb2mZ3jx6ud36HpTKmD53OjhhP5JYXPTm6fUwdbOYG/QD+6e9qK63L7FF0WAamdexhLTPD7UIFBaNonPwfFo0pm0lg33emtYUI/0NwM+l87KVI005LpBWqIp5xE7WHvI/SOSlMBl8oTXQlUsmhL624kh6R9bjCZcANhwPRIIeGlkDqu/365idzDy5+ML68wYgrR0AdzBDTvOFime+QyVkBRhp2ogaJbLzbcGWTohbLW204jlFatO8f4utHREBOJKM=</signature>
    </licensefile>
    
    Второе.
    Проверяем срок действия ключа. Это поле <ExpirationDate>. Если ключ просрочен, возвращаем ошибку.

    Третье.
    Проверяем на принадлежность ключа к этому серверу. Это поле <Hosts>. Если ключ не принадлежит этому серверу, возвращаем ошибку.

    Четвертое.
    Проверяем файлы на целостность. Это поле <FileCheck>. Если перечисленные там файлы не соответствуют своим хешам, возвращаем ошибку.

    Последнее по счету но не по важности.
    Если проверки выше прошли успешно то проверяем подпись ключа. Это поле <signature>. Подпись ключа подделать невозможно не имея приватного ключа. Его никто не знает кроме панели.

    Публичный RSA ключ для валидации подписи этого *.lic файла:
    Код:
    -----BEGIN PUBLIC KEY-----
    MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAytdZDr2CDMV+iyGzcwoC
    +PxhJ01ROQM2oXZ7ZzOiUR+3QOk8aY9kzEU9T1VN8cLM+VuSx91oTc/m/A7hVDaw
    VwHEEejYvDPsvHLKWCoIA97jQ6pIu3sulINmTg4fmkc8EdanfZx51UfhG3ZPdlmC
    ealT0ru4/K+WLsdql2yvIF6uNAVFgfa6CP+eXD3RZvpquJxk8K7Dk0+IvElBlHFu
    0MzXHm9godJNPLVDH5Usz2SzR/Dq6Lm+zr6dsWsTDDZOS7muim/GxF4i/TtgKxq2
    9Rzga702AXVCirZ9z7mlv2Yqh7ambGiN49GJDLuvtDUjzZFccrbioAiOYqy+EEht
    M+CCPbDUM5AEeVOujqfbiUP/JCn9ZzE5rk5MbKFpcAwab/Xzzf6cAA/c3vhIGnzb
    7hIFc4xGWPuSYuerO8C5CUPmuc6Q34RDGDLuoPJNvFBCPlRCdyCo0Z5R5pP/82fC
    MERYBI6HxXxw+VdIBqqJokh1Hy0PbzQGubYD+F+/jqpaU1UJPy5acPIuSAR/8APK
    0wJvzaf+C9NyqKPhA6F43LrgwO0C3oFiFonXKYkTHDw4v0yzzRce9HlNAvsAT5hC
    ZiCU7twzaxCJYk0eEJD2sbd3HHtWVAkdLPc2fpeQGIb62b+l99j7fFjkD5FDhwdk
    lK7kj8oKYWZhJCTGEKE1NxcCAwEAAQ==
    -----END PUBLIC KEY-----
    
    Валидация ключа производится с помощью функции:
    PHP:
    include('./RSA.php');
    $rsa = new Crypt_RSA();
    function 
    ValidateLicenseSignature()
        {
            
    $rsa->setSignatureMode(CRYPT_RSA_SIGNATURE_PKCS1);
            
    $rsa->loadKey($PublicKey);//Подгружается публичный ключ который указан выше

            
    $verifystring $VendorID.$IssuedIn.$LicenseKey.$ExpirationDate.$ProductID.$hosts.$AuthenticationKey;//Формируется строка для проверки
            
    $valid $rsa->verify(/*Проверяемая строка*/$verifystring/*Подпись из lic файла*/base64_decode($signature));//Проверка
            
    return $valid;// Возвращает либо true либо false
        
    }
    Собственно это всё. Ниже я прикрепил архив c классом RSA который необходимо подключить для валидации. Я рекомендую его вставлять прямо в код модуля чтобы нельзя было подделать его ответ.

    В итоге, подделать *.lic файл невозможно.

    Всё это реализовано в стандартном скрипте проверки лицензии.
     

    Вложения:

    • RSA.zip
      Размер файла:
      76,6 КБ
      Просмотров:
      6

    Stop hovering to collapse... Click to collapse... Hover to expand... Нажмите, чтобы раскрыть...
    • Мне нравится Мне нравится x 1
    Загрузка...
  • Кто мы?

    2 разработчика которые решили помочь другим разработчикам в решении их проблем, а так же пользователям с поиском самых свежих и качественных инфопродуктов. За 4 с небольшим месяца мы создали этот форум на который заходят ежедневно 1500 человек и посещаемость постоянно растёт. Мы создали панель лицензирования для защиты PHP скриптов от воровства и SEO панель для мониторинга наших сайтов и выбора верной стратегии их развития. Мы надеемся что то что мы создали пригодится Вам и возможно Вы поможете нам развиваться и совершенствоваться вместе с Вами.
  • Набираем команду!

    Мы набираем в нашу команду умных и амбициозных людей! Не важно в какой сфере Вы преуспели, Вы можете попасть в нашу команду и развивать с нами действительно достойный ресурс.

    Вступай!
XenforoTest.ru