рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдЬрдирд░реЗрдЯрд░ рдХреА рднреЗрджреНрдпрддрд╛ рдкрд░ рд▓реЗрдЦ рдЕрдХреНрд╕рд░ Habr├й рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд▓рдЧреЗред рдпрд╣ рд╡рд┐рд╖рдп рдЕрддреНрдпрдВрдд рд╡реНрдпрд╛рдкрдХ рд╣реИ рдФрд░ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдореЗрдВ рдореБрдЦреНрдп рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдХрдЯ рдХреЗ рддрд╣рдд рдП рд╕реЗ рдЬреЗрдб рддрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рд╣реИред рд▓реЗрдЦ рдПрдХ рдкрд╢реНрдЪрд┐рдореА рдмреНрд▓реЙрдЧ рдФрд░ рд▓реЗрдЦрдХ рдХреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкрд░рд┐рд╡рд░реНрдзрди рд╕реЗ рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдореБрдлреНрдд рдЕрдиреБрд╡рд╛рдж рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИред рдореБрдЦреНрдп рд▓рдХреНрд╖реНрдп рдлреАрдбрдмреИрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рдЬреНрдЮрд╛рди рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рд╣реИред

рдкрд░рд┐рдЪрдп
рд░реИрдВрдбрдо рдирдВрдмрд░ рдЬрдирд░реЗрдЯрд░ рд╡реЗрдм рд╕реБрд░рдХреНрд╖рд╛ рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдЙрдкрдпреЛрдЧ рдХреА рдПрдХ рдЫреЛрдЯреА рд╕реВрдЪреА:
- рд╕рддреНрд░ рдЬрдирд░реЗрдЯрд░ (PHPSESSID)
- рдХреИрдкреНрдЪрд╛ рдЯреЗрдХреНрд╕реНрдЯ рдЬрдирд░реЗрд╢рди
- рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди
- рдкрд╛рд╕рд╡рд░реНрдб рднрдВрдбрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдирдордХ рдкреАрдврд╝реА
- рдкрд╛рд╕рд╡рд░реНрдб рдЬрдирд░реЗрдЯрд░
- рдСрдирд▓рд╛рдЗрди рдХреИрд╕реАрдиреЛ рдореЗрдВ рдХрд╛рд░реНрдб рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛
рдЧреИрд░-рдЖрдпрд╛рдореА рд╕реЗ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреНрд░рдо рдХреЛ рдХреИрд╕реЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рдП?
рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдПрдХ рдХреНрд░рдо рджреЗрдВ:
1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9
ред рдХреНрдпрд╛ рд╡рд╣ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╣реИ? рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЪрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдЦреНрдд рдкрд░рд┐рднрд╛рд╖рд╛ рд╣реИред рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЪрд░ рдПрдХ рдорд╛рддреНрд░рд╛ рд╣реИ рдЬреЛ рдПрдХ рдкреНрд░рдпреЛрдЧ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдХрдИ рдореВрд▓реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рдорд╛рдк рдХреЗ рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рдореВрд▓реНрдп рдХреЗ рдкреНрд░рдХрдЯ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕рдХреА рдорд╛рдк рдХреА рд╕рдЯреАрдХ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рд╣рдорд╛рд░реЗ рд╕рд╡рд╛рд▓ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИред рдЕрдм рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпреЗ рд╕рдВрдЦреНрдпрд╛рдПрдБ рдХреАрдмреЛрд░реНрдб рдХреА рд╢реАрд░реНрд╖ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдмрди рдЧрдИрдВред "рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдХрд╕реНрдорд┐рдХ рдирд╣реАрдВ рд╣реИ" - рдЖрдк рдХрд╛ рджрд╛рд╡рд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рддреБрд░рдВрдд рдЕрдЧрд▓реЗ рдирдВрдмрд░ рдХреЛ рдирд╛рдо рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдЖрдк рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА рд╣реЛрдВрдЧреЗред рд╡рд░реНрдгреЛрдВ рдХреЗ рдмреАрдЪ рдирд┐рд░реНрднрд░рддрд╛ рди рд╣реЛрдиреЗ рдкрд░ рд╣реА рдХреНрд░рдо рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдпреЗ рдкреНрд░рддреАрдХ рдмреИрд░рд▓ рдХреЛ рд▓реЛрдЯреНрдЯреЛ рдореЗрдВ рдЦреАрдВрдЪрдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдЕрдиреБрдХреНрд░рдо рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╣реЛрдЧрд╛ред
рдереЛрдбрд╝рд╛ рдФрд░ рдЬрдЯрд┐рд▓ рдЙрджрд╛рд╣рд░рдг рдпрд╛ рдкрд╛рдИ

рд╕рдВрдЦреНрдпрд╛ рдкрд╛рдИ рдореЗрдВ рдЕрдВрдХреЛрдВ рдХрд╛ рдХреНрд░рдо рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдирд░реЗрдЯрд░ рдХреЛ рдХрд┐рд╕реА рдЕрдЬреНрдЮрд╛рдд рдмрд┐рдВрджреБ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдирдВрдмрд░ Pi рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдмрд┐рдЯреНрд╕ рдХреА рд╡реНрдпреБрддреНрдкрддреНрддрд┐ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрдиреЗ рджреЗрдВред рдРрд╕рд╛ рдЬрдирд░реЗрдЯрд░, рд╢рд╛рдпрдж,
"рдЕрдЧрд▓реЗ рдмрд┐рдЯ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг" рдкрд╛рд╕ рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдкреАрдЖрдИ, рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЕрдиреБрдХреНрд░рдо рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрд▓реЛрдЪрдирд╛рддреНрдордХ рд░реВрдк рд╕реЗ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдирд╣реАрдВ рд╣реИ - рдпрджрд┐ рдХреНрд░рд┐рдкреНрдЯреЛрдХрд░рдВрд╕реА рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрд┐рд╕ рдмрд┐рдЯ рдирдВрдмрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рддреЛ рд╡рд╣ рдкрд┐рдЫрд▓реЗ рдФрд░ рдмрд╛рдж рдХреЗ рд╕рднреА рдмрд┐рдЯреНрд╕ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред
рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдЬрдирд░реЗрдЯрд░ рдкрд░ рдПрдХ рдФрд░ рдкреНрд░рддрд┐рдмрдВрдз рд▓рдЧрд╛рддрд╛ рд╣реИред рдПрдХ рдХреНрд░рд┐рдкреНрдЯреИрдирд╛рд▓рд┐рд╕реНрдЯ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдЬрдирд░реЗрдЯрд░ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдПрдХ рдЫрджреНрдо рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдЬрдирд░реЗрдЯрд░ (PRNG) рдФрд░ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдЬрдирд░реЗрдЯрд░ (RNG) рдХреЗ рдмреАрдЪ рдЕрдВрддрд░
рдПрдиреНрдЯреНрд░рд╛рдкреА рдХреЗ рд╕реНрд░реЛрддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдиреНрдЯреНрд░рд╛рдкреА рдХреЛ рд╕рдВрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдЬрдирд░реЗрдЯрд░ (RNG) рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп (рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп, рдмреАрдЬ) рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред PRNG рдПрдХ рдПрдХрд▓ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдЗрд╕рдХрд╛ рдЫрджреНрдо рдпрд╛рджреГрдЪреНрдЫрд┐рдХрддрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ рд╣реИ, рдФрд░ RNG рд╣рдореЗрд╢рд╛ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рд╢реБрд░реБрдЖрдд рдореЗрдВ рдПрдиреНрдЯреНрд░рд╛рдкреА рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕реНрд░реЛрддреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдЙрдЪреНрдЪ рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓рд╛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдореВрд▓реНрдп рд╣реЛрддрд╛ рд╣реИред
рдПрдиреНрдЯреНрд░реЙрдкреА рд╡рд┐рдХрд╛рд░ рдХрд╛ рдПрдХ рдЙрдкрд╛рдп рд╣реИред рд╕реВрдЪрдирд╛ рдПрдиреНрдЯреНрд░рд╛рдкреА рд╕реВрдЪрдирд╛ рдХреА рдЕрдирд┐рд╢реНрдЪрд┐рддрддрд╛ рдпрд╛ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рддрддрд╛ рдХрд╛ рдПрдХ рдЙрдкрд╛рдп рд╣реИред
рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ RNG = PRNG + рдПрдВрдЯреНрд░реЛрдкреА рдХрд╛ рд╕реНрд░реЛрддред
PRSP рдХрдордЬреЛрд░рд┐рдпрд╛рдБ
- рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдмреАрдЪ рдПрдХ рдЕрдиреБрдорд╛рдирд┐рдд рд╕рдВрдмрдВрдзред
- рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдЕрдиреБрдорд╛рдирд┐рдд рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдпред
- рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдЙрддреНрдкрдиреНрди рдЕрдиреБрдХреНрд░рдо рдХреА рдЫреЛрдЯреА рдЕрд╡рдзрд┐, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЬрдирд░реЗрдЯрд░ рдЪрдХреНрд░ рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИред
рд░реИрдЦрд┐рдХ рдмрдзрд╛рдИ PRNG (LCPRNG)
рдЫрджреНрдо рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛рдПрдБ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдзрд┐ рдЬрд┐рд╕рдореЗрдВ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд╝рд┐рдХ рддрд╛рдХрдд рдирд╣реАрдВ рд╣реИред рд░реИрдЦрд┐рдХ рд╕рд░реНрд╡рд╛рдВрдЧрд╕рдо рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рд░реЗрдЦреАрдп рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдЕрдиреБрдХреНрд░рдо рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдХреА рдЧрдгрдирд╛ рдореЗрдВ рдХреБрдЫ рдкреНрд░рд╛рдХреГрддрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдореА рд╣реЛрддреА рд╣реИ, рдЬреЛ рдирд┐рдореНрди рд╕реВрддреНрд░ рджреНрд╡рд╛рд░рд╛ рджреА рдЧрдИ рд╣реИрдВ:

рдЬрд╣рд╛рдБ (рдЧреБрдгрдХ), c (рдпреЛрдЬрдХ), m (рдорд╛рд╕реНрдХ) рдХреБрдЫ рдкреВрд░реНрдгрд╛рдВрдХ рдЧреБрдгрд╛рдВрдХ рд╣реИрдВред рдкрд░рд┐рдгрд╛рдореА рдЕрдиреБрдХреНрд░рдо рдмреАрдЬ X0 рдХреА рдкрд╕рдВрдж рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдЕрдиреБрдХреНрд░рдо рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВред
рдЧреБрдгрд╛рдВрдХ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдРрд╕реЗ рдЧреБрдг рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдЕрд╡рдзрд┐ рдХреА рдЕрдзрд┐рдХрддрдо рдЕрд╡рдзрд┐ (рдЕрдзрд┐рдХрддрдо рд▓рдВрдмрд╛рдИ рдореАрдЯрд░ рд╣реИ) рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН, рдЬрд┐рд╕ рдХреНрд╖рдг рд╕реЗ рдЬрдирд░реЗрдЯрд░ рдЪрдХреНрд░ [1] рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИред
рдЬрдирд░реЗрдЯрд░ рдХреЛ рдХрдИ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛рдПрдБ X0, X1, X2, X3 рджреЗрдВред рдпрд╣ рд╕рдореАрдХрд░рдгреЛрдВ рдХреА рдПрдХ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдмрддрд╛рддрд╛ рд╣реИ

рдЗрд╕ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЧреБрдгрд╛рдВрдХ a, c, m рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛
[8] рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЗрд╕ рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд╣рд▓ рдХрд░рдирд╛ рдпрд╛ рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬрдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛ред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХрд┐рд╕реА рднреА рдорджрдж рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВред
рд░реИрдЦрд┐рдХ рд╕рд░реНрд╡рд╛рдВрдЧрд╕рдо рд╡рд┐рдзрд┐ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА
рд░реИрдЦрд┐рдХ рд╕рд░реНрд╡рд╛рдВрдЧрд╕рдо рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдкреНрд▓рдорд╕реНрдЯреЗрдб рд╣реИ - рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЬрд┐рд╕рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
[4] (рдПрдХ рдСрдирд▓рд╛рдЗрди рд▓реЙрдиреНрдЪ рд╣реИ) рдФрд░ рдпрд╣рд╛рдВ
[5] ред рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рд╡рд░реНрдгрди
[9] рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЬрд╛рд╡рд╛ рдореЗрдВ рд╕рд░реНрд╡рд╛рдВрдЧрд╕рдо рд╡рд┐рдзрд┐ рдХрд╛ рдПрдХ рд╕рд░рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред
public static int a = 45; public static int c = 21; public static int m = 67; public static int seed = 2; public static int getRand() { seed = (a * seed + c) % m; return seed; } public static void main(String[] args) { for(int i=0; i<30; i++) System.out.println(getRand()); }
рд╕рд╛рдЗрдЯ
[4] рдкрд░ 20 рдирдВрдмрд░ рднреЗрдЬрдХрд░, рдЖрдк рд╕рдВрднрд╡рддрдГ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬрд┐рддрдиреА рдЕрдзрд┐рдХ рд╕рдВрдЦреНрдпрд╛, рдЙрддрдиреА рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ред
рдЬрд╛рд╡рд╛ рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдЬрдирд░реЗрдЯрд░ рдХреЛ рд╣реИрдХ рдХрд░рдирд╛
рдХрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдПрдВ, рдЬреИрд╕реЗ C (рд░реИрдВрдб), C ++ (рд░реИрдВрдб), рдФрд░ Java LCPRNG рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЖрдк
java.utils рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреИрд╕реЗ рд╣реИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВред рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб (jdk1.7) рдореЗрдВ рдЬрд╛рдХрд░, рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕реНрдерд┐рд░рд╛рдВрдХ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ
private static final long multiplier = 0x5DEECE66DL;
Java.utils.Randon.nextInt () рд╡рд┐рдзрд┐ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ (рдпрд╣рд╛рдБ рдмрд┐рдЯреНрд╕ == 32)
protected int next(int bits) { long oldseed, nextseed; AtomicLong seed = this.seed; do { oldseed = seed.get(); nextseed = (oldseed * multiplier + addend) & mask; } while (!seed.compareAndSet(oldseed, nextseed)); return (int)(nextseed >>> (48 - bits)); }
рдкрд░рд┐рдгрд╛рдо 48-32 = 16 рдмрд┐рдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ рджрд╛рдИрдВ рдУрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рдЯреНрд░рдВрдХреЗрдЯреЗрдб-рдмрд┐рдЯреНрд╕ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдмреНрд▓реИрдХ-рдмреЙрдХреНрд╕ рдХреЗ рд╕рд╛рде рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдкреНрд░рд┐рдп рд╣реИ, рдЖрдкрдХреЛ рдмреНрд░реВрдЯ-рдмрд▓ рдореЗрдВ рдПрдХ рдФрд░ рд▓реВрдк рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдмреНрд░реВрдЯ-рдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣реИрдХрд┐рдВрдЧ рд╣реЛрдЧреАред
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдо рд▓рдЧрд╛рддрд╛рд░ рджреЛ рдЙрддреНрдкрдиреНрди рд╕рдВрдЦреНрдпрд╛рдПрдБ X1 рдФрд░ x2 рдЬрд╛рдирддреЗ рд╣реИрдВред рдлрд┐рд░ рдЖрдкрдХреЛ 2 ^ 16 = 65536 рд╕реЗ рдЕрдзрд┐рдХ рд╡рд┐рдХрд▓реНрдк рдЪреБрдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдФрд░ рд╕реВрддреНрд░ рдХреЛ X1 рдкрд░ рд▓рд╛рдЧреВ рдХрд░реЗрдВ:
((x1*multiplier + addend) & mask) << 16
рдЬрдм рддрдХ рдпрд╣ x2 рдХреЗ рдмрд░рд╛рдмрд░ рди рд╣реЛ рдЬрд╛рдПред рдЬрд╛рдирд╡рд░ рдмрд▓ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЗрд╕ рддрд░рд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ
import java.lang.reflect.Field; import java.util.Random; import java.util.concurrent.atomic.AtomicLong; public class PasswordCracking { public static final long multiplier = 0x5DEECE66DL; public static final long addend = 0xBL; public static final long mask = (1L << 48) - 1; public static void main(String[] args) { Random random = new Random(); long v1 = random.nextInt(); long v2 = random.nextInt(); long v3 = random.nextInt(); long v4 = random.nextInt(); System.out.println("v1=" + v1 + "\nv2=" + v2 + "\nv3=" + v3 + "\nv4=" + v4);
рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛:
v1 = -1184958941 v2 = 274285127 v3 = -1566774765 v4 = 30466408 Seed found: -77657469128792 Set fiend seed and generate random numbers cv1 = 274285127 cv2 = -1566774765 cv3 = 30466408 cv4 = -803980434
рдпрд╣ рд╕рдордЭрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдмрд╣реБрдд рдкрд╣рд▓реЗ рдмреАрдЬ рдирд╣реАрдВ рдорд┐рд▓рд╛, рд▓реЗрдХрд┐рди рдмреАрдЬ рджреВрд╕рд░реА рд╕рдВрдЦреНрдпрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рдерд╛ред рдореВрд▓ рдмреАрдЬ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХрдИ рдСрдкрд░реЗрд╢рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдЬрд╛рд╡рд╛ рдмреАрдЬ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд░рд┐рд╡рд░реНрд╕ рдСрд░реНрдбрд░ рдореЗрдВ рдХрд░рддрд╛ рдерд╛ред
public static long getPreviousSeed(long prevSeed) { long seed = prevSeed;
рдФрд░ рдЕрдм рд╕реЛрд░реНрд╕ рдХреЛрдб рдореЗрдВ рдмрджрд▓реЗрдВ
crackingSeed.set (рдмреАрдЬ);
рдкрд░
crackingSeed.set (getPrepretSeed (рдмреАрдЬ));
рдФрд░ рдпрд╣, рд╣рдордиреЗ рдЬрд╛рд╡рд╛ рдореЗрдВ PRNG рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдХреНрд░реИрдХ рдХрд┐рдпрд╛ рд╣реИред
PHP рдореЗрдВ PRNG Mersenne рдЯреНрд╡рд┐рд╕реНрдЯрд░ рдХреЛ рд╣реИрдХ рдХрд░рдирд╛
Mersenne Twister рдЫрджреНрдо рдЖрдпрд╛рдореА рд╕рдВрдЦреНрдпрд╛ рдкреИрджрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдЧреИрд░-рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдореБрдЦреНрдп рд▓рд╛рдн рдкреАрдврд╝реА рдХреА рдЧрддрд┐ рдФрд░ 2 ^ 19937 - 1 рдХреА рдПрдХ рд╡рд┐рд╢рд╛рд▓ рдЕрд╡рдзрд┐ рд╣реИ, рдЗрд╕ рдмрд╛рд░ рд╣рдо php рд╕реНрд░реЛрдд рдХреЛрдб рд╕рдВрд╕реНрдХрд░рдг 5.4.6 рдореЗрдВ
mt_srand () рдФрд░
mt_rand () рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗред
рдлрд╝рд╛рдЗрд▓ рд╕рд╛рдордЧреНрд░реА / рдкрд╛рда / рдорд╛рдирдХ / рд╕рдВрдХреНрд╖рд┐рдкреНрдд_рд╕рдВрдЧреНрд░рд╣ #define MT_N (624) php_uint32 state[MT_N+1]; php_uint32 *next; int left; unsigned int rand_seed; zend_bool rand_is_seeded; zend_bool mt_rand_is_seeded;
рдлрд╝рд╛рдЗрд▓ /ext/standard/rand.c рдХреА рд╕рд╛рдордЧреНрд░реА: #define N MT_N #define M (397) #define hiBit(u) ((u) & 0x80000000U) #define loBit(u) ((u) & 0x00000001U) #define loBits(u) ((u) & 0x7FFFFFFFU) #define mixBits(u, v) (hiBit(u)|loBits(v)) #define twist(m,u,v) (m ^ (mixBits(u,v)>>1) ^ ((php_uint32)(-(php_int32)(loBit(u))) & 0x9908b0dfU)) static inline void php_mt_reload(TSRMLS_D) { register php_uint32 *state = BG(state); register php_uint32 *p = state; register int i; for (i = N - M; i--; ++p) *p = twist(p[M], p[0], p[1]); for (i = M; --i; ++p) *p = twist(p[MN], p[0], p[1]); *p = twist(p[MN], p[0], state[0]); BG(left) = N; BG(next) = state; } static inline void php_mt_initialize(php_uint32 seed, php_uint32 *state) { register php_uint32 *s = state; register php_uint32 *r = state; register int i = 1; *s++ = seed & 0xffffffffU; for( ; i < N; ++i ) { *s++ = ( 1812433253U * ( *r ^ (*r >> 30) ) + i ) & 0xffffffffU; r++; } } /* }}} */ /* {{{ php_mt_srand */ PHPAPI void php_mt_srand(php_uint32 seed TSRMLS_DC) { /* Seed the generator with a simple uint32 */ php_mt_initialize(seed, BG(state)); php_mt_reload(TSRMLS_C); /* Seed only once */ BG(mt_rand_is_seeded) = 1; } /* }}} */ /* {{{ php_mt_rand */ PHPAPI php_uint32 php_mt_rand(TSRMLS_D) { /* Pull a 32-bit integer from the generator state Every other access function simply transforms the numbers extracted here */ register php_uint32 s1; if (BG(left) == 0) { php_mt_reload(TSRMLS_C); } --BG(left); s1 = *BG(next)++; s1 ^= (s1 >> 11); s1 ^= (s1 << 7) & 0x9d2c5680U; s1 ^= (s1 << 15) & 0xefc60000U; return ( s1 ^ (s1 >> 18) ); }
рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ php_mt_reload рдХреЛ рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рджреМрд░рд╛рди рдФрд░ php_mt_rand 624 рдмрд╛рд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪрд▓реЛ рдЕрдВрдд рд╕реЗ рд╣реИрдХрд┐рдВрдЧ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, php_mt_rand () рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрдд рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЙрд▓реНрдЯрд╛ рдХрд░рддреЗ рд╣реИрдВред рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ (s1 ^ (s1 >> 18))ред рдПрдХ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдВ, рдСрдкрд░реЗрд╢рди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
101101110101111001 11111001110010 s1
0000000000000000001011011101011110011111111001110010 s1 >> 18
101101110101111001 01001110100101 s1 ^ (s1 >> 18)
рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ 18 рдмрд┐рдЯреНрд╕ (рдмреЛрд▓реНрдб рдореЗрдВ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдП рдЧрдП) рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рд╣реЗред
рд╣рдо рдмрд┐рдЯ рд╢рд┐рдлреНрдЯ рдФрд░ xor рдХреЛ рдЗрдиреНрд╡рд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрддреЗ рд╣реИрдВ
public static long unBitshiftRightXor(long value, long shift) {
рддрдм php_mt_rand () рдлрд╝рдВрдХреНрд╢рди рдХреА рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЙрд▓реНрдЯрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛
long value = output; value = unBitshiftRightXor(value, 18); value = unBitshiftLeftXor(value, 15, 0xefc60000); value = unBitshiftLeftXor(value, 7, 0x9d2c5680); value = unBitshiftRightXor(value, 11);
рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ Mersenne Twister рджреНрд╡рд╛рд░рд╛ 624 рд▓рдЧрд╛рддрд╛рд░ рд╕рдВрдЦреНрдпрд╛рдПрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВ, рддреЛ рдЗрди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдЗрди рд▓рдЧрд╛рддрд╛рд░ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдкрд░, рд╣рдореЗрдВ Mersenne Twister рдХреА рдкреВрд░реНрдг рд╕реНрдерд┐рддрд┐ рдорд┐рд▓рддреА рд╣реИ, рдФрд░ рд╣рдо рдореВрд▓реНрдпреЛрдВ рдХреЗ рдЬреНрдЮрд╛рдд рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП php_mt_reload рдЪрд▓рд╛рдХрд░ рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдж рдХреЗ рдореВрд▓реНрдп рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╣реИрдХрд┐рдВрдЧ рдПрд░рд┐рдпрд╛
рдЕрдЧрд░ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯреВрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЧрд▓рдд рд╣реИрдВред рджрд┐рд▓рдЪрд╕реНрдк рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдПрдбреЛрдм рдлреНрд▓реИрд╢ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдЬрдирд░реЗрдЯрд░ (рдПрдХреНрд╢рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ 3.0) рд╣реИред рдЗрд╕рдХреА рдЦрд╝рд╛рд╕рд┐рдпрдд рдмрдВрдж рд╕реНрд░реЛрдд рдХреЛрдб рдФрд░ рдмреАрдЬ рдХрд╛рд░реНрдп рдХреА рдХрдореА рд╣реИред рдЗрд╕рдореЗрдВ рдореБрдЦреНрдп рд░реБрдЪрд┐ рдХрдИ рдСрдирд▓рд╛рдЗрди рдХреИрд╕реАрдиреЛ рдФрд░ рдСрдирд▓рд╛рдЗрди рдкреЛрдХрд░ рдореЗрдВ рдЙрдкрдпреЛрдЧ рд╣реИред
рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдХрдИ рдХреНрд░рдо рд╣реИрдВ, рдбреЙрд▓рд░ рдХреЗ рд╡рд┐рдирд┐рдордп рджрд░ рд╕реЗ рд▓реЗрдХрд░ рд╣рд░ рджрд┐рди рдпрд╛рддрд╛рдпрд╛рдд рдореЗрдВ рдЦрд░реНрдЪ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд░рд╛рд╢рд┐ рддрдХред рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдбреЗрдЯрд╛ рдореЗрдВ рдПрдХ рдкреИрдЯрд░реНрди рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдХрд╛рдо рдирд╣реАрдВ рд╣реИред
рдПрдХ рдЫрджреНрдо рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдЬрдирд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рддрд░рдг рдХреА рд╕реНрдерд╛рдкрдирд╛
рдХрд┐рд╕реА рднреА рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЪрд░ рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ рд╡рд┐рддрд░рдг рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХрд╛рд░реНрдб рдХреЗ рд╕рд╛рде рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реБрдП, рдЖрдк рдЗрдХреНрдХреЗ рдХреЛ рдиреМ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЧрд┐рд░рд╛ рд╕рдХрддреЗ рд╣реИрдВред рддреНрд░рд┐рдХреЛрдгреАрдп рд╡рд┐рддрд░рдг рдФрд░ рдШрд╛рддреАрдп рд╡рд┐рддрд░рдг рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИрдВред
рддреНрд░рд┐рдХреЛрдгреАрдп рд╡рд┐рддрд░рдг
рд╣рдо C99 рдХреА рднрд╛рд╖рд╛ рдореЗрдВ рддреНрд░рд┐рдХреЛрдгреАрдп рд╡рд┐рддрд░рдг
[7] рдХреЗ рд╕рд╛рде рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЪрд░ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрддреЗ рд╣реИрдВред
double triangular(double a, double b, double c) { double U = rand() / (double) RAND_MAX; double F = (c - a) / (b - a); if (U <= F) return a + sqrt(U * (b - a) * (c - a)); else return b - sqrt((1 - U) * (b - a) * (b - c)); }
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЪрд░ рд░реИрдВрдб () рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рддреНрд░рд┐рдХреЛрдгреАрдп рд╡рд┐рддрд░рдг рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд┐рддрд░рдг рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП a -40, b = 100, c = 50, 10,000,000 рдорд╛рдкреЛрдВ рдХрд╛ рдЧреНрд░рд╛рдл рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛

рдШрд╛рддрд╛рдВрдХ рд╡рд┐рддрд░рдг
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдк рддреЗрдЬреА рд╕реЗ рд╡рд┐рддрд░рд┐рдд рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЪрд░ рдХрд╛ рд╕реЗрдВрд╕рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, F (x) = 1 - exp (-lambda * x)ред рдлрд┐рд░ рд╕рдореАрдХрд░рдг y = 1 - exp (-lambda * x) рдХреЗ рд╕рдорд╛рдзрд╛рди рд╕реЗ рд╣рдореЗрдВ x = -log (1-y) / lambda рдорд┐рд▓рддрд╛ рд╣реИред
рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЕрдВрддрд┐рдо рд╕реВрддреНрд░ рдореЗрдВ рд▓рдШреБрдЧрдгрдХ рдХреЗ рддрд╣рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЕрдВрддрд░рд╛рд▓ рдкрд░ рдПрдХ рд╕рдорд╛рди рд╡рд┐рддрд░рдг рд╣реИ [0,1), рдЬреЛ рд╣рдореЗрдВ рдПрдХ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реВрддреНрд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЕрдиреБрдХреНрд░рдо рднреА рд╡рд┐рддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ: x = -log (y) / lambda, рдЬрд╣рд╛рдВ y рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЪрд░ рд╣реИ (рд░реИрдВрдб) ()ред
PRNG рдкрд░реАрдХреНрд╖рдг
рдХреБрдЫ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХрд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдпрджрд┐ рд╡реЗ рдЕрдкрдиреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдкреАрдврд╝реА рдкрджреНрдзрддрд┐ рдХреЛ рдЫрд┐рдкрд╛рддреЗ рд╣реИрдВ рдпрд╛ рдЕрдкрдиреЗ рд╕рд╛рде рдЖрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдЖрдо рдЧрд▓рдд рдзрд╛рд░рдгрд╛ рд╣реИред рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рддрд░реАрдХреЗ рдФрд░ рддрдХрдиреАрдХреЗрдВ рд╣реИрдВред
рдкреНрд░рд╕рд┐рджреНрдз рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЕрдЧрд▓реЗ рдмрд┐рдЯ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рд╣реИ - рдПрдХ рдкрд░реАрдХреНрд╖рдг рдЬреЛ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рддрд╛рдХрдд рдХреЗ рд▓рд┐рдП рдЫрджреНрдо рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдЬрдирд░реЗрдЯрд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдПрдХ рдмрд╣реБрдкрдж рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреНрд░рдо рдХреЗ рдкрд╣рд▓реЗ k рдмрд┐рдЯреНрд╕ рдХреЛ рдЬрд╛рдирдХрд░ a k + 1 рдмрд┐рдЯреНрд╕ рдХреЛ bits рд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ, рдПрдХ рдЕрд▓рдЧ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд░рд╣реА рд╣реИ рдХрд┐ рдЬрдирд░реЗрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рд╕рдВрдЦреНрдпрд╛рдУрдВ рдпрд╛ рдмрд┐рдЯреНрд╕ рдХрд╛ рдХреНрд░рдо рдХрд┐рддрдирд╛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╣реИред рдЖрдорддреМрд░ рдкрд░, рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ DIEHARD рдпрд╛ NISTред 1982 рдореЗрдВ рдПрдВрдбреНрд░рдпреВ рдпрд╛рдУ рдиреЗ рд╕рд╛рдмрд┐рдд рдХрд░ рджрд┐рдпрд╛ рдХрд┐ "рдЕрдЧрд▓рд╛ рдмрд┐рдЯ рдЯреЗрд╕реНрдЯ" рдкрд╛рд╕ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдЬрдирд░реЗрдЯрд░ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░реЗрдЧрд╛ рдЬреЛ рдХрд┐ рдмрд╣реБрдкрдж рд╕рдордп рдореЗрдВ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЗрдВрдЯрд░рдиреЗрдЯ
[10] рдкрд░, рдЖрдк рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рддрд┐рд░реЛрдз рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд╛рдИрд╣рд╛рд░реНрдб рдкрд░реАрдХреНрд╖рдг рдФрд░ рдХрдИ рдЕрдиреНрдп рдХреЛ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЬреНрдЮрд╛рдд рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдЬрдирд░реЗрдЯрд░ рд╣реИрдХ
- рдХрдо рдПрдиреНрдЯреНрд░реЙрдкреА [11] рдХреЗ рд╕рд╛рде рдЕрд░реНрд▓реА рдиреЗрдЯрд╕реНрдХреЗрдк SSL рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдкреНрд░реЛрдЯреЛрдХреЙрд▓
- PHP рд╕рддреНрд░ рднреЗрджреНрдпрддрд╛ habrahabr.ru/company/pt/blog/149746
- Microsoft CryptGenRandom [12]
- PRNG рдореЗрдВ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдИ рдСрдирд▓рд╛рдЗрди рдХреИрд╕реАрдиреЛ рдХреЛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рд▓рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
рд╕рдВрджрд░реНрдн
[рез] рдбреЛрдирд╛рд▓реНрдб рдиреБрде, рдж рдЖрд░реНрдЯ рдСрдлрд╝ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдЦрдВрдб реиред рд╡реНрдпреБрддреНрдкрдиреНрди рдПрд▓реНрдЧреЛрд░рд┐рджрдо)
[реи] рдмреНрд░реВрд╕ рд╢реНрдиреЗрдпрд░, рдПрдкреНрд▓рд╛рдЗрдб рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА (рдЕрдзреНрдпрд╛рдп резрем)
[рек]
www.staff.uni-mainz.de/pommeren/Kryptologie/Bitstrom/2_Analyse/LCGcrack.html[рел]
www.staff.uni-mainz.de/pommeren/Kryptologie99/English.html[рем]
en.wikipedia.org/wiki/Mersenne_twister[[]
En.wikipedia.org/wiki/Triangular_distribution[[]
En.wikipedia.org/wiki/Linear_Congruent_Method[реп]
zaic101.ru/files/728/using_linear_congruential_generators_for_cryptographic_purpose.pdf[резреж]
www.cacert.at/random[резрез]
www.cs.berkeley.edu/~daw/papers/ddj-netscape.html[резреи]
www.computerworld.com/s/article/9048438/Microsoft_confirms_that_XP_contains_random_number_generator_bug[резрей] md5
raz0r.name/articles/magiya-sluchajnyx-chisel-chast-2/comment-page-1 рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреАрдврд╝реА рдХрд╛ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдЙрджрд╛рд╣рд░рдг
рд╡рд░реНрдгрд┐рдд рд╣реИрдореВрд▓
jazzy.id.au/default/2010/09/20/cracking_random_number_generators_part_1.htmljazzy.id.au/default/2010/09/21/cracking_random_number_generators_part_2.htmljazzy.id.au/default/2010/09/22/cracking_random_number_generators_part_3.htmljazzy.id.au/default/2010/09/25/cracking_random_number_generators_part_4.html