хранить данные в памяти...

Тема в разделе "WASM.WIN32", создана пользователем SnugForce, 2 июл 2005.

  1. SnugForce

    SnugForce New Member

    Публикаций:
    0
    Регистрация:
    2 май 2005
    Сообщения:
    373
    Адрес:
    Из домУ
    Как можно хранить данные в памяти относительно безопасно? К примеру, мне надо хранить ключ, на нем будет расшифровываться данные от сервера. Как защитить эту область памяти от чужого чтения?
     
  2. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    можно перемешать ключ с мусором, но желательно, что бы энтропия полученных данных низкая получилась. защитить память почти не реально.
     
  3. SnugForce

    SnugForce New Member

    Публикаций:
    0
    Регистрация:
    2 май 2005
    Сообщения:
    373
    Адрес:
    Из домУ
    А как данные считывать обратно?
     
  4. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Дык ты же сам будешь ключ модифицировать, вот и позаботься, что бы можно было и обратное преобразование выполнить :)
     
  5. flankerx

    flankerx New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2004
    Сообщения:
    423
    Адрес:
    Moscow, Russia
    см. MSDN на предмет этих функций.



    CryptProtectMemory

    CryptUnprotectMemory



    RtlEncryptMemory

    RtlDecryptMemory
     
  6. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    flankerx

    А ты сам стал бы эти ф-ции использовать? На них так удобно ставить бряки :)
     
  7. alpet

    alpet Александр

    Публикаций:
    0
    Регистрация:
    21 сен 2004
    Сообщения:
    1.221
    Адрес:
    Russia
    flankerx

    Уж лучше VirtualProtect через sysenter вызывать, и то едва-ли поможет.
     
  8. flankerx

    flankerx New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2004
    Сообщения:
    423
    Адрес:
    Moscow, Russia
    S_T_A_S_

    в общем этот метод ничуть не хуже того что ты предложил :) Ну разве что бряки будут поставлены на 15 минут раньше )

    Кроме того, это (AFAIK) единственный документированный метод криптографической защиты области памяти.
     
  9. SnugForce

    SnugForce New Member

    Публикаций:
    0
    Регистрация:
    2 май 2005
    Сообщения:
    373
    Адрес:
    Из домУ
    В принципе мне достаточно чтоб из сети не дернули данные т.к. пишу клиента (сервак есть) с защищеным обменом (ГОСТ + RSA).
     
  10. alpet

    alpet Александр

    Публикаций:
    0
    Регистрация:
    21 сен 2004
    Сообщения:
    1.221
    Адрес:
    Russia
    SnugForce

    В этом случае все упирается в защищенность машины в сети. Во всяком случае если кому-либо удастся получить к ней удаленный доступ, защита памяти процесса, будет практически бесполезной.
     
  11. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    flankerx



    Я предполагаю, что ключи ищутся примерно таким способом: запускается драйвер, который сканирует физическую память и файл подкачки. Фактически поиск по высокой энтропии + проверка. Есть ещё полумифические способы поиска ключей RSA по каким-то там свойствам. За что ещё зацепиться не изучив как следует прогу? Если же есть вызовы API, то они говорят: "вот оно, копай здесь" :)
     
  12. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    SnugForce Так если сервак твой, сделай challenge-response authentication как у всех других, каждый сеанс новый(случайный) пароль, то что из сети дернут будет пошифровано, а на компе надо разграничивать доступ по правам (клиент под админом, все остальное без) чтоб драйвер не запустили
     
  13. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    S_T_A_S_ Я делал такую прожку, сканировала оперативу (из юзера под админом) по сигнатуре RSA2(0x31415352) и PRIVATEKEYBLOB(0x07), ключи то находит, но проблема связать какой от чего :)
     
  14. flankerx

    flankerx New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2004
    Сообщения:
    423
    Адрес:
    Moscow, Russia
    S_T_A_S_

    я убежден что если твоя программа работает под отладчиком, то её уже ничто не спасет, и никаких секретов она не сохранит :)

    А ключи в общем-то можно и не хранить а вычислять каждый раз при вызове функции зашифрования/расшифрования.

    Ну кроме того высокую энтропию имеют не только ключи но и, например, зашифрованные данные.





    А по-моему эти ключи проще всего искат по сигнатрам типа "RSA.1" и "RSA.2" :)
     
  15. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    bogrus >




    Можно попробовать все найденые, это же быстрее чем факторизовать :)





    flankerx >




    Это верно, но от lunchtime attack защититься можно.
     
  16. flankerx

    flankerx New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2004
    Сообщения:
    423
    Адрес:
    Moscow, Russia
    S_T_A_S_

    ладно, уговорил :)
     
  17. alpet

    alpet Александр

    Публикаций:
    0
    Регистрация:
    21 сен 2004
    Сообщения:
    1.221
    Адрес:
    Russia
    Кстати хотелось все проверить, да руки не дошли - если обьявить дескриптор сегмента с базой 0xFFFFF000, и пределом 128 мб, можно ли будет адресоватся по смещению в этом сегменте >= 0x1000 (т.е. с сверткой 32-битного адреса), или доступно будет только 4095 байт всего?
     
  18. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    flankerx >




    Я имел вииду что-то вроде Playing hide and seek with stored keys PDF
     
  19. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Кстати CryptProtectMemory работает только в Windows Server 2003, вспомнил что там не получалось открыть \\.\PhysicalMemory даже под админом, что говорит в пользу выбора его сервером
     
  20. SnugForce

    SnugForce New Member

    Публикаций:
    0
    Регистрация:
    2 май 2005
    Сообщения:
    373
    Адрес:
    Из домУ
    Как я вижу общение клиента с клиентом через сервер:

    А и В подкл к серверу. Каждый отправляет свой открытый ключ RSA Если А хочет общаться в привате с В, то А запрашивает сервер ключ В и на нем шифрует ГОСТ-ключ и передает через сервер. Но сервер уже под напрягом (если его ломают, то все новые приваты можно открыть).

    Делать-то чего?