Page 1 of 1

Функции-"источники энтропии" для качественного рандома? + пример

Posted: Thu Jul 05, 2018 3:28 pm
by floppy121
Источник энтропии - Wikipedia

Посмотрел cписок системных функций Kolibri (пролистните в низ страницы) и пока выбрал 5 функций:

[*][/b] SysFn18.20 : SF_SYSTEM (18) / SSF_GET_RAM_INFO (20) - информация об оперативной памяти
[*][/b] SysFn18.4 : SF_SYSTEM (18) / SSF_GET_IDLE_COUNT (4) - счётчик пустых тактов в секунду
[*][/b] SysFn37.0 : SF_MOUSE_GET (37) / SSF_SCREEN_POSITION (0) - экранные координаты мыши
[*][/b] SysFn26.10 : SF_SYSTEM_GET (26) / SSF_TIME_COUNT_PRO (10) - высокоточный счётчик времени
[*][/b] SysFn68.0 : SF_SYS_MISC (68) / SSF_GET_TASK_SWITCH_COUNT (0) - счётчик переключений задач

Знаете ли вы ещё такие функции которые могут пригодиться в качестве источников энтропии?

Пример извлечения энтропии из этих пяти функций:
Code example of extracting the entropy from these 5 functions:
Spoiler:

Code: Select all

ENTROPY_SIZE = 56
entropy        db ENTROPY_SIZE dup(255), 0

Code: Select all


; Get entropy for PRNG from the various sources...

get_entropy:

    pusha

    mcall 18, 20, entropy ; SysFn18.20 : SF_SYSTEM (18) / SSF_GET_RAM_INFO (20)
    mcall 18, 4           ; SysFn18.4  : SF_SYSTEM (18) / SSF_GET_IDLE_COUNT (4)
    mov dword[entropy+36], eax
    mcall 37, 0           ; SysFn37.0  : SF_MOUSE_GET (37) / SSF_SCREEN_POSITION (0)
    mov dword[entropy+40], eax
    mcall 26, 10          ; SysFn26.10 : SF_SYSTEM_GET (26) / SSF_TIME_COUNT_PRO (10)
    mov dword[entropy+44], edx
    mov dword[entropy+48], eax
    mcall 68, 0           ; SysFn68.0  : SF_SYS_MISC (68) / SSF_GET_TASK_SWITCH_COUNT (0)
    mov dword[entropy+52], eax

    popa

    ret

Re: Функции-"источники энтропии" для качественного рандома? + пример

Posted: Thu Jul 05, 2018 4:03 pm
by 0CodErr
Как уже писал вон там http://board.kolibrios.org/viewtopic.ph ... 729#p70839 можно использовать инструкцию rdtsc.

Re: Функции-"источники энтропии" для качественного рандома? + пример

Posted: Thu Jul 05, 2018 4:10 pm
by floppy121
0CodErr wrote:Как уже писал вон там http://board.kolibrios.org/viewtopic.ph ... 729#p70839 можно использовать инструкцию rdtsc.
Если я правильно понимаю, rdtsc эквивалентно SysFn26.10 . Может быть и одной этой функции более чем достаточно, но хочется собрать как можно больше источников энтропии

Re: Функции-"источники энтропии" для качественного рандома? + пример

Posted: Thu Jul 05, 2018 4:37 pm
by 0CodErr
floppy121 wrote:rdtsc эквивалентно SysFn26.10
У меня в VirtualBox значения старших слов сильно не совпадают(хотя они явно как-то связаны, отличаются примерно в 3 раза).
Вот такой код:

Code: Select all

..................................
szFormat       db "%u",10,0
..................................
        rdtsc        
        push   edx
        push   szFormat
        call   [con_printf]
        add    esp, 8

        mov    eax, 26
        mov    ebx, 10
        int    64
        push   edx
        push   szFormat
        call   [con_printf]
        add    esp, 8        
..................................
floppy121 wrote:Может быть и одной этой функции более чем достаточно,
А зачем делать системный вызов, если можно его не делать? В качестве энтропии вполне подошёл бы результат rdtsc.

Re: Функции-"источники энтропии" для качественного рандома? + пример

Posted: Thu Jul 05, 2018 6:26 pm
by 0CodErr
floppy121 wrote:Если я правильно понимаю, rdtsc эквивалентно SysFn26.10
Всё же нет, не эквивалентно.
Вот функция в ядре KolibriOS, возвращающая наносекунды http://websvn.kolibrios.org/filedetails ... 6#line-443
А инструкция rdtsc возвращает 64-bit time-stamp counter, вот из мануалов AMD и Intel(про наносекунды ни слова):
Spoiler:
amd.PNG
amd.PNG (97.14 KiB)
Viewed 8224 times
intel.PNG
intel.PNG (83.02 KiB)
Viewed 8224 times

Re: Функции-"источники энтропии" для качественного рандома? + пример

Posted: Thu Jul 05, 2018 6:38 pm
by floppy121
0CodErr wrote:Всё же нет, не эквивалентно
Большое спасибо за информацию, возможно добавлю rdtsc в качестве 6 источника энтропии:
ведь много энтропии не бывает, чем её больше тем трава зеленее и рандом рандомнее :P

Re: Функции-"источники энтропии" для качественного рандома? + пример

Posted: Sun Jul 15, 2018 6:55 pm
by 0CodErr
А почему бы SysFn3:GetSystemTime и SysFn29:GetSystemDate не использовать?
Или по каким-то причинам не подходит?
При наличии сети, думаю, можно использовать ещё SysFn74.6:GetSentPackets и SysFn74.7:GetReceivedPackets.